[gnome-shell] messageTray: Allow opening the context menu on long press



commit 186bd156ddda3fb9b9bf12c1e44b67b0bc24e222
Author: Adel Gadllah <adel gadllah gmail com>
Date:   Fri Feb 15 16:09:44 2013 +0100

    messageTray: Allow opening the context menu on long press
    
    Right click does not work for touch devices, so support opening the menu
    using long press as well.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=693887

 js/ui/messageTray.js |   49 +++++++++++++++++++++++++++++++------------------
 1 files changed, 31 insertions(+), 18 deletions(-)
---
diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js
index 8af765d..512cb53 100644
--- a/js/ui/messageTray.js
+++ b/js/ui/messageTray.js
@@ -1741,25 +1741,24 @@ const MessageTray = new Lang.Class({
         this._updateNoMessagesLabel();
 
         this._contextMenu = new MessageTrayContextMenu(this);
-        this._grabHelper.addActor(this._contextMenu.actor);
-        this.actor.connect('button-press-event', Lang.bind(this, function(actor, event) {
-            let button = event.get_button();
-            if (button == 3) {
-                let [stageX, stageY] = event.get_coords();
-                this._lock();
-                this._contextMenu.setPosition(Math.round(stageX), Math.round(stageY));
-                this._grabHelper.grab({ actor: this._contextMenu.actor,
-                                        grabFocus: true,
-                                        onUngrab: Lang.bind(this, function () {
-                                            this._unlock();
-                                            this._contextMenu.close();
-                                        })
-                });
-                this._contextMenu.open();
-            }
-            else {
-                this._grabHelper.ungrab({ actor: this._contextMenu.actor });
+
+        let clickAction = new Clutter.ClickAction();
+        this.actor.add_action(clickAction);
+
+        clickAction.connect('clicked', Lang.bind(this, function(action) {
+            let button = action.get_button();
+            if (button == 3)
+                this._openContextMenu();
+        }));
+
+        clickAction.connect('long-press', Lang.bind(this, function(action, actor, state) {
+            switch (state) {
+            case Clutter.LongPressState.QUERY:
+                return true;
+            case Clutter.LongPressState.ACTIVATE:
+                this._openContextMenu();
             }
+            return false;
         }));
 
         this._contextMenu.actor.hide();
@@ -1767,6 +1766,20 @@ const MessageTray = new Lang.Class({
 
     },
 
+    _openContextMenu: function () {
+        let [x, y, mask] = global.get_pointer();
+        this._lock();
+        this._contextMenu.setPosition(Math.round(x), Math.round(y));
+        this._grabHelper.grab({ actor: this._contextMenu.actor,
+                                grabFocus: true,
+                                onUngrab: Lang.bind(this, function () {
+                                    this._contextMenu.close();
+                                    this._unlock();
+                                })
+        });
+        this._contextMenu.open();
+    },
+
     close: function() {
         this._escapeTray();
     },


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