[gnome-boxes] collection-view: Show context menu on right-click



commit 8d1086709a0ab6b938cc051e6c0dfd55c591279f
Author: Zeeshan Ali (Khattak) <zeeshanak gnome org>
Date:   Fri Nov 14 14:15:20 2014 +0000

    collection-view: Show context menu on right-click
    
    Show ActionsPopover when user right clicks on an item.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=738761

 src/collection-view.vala |   38 ++++++++++++++++++++++++++++++++++++++
 1 files changed, 38 insertions(+), 0 deletions(-)
---
diff --git a/src/collection-view.vala b/src/collection-view.vala
index 4bad43f..a49fa01 100644
--- a/src/collection-view.vala
+++ b/src/collection-view.vala
@@ -34,6 +34,7 @@ private class Boxes.CollectionView: Gd.MainView, Boxes.UI {
 
     private Gtk.ListStore store;
     private Gtk.TreeModelFilter model_filter;
+    private Boxes.ActionsPopover context_popover;
 
     construct {
         category = new Category (_("New and Recent"), Category.Kind.NEW);
@@ -49,6 +50,11 @@ private class Boxes.CollectionView: Gd.MainView, Boxes.UI {
             if (!window.selection_mode)
                 unselect_all (); // Reset selection on exiting selection mode
         });
+
+        var icon_view = get_generic_view () as Gtk.IconView;
+        icon_view.button_release_event.connect (on_button_press_event);
+        context_popover = new Boxes.ActionsPopover (window);
+        context_popover.relative_to = icon_view;
     }
 
     private void ui_state_changed () {
@@ -360,4 +366,36 @@ private class Boxes.CollectionView: Gd.MainView, Boxes.UI {
         });
         machine.set_data<uint> ("activity_timeout", activity_timeout);
     }
+
+    private bool on_button_press_event (Gdk.EventButton event) {
+        if (event.type != Gdk.EventType.BUTTON_RELEASE || event.button != 3)
+            return false;
+
+        var generic_view = get_generic_view () as Gd.MainViewGeneric;
+        var path = generic_view.get_path_at_pos ((int) event.x, (int) event.y);
+        if (path == null)
+            return false;
+
+        return launch_context_popover_for_path (path);
+    }
+
+    private bool launch_context_popover_for_path (Gtk.TreePath path) {
+        var item = get_item_for_path (path);
+        if (item == null)
+            return false;
+
+        var icon_view = get_generic_view () as Gtk.IconView;
+        Gdk.Rectangle rect;
+        icon_view.get_cell_rect (path, null, out rect);
+
+        context_popover.update_for_item (item);
+        var rectangle = Cairo.RectangleInt () { x = rect.x,
+                                                y = rect.y,
+                                                width = rect.width,
+                                                height = rect.height / 2}; // Show in the middle
+        context_popover.pointing_to = rectangle;
+        context_popover.show ();
+
+        return true;
+    }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]