[Commits] [SCM] claws branch, gtk3tree, updated. 4.0.0-388-g8309d4266

paul at claws-mail.org paul at claws-mail.org
Wed Oct 13 08:35:59 CET 2021


The branch, gtk3tree has been updated
       via  8309d426609450425565c8e6c9d52b6bd4846ab6 (commit)
       via  c0508d11c6797a45058742709d23d8704a24c502 (commit)
       via  499b61ef508c81b63a7e822bef4cb8178cfc3a5d (commit)
       via  e924500d8ad60215147f508eb91569576b923946 (commit)
       via  8b228c1c3484913037463a23b63f94180cdf1390 (commit)
       via  f9e10f155c38e40be08bc936e46d66a9b1485304 (commit)
       via  9509f16541b77f049a8af8c9ff508a68d316adf4 (commit)
       via  699bae8428d97cfbb64cd38b05940ad2cfc771df (commit)
       via  c6fa3ed5efcf7b738f2141539be3285c40afe964 (commit)
       via  6ec00336640722361e30415df927f1c7022a41b8 (commit)
       via  1a6649b3f22aa6851435ed3c9772152fd99000c9 (commit)
       via  9869b88395d4977eea4773953b41d337b7994949 (commit)
       via  03565af05e5079d02c31202976a4f926ccd64a4b (commit)
       via  a471705042de8306ee3b8e12b1774747f4f9f1ac (commit)
       via  65b78c0c8a3dbae0cbb315a3dc75f83c0e3f16fa (commit)
       via  1803265b185cb02c3e6b57e569e4e7653c8541d9 (commit)
       via  4228ee62e4b793eb7ee536b8eb386a8b272af540 (commit)
       via  b3e01e3b340b1a2ced8bd50e1b8eaea9eb5dabdf (commit)
       via  ac14ec50d655c16fd6813526fd18d57d0f0e18ef (commit)
       via  62f60f91dfa86cdcba57aa8b6a7463b14e9bcebc (commit)
       via  6d1d01c42a2f2b961a9965c5f3794ac1eb7c5a37 (commit)
       via  d4c46b2138531648962f7fbd2587c2dad2367135 (commit)
       via  8afdad641552eb821b135d93fcdff1c68b22150c (commit)
       via  5be9de249eba2821756096e22fef386b33b2f94e (commit)
       via  224f1e26f81bbf5f984f43ff5f48045c00f6350d (commit)
       via  38915be2c2718111f16fa6f6b8c325df913e1aac (commit)
       via  f27c43b929d4140964704367d0bc77c8b42e6f15 (commit)
       via  d99686bea445a19ac1048b17d93e4314fa3e167d (commit)
       via  254f6308d5edc403b3641f0afa9cf39c3169a64f (commit)
       via  4aab5e4039d6421e36a6ff57fcc8402a23f21c79 (commit)
       via  216d11f75a839a5bb260b9752ae620cb94f591d6 (commit)
       via  6bd9ed9fc4182b6a514864d799212f6d1d148cac (commit)
       via  c986621b3f5d6e7910338718a12b537a244c705d (commit)
       via  0fc77dc8c5a8f789dac30489a8afb2211c4419fe (commit)
       via  36769f5bb86fa246c800a0fdf177c592ed9ec16f (commit)
       via  8dd0f61c0c4025d74a075e4de7fcd57848bfca31 (commit)
       via  38efb7ce6af5df01b0156476e8a05fd39713f699 (commit)
       via  3665d84a62c167054e76833a1fa2874a48823554 (commit)
       via  ae0353bbfb07942f82408c66c95f65d0f2adcf8a (commit)
       via  c7452669c0da537cb3382c9e55aae142d34d90c4 (commit)
       via  9d59312477b1eab5e68a727cdb44d870a110190f (commit)
       via  719b65f275d4c8a2803ba8f54b35f536df36aaa3 (commit)
       via  b69c0c073f0d257bd49eb17691f1e9959395d66c (commit)
       via  d006355369916eefff3d964d4606e183339418aa (commit)
       via  0371d85eea01def93d51c6a5f13f0f668cef2391 (commit)
       via  57c52f338b9bbdfab6264ae7a6175b964feb1c79 (commit)
       via  27054565773d4262e45bb8a0b0a2f68283a909bc (commit)
       via  36c0dbe2d63c661514fc4b58a809e17b4c5a6578 (commit)
       via  e2e7b25a230d13cb0d7557e50de8ab5a5a802724 (commit)
       via  1cdefe8acb372cc3bc8626d5559d001ea3289d5b (commit)
       via  148912d837227a7db693eab56c39a383fe54087d (commit)
       via  3188ba81356cc381f288fd64e1efa88d261accf9 (commit)
       via  a6e473fd6455d949176495d5370d4858caebeb2e (commit)
       via  d3e24af7f789675f234092e807c6f04adde67ee0 (commit)
       via  0e0a6e17c558b565423e52bc38b45d95757f26f7 (commit)
       via  fb466b8a50d9505060b6529e020e9dafac36f1b4 (commit)
       via  61026543f51971082001d6cabf17ff6ede22058a (commit)
       via  9cbebb67c87bea3f39f3f7f3997deb7e05d99a8d (commit)
       via  c75453be80856def79d80ff03f22817c2f7033fa (commit)
       via  84ce49b634b869e01a5ee084e4cd8efc8bda0c72 (commit)
       via  399a77d8813bedb483b3ca9238d455a9dc82b7f9 (commit)
       via  4e0408e032d99c48f34c89d110204eec2aff9f83 (commit)
       via  bb28b425526b997ff9982b492a2fb1f9ad87daf1 (commit)
       via  dd904f328b04c7344f595892e4230bc2c5ba5cf6 (commit)
       via  292bd62855074f5b21f671fe1958c71e75e1a2bd (commit)
       via  2c9090652293247cbe8b9e4fe163c5582dab51ac (commit)
       via  0c35d74035d32b7486a044609aa3d3b1ff877e3f (commit)
       via  68a5fe8e484c636ed13a4e885139af701d1f1adb (commit)
       via  06019f2e459a6405fa4ab375d6a3260e23398472 (commit)
       via  48010781a596ca1fd8acb1cbfbcf0cd56a98e866 (commit)
       via  2af46a6d14f61ad5d1f8af9bfa8cd134deabfe37 (commit)
       via  1a475994eccbd14e95188c754f4957393300b5d0 (commit)
       via  cd6958cda2e86bdff6983bf8f52657912942422c (commit)
       via  f73d8e93287e45bd516bbc8f4ed9e4a6605e3d0f (commit)
       via  7d41ed5f856406ed141cb26c05513b931f613e96 (commit)
       via  42d7514b2af10ea7784cd8196d153d01f88efa0e (commit)
       via  753698d5eb36b9ce7311b6753111cfb613a4bf4d (commit)
       via  e3048e92f12db05a9e18328f72acd14094e3f97f (commit)
       via  45c87cf44dae2b33714bf7af487fb07fbc099bff (commit)
       via  e63d58c5305a291b7c538041ec843bc2fdc9ce17 (commit)
       via  4e02e4eeeec5a2ea28fdaef9ca4bf8c9f470e73a (commit)
       via  cf88ebed5b6130553de94a7aa7105b51d562998a (commit)
       via  b78a997e2cfc2ba74585fc0328fea5ac8280f6bc (commit)
       via  b0a8b7617778210053f087b5db57696e4c4fab64 (commit)
       via  0c2412178404bc24de30b84e75fad4f5a73a1501 (commit)
       via  bbe3de93cd452d461ac905bdc22b7be064b73a78 (commit)
       via  ecb3e3e748be5a6e89056d31960abde19fe209bd (commit)
       via  15814dd06ce1461b1b52efc33ae6b0b7da7dd036 (commit)
       via  ced627e7504468adcde5011f1280aaea626fe79c (commit)
       via  08acbbba350c2f83ee798c162ca54dcdd0be2f62 (commit)
       via  b2f2c703bb508a9df4a1147cdbb3222bf7ff9d2b (commit)
       via  6e40e6ced0c0caa1520b97bbe370e90891620faf (commit)
       via  5b993515c033ddd2beacb54985b2dd3557629e8f (commit)
       via  7e51f51b5992a4d6c5821c1c23032b5ae9a1ca6c (commit)
       via  104cf039b750ae9f7d401cb7e0288a31776aa1cd (commit)
       via  c1de20451a1983aa3b9979464046933a88f79124 (commit)
       via  e29192eca47234ed93e63d6473eb92a3739781f7 (commit)
       via  f170f27390bb15e1fb90276a7839994a8a0a8a62 (commit)
       via  9758436014f630cd98d77128249a88fc9743e037 (commit)
       via  3e0a4c09523ad7476661b7c44a2e0d4bc53a4049 (commit)
       via  1d608b800a0bd7f8b2fdde36a7c56d5afc10828c (commit)
       via  b4a80787218ddf6b2ed728cbc16eeb4519816a72 (commit)
       via  d845ea3991d780129963db79a2891a0bf0aee3fa (commit)
       via  ff1794b59bdf1658bc102296dca084335e7295b0 (commit)
       via  9ed7cc63f9a3c406af09ad13d5038cfe58a35ea9 (commit)
       via  b6808412b68404055815a4481e9da81a3bef5eb5 (commit)
       via  b1c1c6d36cb0d6c318b68d4062f76b22d2b9d0ea (commit)
       via  5d9d64f080b718f6754dd8a23dadfba8b447ec2c (commit)
       via  d172fae34524d34f1b31bc8c9bd4a3cad847f94c (commit)
       via  beffc75e4ec45b145586479eb3743632857456e8 (commit)
       via  ec8d3625b668c4288310196108bcc37a40f2c889 (commit)
       via  5168c2ab52b68a7265cb85c46480cfa8a18a23e3 (commit)
       via  82bdd5b0b4419ed311f008b73b6ab456d8bcd607 (commit)
       via  63db37ff1d65e6b294819c50c1487f7fd880da2c (commit)
       via  2e626bf179777336beccb385b817465bf64c4a34 (commit)
       via  2365b058e7ac75afc82e06ad43ead42fdee0c98f (commit)
       via  e06ed0f0118b48dedef6c951680b55f25a038416 (commit)
       via  0951750b9e233de0d15ccfec0fb5f12bb5e33b8b (commit)
       via  45f75aeeaa48e54e6d8b727ccc26a13cc3155678 (commit)
       via  d5bb4a31286511a301d2f33c153b5e14676355fd (commit)
       via  e4aee9fb4522093ead3819fb76647df40fd00107 (commit)
       via  d661790bce6aba5f46b37a2cf31819fbd6b859ea (commit)
       via  f49e40123be352e3c6b230faf99c02785c5969e7 (commit)
       via  45bb7c40cc009d2c13244660ef21855dac48ca51 (commit)
       via  d5e5f0ce0c82ee9772235204e7c93415e234e254 (commit)
       via  a325902fc08410c8566f99b2ad6f89749a85675d (commit)
       via  4d563173977122b8e8a5d65ebb34d4a3050845d7 (commit)
       via  98c688a3f27353fe59afc59a33e02489d60d5d12 (commit)
       via  08ee26d34dc62776da200f56d2daa6f961f31178 (commit)
       via  c78b7acfa576f8a4edb645edbf58b310a7af83bb (commit)
       via  686ce43bd9b1576ec10b5c2c224c780167b8d12d (commit)
       via  bf67b45d58d9401a35a98465fcc6d408e09070db (commit)
       via  6c1835695df1c63a1eef1666c4f60349b3212eb9 (commit)
       via  cd666398a71e1173abd4fdbafc142855cf41e02a (commit)
       via  f31cbefef6aa78f441387ffeda9d393c5f54fe8c (commit)
       via  0ab4f470fe1a93383c36091a2821bd09435582f0 (commit)
       via  6e0cf4b69cdb95940db868c1bac422ac05e00717 (commit)
       via  6a52fac348d35dbd59ab1cbbae0e660242465a26 (commit)
       via  9ade17f2b5430bb137789100d61e5eef793431c6 (commit)
       via  86efe37f90a96dd86666bfb4d5d95b8cbdfee096 (commit)
       via  4b7ba8fc844b29f5ab39333b96089c1d176eaf37 (commit)
       via  cb86e0eb6d672e25af39a56c413c33c77cd719c6 (commit)
       via  16c0f2c8f05c46f47bd734b7c1792bc945143bcb (commit)
       via  9bcb48ee857a118c68801e8fb59daca008b6acd5 (commit)
       via  2d39e4b7aaae907241103a23fc003737ba9eba69 (commit)
       via  5618ef004fa350901e9b09fb9c742b6216dfc5d0 (commit)
       via  aac70d4d6c172d5a82ea106d47a8b9e24b642602 (commit)
       via  f3e0150378312900ca1b05b3c94fdcd22fdfcacc (commit)
       via  cf0d5714de9a48b76ad989e49d96fd8904f7db2c (commit)
       via  e90e11cadc5546567f47bb13c50020eb822b75d4 (commit)
       via  73557a0db41ef99a726881a1af8b516404a5bc2a (commit)
       via  be99a003e1bce0232a303811b38169a2e90b56fc (commit)
       via  7ed063fd8be79264c775e5f309fd928b40d17a22 (commit)
       via  9c4b4aea5619d3f952a0af3a718a45b68710e048 (commit)
       via  1653583d591a07242f68ef0f9094a2230241fc1a (commit)
       via  b4c9e520621f46303550d3b31ffb53189f53beb1 (commit)
       via  ce62446d9de730bf5dab415094cf1f228a860861 (commit)
       via  fac24c59d7ed028f1ecb9ccae3aa759c756f7115 (commit)
       via  1205ad823850ac5d6c90df1d4390a25480f44be1 (commit)
       via  a2e991d8e8eb6d322024fe414a3f604fa67451a5 (commit)
       via  849778a7594493c7deb4706595199590b85f6c3f (commit)
       via  8446f26578496685f7426603b984cbe921f72bc8 (commit)
       via  bbe6c209ad225afe074752aa15a3ced80b85e77c (commit)
       via  73b5271fb60300c04fb173cbcf2348802bdd3506 (commit)
       via  44a873753d09c1c9e59af28161922837ff9e6a57 (commit)
       via  bc7f670ba9ea99314a53cf99592842c92c30e606 (commit)
       via  36d10734f286e20c1844184552b21f6a35df3b3f (commit)
       via  fab030f00f795fee165ecc8b08e975ca68efc303 (commit)
       via  3e5706b06316238b3ab16a34bb3f1a8de3304b74 (commit)
       via  9d73c50d6dcfb578bf8d65d066c867dea85a7a85 (commit)
       via  9a7649aac85f5bf38f92236e5609de0c547a18e7 (commit)
       via  24415eb70d1e92081ca8013fafb78679e4e2025f (commit)
       via  e97569bcbc0861a6846a11492789ada403a41089 (commit)
       via  5fea1d0866a2feb58d8ce093e998a2c58f7dc84e (commit)
       via  d52aded0fccbff2e4933c2efc3c4909f1590a4c8 (commit)
       via  8cb4112c152c5e3b155fcfba18246febda805acb (commit)
       via  a223eeb176a9b5afc5e98d959ae2ab9fc3352246 (commit)
       via  556016d16a3092260e5d83057939a1d44d088fdb (commit)
       via  33c9a6ca39e04801e95332a4e0a087778ad8e760 (commit)
       via  121dfea858507a89683c16ed417e0ac185fd16a6 (commit)
       via  66893572a7e7cd2421509f7ed9ebc396a73bd523 (commit)
       via  829b45e27fe4f5c831d6b71595e567d55b5e3988 (commit)
       via  df27a8bc02e429754a8b593a660c4b3ba8bfcd32 (commit)
       via  69e7131dc87ed1dbec2f9140a03b38feaf192cdf (commit)
       via  74059cdc111cdc7ada818eb3a57df6f441acdbe5 (commit)
       via  1451f927841e08a4cbc86de3491ede836c341cbc (commit)
       via  7fbe24ea7bdeb0dc51c0ce55a1e0692b29f068ac (commit)
       via  2175e7fc9ebaebefe86216df8868def31bbe4339 (commit)
       via  7edb55b8c499cb475fd3320b9933d14e11f1e91a (commit)
       via  9ba29ca59869d89cb74ff943ac8658b9f0e7fde7 (commit)
       via  b32b28769916d51b8314aca85d19bff8b971d8c9 (commit)
       via  ef5c197cfcc1e5e0dcd1048142d179e67f02f5cb (commit)
       via  0c7308ca2b1075894669bc61ddf7f3a1ac4f9cb4 (commit)
       via  1850c52bb1dbf16e55a80258b63c6c6f825d49ce (commit)
       via  e4be4beeb8f806daed7369e88612ed0f62abc7bd (commit)
       via  23d991d97b3d2fb4eaaf6f19825561b83191719f (commit)
       via  dc931c8e6e12f23756b04bbfb10e6951864924ec (commit)
       via  4f9c021852d069ba9281e60920887cb06083c8ae (commit)
       via  ead53a765056e1732329020ef61c0470e09a6d0a (commit)
       via  b4b33b25f8d18e9e4a047a67f94ba5ef56335a22 (commit)
       via  f2a5d59d363c5859750d8b7736cdc72a7b1a721f (commit)
       via  f405cef3d3d7c160e428e0367917882d2458fc0e (commit)
       via  bd1db001e30f0e43fbac014f900eb4d0aa47631d (commit)
       via  b38c4362ba68c88e96de14edda735357cc0adfa5 (commit)
       via  531f47d9bac2e07eff0b6827fd69657b3eff0721 (commit)
       via  882bb4d6f159ab7601042a1f35f06a6e34a73385 (commit)
       via  ecea5c2fd270338d0817ffbe5afcc2113a127f50 (commit)
       via  d4e2645d82e74b9a24c34ec2edb2430529ef4354 (commit)
       via  2478af427a8a8e95cdd4562d4403aea4ef7a1807 (commit)
       via  aaa599c49d5f0840ed74633089c12fc2e5538679 (commit)
       via  f2f4a99dc00d6781e3f8a1d46a87775a58b621a3 (commit)
       via  275d19822f35345f7b8f5e35b31fb75aae3220a2 (commit)
       via  07ced7167db4bcf16b5da7ba8222584b4fd6f3b2 (commit)
       via  545cab2d8a736934dca1ea6ca66c6c2e664f57fe (commit)
       via  70f242f0b22e7ac1b00dfffec5b83261d8ebf60c (commit)
       via  1e9ab88e5a154ecb2d9f5f1ae4efdabe35776e3e (commit)
       via  1be840cc970cc25d56c39d3605daac14e95f08ca (commit)
       via  fb14bca317291826dd358b2d9ba12bddfdd6e3bd (commit)
       via  791db4bb0e67b72d1b0e05e9387b858295de4031 (commit)
       via  78c266b237ff2948bdceb0ac8e9c6ab625432c38 (commit)
       via  f041228ca3b6a3ef48870617071268ef489af74a (commit)
       via  89b932309933bbfb4a13398b1ce0ddf6ce753a40 (commit)
       via  ed74a4678f288382bf93c6dbe7cda08bcdacf40c (commit)
       via  d82adf835c4aa6da50f9c472c13ba359dcdfb865 (commit)
       via  a798323be950b715e1e647dc5d096b75695fa23e (commit)
       via  4a36d09999e50fc238592d90e5041516753e1b33 (commit)
       via  f621772662b9dd24243f7d732b143c52b420d7de (commit)
       via  b3e778157ae5fef89ff37ebf4d49726aec63bb7b (commit)
       via  a57ef02df188073ccd66fb8278d6bf7e5a8e11c0 (commit)
       via  63e9f669694a07278a21c8b6f9869dcc1b6be8b4 (commit)
       via  45c1dc4e6e39f9d5ac83816302d043b5dee565e6 (commit)
       via  e121fc4767e57fd6018997b75d636264049c9ce8 (commit)
       via  03d781d9fb4fba7b33b40293723fb3f7df40f017 (commit)
       via  91f5bbf35b85f5a39a4d9e65318ca643eef18e2c (commit)
       via  c7dec0a8709e413161e2a4adf4f923c8654cc00c (commit)
       via  8dfa8ce7b3e9bbb15cb3a452a6c0dfa1a62fd744 (commit)
       via  7e9c97707e10bdd7b18387e4c65431b746bb4a48 (commit)
       via  2247e8a07da010429c08a2bed3e079b092a5853b (commit)
       via  ea07c3d024c532d85b4f6839fd0d32b7a1dc6ee8 (commit)
       via  7d309cfc22c7b9c58ee593f72f2fd9d33bf495a3 (commit)
       via  8e57a6d6eb45d90fbc5340dfa786a03128b92c52 (commit)
       via  3099095d307714a1e420a6699073fec73056a022 (commit)
       via  23aec49cdd06f60b104083c4f0aa154b58917315 (commit)
       via  2c249a3b6990fd2ea69c08f490212c1ccf6e88dc (commit)
       via  2926aa8e62a721a514e9e20e653561bbb25519ff (commit)
       via  7faa46999bc2d0454687dd1f4376c086393691f7 (commit)
       via  b2e357547140413bfa23f20790f5091060e001a5 (commit)
       via  e7436fb6938e61b5c62c2cd296222baaa3b78a0c (commit)
       via  ffddaa73d93f318eb1bc2f82d10cba737e7a1e1e (commit)
       via  62b64faeb9b22e7e3c0b2bf9a5a3506bd0b852f3 (commit)
       via  4c09d7cbeb0fc507f4217f64674e103428197ccb (commit)
       via  cc2837f7930bab6f564de6bf13ef3e3350c4a12d (commit)
       via  76e9a5af67914f92ec26c6223d3b2a5413a97fad (commit)
       via  4a753d0496edc9fa25f7c8ec6f3f62627572b598 (commit)
       via  dfb47978a337d993daa41556b70f81a15c166e2e (commit)
       via  683b60fee90315837d35d36705af9d887265927a (commit)
       via  8f2ee3071315156ad9985f7ae0fe365962926c19 (commit)
       via  21b9c03ef6b14f404aceba48eda526ffe187c876 (commit)
       via  947a066e563599cc7046128dd2b392ee78c36d57 (commit)
       via  76fe80e6d6e9ee0966ac2e6f15730581fc39ebf2 (commit)
       via  810e41b67dbb24919afb90d7c277f873fc8ee91c (commit)
       via  1c5016e935e69475f0d7a4d023eff14434054346 (commit)
       via  781785c94b1b19c6ee3fa5228d91b11fd1262bcd (commit)
       via  97515cb7f1601c688e5badce1274b0366ddcacd0 (commit)
       via  da1269449866334b732c09516cde2c236b7cf2f3 (commit)
       via  ad5dd473e75f1437588ffe04df667166aca78ae2 (commit)
       via  13a8e7744b16fee45aed79088421c39560d5282d (commit)
       via  66bafe683401cc2a51ca0d15615b1751fa4c9108 (commit)
       via  79ff72c6e4fe9c5882672e518fd7d45cac7bff80 (commit)
       via  345e77f4d5f6ad6cb569c1776d690fd426d6d1c8 (commit)
       via  4abec5d26b7f09416d24499c9bf5d44a81e1ee11 (commit)
       via  09d8428fe734e30600c921bccc2f1d5cc1571739 (commit)
       via  3ea1cef89597a30920886d46f9ee055501d4c217 (commit)
       via  d2f92699c5e2a2ad1b4fdc84b3de57e72e490e74 (commit)
       via  1dd82b08e37b6bea5b72bfac9a16ce996facb04a (commit)
       via  7cb0bfdfbac5f1e15c0b6dc1e2199c06c80e9244 (commit)
       via  b41b2a747487b151aad0f3640bb553c22e3414b0 (commit)
       via  8b4a8e04f09ed0e5f45c7ea683c25c8faa15d4c8 (commit)
       via  8caee652b14c7d487636930a0a0daca58e65cead (commit)
       via  9d22797677900688a40bc792e75c425810b86e46 (commit)
       via  604d43599ddc71a60071e1e3fe67861dcdeaefa8 (commit)
       via  bcb41b69e5eda3953c1e5d21f2acc908514e3886 (commit)
       via  839650c6dd13191109626c51a57144bb9577548b (commit)
       via  943185b172797e76ac07cd6d5e6fdd57c3404ed9 (commit)
       via  d9457ce8c4e56b755690dcec36d32fb6e756c126 (commit)
       via  52c13c9151d185749ce222f64c1dabfdf9476dd6 (commit)
       via  b15559f886ce731f3977b963e2dbf10a9982848b (commit)
       via  30ae5d38602a896a5735887c74238b37a1d00db6 (commit)
       via  0931e06430de0b954b6a360f7785853a6b536a1c (commit)
       via  73746b23ffa18601bb0d18404b721511285f2133 (commit)
       via  22f7e8c1911cbdb0debb7e869ef859b5c09e8961 (commit)
       via  23218372fb31b93cc3bef4474e928fe25df387e2 (commit)
      from  78512b55a6c84369b795333a54665d6a268f4f17 (commit)

Summary of changes:
 .gitignore                                         |    2 +
 INSTALL                                            |   55 +-
 README                                             |    4 +-
 configure.ac                                       |   36 +-
 po/en_GB.po                                        | 2461 ++++++++++----------
 po/fr.po                                           |    2 +-
 src/Makefile.am                                    |   10 +-
 src/account.c                                      |   14 +-
 src/action.c                                       |   67 +-
 src/addr_compl.c                                   |    2 +-
 src/addrbook.c                                     |    8 +-
 src/addrcustomattr.c                               |    7 +-
 src/addrduplicates.c                               |    2 +-
 src/addressadd.c                                   |    3 +-
 src/addressbook-dbus.c                             |   24 +-
 src/addressbook.c                                  |   34 +-
 src/addrindex.c                                    |    4 +-
 src/addritem.c                                     |    8 +-
 src/addrmerge.c                                    |    1 +
 src/alertpanel.c                                   |    7 +-
 src/avatars.c                                      |    8 +-
 src/common/Makefile.am                             |    6 +-
 src/common/file-utils.c                            |   70 +-
 src/common/log.c                                   |    4 -
 src/common/plugin.c                                |    4 +
 src/common/proxy.c                                 |    2 +-
 src/common/session.c                               |   18 +-
 src/common/socket.c                                |    5 +-
 src/common/ssl.c                                   |    2 +-
 src/common/ssl_certificate.c                       |    8 +-
 src/common/tags.c                                  |    2 -
 src/common/template.c                              |   16 +-
 src/common/timing.h                                |    2 +-
 src/common/utils.c                                 |   30 +-
 src/common/w32_account.c                           |  151 --
 src/common/w32_reg.c                               |  225 +-
 src/{gtk/sslcertwindow.h => common/w32_reg.h}      |   35 +-
 src/common/w32_signal.c                            |   28 -
 src/common/w32_stat.c                              |   30 -
 src/common/w32_stdlib.c                            |   38 -
 src/common/w32_string.c                            |   53 -
 src/common/w32_time.c                              |   37 -
 src/common/w32_unistd.c                            |   45 -
 src/common/w32_wait.c                              |   28 -
 src/common/w32lib.h                                |  224 --
 src/common/xml.c                                   |   18 +-
 src/compose.c                                      |  102 +-
 src/crash.c                                        |   25 +-
 src/editaddress.c                                  |   11 +-
 src/edittags.c                                     |  366 +--
 src/edittags.h                                     |    4 +-
 src/etpan/imap-thread.c                            |    3 +-
 src/export.c                                       |    8 +-
 src/exporthtml.c                                   |    4 -
 src/filtering.c                                    |   11 +-
 src/folder.c                                       |   54 +-
 src/folder_item_prefs.c                            |   17 +-
 src/folder_item_prefs.h                            |    7 +-
 src/foldersel.c                                    |    7 +-
 src/folderutils.c                                  |    2 +
 src/folderview.c                                   |   15 +-
 src/folderview.h                                   |    2 +
 src/grouplistdialog.c                              |   21 +-
 src/gtk/Makefile.am                                |    2 -
 src/gtk/about.c                                    |   21 +-
 src/gtk/colorsel.c                                 |   99 -
 src/gtk/colorsel.h                                 |   25 -
 src/gtk/foldersort.c                               |    4 +
 src/gtk/gtkaspell.c                                |   39 +-
 src/gtk/gtkcmclist.c                               |    8 +-
 src/gtk/gtksctree.c                                |    2 +-
 src/gtk/gtkshruler.c                               |    8 -
 src/gtk/gtkunit.c                                  |    6 +-
 src/gtk/gtkutils.c                                 |   99 +-
 src/gtk/gtkutils.h                                 |    6 -
 src/gtk/inputdialog.c                              |   15 +-
 src/gtk/prefswindow.c                              |    3 +-
 src/gtk/progressdialog.c                           |    8 +-
 src/gtk/quicksearch.c                              |    3 -
 src/gtk/spell_entry.c                              |   16 +-
 src/headerview.c                                   |    2 +-
 src/image_viewer.c                                 |   40 +-
 src/imap.c                                         |   12 +-
 src/import.c                                       |   19 +-
 src/inc.c                                          |   13 +-
 src/ldapctrl.c                                     |    3 +-
 src/ldapupdate.c                                   |    1 +
 src/ldaputil.c                                     |    3 +-
 src/ldif.c                                         |   14 +-
 src/main.c                                         |   46 +-
 src/mainwindow.c                                   |  188 +-
 src/matcher.c                                      |   12 +-
 src/mbox.c                                         |   17 +-
 src/messageview.c                                  |   23 +-
 src/mh.c                                           |   25 +-
 src/mh_gtk.c                                       |    6 +-
 src/mimeview.c                                     |   30 +-
 src/msgcache.c                                     |   18 +-
 src/news.c                                         |    1 +
 src/news_gtk.c                                     |    5 +-
 src/oauth2.c                                       |  208 +-
 src/partial_download.c                             |    4 +-
 src/password.c                                     |  107 +-
 src/password.h                                     |   32 +-
 src/password_gtk.c                                 |   37 +-
 src/password_gtk.h                                 |    2 +-
 src/passwordstore.c                                |    1 +
 src/plugins/acpi_notifier/acpi_notifier.c          |    3 +-
 src/plugins/address_keeper/Makefile.am             |   66 +-
 src/plugins/address_keeper/address_keeper_prefs.c  |    2 +-
 src/plugins/address_keeper/version.rc              |   36 -
 src/plugins/address_keeper/version.rc.in           |   34 +
 src/plugins/archive/archiver_prefs.c               |    3 +-
 src/plugins/archive/libarchive_archive.c           |   33 +-
 src/plugins/att_remover/Makefile.am                |   69 +-
 src/plugins/att_remover/att_remover.c              |    3 +-
 src/plugins/att_remover/version.rc                 |   36 -
 src/plugins/att_remover/version.rc.in              |   34 +
 src/plugins/attachwarner/Makefile.am               |   66 +-
 src/plugins/attachwarner/attachwarner.c            |   37 +-
 src/plugins/attachwarner/attachwarner.h            |   27 +-
 src/plugins/attachwarner/attachwarner_prefs.c      |   88 +-
 src/plugins/attachwarner/attachwarner_prefs.h      |   12 +-
 src/plugins/attachwarner/version.rc                |   36 -
 src/plugins/attachwarner/version.rc.in             |   34 +
 src/plugins/bogofilter/bogofilter.c                |   22 +-
 src/plugins/bsfilter/Makefile.am                   |   66 +-
 src/plugins/bsfilter/bsfilter.c                    |   13 +-
 src/plugins/bsfilter/bsfilter_gtk.c                |    1 -
 src/plugins/bsfilter/version.rc                    |   36 -
 src/plugins/bsfilter/version.rc.in                 |   34 +
 src/plugins/clamd/clamav_plugin.c                  |   17 +-
 src/plugins/clamd/clamav_plugin_gtk.c              |    2 +-
 src/plugins/clamd/libclamd/clamd-plugin.c          |   19 +-
 src/plugins/demo/demo.c                            |    2 +-
 src/plugins/dillo/dillo_prefs.c                    |    2 +-
 src/plugins/fancy/Makefile.am                      |   75 +-
 src/plugins/fancy/fancy_prefs.c                    |    4 +-
 src/plugins/fancy/fancy_viewer.c                   |   56 +-
 src/plugins/fancy/fancy_viewer.h                   |    2 +-
 src/plugins/fancy/version.rc                       |   36 -
 src/plugins/fancy/version.rc.in                    |   34 +
 src/plugins/fetchinfo/Makefile.am                  |   79 +-
 src/plugins/fetchinfo/fetchinfo_plugin.c           |    9 +-
 src/plugins/fetchinfo/fetchinfo_plugin_gtk.c       |   16 +-
 src/plugins/fetchinfo/version.rc                   |   36 -
 src/plugins/fetchinfo/version.rc.in                |   34 +
 src/plugins/gdata/gdata_plugin.c                   |    2 +-
 src/plugins/libravatar/Makefile.am                 |   84 +-
 src/plugins/libravatar/libravatar_missing.c        |    6 +-
 src/plugins/libravatar/version.rc                  |   36 -
 src/plugins/libravatar/version.rc.in               |   34 +
 src/plugins/litehtml_viewer/Makefile.am            |  123 +-
 src/plugins/litehtml_viewer/claws.def              |    1 +
 .../litehtml_viewer/container_linux_images.cpp     |   13 +-
 src/plugins/litehtml_viewer/http.cpp               |    2 +-
 src/plugins/litehtml_viewer/lh_prefs.c             |    1 +
 src/plugins/litehtml_viewer/lh_viewer.c            |   17 +-
 src/plugins/litehtml_viewer/lh_widget.cpp          |    2 +-
 src/plugins/litehtml_viewer/litehtml/Makefile.am   |   12 +-
 src/plugins/litehtml_viewer/litehtml/README.md     |   87 +-
 src/plugins/litehtml_viewer/litehtml/borders.h     |    1 +
 .../litehtml_viewer/litehtml/css_selector.cpp      |    1 +
 src/plugins/litehtml_viewer/litehtml/document.cpp  |   88 +-
 src/plugins/litehtml_viewer/litehtml/document.h    |    7 +-
 src/plugins/litehtml_viewer/litehtml/el_image.cpp  |   26 +-
 src/plugins/litehtml_viewer/litehtml/el_image.h    |    2 +
 src/plugins/litehtml_viewer/litehtml/el_li.cpp     |   38 +
 src/plugins/litehtml_viewer/litehtml/el_li.h       |   21 +
 src/plugins/litehtml_viewer/litehtml/element.cpp   |    3 +-
 src/plugins/litehtml_viewer/litehtml/element.h     |    7 +-
 src/plugins/litehtml_viewer/litehtml/html.cpp      |    4 +-
 src/plugins/litehtml_viewer/litehtml/html.h        |    2 +
 src/plugins/litehtml_viewer/litehtml/html_tag.cpp  |  139 +-
 src/plugins/litehtml_viewer/litehtml/html_tag.h    |    3 +-
 src/plugins/litehtml_viewer/litehtml/litehtml.h    |   12 +-
 .../litehtml_viewer/litehtml/media_query.cpp       |    2 +-
 src/plugins/litehtml_viewer/litehtml/num_cvt.cpp   |  109 +
 src/plugins/litehtml_viewer/litehtml/num_cvt.h     |   19 +
 src/plugins/litehtml_viewer/litehtml/os_types.h    |   21 +-
 src/plugins/litehtml_viewer/litehtml/style.cpp     |   26 +-
 src/plugins/litehtml_viewer/litehtml/types.h       |    7 +-
 .../litehtml_viewer/litehtml/utf8_strings.cpp      |    2 +-
 .../litehtml_viewer/litehtml/utf8_strings.h        |   13 +-
 src/plugins/litehtml_viewer/version.rc             |   36 -
 src/plugins/litehtml_viewer/version.rc.in          |   34 +
 src/plugins/mailmbox/Makefile.am                   |  107 +-
 src/plugins/mailmbox/mailimf_write.c               |   12 +-
 src/plugins/mailmbox/mailmbox.c                    |    1 -
 src/plugins/mailmbox/mailmbox_folder.c             |    3 -
 src/plugins/mailmbox/plugin.c                      |    1 -
 src/plugins/mailmbox/version.rc                    |   36 -
 src/plugins/mailmbox/version.rc.in                 |   34 +
 src/plugins/managesieve/Makefile.am                |   76 +-
 src/plugins/managesieve/managesieve.c              |    7 +-
 src/plugins/managesieve/sieve_editor.c             |    8 +-
 src/plugins/managesieve/sieve_manager.c            |    1 +
 src/plugins/managesieve/sieve_prefs.c              |    2 +-
 src/plugins/managesieve/version.rc                 |   36 -
 src/plugins/managesieve/version.rc.in              |   34 +
 src/plugins/newmail/newmail.c                      |    1 -
 src/plugins/notification/Makefile.am               |  101 +-
 src/plugins/notification/gtkhotkey/Makefile.am     |    1 +
 .../notification/gtkhotkey/gtk-hotkey-info.c       |    9 -
 .../gtkhotkey/gtk-hotkey-key-file-registry.c       |   15 +-
 .../gtkhotkey/gtk-hotkey-x11-listener.c            |    2 +-
 .../notification/gtkhotkey/x11/tomboykeybinder.c   |    2 +-
 src/plugins/notification/notification_banner.c     |  517 ++--
 .../notification/notification_foldercheck.c        |   14 +-
 src/plugins/notification/notification_plugin.c     |    2 +
 src/plugins/notification/notification_popup.c      |   12 +-
 src/plugins/notification/notification_prefs.c      |   25 +-
 src/plugins/notification/notification_trayicon.c   |    6 +-
 src/plugins/notification/version.rc                |   36 -
 src/plugins/notification/version.rc.in             |   34 +
 src/plugins/pdf_viewer/Makefile.am                 |   61 +-
 src/plugins/pdf_viewer/claws.def                   |   37 +
 .../{address_keeper => pdf_viewer}/plugin.def      |    0
 src/plugins/pdf_viewer/poppler_viewer.c            |  113 +-
 src/plugins/pdf_viewer/poppler_viewer.h            |    5 +-
 src/plugins/pdf_viewer/version.rc.in               |   34 +
 src/plugins/perl/perl_gtk.c                        |    4 +-
 src/plugins/perl/perl_plugin.c                     |  116 +-
 src/plugins/pgpcore/Makefile.am                    |  100 +-
 src/plugins/pgpcore/passphrase.c                   |   23 +-
 src/plugins/pgpcore/select-keys.c                  |   16 +-
 src/plugins/pgpcore/sgpgme.c                       |   11 +-
 src/plugins/pgpcore/version.rc                     |   36 -
 src/plugins/pgpcore/version.rc.in                  |   34 +
 src/plugins/pgpinline/Makefile.am                  |   72 +-
 src/plugins/pgpinline/pgpinline.c                  |   12 +-
 src/plugins/pgpinline/version.rc                   |   36 -
 src/plugins/pgpinline/version.rc.in                |   34 +
 src/plugins/pgpmime/Makefile.am                    |   72 +-
 src/plugins/pgpmime/pgpmime.c                      |   11 +-
 src/plugins/pgpmime/version.rc                     |   36 -
 src/plugins/pgpmime/version.rc.in                  |   34 +
 src/plugins/python/clawsmailmodule.c               |    1 -
 src/plugins/python/python-shell.c                  |    8 -
 src/plugins/python/python_prefs.c                  |    2 +-
 src/plugins/rssyl/Makefile.am                      |  126 +-
 src/plugins/rssyl/claws.def                        |    1 -
 src/plugins/rssyl/libfeed/feed.c                   |   11 +-
 src/plugins/rssyl/libfeed/feeditem.c               |    2 +-
 src/plugins/rssyl/libfeed/feeditemenclosure.c      |    2 +-
 src/plugins/rssyl/libfeed/parser.c                 |   14 +-
 src/plugins/rssyl/libfeed/parser_opml.c            |   37 +-
 src/plugins/rssyl/parse822.c                       |   15 +-
 src/plugins/rssyl/rssyl.c                          |   14 +-
 src/plugins/rssyl/rssyl_add_item.c                 |   10 +-
 src/plugins/rssyl/rssyl_cb_menu.c                  |   47 +-
 src/plugins/rssyl/rssyl_deleted.c                  |   10 +-
 src/plugins/rssyl/rssyl_feed_props.c               |   29 +-
 src/plugins/rssyl/rssyl_parse_feed.c               |    2 +-
 src/plugins/rssyl/rssyl_prefs.c                    |    4 +-
 src/plugins/rssyl/rssyl_update_comments.c          |    4 +-
 src/plugins/rssyl/rssyl_update_format.c            |    2 +
 src/plugins/rssyl/strutils.c                       |    4 +-
 src/plugins/rssyl/version.rc                       |   36 -
 src/plugins/rssyl/version.rc.in                    |   34 +
 src/plugins/smime/Makefile.am                      |   72 +-
 src/plugins/smime/smime.c                          |   12 +-
 src/plugins/smime/version.rc                       |   36 -
 src/plugins/smime/version.rc.in                    |   34 +
 src/plugins/spam_report/Makefile.am                |   75 +-
 src/plugins/spam_report/spam_report.c              |    3 +-
 src/plugins/spam_report/spam_report_prefs.c        |    2 +-
 src/plugins/spam_report/version.rc                 |   36 -
 src/plugins/spam_report/version.rc.in              |   34 +
 src/plugins/spamassassin/libspamc.c                |    2 +-
 src/plugins/spamassassin/spamassassin.c            |  100 +-
 src/plugins/tnef_parse/Makefile.am                 |   84 +-
 src/plugins/tnef_parse/tnef_parse.c                |   14 +-
 src/plugins/tnef_parse/version.rc                  |   36 -
 src/plugins/tnef_parse/version.rc.in               |   34 +
 src/plugins/vcalendar/Makefile.am                  |   94 +-
 src/plugins/vcalendar/common-views.c               |    1 -
 src/plugins/vcalendar/day-view.c                   |    2 +-
 src/plugins/vcalendar/month-view.c                 |    6 +-
 src/plugins/vcalendar/vcal_folder.c                |   11 +-
 src/plugins/vcalendar/vcal_manager.c               |   10 +-
 src/plugins/vcalendar/vcal_meeting_gtk.c           |   67 +-
 src/plugins/vcalendar/vcal_prefs.c                 |    6 +-
 src/plugins/vcalendar/vcalendar.c                  |   16 +-
 src/plugins/vcalendar/version.rc                   |   36 -
 src/plugins/vcalendar/version.rc.in                |   34 +
 src/prefs_account.c                                |   29 +-
 src/prefs_actions.c                                |  191 +-
 src/prefs_common.c                                 |   13 +-
 src/prefs_common.h                                 |    9 +-
 src/prefs_display_header.c                         |    2 +-
 src/prefs_filtering.c                              |   18 +-
 src/prefs_filtering.h                              |    3 +-
 src/prefs_folder_column.c                          |    2 +-
 src/prefs_folder_item.c                            |  132 +-
 src/prefs_gtk.c                                    |   34 +-
 src/prefs_image_viewer.c                           |    1 -
 src/prefs_matcher.c                                |   10 +-
 src/prefs_migration.c                              |    4 +-
 src/prefs_msg_colors.c                             |  325 +--
 src/prefs_other.c                                  |   44 +-
 src/prefs_spelling.c                               |   32 +-
 src/prefs_summaries.c                              |   15 +-
 src/prefs_summary_column.c                         |    2 +-
 src/prefs_template.c                               |    5 +-
 src/prefs_themes.c                                 |    6 +-
 src/prefs_toolbar.c                                |    8 +-
 src/printing.c                                     |    2 +-
 src/procheader.c                                   |   16 +-
 src/procmime.c                                     |   87 +-
 src/procmsg.c                                      |   42 +-
 src/quote_fmt_parse.y                              |    8 +-
 src/recv.c                                         |    4 +-
 src/setup.c                                        |    2 +-
 src/ssl_manager.c                                  |   11 +-
 src/statusbar.c                                    |    4 +-
 src/stock_pixmap.c                                 |   18 +-
 src/summaryview.c                                  |  114 +-
 src/textview.c                                     |  236 +-
 src/textview.h                                     |    5 +-
 src/toolbar.c                                      |   91 +-
 src/toolbar.h                                      |    9 +-
 src/uri_opener.c                                   |  173 +-
 src/vcard.c                                        |    4 +-
 src/w32-resource.rc                                |    1 -
 src/w32-resource.rc.in                             |   36 +
 src/wizard.c                                       |   42 +-
 tools/README                                       |    3 +-
 tools/fix_date.sh                                  |   25 +-
 329 files changed, 6692 insertions(+), 6419 deletions(-)
 delete mode 100644 src/common/w32_account.c
 copy src/{gtk/sslcertwindow.h => common/w32_reg.h} (60%)
 delete mode 100644 src/common/w32_signal.c
 delete mode 100644 src/common/w32_stat.c
 delete mode 100644 src/common/w32_stdlib.c
 delete mode 100644 src/common/w32_string.c
 delete mode 100644 src/common/w32_time.c
 delete mode 100644 src/common/w32_unistd.c
 delete mode 100644 src/common/w32_wait.c
 delete mode 100644 src/common/w32lib.h
 delete mode 100644 src/gtk/colorsel.c
 delete mode 100644 src/gtk/colorsel.h
 delete mode 100644 src/plugins/address_keeper/version.rc
 create mode 100644 src/plugins/address_keeper/version.rc.in
 delete mode 100644 src/plugins/att_remover/version.rc
 create mode 100644 src/plugins/att_remover/version.rc.in
 delete mode 100644 src/plugins/attachwarner/version.rc
 create mode 100644 src/plugins/attachwarner/version.rc.in
 delete mode 100644 src/plugins/bsfilter/version.rc
 create mode 100644 src/plugins/bsfilter/version.rc.in
 delete mode 100644 src/plugins/fancy/version.rc
 create mode 100644 src/plugins/fancy/version.rc.in
 delete mode 100644 src/plugins/fetchinfo/version.rc
 create mode 100644 src/plugins/fetchinfo/version.rc.in
 delete mode 100644 src/plugins/libravatar/version.rc
 create mode 100644 src/plugins/libravatar/version.rc.in
 create mode 100644 src/plugins/litehtml_viewer/litehtml/el_li.cpp
 create mode 100644 src/plugins/litehtml_viewer/litehtml/el_li.h
 create mode 100644 src/plugins/litehtml_viewer/litehtml/num_cvt.cpp
 create mode 100644 src/plugins/litehtml_viewer/litehtml/num_cvt.h
 delete mode 100644 src/plugins/litehtml_viewer/version.rc
 create mode 100644 src/plugins/litehtml_viewer/version.rc.in
 delete mode 100644 src/plugins/mailmbox/version.rc
 create mode 100644 src/plugins/mailmbox/version.rc.in
 delete mode 100644 src/plugins/managesieve/version.rc
 create mode 100644 src/plugins/managesieve/version.rc.in
 delete mode 100644 src/plugins/notification/version.rc
 create mode 100644 src/plugins/notification/version.rc.in
 create mode 100644 src/plugins/pdf_viewer/claws.def
 copy src/plugins/{address_keeper => pdf_viewer}/plugin.def (100%)
 create mode 100644 src/plugins/pdf_viewer/version.rc.in
 delete mode 100644 src/plugins/pgpcore/version.rc
 create mode 100644 src/plugins/pgpcore/version.rc.in
 delete mode 100644 src/plugins/pgpinline/version.rc
 create mode 100644 src/plugins/pgpinline/version.rc.in
 delete mode 100644 src/plugins/pgpmime/version.rc
 create mode 100644 src/plugins/pgpmime/version.rc.in
 delete mode 100644 src/plugins/rssyl/version.rc
 create mode 100644 src/plugins/rssyl/version.rc.in
 delete mode 100644 src/plugins/smime/version.rc
 create mode 100644 src/plugins/smime/version.rc.in
 delete mode 100644 src/plugins/spam_report/version.rc
 create mode 100644 src/plugins/spam_report/version.rc.in
 delete mode 100644 src/plugins/tnef_parse/version.rc
 create mode 100644 src/plugins/tnef_parse/version.rc.in
 delete mode 100644 src/plugins/vcalendar/version.rc
 create mode 100644 src/plugins/vcalendar/version.rc.in
 delete mode 100644 src/w32-resource.rc
 create mode 100644 src/w32-resource.rc.in


- Log -----------------------------------------------------------------
commit 8309d426609450425565c8e6c9d52b6bd4846ab6
Merge: 78512b55a c0508d11c
Author: paul <paul at claws-mail.org>
Date:   Wed Oct 13 09:35:52 2021 +0100

    merge with the gtk3 branch

diff --cc src/folderview.c
index 30fb0c3d0,c9f94e297..78794f7cd
--- a/src/folderview.c
+++ b/src/folderview.c
@@@ -1367,12 -973,12 +1367,12 @@@ static GtkTreePath *folderview_find_nex
  			continue;
  		switch (flag) {
  		case MSG_UNREAD:
- 			if(item->unread_msgs > 0)
+ 			if((item->unread_msgs > 0) && (!item->prefs || !item->prefs->skip_on_goto_unread_or_new))
 -				return node;
 +				goto out;
  			break;
  		case MSG_NEW:
- 			if(item->new_msgs > 0)
+ 			if((item->new_msgs > 0) && (!item->prefs || !item->prefs->skip_on_goto_unread_or_new))
 -				return node;
 +				goto out;
  			break;
  		case MSG_MARKED:
  			if(item->marked_msgs > 0)
@@@ -2359,363 -1506,341 +2359,362 @@@ static gboolean folderview_defer_expand
  	return FALSE;
  }
  
 -static gboolean folderview_have_marked_children(FolderView *folderview,
 -					     FolderItem *item)
 +static void drag_state_start(FolderView *folderview, GtkTreePath *path, FolderItem *item)
  {
 -	return folderview_have_marked_children_sub(folderview, item, FALSE);
 +	/* the idea is that we call drag_state_start() whenever we want expansion to
 +	 * start after 'prefs_common.hover_time' msecs. if we want to cancel expansion,
 +	 * we need to call drag_state_stop() */
 +	drag_state_stop(folderview);
 +	/* request expansion */
 +	if (0 != (folderview->drag_timer_id = g_timeout_add
 +			(prefs_common.hover_timeout,
 +			 (GSourceFunc)folderview_defer_expand,
 +			 folderview))) {
 +		/* free path from earlier folderview_recollapse_paths() invocations */
 +		if (folderview->drag_dst_path)
 +			gtk_tree_path_free(folderview->drag_dst_path);
 +		folderview->drag_dst_path = path;
 +		folderview->drag_dst_item = item;
 +	}
  }
  
 -static void folderview_update_node(FolderView *folderview, GtkCMCTreeNode *node)
 +#ifndef GENERIC_UMPC
 +/* only called for dragged treeview nodes, not for summaryview items */
 +static void folderview_drag_begin(GtkWidget *widget, GdkDragContext *context,
 +			          FolderView *folderview)
 +{
 +	free_paths_to_recollapse(folderview->paths_to_recollapse);
 +	if (folderview->paths_to_recollapse)
 +		g_slist_free(folderview->paths_to_recollapse);
 +	folderview->paths_to_recollapse = NULL;
 +	gtk_drag_set_icon_default(context);
 +}
 +#endif
 +/* only called for dragged treeview nodes, not for summaryview items */
 +static void folderview_drag_data_get(GtkWidget        *widget,
 +				     GdkDragContext   *drag_context,
 +				     GtkSelectionData *selection_data,
 +				     guint             info,
 +				     guint             time,
 +				     FolderView       *folderview)
  {
 -	GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
 -	GtkStyle *style = NULL, *prev_style;
 +	GtkTreeModel *model;
 +	GtkTreeIter iter;
  	FolderItem *item;
 -	GdkRGBA black = { 0, 0, 0, 1 };
 -	GdkPixbuf *xpm, *openxpm;
 -	static GdkPixbuf *searchicon;
 -	gboolean mark = FALSE;
 -	gchar *name;
 -	gchar *str;
 -	gboolean add_unread_mark;
 -	gboolean add_sub_match_mark;
 -	gboolean use_bold, use_color;
 -	gint *col_pos = folderview->col_pos;
 -	SpecialFolderItemType stype;
 -	
 -	item = gtk_cmctree_node_get_row_data(ctree, node);
 -	cm_return_if_fail(item != NULL);
 +	gchar *source = NULL;
 +	if (info == TARGET_DUMMY) {
 +		if (!folderview->open_path)
 +			return;
  
 -	if (!GTK_CMCTREE_ROW(node)->expanded)
 -		mark = folderview_have_marked_children(folderview, item);
 -	else
 -		mark = (item->marked_msgs != 0);
 +		model = gtk_tree_view_get_model(GTK_TREE_VIEW(folderview->treeview));
 +		if (!model)
 +			return;
  
 -	stype = item->stype;
 -	if (stype == F_NORMAL) {
 -		if (folder_has_parent_of_type(item, F_TRASH))
 -			stype = F_TRASH;
 -		else if (folder_has_parent_of_type(item, F_DRAFT))
 -			stype = F_DRAFT;
 -		else if (folder_has_parent_of_type(item, F_OUTBOX))
 -			stype = F_OUTBOX;
 -		else if (folder_has_parent_of_type(item, F_QUEUE))
 -			stype = F_QUEUE;
 -	}
 -	switch (stype) {
 -	case F_INBOX:
 -		if (item->hide_read_msgs || item->hide_read_threads) {
 -			xpm = mark?m_inboxhrmxpm:inboxhrmxpm;
 -			openxpm = mark?m_inboxopenhrmxpm:inboxopenhrmxpm;
 -		} else {
 -			xpm = mark?m_inboxxpm:inboxxpm;
 -			openxpm = mark?m_inboxopenxpm:inboxopenxpm;
 -		}
 -		break;
 -	case F_OUTBOX:
 -		if (item->hide_read_msgs || item->hide_read_threads) {
 -			xpm = mark?m_outboxhrmxpm:outboxhrmxpm;
 -			openxpm = mark?m_outboxopenhrmxpm:outboxopenhrmxpm;
 -		} else {
 -			xpm = mark?m_outboxxpm:outboxxpm;
 -			openxpm = mark?m_outboxopenxpm:outboxopenxpm;
 -		}
 -		break;
 -	case F_QUEUE:
 -		if (item->hide_read_msgs || item->hide_read_threads) {
 -			xpm = mark?m_queuehrmxpm:queuehrmxpm;
 -			openxpm = mark?m_queueopenhrmxpm:queueopenhrmxpm;
 -		} else {
 -			xpm = mark?m_queuexpm:queuexpm;
 -			openxpm = mark?m_queueopenxpm:queueopenxpm;
 -		}
 -		break;
 -	case F_TRASH:
 -		if (item->hide_read_msgs || item->hide_read_threads) {
 -			xpm = mark?m_trashhrmxpm:trashhrmxpm;
 -			openxpm = mark?m_trashopenhrmxpm:trashopenhrmxpm;
 -		} else {
 -			xpm = mark?m_trashxpm:trashxpm;
 -			openxpm = mark?m_trashopenxpm:trashopenxpm;
 -		}
 -		break;
 -	case F_DRAFT:
 -		xpm = mark?m_draftsxpm:draftsxpm;
 -		openxpm = mark?m_draftsopenxpm:draftsopenxpm;
 -		break;
 -	default:
 -		if (!item->path &&
 -		    FOLDER_TYPE(item->folder) == F_IMAP &&
 -		    item->folder->account->imap_subsonly) {
 -			xpm = mark?m_foldersubsxpm:foldersubsxpm;
 -			openxpm = foldersubsopenxpm;
 -		} else if (item->no_select) {
 -			xpm = mark?m_foldernoselectxpm:foldernoselectxpm;
 -			openxpm = foldernoselectopenxpm;
 -		} else if (item->hide_read_msgs || item->hide_read_threads) {
 -			xpm = mark?m_folderhrmxpm:folderhrmxpm;
 -			openxpm = mark?m_folderopenhrmxpm:folderopenhrmxpm;
 -		} else {
 -			xpm = mark?m_folderxpm:folderxpm;
 -			openxpm = mark?m_folderopenxpm:folderopenxpm;
 +		gtk_tree_model_get_iter(model, &iter, folderview->open_path);
 +		gtk_tree_model_get(model, &iter, F_COL_FOLDERITEM, &item, -1);
 +		if (item) {
 +			source = g_strdup_printf ("FROM_OTHER_FOLDER%s", folder_item_get_identifier(item));
 +			gtk_selection_data_set(selection_data,
 +					       gtk_selection_data_get_target(selection_data), 8,
 +					       source, strlen(source));
  		}
 +	} else {
 +		g_warning("unknown info %d", info);
  	}
 +}
  
 -	name = folder_item_get_name(item);
 +static gboolean folderview_dnd_scroll_cb(gpointer data)
 +{
 +	FolderView *folderview = (FolderView *)data;
 +	GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
 +				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 +	gint new_val = (int)gtk_adjustment_get_value(pos) + folderview->scroll_value;
 +	gint max = (int)gtk_adjustment_get_upper(pos) -
 +               (int)gtk_adjustment_get_page_size(pos);
  
 -	if (!GTK_CMCTREE_ROW(node)->expanded) {
 -		add_unread_mark = folderview_have_unread_children(
 -					folderview, item);
 -		add_sub_match_mark = folderview_have_matching_children(
 -					folderview, item);
 -	} else {
 -		add_unread_mark = FALSE;
 -		add_sub_match_mark = FALSE;
 +	if (folderview->scroll_value == 0) {
 +		folderview->scroll_timeout_id = 0;
 +		return FALSE;
  	}
  
 -	if (item->search_match) {
 -		if (!searchicon) {
 -			stock_pixbuf_gdk(STOCK_PIXMAP_QUICKSEARCH,
 -			 &searchicon);
 -		}
 -		xpm = openxpm = searchicon;
 +	if (folderview->scroll_value > 0 && new_val > max) {
 +		new_val = max;
 +	} else if (folderview->scroll_value < 0 && new_val < 0) {
 +		new_val = 0;
  	}
 +	gtk_adjustment_set_value(pos, new_val);
  
 -	str = NULL;
 -	if (prefs_common.display_folder_unread) {
 -		if (folder_has_parent_of_type(item, F_QUEUE)) {
 -			/* only total_msgs matters here */
 -			if (item->total_msgs > 0) {
 -				/* show total number (should be equal to the unread number)
 -				   and signs if any */
 -				str = g_strdup_printf("%s (%d%s%s)",
 -							name, item->total_msgs,
 -							(add_unread_mark || add_sub_match_mark) ? "+" : "", 
 -							(item->unreadmarked_msgs > 0) ? "!" : "");
 -			}
 +	return TRUE;
 +}
 +
 +/* called for dragged treeview nodes and summaryview items */
 +static gboolean folderview_drag_motion_cb(GtkWidget      *widget,
 +					  GdkDragContext *context,
 +					  gint            x,
 +					  gint            y,
 +					  guint           time,
 +					  FolderView     *folderview)
 +{
 +	GtkTreePath *path;
 +	GtkTreeViewDropPosition drop_pos;
 +	GtkTreeIter iter;
 +	GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(folderview->treeview));
 +	FolderItem *item = NULL, *src_item = NULL;
 +	gboolean acceptable = FALSE;
 +	GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
 +				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 +	int height = (int)gtk_adjustment_get_page_size(pos);
 +	int total_height = (int)gtk_adjustment_get_upper(pos);
 +	int vpos = (int)gtk_adjustment_get_value(pos);
 +	int offset = prefs_common.show_col_headers ? 24:0;
 +	int dist;
 +
 +	gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(folderview->treeview),
 +					  x, y, &path, &drop_pos);
 +	if (path) {
 +		GtkWidget *srcwidget;
 +
 +		if (y > height - (48 - offset) && height + vpos < total_height) {
 +			dist = -(height - (48 - offset) - y);
 +			folderview->scroll_value = 1.41f * (1+(dist / 6));
 +		} else if (y < 72 - (24 - offset) && y >= 0) {
 +			dist = 72 - (24 - offset) - y;
 +			folderview->scroll_value = -1.41f * (1+(dist / 6));
  		} else {
 -			if (prefs_common.display_folder_unread == 1) {
 -				if (item->unread_msgs > 0) {
 -					/* show unread number and signs */
 -					str = g_strdup_printf("%s (%d%s%s)",
 -								name, item->unread_msgs,
 -								(add_unread_mark || add_sub_match_mark) ? "+" : "", 
 -								(item->unreadmarked_msgs > 0) ? "!" : "");
 -				}
 -			} else {
 -				if (item->total_msgs > 0) {
 -					/* show unread number, total number and signs if any */
 -					str = g_strdup_printf("%s (%d/%d%s%s)",
 -								name, item->unread_msgs, item->total_msgs,
 -								(add_unread_mark || add_sub_match_mark) ? "+" : "", 
 -								(item->unreadmarked_msgs > 0) ? "!" : "");
 -				}
 -			}
 -		}
 -		if ((str == NULL) &&
 -			(add_unread_mark || add_sub_match_mark || (item->unreadmarked_msgs > 0))) {
 -			/* no unread/total numbers, but at least one sign */
 -			str = g_strdup_printf("%s (%s%s)",
 -						name,
 -						(add_unread_mark || add_sub_match_mark) ? "+" : "", 
 -						(item->unreadmarked_msgs > 0) ? "!" : "");
 +			folderview->scroll_value = 0;
  		}
 -	}
 -	if (str == NULL) {
 -		/* last fallback, folder name only or with +! sign */
 -		if (item->unreadmarked_msgs > 0 && add_sub_match_mark) {
 -			str = g_strdup_printf("%s%s",
 -						name, " (+!)");
 -		} else if (item->unreadmarked_msgs > 0) {
 -			str = g_strdup_printf("%s%s",
 -						name, " (!)");
 -		} else if (add_sub_match_mark) {
 -			str = g_strdup_printf("%s%s",
 -						name, " (+)");
 -		} else {
 -			str = g_strdup_printf("%s", name);
 +		if (folderview->scroll_value != 0 && folderview->scroll_timeout_id == 0) {
 +			folderview->scroll_timeout_id =
 +				g_timeout_add(30, folderview_dnd_scroll_cb,
 +					      folderview);
  		}
 -	}
 -	gtk_cmctree_set_node_info(ctree, node, str, FOLDER_SPACING,
 -				xpm, openxpm, 
 -				FALSE, GTK_CMCTREE_ROW(node)->expanded);
 -	g_free(str);
 -	g_free(name);
  
 -	if (!folder_item_parent(item)) {
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_NEW],    "-");
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_UNREAD], "-");
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_TOTAL],  "-");
 -	} else {
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_NEW],    item->new_msgs    > 0 ? itos(item->new_msgs)    : prefs_common.zero_replacement);
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_UNREAD], item->unread_msgs > 0 ? itos(item->unread_msgs) : prefs_common.zero_replacement);
 -		gtk_cmctree_node_set_text(ctree, node, col_pos[F_COL_TOTAL],  item->total_msgs  > 0 ? itos(item->total_msgs)  : prefs_common.zero_replacement);
 -	}
 +		gtk_tree_model_get_iter(model, &iter, path);
 +		gtk_tree_model_get(model, &iter, F_COL_FOLDERITEM, &item, -1);
 +		src_item = folderview->summaryview->folder_item;
  
 -	if (folder_has_parent_of_type(item, F_OUTBOX) ||
 -	    folder_has_parent_of_type(item, F_TRASH)) {
 -		use_bold = use_color = FALSE;
 -	} else if (folder_has_parent_of_type(item, F_QUEUE)) {
 -		GSList *list = folder_item_get_msg_list(item);
 -		GSList *cur;
 -		use_bold = use_color = FALSE;
 -		for (cur = list; cur; cur = cur->next) {
 -			MsgInfo *msginfo = (MsgInfo *)cur->data;
 -			if (!MSG_IS_DELETED(msginfo->flags)) {
 -				/* highlight queue folder if there are any messages */
 -				use_bold = use_color = TRUE;
 -				break;
 -			}
 +		srcwidget = gtk_drag_get_source_widget(context);
 +		if (srcwidget == summary_get_main_widget(folderview->summaryview)) {
 +			/* comes from summaryview */
 +			/* we are copying messages, so only accept folder items that are not
 +			   the source item, are no root items and can copy messages */
 +			if (item && item->folder && folder_item_parent(item) != NULL && src_item &&
 +			    src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL &&
 +			    FOLDER_TYPE(item->folder) != F_UNKNOWN)
 +				acceptable = TRUE;
 +		} else if (srcwidget == folderview->treeview) {
 +			/* comes from folderview */
 +			/* we are moving folder items, only accept folders that are not
 +                           the source items and can copy messages and create folder items */
 +			if (item && item->folder && src_item && src_item != item &&
 +			    FOLDER_CLASS(item->folder)->copy_msg != NULL &&
 +			    FOLDER_CLASS(item->folder)->create_folder != NULL &&
 +			    ((FOLDER_TYPE(item->folder) != F_UNKNOWN &&  FOLDER_TYPE(src_item->folder) != F_UNKNOWN)
 +			     || item->folder == src_item->folder))
 +				acceptable = TRUE;
 +		} else {
 +			/* comes from another app */
 +			/* we are adding messages, so only accept folder items that are
 +			   no root items and can copy messages */
 +			if (item && item->folder && folder_item_parent(item) != NULL
 +			    && FOLDER_CLASS(item->folder)->add_msg != NULL &&
 +			    FOLDER_TYPE(item->folder) != F_UNKNOWN)
 +				acceptable = TRUE;
  		}
 -		if (!GTK_CMCTREE_ROW(node)->expanded &&
 -		    use_bold == FALSE &&
 -		    folderview_have_children(folderview, item))
 -			use_bold = use_color = TRUE;
 -		procmsg_msg_list_free(list);
 -	} else {
 -		/* if unread messages exist or target folder is set, print with bold font */
 -		use_bold = (item->unread_msgs > 0 || item->new_msgs > 0 || item->op_count > 0)
 -				|| add_unread_mark;
 -		/* if new messages exist, print with colored letter */
 -		use_color =
 -			(item->new_msgs > 0) ||
 -			(add_unread_mark &&
 -			 folderview_have_new_children(folderview, item));	
  	}
  
 -	gtk_cmctree_node_set_foreground(ctree, node, NULL);
 -
 -	if (use_bold) {
 -		style = bold_style;
 -		if (item->op_count > 0)
 -			gtk_cmctree_node_set_foreground(ctree, node, &folderview->color_op);
 -		else if (use_color)
 -			gtk_cmctree_node_set_foreground(ctree, node, &folderview->color_new);
 -		else if (!gdk_rgba_equal(&item->prefs->color, &black))
 -			gtk_cmctree_node_set_foreground(ctree, node, &item->prefs->color);
 -	} else if (use_color)
 -		gtk_cmctree_node_set_foreground(ctree, node, &folderview->color_new);
 -	else if (item->op_count > 0)
 -		gtk_cmctree_node_set_foreground(ctree, node, &folderview->color_op);
 -	else if (!gdk_rgba_equal(&item->prefs->color, &black))
 -		gtk_cmctree_node_set_foreground(ctree, node, &item->prefs->color);
 -
 -	gtk_cmctree_node_set_row_style(ctree, node, style);
 -
 -	prev_style = gtk_cmctree_node_get_row_style(ctree, node);
 -	if (prev_style) {
 -		GtkStyle *ctree_style = gtk_widget_get_style(GTK_WIDGET(ctree));
 +	if (acceptable || (src_item && src_item == item))
 +		drag_state_start(folderview, path, item);
  
 -		style = gtk_style_copy(prev_style);
 -		style->text[GTK_STATE_NORMAL] = ctree_style->text[GTK_STATE_NORMAL];
 -		style->text[GTK_STATE_SELECTED] = ctree_style->text[GTK_STATE_SELECTED];
 -		gtk_cmctree_node_set_row_style(ctree, node, style);
 -		g_object_unref(style);
 +	if (acceptable) {
 +//TM:		g_signal_handlers_block_by_func
 +//			(G_OBJECT(widget),
 +//			 G_CALLBACK(folderview_selected), folderview);
 +//		gtk_cmctree_select(GTK_CMCTREE(widget), node);
 +		gtk_tree_view_set_cursor(GTK_TREE_VIEW(folderview->treeview),
 +					 path, NULL, FALSE);
 +//		g_signal_handlers_unblock_by_func
 +//			(G_OBJECT(widget),
 +//			 G_CALLBACK(folderview_selected), folderview);
 +		gdk_drag_status(context,
 +					(gdk_drag_context_get_actions(context) == GDK_ACTION_COPY ?
 +					GDK_ACTION_COPY : GDK_ACTION_MOVE) , time);
 +	} else {
 +//TM:		if (folderview->opened)
 +//			gtk_cmctree_select(GTK_CMCTREE(widget), folderview->opened);
 +		gdk_drag_status(context, 0, time);
  	}
  
 -	if ((node = gtkut_ctree_find_collapsed_parent(ctree, node)) != NULL)
 -		folderview_update_node(folderview, node);
 +	return acceptable;
  }
  
 -void folderview_update_search_icon(FolderItem *item, gboolean matches)
 +/* called for dragged treeview nodes and summaryview items
 + * TM: for dragged folders, folderview_drag_data_get() and folderview_drag_end_cb() are called hereafter
 + *     for dragged messages, folderview_drag_received_cb() is called hereafter */
 +static void folderview_drag_leave_cb(GtkWidget      *widget,
 +				     GdkDragContext *context,
 +				     guint           time,
 +				     FolderView     *folderview)
  {
 -	GList *list;
 -	FolderView *folderview;
 -	GtkCMCTree *ctree;
 -	GtkCMCTreeNode *node;
 -
 -	cm_return_if_fail(item != NULL);
 -
 -	for (list = folderview_list; list != NULL; list = list->next) {
 -		folderview = (FolderView *)list->data;
 -		ctree = GTK_CMCTREE(folderview->ctree);
 -
 -		node = gtk_cmctree_find_by_row_data(ctree, NULL, item);
 -		if (node && item->search_match != matches) {
 -			item->search_match = matches;
 -			folderview_update_node(folderview, node);
 -		}
 -	}
 +/* TM: unnecessary
 +	debug_print("========STUB======== folderview_drag_leave_cb\n");
 +*/
  }
  
 -static gboolean folderview_update_item_claws(gpointer source, gpointer data)
 +static void free_info (gpointer stuff, gpointer data)
  {
 -	FolderItemUpdateData *update_info = (FolderItemUpdateData *)source;
 -	FolderView *folderview = (FolderView *)data;
 -	GtkCMCTree *ctree;
 -	GtkCMCTreeNode *node;
 -	cm_return_val_if_fail(update_info != NULL, TRUE);
 -	cm_return_val_if_fail(update_info->item != NULL, TRUE);
 -	cm_return_val_if_fail(folderview != NULL, FALSE);
 -
 -    	ctree = GTK_CMCTREE(folderview->ctree);
 -
 -	node = gtk_cmctree_find_by_row_data(ctree, NULL, update_info->item);
 +	g_free(stuff);
 +}
  
 -	if (node) {
 -		if (update_info->update_flags & (F_ITEM_UPDATE_MSGCNT | F_ITEM_UPDATE_NAME))
 -			folderview_update_node(folderview, node);
 +/* only for TARGET_MAIL_URI_LIST */
 +void folderview_finish_dnd(const gchar *data, GdkDragContext *drag_context,
 +			   guint time, FolderItem *item)
 +{
 +	GList *list, *tmp;
 +	GSList *msglist = NULL;
 +	list = uri_list_extract_filenames(data);
 +	if (!(item && item->folder && folder_item_parent(item) != NULL
 +		    && FOLDER_CLASS(item->folder)->add_msg != NULL))
 +	{
 +		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +		debug_print("item doesn't fit\n");
 +		return;
 +	}
 +	if (!list) {
 +		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +		debug_print("list is empty\n");
 +		return;
 +	}
 +	for (tmp = list; tmp != NULL; tmp = tmp->next) {
 +		MsgFileInfo *info = NULL;
  
 -		if ((update_info->update_flags & F_ITEM_UPDATE_CONTENT) && 
 -		     update_info->item == folderview->summaryview->folder_item &&
 -		     update_info->item != NULL)
 -			if (!quicksearch_has_sat_predicate(folderview->summaryview->quicksearch))
 -				summary_show(folderview->summaryview, update_info->item, FALSE);
 +		if (file_is_email((gchar *)tmp->data)) {
 +			info = g_new0(MsgFileInfo, 1);
 +			info->msginfo = NULL;
 +			info->file = (gchar *)tmp->data;
 +			msglist = g_slist_prepend(msglist, info);
 +			debug_print("file is a mail\n");
 +		} else {
 +			debug_print("file isn't a mail\n");
 +		}
  	}
 -	
 -	return FALSE;
 +	if (msglist) {
 +		msglist = g_slist_reverse(msglist);
 +		folder_item_add_msgs(item, msglist, FALSE);
 +		g_slist_foreach(msglist, free_info, NULL);
 +		g_slist_free(msglist);
 +		gtk_drag_finish(drag_context, TRUE, FALSE, time);
 +	} else {
 +		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +	}
 +	list_free_strings_full(list);
  }
  
 -static gboolean folderview_gnode_func(GtkCMCTree *ctree, guint depth,
 -				      GNode *gnode, GtkCMCTreeNode *cnode,
 -				      gpointer data)
 +/* called for dragged treeview nodes and summaryview items */
 +static void folderview_drag_received_cb(GtkWidget        *widget,
 +					GdkDragContext   *drag_context,
 +					gint              x,
 +					gint              y,
 +					GtkSelectionData *data,
 +					guint             info,
 +					guint             time,
 +					FolderView       *folderview)
  {
 -	FolderView *folderview = (FolderView *)data;
 -	FolderItem *item = FOLDER_ITEM(gnode->data);
 +	FolderItem *item = NULL, *src_item;
 +	GtkTreePath *path;
 +	GtkTreeModel *model;
 +	GtkTreeIter iter;
  
 -	cm_return_val_if_fail(item != NULL, FALSE);
 +	folderview->scroll_value = 0;
  
 -	gtk_cmctree_node_set_row_data(ctree, cnode, item);
 -	folderview_update_node(folderview, cnode);
 +	gtk_tree_view_get_cursor(GTK_TREE_VIEW(widget), &path, NULL);
 +	model = gtk_tree_view_get_model(GTK_TREE_VIEW(widget));
 +	if (!model)
 +		return;
  
 -	return TRUE;
 -}
 +	gtk_tree_model_get_iter(model, &iter, path);
 +	gtk_tree_model_get(model, &iter, F_COL_FOLDERITEM, &item, -1);
 +	if (!item)
 +		return;
  
 -static void folderview_expand_func(GtkCMCTree *ctree, GtkCMCTreeNode *node,
 -				   gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	FolderItem *item;
 +	if (info == TARGET_DUMMY) {
 +		drag_state_stop(folderview);
 +		const gchar *ddata = (const gchar *)gtk_selection_data_get_data(data);
 +		if ((gchar *)strstr(ddata, "FROM_OTHER_FOLDER") != ddata) {
 +			/* comes from summaryview */
 +			src_item = folderview->summaryview->folder_item;
  
 -	if (GTK_CMCTREE_ROW(node)->children) {
 -		item = gtk_cmctree_node_get_row_data(ctree, node);
 -		cm_return_if_fail(item != NULL);
 +			if (item->no_select) {
 +				alertpanel_error(_("The destination folder can only be used to "
 +						   "store subfolders."));
 +				return;
 +			}
 +			/* re-check (due to acceptable possibly set for folder moves */
 +			if (!(item && item->folder && item->path && !item->no_select &&
 +			      src_item && src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL)) {
 +				return;
 +			}
  
 -		if (!item->collapsed)
 -			gtk_cmctree_expand(ctree, node);
 -		else
 -			folderview_update_node(folderview, node);
 +			switch (gdk_drag_context_get_selected_action(drag_context)) {
 +			case GDK_ACTION_COPY:
 +				summary_copy_selected_to(folderview->summaryview, item);
 +				gtk_drag_finish(drag_context, TRUE, FALSE, time);
 +				break;
 +			case GDK_ACTION_MOVE:
 +			case GDK_ACTION_DEFAULT:
 +			default:
 +				if (FOLDER_CLASS(src_item->folder)->remove_msg == NULL)
 +					summary_copy_selected_to(folderview->summaryview, item);
 +				else
 +					summary_move_selected_to(folderview->summaryview, item);
 +				gtk_drag_finish(drag_context, TRUE, TRUE, time);
 +			}
 +			/* TM: drop done - cleanup */
 +			drag_state_stop(folderview);
 +			folderview->scroll_value = 0;
 +			if (folderview->open_path) {
 +				gtk_tree_view_set_cursor
 +					(GTK_TREE_VIEW(folderview->treeview),
 +					 folderview->open_path, NULL, FALSE);
 +				summary_grab_focus(folderview->summaryview);
 +			}
 +		} else {
 +			/* comes from folderview */
 +			char *source;
 +			gboolean folder_is_normal = TRUE;
 +			gboolean copy = (GDK_ACTION_COPY ==
 +				gdk_drag_context_get_selected_action(drag_context));
 +
 +			source = (char *)gtk_selection_data_get_data(data) + 17;
 +			src_item = folder_find_item_from_identifier(source);
- 
 +			folder_is_normal =
 +				src_item != NULL &&
 +				src_item->stype == F_NORMAL &&
 +				!folder_has_parent_of_type(src_item, F_OUTBOX) &&
 +				!folder_has_parent_of_type(src_item, F_DRAFT) &&
 +				!folder_has_parent_of_type(src_item, F_QUEUE) &&
 +				!folder_has_parent_of_type(src_item, F_TRASH);
 +			if (!item || !src_item || !folder_is_normal) {
 +				gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +				return;
 +			}
 +
 +			folderview_move_folder(folderview, src_item, item, copy);
 +			gtk_drag_finish(drag_context, TRUE, TRUE, time);
 +		}
 +		if (folderview->paths_to_recollapse) {
 +			free_paths_to_recollapse(folderview->paths_to_recollapse);
 +			g_slist_free(folderview->paths_to_recollapse);
 +			folderview->paths_to_recollapse = NULL;
 +		}
 +	} else if (info == TARGET_MAIL_URI_LIST) {
 +		if (!item) {
 +			gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +			debug_print("no item\n");
 +			return;
 +		}
 +		folderview_finish_dnd(gtk_selection_data_get_data(data),
 +			drag_context, time, item);
  	}
  }
  
@@@ -3235,198 -2549,781 +3234,208 @@@ static void folderview_send_queue_cb(Gt
  	*/
  	if (prefs_common.confirm_send_queued_messages) {
  		if (!prefs_common.work_offline) {
 -			if (alertpanel(_("Send queued messages"), 
 -			    	   _("Send all queued messages?"),
 -			    	   _("_Cancel"), _("_Send"),
 -				   NULL, ALERTFOCUS_FIRST) != G_ALERTALTERNATE)
 -				return;
 -		}
 -	}
 -
 -	if (procmsg_send_queue(item, prefs_common.savemsg, &errstr) < 0) {
 -		if (!errstr)
 -			alertpanel_error_log(_("Some errors occurred while "
 -					   "sending queued messages."));
 -		else {
 -			alertpanel_error_log(_("Some errors occurred "
 -					"while sending queued messages:\n%s"), errstr);
 -			g_free(errstr);
 -		}
 -	}
 -}
 -
 -static void folderview_search_cb(GtkAction *action, gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	summary_search(folderview->summaryview);
 -}
 -
 -static void folderview_run_processing_cb(GtkAction *action, gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	FolderItem *item;
 -
 -	if (!folderview->selected) return;
 -
 -	item = folderview_get_selected_item(folderview);
 -
 -	folderview_run_processing(item);
 -}
 -
 -void folderview_run_processing(FolderItem *item)
 -{
 -	cm_return_if_fail(item != NULL);
 -	cm_return_if_fail(item->folder != NULL);
 -
 -	item->processing_pending = TRUE;
 -	folder_item_apply_processing(item);
 -	item->processing_pending = FALSE;
 -}
 -
 -static void folderview_property_cb(GtkAction *action, gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	FolderItem *item;
 -
 -	if (!folderview->selected) return;
 -
 -	item = folderview_get_selected_item(folderview);
 -	cm_return_if_fail(item != NULL);
 -	cm_return_if_fail(item->folder != NULL);
 -
 -	prefs_folder_item_open(item);
 -}
 -
 -static void folderview_recollapse_nodes(FolderView *folderview, GtkCMCTreeNode *node)
 -{
 -	GSList *list = NULL;
 -	GSList *done = NULL;
 -	GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
 -	
 -	for (list = folderview->nodes_to_recollapse; list != NULL; list = g_slist_next(list)) {
 -		if (!gtkut_ctree_node_is_parent(GTK_CMCTREE_NODE(list->data), node)
 -		&&  list->data != node) {
 -			gtk_cmctree_collapse(ctree, GTK_CMCTREE_NODE(list->data));
 -			done = g_slist_append(done, GTK_CMCTREE_NODE(list->data));
 -		}
 -	}
 -	for (list = done; list != NULL; list = g_slist_next(list)) {
 -		folderview->nodes_to_recollapse = g_slist_remove(folderview->nodes_to_recollapse, 
 -								 list->data);
 -	}
 -	g_slist_free(done);
 -}
 -
 -void folderview_move_folder(FolderView *folderview, FolderItem *from_folder,
 -		            FolderItem *to_folder, gboolean copy)
 -{
 -	FolderItem *new_folder = NULL;
 -	gchar *buf;
 -	gint status;
 -
 -	cm_return_if_fail(folderview != NULL);
 -	cm_return_if_fail(from_folder != NULL);
 -	cm_return_if_fail(to_folder != NULL);
 -
 -	if (prefs_common.warn_dnd) {
 -		buf = g_strdup_printf(copy ? _("Do you really want to copy folder '%s' in '%s'?"):
 -					     _("Do you really want to make folder '%s' a subfolder of '%s'?"), 
 -					from_folder->name, to_folder->name);
 -		status = alertpanel_full(copy ? _("Copy folder"):_("Move folder"), buf,
 -				       	 _("_No"), _("_Yes"), NULL, ALERTFOCUS_FIRST,
 -					TRUE, NULL, ALERT_QUESTION);
 -		g_free(buf);
 -
 -		if ((status & ~G_ALERTDISABLE) != G_ALERTALTERNATE)
 -			return;
 -		else if (status & G_ALERTDISABLE)
 -			prefs_common.warn_dnd = FALSE;
 -	}
 -
 -	buf = g_strdup_printf(copy ? _("Copying %s to %s..."):_("Moving %s to %s..."), 
 -				from_folder->name, to_folder->name);
 -	STATUSBAR_PUSH(folderview->mainwin, buf);
 -	g_free(buf);
 -	summary_clear_all(folderview->summaryview);
 -	folderview->opened = NULL;
 -	folderview->selected = NULL;
 -	gtk_widget_set_sensitive(GTK_WIDGET(folderview->ctree), FALSE);
 -	inc_lock();
 -	main_window_cursor_wait(folderview->mainwin);
 -
 -	statusbar_verbosity_set(FALSE);
 -	folder_item_update_freeze();
 -	gtk_cmclist_freeze(GTK_CMCLIST(folderview->ctree));
 -	if ((status = folder_item_move_to(from_folder, to_folder, &new_folder, copy)) == F_MOVE_OK) {
 -		statusbar_verbosity_set(FALSE);
 -		main_window_cursor_normal(folderview->mainwin);
 -		STATUSBAR_POP(folderview->mainwin);
 -		folder_item_update_thaw();
 -		folder_item_update_recursive(new_folder, F_ITEM_UPDATE_MSGCNT);
 -
 -		folderview_sort_folders(folderview, 
 -			gtk_cmctree_find_by_row_data(GTK_CMCTREE(folderview->ctree), 
 -				NULL, to_folder), new_folder->folder);
 -		folderview_select(folderview, new_folder);
 -		gtk_cmclist_thaw(GTK_CMCLIST(folderview->ctree));
 -	} else {
 -		statusbar_verbosity_set(FALSE);		
 -		main_window_cursor_normal(folderview->mainwin);
 -		STATUSBAR_POP(folderview->mainwin);
 -		gtk_cmclist_thaw(GTK_CMCLIST(folderview->ctree));
 -		folder_item_update_thaw();
 -		switch (status) {
 -		case F_MOVE_FAILED_DEST_IS_PARENT:
 -			alertpanel_error(_("Source and destination are the same."));
 -			break;
 -		case F_MOVE_FAILED_DEST_IS_CHILD:
 -			alertpanel_error(copy ? _("Can't copy a folder to one of its children."):
 -						_("Can't move a folder to one of its children."));
 -			break;
 -		case F_MOVE_FAILED_DEST_OUTSIDE_MAILBOX:
 -			alertpanel_error(_("A folder cannot be moved between different mailboxes."));
 -			break;
 -		default:
 -			alertpanel_error(copy ? _("Copy failed!"):_("Move failed!"));
 -			break;
 -		}
 -	}	
 -	inc_unlock();		
 -	gtk_widget_set_sensitive(GTK_WIDGET(folderview->ctree), TRUE);
 -}
 -
 -static gint folderview_clist_compare(GtkCMCList *clist,
 -				     gconstpointer ptr1, gconstpointer ptr2)
 -{
 -	FolderItem *item1 = ((GtkCMCListRow *)ptr1)->data;
 -	FolderItem *item2 = ((GtkCMCListRow *)ptr2)->data;
 -
 -	if (item1->order > 0 && item2->order > 0)  // if we have an order item, use it
 -	{
 -		return item1->order - item2->order;
 -	}
 -
 -	// if only one folder has an order it comes first
 -	if (item1->order > 0)
 -	{
 -		return -1;
 -	}
 -	if (item2->order > 0)
 -	{
 -		return 1;
 -	}
 -
 -	if (!item1->name)
 -		return (item2->name != NULL);
 -	if (!item2->name)
 -		return -1;
 -
 -	return g_utf8_collate(item1->name, item2->name);
 -}
 -
 -static void folderview_processing_cb(GtkAction *action, gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	FolderItem *item;
 -	gchar *id, *title;
 -
 -	if (!folderview->selected) return;
 -
 -	item = folderview_get_selected_item(folderview);
 -	cm_return_if_fail(item != NULL);
 -	cm_return_if_fail(item->folder != NULL);
 -
 -	id = folder_item_get_identifier(item);
 -	title = g_strdup_printf (_("Processing configuration for folder %s"), id);
 -	g_free (id);
 -
 -	prefs_filtering_open(&item->prefs->processing, title,
 -			MANUAL_ANCHOR_PROCESSING, NULL, NULL, FALSE);
 -	g_free (title);
 -}
 -
 -void folderview_set_target_folder_color(GdkRGBA color_op)
 -{
 -	GList *list;
 -	FolderView *folderview;
 -
 -	for (list = folderview_list; list != NULL; list = list->next) {
 -		folderview = (FolderView *)list->data;
 -		folderview->color_op = color_op;
 -	}
 -}
 -
 -static gchar *last_smallfont = NULL;
 -static gchar *last_normalfont = NULL;
 -static gchar *last_boldfont = NULL;
 -static gboolean last_derive = 0;
 -
 -void folderview_reinit_fonts(FolderView *folderview)
 -{
 -	/* force reinit */
 -	g_free(last_smallfont);
 -	last_smallfont = NULL;
 -	g_free(last_normalfont);
 -	last_normalfont = NULL;
 -	g_free(last_boldfont);
 -	last_boldfont = NULL;
 -}
 -
 -void folderview_reflect_prefs(void)
 -{
 -	gboolean update_font = FALSE;
 -	FolderView *folderview = mainwindow_get_mainwindow()->folderview;
 -	FolderItem *item = folderview_get_selected_item(folderview);
 -	GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
 -				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 -	gint height = gtk_adjustment_get_value(pos);
 -
 -	folderview->color_new = prefs_common.color[COL_NEW];
 -	folderview->color_op = prefs_common.color[COL_TGT_FOLDER];
 -
 -	if (!last_smallfont || strcmp(last_smallfont, SMALL_FONT) ||
 -			!last_normalfont || strcmp(last_normalfont, NORMAL_FONT) ||
 -			!last_boldfont || strcmp(last_boldfont, BOLD_FONT) ||
 -			last_derive != prefs_common.derive_from_normal_font)
 -		update_font = TRUE;
 -
 -	if (!update_font)
 -		return;
 -
 -	g_free(last_smallfont);
 -	last_smallfont = g_strdup(SMALL_FONT);
 -	g_free(last_normalfont);
 -	last_normalfont = g_strdup(NORMAL_FONT);
 -	g_free(last_boldfont);
 -	last_boldfont = g_strdup(BOLD_FONT);
 -	last_derive = prefs_common.derive_from_normal_font;
 -
 -	folderview_set_fonts(folderview);
 -
 -	gtk_cmclist_freeze(GTK_CMCLIST(folderview->ctree));
 -	folderview_column_set_titles(folderview);
 -	folderview_set_all();
 -
 -	g_signal_handlers_block_by_func
 -		(G_OBJECT(folderview->ctree),
 -		 G_CALLBACK(folderview_selected), folderview);
 -
 -	if (item) {
 -		GtkCMCTreeNode *node = gtk_cmctree_find_by_row_data(
 -			GTK_CMCTREE(folderview->ctree), NULL, item);
 -
 -		folderview_select(folderview, item);
 -		folderview->open_folder = FALSE;
 -		folderview->selected = node;
 -	}
 -
 -	g_signal_handlers_unblock_by_func
 -		(G_OBJECT(folderview->ctree),
 -		 G_CALLBACK(folderview_selected), folderview);
 -
 -	pos = gtk_scrolled_window_get_vadjustment(
 -				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 -	gtk_adjustment_set_value(pos, height);
 -	gtk_cmclist_thaw(GTK_CMCLIST(folderview->ctree));
 -}
 -
 -static void drag_state_stop(FolderView *folderview)
 -{
 -	if (folderview->drag_timer_id)
 -		g_source_remove(folderview->drag_timer_id);
 -	folderview->drag_timer_id = 0;
 -	folderview->drag_node = NULL;
 -}
 -
 -static gboolean folderview_defer_expand(FolderView *folderview)
 -{
 -	if (folderview->drag_node) {
 -		folderview_recollapse_nodes(folderview, folderview->drag_node);
 -		if (folderview->drag_item->collapsed) {
 -			gtk_cmctree_expand(GTK_CMCTREE(folderview->ctree), folderview->drag_node);
 -			folderview->nodes_to_recollapse = g_slist_append
 -				(folderview->nodes_to_recollapse, folderview->drag_node);
 -		}
 -	}
 -	folderview->drag_item  = NULL;
 -	folderview->drag_timer_id = 0;
 -	return FALSE;
 -}
 -
 -static void drag_state_start(FolderView *folderview, GtkCMCTreeNode *node, FolderItem *item)
 -{
 -	/* the idea is that we call drag_state_start() whenever we want expansion to
 -	 * start after 'prefs_common.hover_time' msecs. if we want to cancel expansion,
 -	 * we need to call drag_state_stop() */
 -	drag_state_stop(folderview);
 -	/* request expansion */
 -	if (0 != (folderview->drag_timer_id = g_timeout_add
 -			(prefs_common.hover_timeout, 
 -			 (GSourceFunc)folderview_defer_expand,
 -			 folderview))) {
 -		folderview->drag_node = node;
 -		folderview->drag_item = item;
 -	}			 
 -}
 -#ifndef GENERIC_UMPC
 -static void folderview_start_drag(GtkWidget *widget, gint button, GdkEvent *event,
 -			          FolderView       *folderview)
 -{
 -	GdkDragContext *context;
 -
 -	cm_return_if_fail(folderview != NULL);
 -	if (folderview->selected == NULL) return;
 -	if (folderview->nodes_to_recollapse) 
 -		g_slist_free(folderview->nodes_to_recollapse);
 -	folderview->nodes_to_recollapse = NULL;
 -	context = gtk_drag_begin_with_coordinates(widget, folderview->target_list,
 -				 GDK_ACTION_MOVE|GDK_ACTION_COPY|GDK_ACTION_DEFAULT, button, event,
 -				 -1, -1);
 -	gtk_drag_set_icon_default(context);
 -}
 -#endif
 -static void folderview_drag_data_get(GtkWidget        *widget,
 -				     GdkDragContext   *drag_context,
 -				     GtkSelectionData *selection_data,
 -				     guint             info,
 -				     guint             time,
 -				     FolderView       *folderview)
 -{
 -	FolderItem *item;
 -	GList *sel;
 -	if (info == TARGET_DUMMY) {
 -		sel = GTK_CMCLIST(folderview->ctree)->selection;
 -		if (!sel)
 -			return;
 -
 -		item = gtk_cmctree_node_get_row_data
 -			(GTK_CMCTREE(folderview->ctree),
 -			 GTK_CMCTREE_NODE(sel->data));
 -		if (item) {
 -			gchar *source = NULL;
 -			gchar *name = folder_item_get_identifier(item);
 -			source = g_strdup_printf ("FROM_OTHER_FOLDER%s", name);
 -			g_free(name);
 -			gtk_selection_data_set(selection_data,
 -					       gtk_selection_data_get_target(selection_data), 8,
 -					       source, strlen(source));
 -		}
 -	} else {
 -		g_warning("unknown info %d", info);
 -	}
 -}
 -
 -static gboolean folderview_update_folder(gpointer source, gpointer userdata)
 -{
 -	FolderUpdateData *hookdata;
 -	FolderView *folderview;
 -	GtkWidget *ctree;
 -
 -	hookdata = source;
 -	folderview = (FolderView *) userdata;	
 -	cm_return_val_if_fail(hookdata != NULL, FALSE);
 -	cm_return_val_if_fail(folderview != NULL, FALSE);
 -
 -	ctree = folderview->ctree;
 -	cm_return_val_if_fail(ctree != NULL, FALSE);
 -
 -	if (hookdata->update_flags & FOLDER_ADD_FOLDERITEM)
 -		folderview_create_folder_node(folderview, hookdata->item);
 -	else if (hookdata->update_flags & FOLDER_RENAME_FOLDERITEM) {
 -		GtkCMCTreeNode *node = gtk_cmctree_find_by_row_data(GTK_CMCTREE(ctree),
 -				NULL, folder_item_parent(hookdata->item));
 -		folderview_sort_folders(folderview, node, hookdata->folder);
 -	} else if (hookdata->update_flags & FOLDER_REMOVE_FOLDERITEM) {
 -		GtkCMCTreeNode *node;
 -
 -		node = gtk_cmctree_find_by_row_data(GTK_CMCTREE(ctree), NULL, hookdata->item);
 -		if (node != NULL) {
 -			gtk_cmctree_remove_node(GTK_CMCTREE(ctree), node);
 -			if (folderview->selected == node)
 -				folderview->selected = NULL;
 -			if (folderview->opened == node)
 -				folderview->opened = NULL;
 -		}
 -	} else if (hookdata->update_flags & FOLDER_MOVE_FOLDERITEM) {
 -		/* do nothing, it's done by the ADD and REMOVE) */
 -	} else if (hookdata->update_flags & (FOLDER_TREE_CHANGED | FOLDER_ADD_FOLDER | FOLDER_REMOVE_FOLDER))
 -		folderview_set(folderview);
 -
 -	return FALSE;
 -}
 -
 -static gboolean folderview_dnd_scroll_cb(gpointer data)
 -{
 -	FolderView *folderview = (FolderView *)data;
 -	GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
 -				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 -	gint new_val = (int)gtk_adjustment_get_value(pos) + folderview->scroll_value;
 -	gint max = (int)gtk_adjustment_get_upper(pos) -
 -               (int)gtk_adjustment_get_page_size(pos);
 -
 -	if (folderview->scroll_value == 0) {
 -		folderview->scroll_timeout_id = 0;
 -		return FALSE;
 -	}
 -
 -	if (folderview->scroll_value > 0 && new_val > max) {
 -		new_val = max;
 -	} else if (folderview->scroll_value < 0 && new_val < 0) {
 -		new_val = 0;
 -	}
 -	gtk_adjustment_set_value(pos, new_val);
 -	
 -	return TRUE;
 -}
 -
 -static gboolean folderview_drag_motion_cb(GtkWidget      *widget,
 -					  GdkDragContext *context,
 -					  gint            x,
 -					  gint            y,
 -					  guint           time,
 -					  FolderView     *folderview)
 -{
 -	gint row, column;
 -	FolderItem *item = NULL, *src_item = NULL;
 -	GtkCMCTreeNode *node = NULL;
 -	gboolean acceptable = FALSE;
 -	GtkAdjustment *pos = gtk_scrolled_window_get_vadjustment(
 -				GTK_SCROLLED_WINDOW(folderview->scrolledwin));
 -	int height = (int)gtk_adjustment_get_page_size(pos);
 -	int total_height = (int)gtk_adjustment_get_upper(pos);
 -	int vpos = (int)gtk_adjustment_get_value(pos);
 -	int offset = prefs_common.show_col_headers ? 24:0;
 -	int dist;
 -
 -	if (gtk_cmclist_get_selection_info
 -		(GTK_CMCLIST(widget), x - offset, y - offset, &row, &column)) {
 -		GtkWidget *srcwidget;
 -
 -		if (y > height - (48 - offset) && height + vpos < total_height) {
 -			dist = -(height - (48 - offset) - y);
 -			folderview->scroll_value = 1.41f * (1+(dist / 6));
 -		} else if (y < 72 - (24 - offset) && y >= 0) {
 -			dist = 72 - (24 - offset) - y;
 -			folderview->scroll_value = -1.41f * (1+(dist / 6));
 -		} else {
 -			folderview->scroll_value = 0;
 -		}
 -		if (folderview->scroll_value != 0 && folderview->scroll_timeout_id == 0) {
 -			folderview->scroll_timeout_id = 
 -				g_timeout_add(30, folderview_dnd_scroll_cb,
 -					      folderview);
 -		}
 -
 -		node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
 -		item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
 -		src_item = folderview->summaryview->folder_item;
 -
 -		srcwidget = gtk_drag_get_source_widget(context);
 -		if (srcwidget == summary_get_main_widget(folderview->summaryview)) {
 -			/* comes from summaryview */
 -			/* we are copying messages, so only accept folder items that are not
 -			   the source item, are no root items and can copy messages */
 -			if (item && item->folder && folder_item_parent(item) != NULL && src_item &&
 -			    src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL &&
 -			    FOLDER_TYPE(item->folder) != F_UNKNOWN)
 -				acceptable = TRUE;
 -		} else if (srcwidget == folderview->ctree) {
 -			/* comes from folderview */
 -			/* we are moving folder items, only accept folders that are not
 -                           the source items and can copy messages and create folder items */
 -			if (item && item->folder && src_item && src_item != item &&
 -			    FOLDER_CLASS(item->folder)->copy_msg != NULL &&
 -			    FOLDER_CLASS(item->folder)->create_folder != NULL &&
 -			    ((FOLDER_TYPE(item->folder) != F_UNKNOWN &&  FOLDER_TYPE(src_item->folder) != F_UNKNOWN)
 -			     || item->folder == src_item->folder))
 -				acceptable = TRUE;
 -		} else {
 -			/* comes from another app */
 -			/* we are adding messages, so only accept folder items that are 
 -			   no root items and can copy messages */
 -			if (item && item->folder && folder_item_parent(item) != NULL
 -			    && FOLDER_CLASS(item->folder)->add_msg != NULL &&
 -			    FOLDER_TYPE(item->folder) != F_UNKNOWN)
 -				acceptable = TRUE;
 -		}
 -	}
 -
 -	if (acceptable || (src_item && src_item == item))
 -		drag_state_start(folderview, node, item);
 -	
 -	if (acceptable) {
 -		g_signal_handlers_block_by_func
 -			(G_OBJECT(widget),
 -			 G_CALLBACK(folderview_selected), folderview);
 -		gtk_cmctree_select(GTK_CMCTREE(widget), node);
 -		g_signal_handlers_unblock_by_func
 -			(G_OBJECT(widget),
 -			 G_CALLBACK(folderview_selected), folderview);
 -		gdk_drag_status(context, 
 -					(gdk_drag_context_get_actions(context) == GDK_ACTION_COPY ?
 -					GDK_ACTION_COPY : GDK_ACTION_MOVE) , time);
 -	} else {
 -		if (folderview->opened)
 -			gtk_cmctree_select(GTK_CMCTREE(widget), folderview->opened);
 -		gdk_drag_status(context, 0, time);
 -	}
 -
 -	return acceptable;
 -}
 -
 -static void folderview_drag_leave_cb(GtkWidget      *widget,
 -				     GdkDragContext *context,
 -				     guint           time,
 -				     FolderView     *folderview)
 -{
 -	drag_state_stop(folderview);
 -	folderview->scroll_value = 0;
 -	gtk_cmctree_select(GTK_CMCTREE(widget), folderview->opened);
 -}
 -
 -static void free_info (gpointer stuff, gpointer data)
 -{
 -	g_free(stuff);
 -}
 -
 -void folderview_finish_dnd(const gchar *data, GdkDragContext *drag_context,
 -			   guint time, FolderItem *item)
 -{
 -	GList *list, *tmp;
 -	GSList *msglist = NULL;
 -	list = uri_list_extract_filenames(data);
 -	if (!(item && item->folder && folder_item_parent(item) != NULL
 -		    && FOLDER_CLASS(item->folder)->add_msg != NULL))
 -	{
 -		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 -		debug_print("item doesn't fit\n");			
 -		return;
 -	}	
 -	if (!list) {
 -		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 -		debug_print("list is empty\n");			
 -		return;
 -	}
 -	for (tmp = list; tmp != NULL; tmp = tmp->next) {
 -		MsgFileInfo *info = NULL;
 -
 -		if (file_is_email((gchar *)tmp->data)) {
 -			info = g_new0(MsgFileInfo, 1);
 -			info->msginfo = NULL;
 -			info->file = (gchar *)tmp->data;
 -			msglist = g_slist_prepend(msglist, info);
 -			debug_print("file is a mail\n");
 -		} else {
 -			debug_print("file isn't a mail\n");
 +			if (alertpanel(_("Send queued messages"), 
 +			    	   _("Send all queued messages?"),
 +			    	   _("_Cancel"), _("_Send"),
 +				   NULL, ALERTFOCUS_FIRST) != G_ALERTALTERNATE)
 +				return;
  		}
  	}
 -	if (msglist) {
 -		msglist = g_slist_reverse(msglist);
 -		folder_item_add_msgs(item, msglist, FALSE);
 -		g_slist_foreach(msglist, free_info, NULL);
 -		g_slist_free(msglist);
 -		gtk_drag_finish(drag_context, TRUE, FALSE, time);
 -	} else {
 -		gtk_drag_finish(drag_context, FALSE, FALSE, time);
 +
 +	if (procmsg_send_queue(item, prefs_common.savemsg, &errstr) < 0) {
 +		if (!errstr)
 +			alertpanel_error_log(_("Some errors occurred while "
 +					   "sending queued messages."));
 +		else {
 +			alertpanel_error_log(_("Some errors occurred "
 +					"while sending queued messages:\n%s"), errstr);
 +			g_free(errstr);
 +		}
  	}
 -	list_free_strings_full(list);
  }
  
 -static void folderview_drag_received_cb(GtkWidget        *widget,
 -					GdkDragContext   *drag_context,
 -					gint              x,
 -					gint              y,
 -					GtkSelectionData *data,
 -					guint             info,
 -					guint             time,
 -					FolderView       *folderview)
 +static void folderview_empty_trash_cb(GtkAction *action, gpointer data)
  {
 -	gint row, column;
 -	FolderItem *item = NULL, *src_item;
 -	GtkCMCTreeNode *node;
 -	int offset = prefs_common.show_col_headers ? 24:0;
 +	FolderView *folderview = (FolderView *)data;
 +	FolderItem *item;
 +	GSList *mlist = NULL;
 +	GSList *cur = NULL;
 +	FolderItem *special_trash = NULL;
 +	PrefsAccount *ac;
  
 -	folderview->scroll_value = 0;
 +	item = folderview->menu_item;
 +	cm_return_if_fail(item != NULL);
 +	cm_return_if_fail(item->folder != NULL);
  
 -	if (info == TARGET_DUMMY) {
 -		drag_state_stop(folderview);
 -		const gchar *ddata = (const gchar *)gtk_selection_data_get_data(data);
 -		if ((gchar *)strstr(ddata, "FROM_OTHER_FOLDER") != ddata) {
 -			/* comes from summaryview */
 -			if (gtk_cmclist_get_selection_info
 -				(GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0)
 -				return;
 +	if (NULL != (ac = account_find_from_item(item)))
 +		special_trash = account_get_special_folder(ac, F_TRASH);
  
 -			node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
 -			item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
 -			src_item = folderview->summaryview->folder_item;
 +	if (item != item->folder->trash && item != special_trash
 +	&&  !folder_has_parent_of_type(item, F_TRASH)) return;
  
 -			if (item && item->no_select) {
 -				alertpanel_error(_("The destination folder can only be used to "
 -						   "store subfolders."));
 -				return;
 -			}
 -			/* re-check (due to acceptable possibly set for folder moves */
 -			if (!(item && item->folder && item->path && !item->no_select && 
 -			      src_item && src_item != item && FOLDER_CLASS(item->folder)->copy_msg != NULL)) {
 -				return;
 -			}
 +	if (prefs_common.ask_on_clean) {
 +		if (alertpanel(_("Empty trash"),
 +			       _("Delete all messages in trash folders?"),
 +			       _("_No"), _("_Yes"), NULL,
 +						 ALERTFOCUS_SECOND));
 +			return;
 +	}
  
 -			switch (gdk_drag_context_get_selected_action(drag_context)) {
 -			case GDK_ACTION_COPY:
 -				summary_copy_selected_to(folderview->summaryview, item);
 -				gtk_drag_finish(drag_context, TRUE, FALSE, time);
 -				break;
 -			case GDK_ACTION_MOVE:
 -			case GDK_ACTION_DEFAULT:
 -			default:
 -				if (FOLDER_CLASS(src_item->folder)->remove_msg == NULL)
 -					summary_copy_selected_to(folderview->summaryview, item);
 -				else
 -					summary_move_selected_to(folderview->summaryview, item);
 -				gtk_drag_finish(drag_context, TRUE, TRUE, time);
 -			}
 -		} else {
 -			/* comes from folderview */
 -			char *source;
 -			gboolean folder_is_normal = TRUE;
 -			gboolean copy = (GDK_ACTION_COPY ==
 -				gdk_drag_context_get_selected_action(drag_context));
 +	mlist = folder_item_get_msg_list(item);
  
 -			source = (char *)gtk_selection_data_get_data(data) + 17;
 -			if (gtk_cmclist_get_selection_info
 -			    (GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0
 -			    || *source == 0) {
 -				gtk_drag_finish(drag_context, FALSE, FALSE, time);			
 -				return;
 -			}
 -			node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
 -			item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
 -			src_item = folder_find_item_from_identifier(source);
 +	for (cur = mlist ; cur != NULL ; cur = cur->next) {
 +		MsgInfo * msginfo = (MsgInfo *) cur->data;
 +		if (MSG_IS_LOCKED(msginfo->flags))
 +			continue;
 +		/* is it partially received? (partial_recv isn't cached) */
 +		if (msginfo->total_size != 0 &&
 +		    msginfo->size != (off_t)msginfo->total_size)
 +			partial_mark_for_delete(msginfo);
 +	}
 +	procmsg_msg_list_free(mlist);
  
 -			folder_is_normal = 
 -				src_item != NULL &&
 -				src_item->stype == F_NORMAL &&
 -				!folder_has_parent_of_type(src_item, F_OUTBOX) &&
 -				!folder_has_parent_of_type(src_item, F_DRAFT) &&
 -				!folder_has_parent_of_type(src_item, F_QUEUE) &&
 -				!folder_has_parent_of_type(src_item, F_TRASH);
 -			if (!item || !src_item || !folder_is_normal) {
 -				gtk_drag_finish(drag_context, FALSE, FALSE, time);			
 -				return;
 -			}
 +	folder_item_remove_all_msg(item);
 +}
  
 -			folderview_move_folder(folderview, src_item, item, copy);
 -			gtk_drag_finish(drag_context, TRUE, TRUE, time);
 -		}
 -		folderview->nodes_to_recollapse = NULL;
 -	} else if (info == TARGET_MAIL_URI_LIST) {
 -		if (gtk_cmclist_get_selection_info
 -			(GTK_CMCLIST(widget), x - offset, y - offset, &row, &column) == 0)
 -			return;
 +static void folderview_run_processing_cb(GtkAction *action, gpointer data)
 +{
 +	FolderView *folderview = (FolderView *)data;
 +	FolderItem *item;
  
 -		node = gtk_cmctree_node_nth(GTK_CMCTREE(widget), row);
 -		if (!node) {
 -			gtk_drag_finish(drag_context, FALSE, FALSE, time);
 -			debug_print("no node\n");		
 -			return;
 -		}
 -		item = gtk_cmctree_node_get_row_data(GTK_CMCTREE(widget), node);
 -		if (!item) {
 -			gtk_drag_finish(drag_context, FALSE, FALSE, time);			
 -			debug_print("no item\n");
 -			return;
 -		}
 -		folderview_finish_dnd(gtk_selection_data_get_data(data),
 -			drag_context, time, item);
 -	}
 +	item = folderview->menu_item;
 +	cm_return_if_fail(item != NULL);
 +	cm_return_if_fail(item->folder != NULL);
++
++	item->processing_pending = TRUE;
++	folder_item_apply_processing(item);
++	item->processing_pending = FALSE;
+ }
+ 
 -static void folderview_drag_end_cb(GtkWidget	    *widget, 
 -				   GdkDragContext   *drag_context,
 -                                   FolderView	    *folderview)
++void folderview_run_processing(FolderItem *item)
+ {
 -	drag_state_stop(folderview);
 -	folderview->scroll_value = 0;
 -	g_slist_free(folderview->nodes_to_recollapse);
 -	folderview->nodes_to_recollapse = NULL;
++	cm_return_if_fail(item != NULL);
++	cm_return_if_fail(item->folder != NULL);
 +
 +	item->processing_pending = TRUE;
 +	folder_item_apply_processing(item);
 +	item->processing_pending = FALSE;
  }
  
 -void folderview_register_popup(FolderViewPopup *fpopup)
 +static void folderview_processing_cb(GtkAction *action, gpointer data)
  {
 -	GList *folderviews;
 +	FolderView *folderview = (FolderView *)data;
 +	FolderItem *item;
 +	gchar *id, *title;
  
 -	for (folderviews = folderview_list; folderviews != NULL; folderviews = g_list_next(folderviews)) {
 -		FolderView *folderview = folderviews->data;
 -		GtkActionGroup *factory;
 +	item = folderview->menu_item;
 +	cm_return_if_fail(item != NULL);
 +	cm_return_if_fail(item->folder != NULL);
  
 -		factory = create_action_group(folderview, fpopup);
 -		g_hash_table_insert(folderview->popups, fpopup->klass, factory);
 -	}	
 -	g_hash_table_insert(folderview_popups, fpopup->klass, fpopup);
 +	id = folder_item_get_identifier(item);
 +	title = g_strdup_printf (_("Processing configuration for folder %s"), id);
 +	g_free (id);
 +
 +	prefs_filtering_open(&item->prefs->processing, title,
 +			MANUAL_ANCHOR_PROCESSING, NULL, NULL, FALSE);
 +	g_free (title);
  }
  
 -void folderview_unregister_popup(FolderViewPopup *fpopup)
 +static void folderview_property_cb(GtkAction *action, gpointer data)
  {
 -	GList *folderviews;
 -
 +	FolderView *folderview = (FolderView *)data;
 +	FolderItem *item;
 +	item = folderview->menu_item;
 +	cm_return_if_fail(item != NULL);
 +	cm_return_if_fail(item->folder != NULL);
  
 -	for (folderviews = folderview_list; folderviews != NULL; folderviews = g_list_next(folderviews)) {
 -		FolderView *folderview = folderviews->data;
 +	prefs_folder_item_open(item);
 +}
  
 -		g_hash_table_remove(folderview->popups, fpopup->klass);
 -	}	
 -	g_hash_table_remove(folderview_popups, fpopup->klass);
 +static void folderview_search_cb(GtkAction *action, gpointer data)
 +{
 +	FolderView *folderview = (FolderView *)data;
 +	summary_search(folderview->summaryview);
  }
  
 -void folderview_remove_item(FolderView *folderview, FolderItem *item)
 +static void mark_all_read_unread_handler(GtkAction *action, gpointer data,
 +					 gboolean recursive, gboolean read)
  {
 -	g_return_if_fail(folderview != NULL);
 -	g_return_if_fail(item != NULL);
 +	FolderView *folderview = (FolderView *)data;
 +	FolderItem *item;
 +	AlertValue val;
 +	gchar *message;
 +	gchar *title;
 +
 +	item = folderview->menu_item;
 +	if (item == NULL)
 +		return;
 +
 +	if (read) {
 +		title = _("Mark all as read");
 +		message = recursive? _("Do you really want to mark all mails in this "
 +							"folder and its sub-folders as read?") :
 +							_("Do you really want to mark all mails in this "
 +							"folder as read?");
 +	} else {
 +		title = _("Mark all as unread");
 +		message = recursive? _("Do you really want to mark all mails in this "
 +							"folder and its sub-folders as unread?") :
 +							_("Do you really want to mark all mails in this "
 +							"folder as unread?");
 +	}
 +	if (prefs_common.ask_mark_all_read) {
 +		val = alertpanel_full(title, message,
 +			  _("_No"), _("_Yes"), NULL, ALERTFOCUS_FIRST,
 +			  TRUE, NULL, ALERT_QUESTION);
  
 -	GtkCMCTree *ctree = GTK_CMCTREE(folderview->ctree);
 -	g_return_if_fail(ctree != NULL);
 +		if ((val & ~G_ALERTDISABLE) != G_ALERTALTERNATE)
 +			return;
 +		else if (val & G_ALERTDISABLE)
 +			prefs_common.ask_mark_all_read = FALSE;
 +	}
 +
 +	folder_item_update_freeze();
 +	if (folderview->summaryview->folder_item != item && !recursive)
 +		summary_lock(folderview->summaryview);
 +	else
 +		summary_freeze(folderview->summaryview);
  
 -	GtkCMCTreeNode *node =
 -		gtk_cmctree_find_by_row_data(ctree, NULL, item);
 -	g_return_if_fail(node != NULL);
 +	if (read) {
 +		if (recursive)
 +			folderutils_mark_all_read_recursive(item, TRUE);
 +		else
 +			folderutils_mark_all_read(item, TRUE);
 +	} else {
 +		if (recursive)
 +			folderutils_mark_all_read_recursive(item, FALSE);
 +		else
 +			folderutils_mark_all_read(item, FALSE);
 +	}
 +	if (folderview->summaryview->folder_item != item && !recursive)
 +		summary_unlock(folderview->summaryview);
 +	else
 +		summary_thaw(folderview->summaryview);
 +	folder_item_update_thaw();
 +}
  
 -	gtk_cmctree_remove_node(ctree, node);
 +static void mark_all_read_cb(GtkAction *action, gpointer data)
 +{
 +	mark_all_read_unread_handler(action, data, FALSE, TRUE);
  }
  
 -void folderview_freeze(FolderView *folderview)
 +static void mark_all_unread_cb(GtkAction *action, gpointer data)
  {
 -	if (folderview)
 -		gtk_cmclist_freeze(GTK_CMCLIST(folderview->ctree));
 +	mark_all_read_unread_handler(action, data, FALSE, FALSE);
  }
  
 -void folderview_thaw(FolderView *folderview)
 +static void mark_all_read_recursive_cb(GtkAction *action, gpointer data)
  {
 -	if (folderview)
 -		gtk_cmclist_thaw(GTK_CMCLIST(folderview->ctree));
 +	mark_all_read_unread_handler(action, data, TRUE, TRUE);
  }
  
 -void folderview_grab_focus(FolderView *folderview)
 +static void mark_all_unread_recursive_cb(GtkAction *action, gpointer data)
  {
 -	 if (folderview)
 -		 gtk_widget_grab_focus(folderview->ctree);
 +	mark_all_read_unread_handler(action, data, TRUE, FALSE);
  }
  
  static void folderview_header_set_displayed_columns_cb(GtkAction *gaction,
diff --cc src/folderview.h
index 4223ea74a,847d59b93..457abdf1d
--- a/src/folderview.h
+++ b/src/folderview.h
@@@ -120,6 -125,10 +120,8 @@@ void folderview_rescan_tree		(Folder		*
  gint folderview_check_new		(Folder		*folder);
  void folderview_check_new_all		(void);
  
 -void folderview_update_all_updated	(gboolean	 update_summary);
 -
+ void folderview_run_processing(FolderItem *item);
+ 
  void folderview_move_folder		(FolderView 	*folderview,
  					 FolderItem 	*from_folder,
  					 FolderItem 	*to_folder,
diff --cc src/plugins/rssyl/rssyl_cb_menu.c
index fbedecc13,6c08fc377..67cb26b47
--- a/src/plugins/rssyl/rssyl_cb_menu.c
+++ b/src/plugins/rssyl/rssyl_cb_menu.c
@@@ -57,13 -58,51 +58,49 @@@ void rssyl_new_feed_cb(GtkAction *actio
  
  	debug_print("RSSyl: new_feed_cb\n");
  
 -	g_return_if_fail(folderview->selected != NULL);
 -
 -	item = folderview_get_selected_item(folderview);
 -	g_return_if_fail(item != NULL);
 +	if ((item = folderview_get_selected_item(folderview)) == NULL)
 +		return;
  	g_return_if_fail(item->folder != NULL);
  
+ 	clip_text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_CLIPBOARD));
+ 
+ 	if (clip_text) {
+ 		str = clip_text;
+ #if GLIB_CHECK_VERSION(2,66,0)
+ 		GError *error = NULL;
+ 		GUri *uri = NULL;
+ 
+ 		/* skip any leading white-space */
+ 		while (str && *str && g_ascii_isspace(*str))
+ 			str++;
+ 		uri = g_uri_parse(str, G_URI_FLAGS_PARSE_RELAXED, &error);
+ 		if (error) {
+ 			g_warning("could not parse clipboard text for URI: '%s'", error->message);
+ 			g_error_free(error);
+ 		}
+ 		if (uri) {
+ 			gchar* newstr = g_uri_to_string(uri);
+ 
+ 			debug_print("URI: '%s' -> '%s'\n", str, newstr ? newstr : "N/A");
+ 			if (newstr)
+ 				g_free(newstr);
+ 			g_uri_unref(uri);
+ 		} else {
+ #else
+ 		if (!is_uri_string(str)) {
+ #endif
+ 			/* if no URL, ignore clipboard text */
+ 			str = NULL;
+ 		}
+ 	}
+ 
  	url = input_dialog(_("Subscribe feed"),
  			_("Input the URL of the news feed you wish to subscribe:"),
- 			"");
+ 			str ? str : "");
+ 
+ 	if (clip_text)
+ 		g_free(clip_text);
+ 
  	if( url == NULL )	/* User cancelled */
  		return;
  
@@@ -356,11 -397,12 +393,11 @@@ void rssyl_import_feed_list_cb(GtkActio
  	}
  
  	/* Find the destination folder for the import */
 -	g_return_if_fail(folderview->selected != NULL);
 -	item = folderview_get_selected_item(folderview);
 -	g_return_if_fail(item != NULL);
 +	if ((item = folderview_get_selected_item(folderview)) == NULL)
 +		return;
  	g_return_if_fail(item->folder != NULL);
  
- 	ctx = malloc( sizeof(OPMLImportCtx) );
+ 	ctx = g_malloc( sizeof(OPMLImportCtx) );
  	ctx->failures = 0;
  	ctx->depth = rssyl_folder_depth(item) + 1;
  	ctx->current = NULL;

-----------------------------------------------------------------------


hooks/post-receive
-- 
Claws Mail


More information about the Commits mailing list