[Xfce4-commits] <postler:master> Implement popup menu on folders and 'Empty Folder'

Christian Dywan noreply at xfce.org
Sat May 29 00:52:01 CEST 2010


Updating branch refs/heads/master
         to cd43a2592458e72bdd1bb5164fac4aee3e19b378 (commit)
       from 0d33cc50b1d6fc8a893ab294ab21e58d328cf767 (commit)

commit cd43a2592458e72bdd1bb5164fac4aee3e19b378
Author: Christian Dywan <christian at twotoasts.de>
Date:   Fri May 28 23:50:34 2010 +0200

    Implement popup menu on folders and 'Empty Folder'

 postler/postler-folders.vala |   52 +++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 51 insertions(+), 1 deletions(-)

diff --git a/postler/postler-folders.vala b/postler/postler-folders.vala
index ab94d2d..0b67497 100644
--- a/postler/postler-folders.vala
+++ b/postler/postler-folders.vala
@@ -123,10 +123,60 @@ public class Postler.Folders : Gtk.TreeView {
             messages.clear ();
     }
 
+    void empty_folder (Gtk.TreeIter iter) {
+        string location;
+        store.get (iter, Columns.LOCATION, out location, -1);
+        try {
+            string[] folders = { "cur", "new" };
+            foreach (var folder in folders) {
+                var folder_dir = File.new_for_path (location + "/" + folder);
+                var folder_enumerator = folder_dir.enumerate_children (
+                    FILE_ATTRIBUTE_STANDARD_NAME, 0, null);
+                GLib.FileInfo info;
+                while ((info = folder_enumerator.next_file (null)) != null) {
+                    var file = folder_dir.resolve_relative_path (info.get_name ());
+                    file.delete (null);
+                }
+            }
+            messages.clear ();
+        }
+        catch (GLib.Error error) {
+            GLib.critical (_("Failed to empty folder \"%s\": %s"),
+                location, error.message);
+        }
+    }
+
+    override bool popup_menu () {
+        var menu = new Gtk.Menu ();
+        menu.deactivate.connect ((menu) => {
+            GLib.Idle.add (() => {menu.destroy (); return false; });
+        });
+
+        var menuitem = new Gtk.MenuItem.with_mnemonic (_("_Empty Folder"));
+        menuitem.activate.connect ((menuitem) => {
+             Gtk.TreeIter iter;
+             if (get_selection ().get_selected (null, out iter))
+                 empty_folder (iter);
+        });
+        menu.append (menuitem);
+        menu.show_all ();
+
+        var event = Gtk.get_current_event ();
+        menu.attach_to_widget (this, (widget, menu) => { });
+        menu.popup (null, null, null, event.button.button, event.get_time ());
+        return true;
+    }
+
     override bool button_release_event (Gdk.EventButton event) {
         Gtk.TreeIter iter;
         if (get_selection ().get_selected (null, out iter)) {
-            select_folder (iter);
+            if (event.button == 3) {
+                /* popup_menu (); */
+                bool handled;
+                GLib.Signal.emit_by_name (this, "popup-menu", &handled);
+            }
+            else
+                select_folder (iter);
         }
         return base.button_press_event (event);
     }



More information about the Xfce4-commits mailing list