Support (fallback) app menu in SSD
We now allow "appmenu" in the button layout to make synchronizing it with GTK+'s client-side decorations easier, but as some people tweak their settings to get in-window app menus even when using the shell, actually pop up the app menu when the button is activated. https://bugzilla.gnome.org/show_bug.cgi?id=730752
This commit is contained in:
parent
38d8e465b3
commit
8811ba2ec0
@ -1163,8 +1163,8 @@ const WindowManager = new Lang.Class({
|
|||||||
this._tilePreview.hide();
|
this._tilePreview.hide();
|
||||||
},
|
},
|
||||||
|
|
||||||
_showWindowMenu: function(shellwm, window, x, y) {
|
_showWindowMenu: function(shellwm, window, menu, x, y) {
|
||||||
this._windowMenuManager.showForWindow(window, x, y);
|
this._windowMenuManager.showWindowMenuForWindow(window, menu, x, y);
|
||||||
},
|
},
|
||||||
|
|
||||||
_startAppSwitcher : function(display, screen, window, binding) {
|
_startAppSwitcher : function(display, screen, window, binding) {
|
||||||
|
@ -9,6 +9,7 @@ const Shell = imports.gi.Shell;
|
|||||||
const BoxPointer = imports.ui.boxpointer;
|
const BoxPointer = imports.ui.boxpointer;
|
||||||
const Main = imports.ui.main;
|
const Main = imports.ui.main;
|
||||||
const PopupMenu = imports.ui.popupMenu;
|
const PopupMenu = imports.ui.popupMenu;
|
||||||
|
const RemoteMenu = imports.ui.remoteMenu;
|
||||||
|
|
||||||
const WindowMenu = new Lang.Class({
|
const WindowMenu = new Lang.Class({
|
||||||
Name: 'WindowMenu',
|
Name: 'WindowMenu',
|
||||||
@ -122,6 +123,22 @@ const WindowMenu = new Lang.Class({
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const AppMenu = new Lang.Class({
|
||||||
|
Name: 'AppMenu',
|
||||||
|
Extends: RemoteMenu.RemoteMenu,
|
||||||
|
|
||||||
|
_init: function(window) {
|
||||||
|
let app = Shell.WindowTracker.get_default().get_window_app(window);
|
||||||
|
|
||||||
|
this.parent(Main.layoutManager.dummyCursor, app.menu, app.action_group);
|
||||||
|
|
||||||
|
this.actor.add_style_class_name('fallback-app-menu');
|
||||||
|
|
||||||
|
Main.layoutManager.uiGroup.add_actor(this.actor);
|
||||||
|
this.actor.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
const WindowMenuManager = new Lang.Class({
|
const WindowMenuManager = new Lang.Class({
|
||||||
Name: 'WindowMenuManager',
|
Name: 'WindowMenuManager',
|
||||||
|
|
||||||
@ -129,8 +146,10 @@ const WindowMenuManager = new Lang.Class({
|
|||||||
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
|
||||||
},
|
},
|
||||||
|
|
||||||
showForWindow: function(window, x, y) {
|
showWindowMenuForWindow: function(window, type, x, y) {
|
||||||
let menu = new WindowMenu(window);
|
let menu = (type == Meta.WindowMenuType.WM) ? new WindowMenu(window)
|
||||||
|
: new AppMenu(window);
|
||||||
|
|
||||||
this._manager.addMenu(menu);
|
this._manager.addMenu(menu);
|
||||||
|
|
||||||
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
|
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
|
||||||
@ -140,5 +159,5 @@ const WindowMenuManager = new Lang.Class({
|
|||||||
if (!isOpen)
|
if (!isOpen)
|
||||||
menu.destroy();
|
menu.destroy();
|
||||||
}));
|
}));
|
||||||
},
|
}
|
||||||
});
|
});
|
||||||
|
@ -73,10 +73,11 @@ static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
|
|||||||
MetaRectangle *tile_rect,
|
MetaRectangle *tile_rect,
|
||||||
int tile_monitor);
|
int tile_monitor);
|
||||||
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
|
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
|
||||||
static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
int x,
|
MetaWindowMenuType menu,
|
||||||
int y);
|
int x,
|
||||||
|
int y);
|
||||||
|
|
||||||
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
|
||||||
XEvent *event);
|
XEvent *event);
|
||||||
@ -308,12 +309,13 @@ gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
int x,
|
MetaWindowMenuType menu,
|
||||||
int y)
|
int x,
|
||||||
|
int y)
|
||||||
{
|
{
|
||||||
_shell_wm_show_window_menu (get_shell_wm (), window, x, y);
|
_shell_wm_show_window_menu (get_shell_wm (), window, menu, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
|
@ -42,6 +42,7 @@ void _shell_wm_show_tile_preview (ShellWM *wm,
|
|||||||
void _shell_wm_hide_tile_preview (ShellWM *wm);
|
void _shell_wm_hide_tile_preview (ShellWM *wm);
|
||||||
void _shell_wm_show_window_menu (ShellWM *wm,
|
void _shell_wm_show_window_menu (ShellWM *wm,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
|
MetaWindowMenuType menu,
|
||||||
int x,
|
int x,
|
||||||
int y);
|
int y);
|
||||||
|
|
||||||
|
@ -141,8 +141,8 @@ shell_wm_class_init (ShellWMClass *klass)
|
|||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
G_SIGNAL_RUN_LAST,
|
G_SIGNAL_RUN_LAST,
|
||||||
0, NULL, NULL, NULL,
|
0, NULL, NULL, NULL,
|
||||||
G_TYPE_NONE, 3,
|
G_TYPE_NONE, 4,
|
||||||
META_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT);
|
META_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
|
||||||
shell_wm_signals[FILTER_KEYBINDING] =
|
shell_wm_signals[FILTER_KEYBINDING] =
|
||||||
g_signal_new ("filter-keybinding",
|
g_signal_new ("filter-keybinding",
|
||||||
G_TYPE_FROM_CLASS (klass),
|
G_TYPE_FROM_CLASS (klass),
|
||||||
@ -297,12 +297,13 @@ _shell_wm_hide_tile_preview (ShellWM *wm)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_shell_wm_show_window_menu (ShellWM *wm,
|
_shell_wm_show_window_menu (ShellWM *wm,
|
||||||
MetaWindow *window,
|
MetaWindow *window,
|
||||||
int x,
|
MetaWindowMenuType menu,
|
||||||
int y)
|
int x,
|
||||||
|
int y)
|
||||||
{
|
{
|
||||||
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, x, y);
|
g_signal_emit (wm, shell_wm_signals[SHOW_WINDOW_MENU], 0, window, menu, x, y);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Loading…
Reference in New Issue
Block a user