[gnome-shell] Support (fallback) app menu in SSD
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Support (fallback) app menu in SSD
- Date: Tue, 27 May 2014 17:51:51 +0000 (UTC)
commit 8811ba2ec033fb52547fbcd14eb3fefc153c90fa
Author: Florian Müllner <fmuellner gnome org>
Date: Sat May 24 03:32:44 2014 +0200
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
js/ui/windowManager.js | 4 ++--
js/ui/windowMenu.js | 25 ++++++++++++++++++++++---
src/gnome-shell-plugin.c | 20 +++++++++++---------
src/shell-wm-private.h | 1 +
src/shell-wm.c | 15 ++++++++-------
5 files changed, 44 insertions(+), 21 deletions(-)
---
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 8121dc0..401db75 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -1163,8 +1163,8 @@ const WindowManager = new Lang.Class({
this._tilePreview.hide();
},
- _showWindowMenu: function(shellwm, window, x, y) {
- this._windowMenuManager.showForWindow(window, x, y);
+ _showWindowMenu: function(shellwm, window, menu, x, y) {
+ this._windowMenuManager.showWindowMenuForWindow(window, menu, x, y);
},
_startAppSwitcher : function(display, screen, window, binding) {
diff --git a/js/ui/windowMenu.js b/js/ui/windowMenu.js
index 3dc85c6..c6dc729 100644
--- a/js/ui/windowMenu.js
+++ b/js/ui/windowMenu.js
@@ -9,6 +9,7 @@ const Shell = imports.gi.Shell;
const BoxPointer = imports.ui.boxpointer;
const Main = imports.ui.main;
const PopupMenu = imports.ui.popupMenu;
+const RemoteMenu = imports.ui.remoteMenu;
const WindowMenu = new Lang.Class({
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({
Name: 'WindowMenuManager',
@@ -129,8 +146,10 @@ const WindowMenuManager = new Lang.Class({
this._manager = new PopupMenu.PopupMenuManager({ actor: Main.layoutManager.dummyCursor });
},
- showForWindow: function(window, x, y) {
- let menu = new WindowMenu(window);
+ showWindowMenuForWindow: function(window, type, x, y) {
+ let menu = (type == Meta.WindowMenuType.WM) ? new WindowMenu(window)
+ : new AppMenu(window);
+
this._manager.addMenu(menu);
Main.layoutManager.setDummyCursorGeometry(x, y, 0, 0);
@@ -140,5 +159,5 @@ const WindowMenuManager = new Lang.Class({
if (!isOpen)
menu.destroy();
}));
- },
+ }
});
diff --git a/src/gnome-shell-plugin.c b/src/gnome-shell-plugin.c
index 618a068..4b78870 100644
--- a/src/gnome-shell-plugin.c
+++ b/src/gnome-shell-plugin.c
@@ -73,10 +73,11 @@ static void gnome_shell_plugin_show_tile_preview (MetaPlugin *plugin,
MetaRectangle *tile_rect,
int tile_monitor);
static void gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin);
-static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
- MetaWindow *window,
- int x,
- int y);
+static void gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
+ MetaWindow *window,
+ MetaWindowMenuType menu,
+ int x,
+ int y);
static gboolean gnome_shell_plugin_xevent_filter (MetaPlugin *plugin,
XEvent *event);
@@ -308,12 +309,13 @@ gnome_shell_plugin_hide_tile_preview (MetaPlugin *plugin)
}
static void
-gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
- MetaWindow *window,
- int x,
- int y)
+gnome_shell_plugin_show_window_menu (MetaPlugin *plugin,
+ MetaWindow *window,
+ MetaWindowMenuType menu,
+ 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
diff --git a/src/shell-wm-private.h b/src/shell-wm-private.h
index d5c02e5..c7068ef 100644
--- a/src/shell-wm-private.h
+++ b/src/shell-wm-private.h
@@ -42,6 +42,7 @@ void _shell_wm_show_tile_preview (ShellWM *wm,
void _shell_wm_hide_tile_preview (ShellWM *wm);
void _shell_wm_show_window_menu (ShellWM *wm,
MetaWindow *window,
+ MetaWindowMenuType menu,
int x,
int y);
diff --git a/src/shell-wm.c b/src/shell-wm.c
index 50ecb7e..928f5f1 100644
--- a/src/shell-wm.c
+++ b/src/shell-wm.c
@@ -141,8 +141,8 @@ shell_wm_class_init (ShellWMClass *klass)
G_TYPE_FROM_CLASS (klass),
G_SIGNAL_RUN_LAST,
0, NULL, NULL, NULL,
- G_TYPE_NONE, 3,
- META_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT);
+ G_TYPE_NONE, 4,
+ META_TYPE_WINDOW, G_TYPE_INT, G_TYPE_INT, G_TYPE_INT);
shell_wm_signals[FILTER_KEYBINDING] =
g_signal_new ("filter-keybinding",
G_TYPE_FROM_CLASS (klass),
@@ -297,12 +297,13 @@ _shell_wm_hide_tile_preview (ShellWM *wm)
}
void
-_shell_wm_show_window_menu (ShellWM *wm,
- MetaWindow *window,
- int x,
- int y)
+_shell_wm_show_window_menu (ShellWM *wm,
+ MetaWindow *window,
+ MetaWindowMenuType menu,
+ 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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]