
This helps take cruft out of the uiGroup, and ensures that components remain stacked properly on top of each other. In the future, we'll use this group to ensure that grabs are ordered properly, as well.
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.menuGroup.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;
|
|
});
|
|
}
|