c8a58dcb69
Right now we have three "dummy cursor" widgets between the background menu, the message tray menu, and the IBus candidate popup. Consolidate these into one "dummy cursor" widget which is tracked in the layout manager.
64 lines
2.1 KiB
JavaScript
64 lines
2.1 KiB
JavaScript
// -*- mode: js; js-indent-level: 4; indent-tabs-mode: nil -*-
|
|
|
|
const Clutter = imports.gi.Clutter;
|
|
const Lang = imports.lang;
|
|
const St = imports.gi.St;
|
|
const Shell = imports.gi.Shell;
|
|
|
|
const BoxPointer = imports.ui.boxpointer;
|
|
const Main = imports.ui.main;
|
|
const PopupMenu = imports.ui.popupMenu;
|
|
|
|
const BackgroundMenu = new Lang.Class({
|
|
Name: 'BackgroundMenu',
|
|
Extends: PopupMenu.PopupMenu,
|
|
|
|
_init: function(layoutManager) {
|
|
this.parent(layoutManager.dummyCursor, 0, St.Side.TOP);
|
|
|
|
this.addSettingsAction(_("Settings"), 'gnome-control-center.desktop');
|
|
this.addMenuItem(new PopupMenu.PopupSeparatorMenuItem());
|
|
this.addSettingsAction(_("Change Background…"), 'gnome-background-panel.desktop');
|
|
|
|
this.actor.add_style_class_name('background-menu');
|
|
|
|
layoutManager.uiGroup.add_actor(this.actor);
|
|
this.actor.hide();
|
|
}
|
|
});
|
|
|
|
function addBackgroundMenu(actor, layoutManager) {
|
|
actor.reactive = true;
|
|
actor._backgroundMenu = new BackgroundMenu(layoutManager);
|
|
actor._backgroundManager = new PopupMenu.PopupMenuManager({ actor: actor });
|
|
actor._backgroundManager.addMenu(actor._backgroundMenu);
|
|
|
|
function openMenu() {
|
|
let [x, y] = global.get_pointer();
|
|
Main.layoutManager.setDummyCursorPosition(x, y);
|
|
actor._backgroundMenu.open(BoxPointer.PopupAnimation.NONE);
|
|
}
|
|
|
|
let clickAction = new Clutter.ClickAction();
|
|
clickAction.connect('long-press', function(action, actor, state) {
|
|
if (state == Clutter.LongPressState.QUERY)
|
|
return action.get_button() == 1 && !actor._backgroundMenu.isOpen;
|
|
if (state == Clutter.LongPressState.ACTIVATE) {
|
|
openMenu();
|
|
actor._backgroundManager.ignoreRelease();
|
|
}
|
|
return true;
|
|
});
|
|
clickAction.connect('clicked', function(action) {
|
|
if (action.get_button() == 3)
|
|
openMenu();
|
|
});
|
|
actor.add_action(clickAction);
|
|
|
|
actor.connect('destroy', function() {
|
|
actor._backgroundMenu.destroy();
|
|
actor._backgroundMenu = null;
|
|
actor._backgroundManager = null;
|
|
});
|
|
}
|