backgroundMenu: Allow for long presses on touch devices
These don't have a button set. Also, popup the menu relative to gesture reported coordinates, and not relative to the pointer position everytime. https://bugzilla.gnome.org/show_bug.cgi?id=733633
This commit is contained in:
parent
e545ec59b9
commit
acb1497f4f
@ -33,8 +33,7 @@ function addBackgroundMenu(actor, layoutManager) {
|
|||||||
actor._backgroundManager = new PopupMenu.PopupMenuManager({ actor: actor });
|
actor._backgroundManager = new PopupMenu.PopupMenuManager({ actor: actor });
|
||||||
actor._backgroundManager.addMenu(actor._backgroundMenu);
|
actor._backgroundManager.addMenu(actor._backgroundMenu);
|
||||||
|
|
||||||
function openMenu() {
|
function openMenu(x, y) {
|
||||||
let [x, y] = global.get_pointer();
|
|
||||||
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
|
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
|
||||||
actor._backgroundMenu.open(BoxPointer.PopupAnimation.NONE);
|
actor._backgroundMenu.open(BoxPointer.PopupAnimation.NONE);
|
||||||
}
|
}
|
||||||
@ -42,16 +41,21 @@ function addBackgroundMenu(actor, layoutManager) {
|
|||||||
let clickAction = new Clutter.ClickAction();
|
let clickAction = new Clutter.ClickAction();
|
||||||
clickAction.connect('long-press', function(action, actor, state) {
|
clickAction.connect('long-press', function(action, actor, state) {
|
||||||
if (state == Clutter.LongPressState.QUERY)
|
if (state == Clutter.LongPressState.QUERY)
|
||||||
return action.get_button() == 1 && !actor._backgroundMenu.isOpen;
|
return ((action.get_button() == 0 ||
|
||||||
|
action.get_button() == 1) &&
|
||||||
|
!actor._backgroundMenu.isOpen);
|
||||||
if (state == Clutter.LongPressState.ACTIVATE) {
|
if (state == Clutter.LongPressState.ACTIVATE) {
|
||||||
openMenu();
|
let [x, y] = action.get_coords();
|
||||||
|
openMenu(x, y);
|
||||||
actor._backgroundManager.ignoreRelease();
|
actor._backgroundManager.ignoreRelease();
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
clickAction.connect('clicked', function(action) {
|
clickAction.connect('clicked', function(action) {
|
||||||
if (action.get_button() == 3)
|
if (action.get_button() == 3) {
|
||||||
openMenu();
|
let [x, y] = action.get_coords();
|
||||||
|
openMenu(x, y);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
actor.add_action(clickAction);
|
actor.add_action(clickAction);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user