[gnome-settings-daemon] media-keys: Pass appropriate GrabModes to grab_accelerator()
- From: Florian Müllner <fmuellner src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon] media-keys: Pass appropriate GrabModes to grab_accelerator()
- Date: Fri, 1 Mar 2013 16:11:34 +0000 (UTC)
commit 1c9ded7b9dad1e5b5b6f62b2e78c221e99dc5eb1
Author: Florian Müllner <fmuellner gnome org>
Date: Mon Dec 3 00:04:46 2012 +0100
media-keys: Pass appropriate GrabModes to grab_accelerator()
Not every keybinding is useful at any moment, for instance it does
not make sense to launch the calculator from the lock screen. The
shell API allows to enable keybindings selectively, make use of that
by passing appropriate mode flags for each keybinding.
https://bugzilla.gnome.org/show_bug.cgi?id=693016
plugins/media-keys/Makefile.am | 1 +
plugins/media-keys/gsd-media-keys-manager.c | 7 +-
plugins/media-keys/shell-keybinding-modes.h | 35 ++++++++
plugins/media-keys/shortcuts-list.h | 124 ++++++++++++++-------------
4 files changed, 107 insertions(+), 60 deletions(-)
---
diff --git a/plugins/media-keys/Makefile.am b/plugins/media-keys/Makefile.am
index 62a5a55..a8d70ad 100644
--- a/plugins/media-keys/Makefile.am
+++ b/plugins/media-keys/Makefile.am
@@ -38,6 +38,7 @@ libmedia_keys_la_SOURCES = \
gsd-screenshot-utils.h \
gsd-screenshot-utils.c \
shortcuts-list.h \
+ shell-keybinding-modes.h \
$(BUILT_SOURCES) \
$(NULL)
diff --git a/plugins/media-keys/gsd-media-keys-manager.c b/plugins/media-keys/gsd-media-keys-manager.c
index 28a9f6d..22147db 100644
--- a/plugins/media-keys/gsd-media-keys-manager.c
+++ b/plugins/media-keys/gsd-media-keys-manager.c
@@ -124,6 +124,7 @@ typedef struct {
typedef struct {
MediaKeyType key_type;
+ ShellKeyBindingMode modes;
const char *settings_key;
const char *hard_coded;
char *custom_path;
@@ -443,7 +444,7 @@ grab_media_keys (GsdMediaKeysManager *manager)
key = g_ptr_array_index (manager->priv->keys, i);
tmp = get_key_string (manager, key);
- g_variant_builder_add (&builder, "(su)", tmp, ~0);
+ g_variant_builder_add (&builder, "(su)", tmp, key->modes);
g_free (tmp);
}
@@ -487,7 +488,7 @@ grab_media_key (MediaKey *key,
ensure_grab_cancellable (manager);
shell_key_grabber_call_grab_accelerator (manager->priv->key_grabber,
- tmp, ~0,
+ tmp, key->modes,
manager->priv->grab_cancellable,
grab_accelerator_complete,
data);
@@ -582,6 +583,7 @@ media_key_new_for_path (GsdMediaKeysManager *manager,
key = g_new0 (MediaKey, 1);
key->key_type = CUSTOM_KEY;
+ key->modes = GSD_KEYBINDING_MODE_LAUNCHER;
key->custom_path = g_strdup (path);
key->custom_command = command;
@@ -684,6 +686,7 @@ add_key (GsdMediaKeysManager *manager, guint i)
key->key_type = media_keys[i].key_type;
key->settings_key = media_keys[i].settings_key;
key->hard_coded = media_keys[i].hard_coded;
+ key->modes = media_keys[i].modes;
g_ptr_array_add (manager->priv->keys, key);
}
diff --git a/plugins/media-keys/shell-keybinding-modes.h b/plugins/media-keys/shell-keybinding-modes.h
new file mode 100644
index 0000000..e02429a
--- /dev/null
+++ b/plugins/media-keys/shell-keybinding-modes.h
@@ -0,0 +1,35 @@
+/**
+ * ShellKeyBindingMode:
+ * @SHELL_KEYBINDING_MODE_NONE: block keybinding
+ * @SHELL_KEYBINDING_MODE_NORMAL: allow keybinding when in window mode,
+ * e.g. when the focus is in an application window
+ * @SHELL_KEYBINDING_MODE_OVERVIEW: allow keybinding while the overview
+ * is active
+ * @SHELL_KEYBINDING_MODE_LOCK_SCREEN: allow keybinding when the screen
+ * is locked, e.g. when the screen shield is shown
+ * @SHELL_KEYBINDING_MODE_UNLOCK_SCREEN: allow keybinding in the unlock
+ * dialog
+ * @SHELL_KEYBINDING_MODE_LOGIN_SCREEN: allow keybinding in the login screen
+ * @SHELL_KEYBINDING_MODE_MESSAGE_TRAY: allow keybinding while the message
+ * tray is popped up
+ * @SHELL_KEYBINDING_MODE_SYSTEM_MODAL: allow keybinding when a system modal
+ * dialog (e.g. authentification or session dialogs) is open
+ * @SHELL_KEYBINDING_MODE_LOOKING_GLASS: allow keybinding in looking glass
+ * @SHELL_KEYBINDING_MODE_ALL: always allow keybinding
+ *
+ * Controls in which GNOME Shell states a keybinding should be handled.
+*/
+typedef enum {
+ SHELL_KEYBINDING_MODE_NONE = 0,
+ SHELL_KEYBINDING_MODE_NORMAL = 1 << 0,
+ SHELL_KEYBINDING_MODE_OVERVIEW = 1 << 1,
+ SHELL_KEYBINDING_MODE_LOCK_SCREEN = 1 << 2,
+ SHELL_KEYBINDING_MODE_UNLOCK_SCREEN = 1 << 3,
+ SHELL_KEYBINDING_MODE_LOGIN_SCREEN = 1 << 4,
+ SHELL_KEYBINDING_MODE_MESSAGE_TRAY = 1 << 5,
+ SHELL_KEYBINDING_MODE_SYSTEM_MODAL = 1 << 6,
+ SHELL_KEYBINDING_MODE_LOOKING_GLASS = 1 << 7,
+
+ SHELL_KEYBINDING_MODE_ALL = ~SHELL_KEYBINDING_MODE_NONE
+} ShellKeyBindingMode;
+
diff --git a/plugins/media-keys/shortcuts-list.h b/plugins/media-keys/shortcuts-list.h
index cfced5b..22cf75c 100644
--- a/plugins/media-keys/shortcuts-list.h
+++ b/plugins/media-keys/shortcuts-list.h
@@ -21,7 +21,7 @@
#ifndef __ACME_H__
#define __ACME_H__
-#include "gsd-keygrab.h"
+#include "shell-keybinding-modes.h"
#define SETTINGS_BINDING_DIR "org.gnome.settings-daemon.plugins.media-keys"
@@ -84,72 +84,80 @@ typedef enum {
CUSTOM_KEY
} MediaKeyType;
+
+#define GSD_KEYBINDING_MODE_LAUNCHER (SHELL_KEYBINDING_MODE_NORMAL | \
+ SHELL_KEYBINDING_MODE_OVERVIEW)
+#define SCREENSAVER_MODE SHELL_KEYBINDING_MODE_ALL & ~SHELL_KEYBINDING_MODE_UNLOCK_SCREEN
+
static struct {
MediaKeyType key_type;
const char *settings_key;
const char *key_name;
const char *hard_coded;
+ ShellKeyBindingMode modes;
} media_keys[] = {
- { TOUCHPAD_KEY, NULL, N_("Touchpad toggle"), "XF86TouchpadToggle" },
- { TOUCHPAD_ON_KEY, NULL, N_("Touchpad On"), "XF86TouchpadOn" },
- { TOUCHPAD_OFF_KEY, NULL, N_("Touchpad Off"), "XF86TouchpadOff" },
- { MUTE_KEY, "volume-mute", NULL, NULL },
- { VOLUME_DOWN_KEY, "volume-down", NULL, NULL },
- { VOLUME_UP_KEY, "volume-up", NULL, NULL },
- { MIC_MUTE_KEY, NULL, N_("Microphone Mute"), "F20" },
- { MUTE_QUIET_KEY, NULL, N_("Quiet Volume Mute"), "<Alt>XF86AudioMute" },
- { VOLUME_DOWN_QUIET_KEY, NULL, N_("Quiet Volume Down"), "<Alt>XF86AudioLowerVolume" },
- { VOLUME_UP_QUIET_KEY, NULL, N_("Quiet Volume Up"), "<Alt>XF86AudioRaiseVolume" },
- { LOGOUT_KEY, "logout", NULL },
- { EJECT_KEY, "eject", NULL },
- { HOME_KEY, "home", NULL },
- { MEDIA_KEY, "media", NULL },
- { CALCULATOR_KEY, "calculator", NULL },
- { SEARCH_KEY, "search", NULL },
- { EMAIL_KEY, "email", NULL },
- { SCREENSAVER_KEY, "screensaver", NULL },
- { SCREENSAVER_KEY, NULL, N_("Lock Screen"), "XF86ScreenSaver" },
- { HELP_KEY, "help", NULL },
- { SCREENSHOT_KEY, "screenshot", NULL },
- { WINDOW_SCREENSHOT_KEY, "window-screenshot", NULL },
- { AREA_SCREENSHOT_KEY, "area-screenshot", NULL },
- { SCREENSHOT_CLIP_KEY, "screenshot-clip", NULL },
- { WINDOW_SCREENSHOT_CLIP_KEY, "window-screenshot-clip", NULL },
- { AREA_SCREENSHOT_CLIP_KEY, "area-screenshot-clip", NULL },
- { WWW_KEY, "www", NULL },
- { PLAY_KEY, "play", NULL },
- { PAUSE_KEY, "pause", NULL },
- { STOP_KEY, "stop", NULL },
- { PREVIOUS_KEY, "previous", NULL },
- { NEXT_KEY, "next", NULL },
- { REWIND_KEY, NULL, N_("Rewind"), "XF86AudioRewind" },
- { FORWARD_KEY, NULL, N_("Forward"), "XF86AudioForward" },
- { REPEAT_KEY, NULL, N_("Repeat"), "XF86AudioRepeat" },
- { RANDOM_KEY, NULL, N_("Random Play"), "XF86AudioRandomPlay"},
- { VIDEO_OUT_KEY, NULL, N_("Video Out"), "<Super>p" },
+ { TOUCHPAD_KEY, NULL, N_("Touchpad toggle") ,"XF86TouchpadToggle", SHELL_KEYBINDING_MODE_ALL },
+ { TOUCHPAD_ON_KEY, NULL, N_("Touchpad On"), "XF86TouchpadOn", SHELL_KEYBINDING_MODE_ALL },
+ { TOUCHPAD_OFF_KEY, NULL, N_("Touchpad Off"), "XF86TouchpadOff", SHELL_KEYBINDING_MODE_ALL },
+ { MUTE_KEY, "volume-mute", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { VOLUME_DOWN_KEY, "volume-down", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { VOLUME_UP_KEY, "volume-up", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { MIC_MUTE_KEY, NULL, N_("Microphone Mute"), "F20", SHELL_KEYBINDING_MODE_ALL },
+ { MUTE_QUIET_KEY, NULL, N_("Quiet Volume Mute"), "<Alt>XF86AudioMute", SHELL_KEYBINDING_MODE_ALL },
+ { VOLUME_DOWN_QUIET_KEY, NULL, N_("Quiet Volume Down"), "<Alt>XF86AudioLowerVolume",
SHELL_KEYBINDING_MODE_ALL },
+ { VOLUME_UP_QUIET_KEY, NULL, N_("Quiet Volume Up"), "<Alt>XF86AudioRaiseVolume",
SHELL_KEYBINDING_MODE_ALL },
+ { LOGOUT_KEY, "logout", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { EJECT_KEY, "eject", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { HOME_KEY, "home", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { MEDIA_KEY, "media", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { CALCULATOR_KEY, "calculator", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { SEARCH_KEY, "search", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { EMAIL_KEY, "email", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { SCREENSAVER_KEY, "screensaver", NULL, NULL, SCREENSAVER_MODE },
+ { SCREENSAVER_KEY, NULL, N_("Lock Screen"), "XF86ScreenSaver", SCREENSAVER_MODE },
+ { HELP_KEY, "help", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { SCREENSHOT_KEY, "screenshot", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { WINDOW_SCREENSHOT_KEY, "window-screenshot", NULL, NULL, SHELL_KEYBINDING_MODE_NORMAL },
+ { AREA_SCREENSHOT_KEY, "area-screenshot", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { SCREENSHOT_CLIP_KEY, "screenshot-clip", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { WINDOW_SCREENSHOT_CLIP_KEY, "window-screenshot-clip", NULL, NULL, SHELL_KEYBINDING_MODE_NORMAL },
+ { AREA_SCREENSHOT_CLIP_KEY, "area-screenshot-clip", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { WWW_KEY, "www", NULL, NULL, GSD_KEYBINDING_MODE_LAUNCHER },
+ { PLAY_KEY, "play", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { PAUSE_KEY, "pause", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { STOP_KEY, "stop", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { PREVIOUS_KEY, "previous", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { NEXT_KEY, "next", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { REWIND_KEY, NULL, N_("Rewind"), "XF86AudioRewind", SHELL_KEYBINDING_MODE_ALL },
+ { FORWARD_KEY, NULL, N_("Forward"), "XF86AudioForward", SHELL_KEYBINDING_MODE_ALL },
+ { REPEAT_KEY, NULL, N_("Repeat"), "XF86AudioRepeat", SHELL_KEYBINDING_MODE_ALL },
+ { RANDOM_KEY, NULL, N_("Random Play"), "XF86AudioRandomPlay", SHELL_KEYBINDING_MODE_ALL },
+ { VIDEO_OUT_KEY, NULL, N_("Video Out"), "<Super>p", SHELL_KEYBINDING_MODE_ALL },
/* Key code of the XF86Display key (Fn-F7 on Thinkpads, Fn-F4 on HP machines, etc.) */
- { VIDEO_OUT_KEY, NULL, N_("Video Out"), "XF86Display" },
+ { VIDEO_OUT_KEY, NULL, N_("Video Out"), "XF86Display", SHELL_KEYBINDING_MODE_ALL },
/* Key code of the XF86RotateWindows key (present on some tablets) */
- { ROTATE_VIDEO_KEY, NULL, N_("Rotate Screen"), "XF86RotateWindows" },
- { MAGNIFIER_KEY, "magnifier", NULL },
- { SCREENREADER_KEY, "screenreader", NULL },
- { ON_SCREEN_KEYBOARD_KEY, "on-screen-keyboard", NULL },
- { INCREASE_TEXT_KEY, "increase-text-size", NULL },
- { DECREASE_TEXT_KEY, "decrease-text-size", NULL },
- { TOGGLE_CONTRAST_KEY, "toggle-contrast", NULL },
- { MAGNIFIER_ZOOM_IN_KEY, "magnifier-zoom-in", NULL },
- { MAGNIFIER_ZOOM_OUT_KEY, "magnifier-zoom-out", NULL },
- { POWER_KEY, NULL, N_("Power Off"), "XF86PowerOff" },
+ { ROTATE_VIDEO_KEY, NULL, N_("Rotate Screen"), "XF86RotateWindows", SHELL_KEYBINDING_MODE_NORMAL },
+ { MAGNIFIER_KEY, "magnifier", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { SCREENREADER_KEY, "screenreader", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { ON_SCREEN_KEYBOARD_KEY, "on-screen-keyboard", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { INCREASE_TEXT_KEY, "increase-text-size", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { DECREASE_TEXT_KEY, "decrease-text-size", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { TOGGLE_CONTRAST_KEY, "toggle-contrast", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { MAGNIFIER_ZOOM_IN_KEY, "magnifier-zoom-in", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { MAGNIFIER_ZOOM_OUT_KEY, "magnifier-zoom-out", NULL, NULL, SHELL_KEYBINDING_MODE_ALL },
+ { POWER_KEY, NULL, N_("Power Off"), "XF86PowerOff", GSD_KEYBINDING_MODE_LAUNCHER },
/* the kernel / Xorg names really are like this... */
- { SLEEP_KEY, NULL, N_("Sleep"), "XF86Suspend" },
- { SUSPEND_KEY, NULL, N_("Suspend"), "XF86Sleep" },
- { HIBERNATE_KEY, NULL, N_("Hibernate"), "XF86Hibernate" },
- { SCREEN_BRIGHTNESS_UP_KEY, NULL, N_("Brightness Up"), "XF86MonBrightnessUp" },
- { SCREEN_BRIGHTNESS_DOWN_KEY, NULL, N_("Brightness Down"), "XF86MonBrightnessDown" },
- { KEYBOARD_BRIGHTNESS_UP_KEY, NULL, N_("Keyboard Brightness Up"), "XF86KbdBrightnessUp" },
- { KEYBOARD_BRIGHTNESS_DOWN_KEY, NULL, N_("Keyboard Brightness Down"), "XF86KbdBrightnessDown" },
- { KEYBOARD_BRIGHTNESS_TOGGLE_KEY, NULL, N_("Keyboard Brightness Toggle"), "XF86KbdLightOnOff" },
- { BATTERY_KEY, NULL, N_("Battery Status"), "XF86Battery" },
+ { SLEEP_KEY, NULL, N_("Sleep"), "XF86Suspend", SHELL_KEYBINDING_MODE_ALL },
+ { SUSPEND_KEY, NULL, N_("Suspend"), "XF86Sleep", SHELL_KEYBINDING_MODE_ALL },
+ { HIBERNATE_KEY, NULL, N_("Hibernate"), "XF86Hibernate", SHELL_KEYBINDING_MODE_ALL },
+ { SCREEN_BRIGHTNESS_UP_KEY, NULL, N_("Brightness Up"), "XF86MonBrightnessUp",
SHELL_KEYBINDING_MODE_ALL },
+ { SCREEN_BRIGHTNESS_DOWN_KEY, NULL, N_("Brightness Down"), "XF86MonBrightnessDown",
SHELL_KEYBINDING_MODE_ALL },
+ { KEYBOARD_BRIGHTNESS_UP_KEY, NULL, N_("Keyboard Brightness Up"), "XF86KbdBrightnessUp",
SHELL_KEYBINDING_MODE_ALL },
+ { KEYBOARD_BRIGHTNESS_DOWN_KEY, NULL, N_("Keyboard Brightness Down"), "XF86KbdBrightnessDown",
SHELL_KEYBINDING_MODE_ALL },
+ { KEYBOARD_BRIGHTNESS_TOGGLE_KEY, NULL, N_("Keyboard Brightness Toggle"), "XF86KbdLightOnOff",
SHELL_KEYBINDING_MODE_ALL },
+ { BATTERY_KEY, NULL, N_("Battery Status"), "XF86Battery", GSD_KEYBINDING_MODE_LAUNCHER },
};
+#undef SCREENSAVER_MODE
+
#endif /* __ACME_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]