diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index 8af765dfc..512cb53ad 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(); },