[gnome-settings-daemon/opensuse-moblin: 1/24] Factor out function to get keycodes from keysym names
- From: Federico Mena Quintero <federico src gnome org>
- To: svn-commits-list gnome org
- Cc:
- Subject: [gnome-settings-daemon/opensuse-moblin: 1/24] Factor out function to get keycodes from keysym names
- Date: Thu, 28 Jan 2010 01:46:47 +0000 (UTC)
commit 7de6d8dcec197e3422dd6fdcfb8bc50fb4c1a496
Author: Federico Mena Quintero <federico novell com>
Date: Wed Nov 25 12:56:24 2009 -0600
Factor out function to get keycodes from keysym names
Also, make the 'keycode' field have a better name, 'switch_video_mode_keycode'.
Signed-off-by: Federico Mena Quintero <federico novell com>
plugins/xrandr/gsd-xrandr-manager.c | 40 +++++++++++++++++++++-------------
1 files changed, 25 insertions(+), 15 deletions(-)
---
diff --git a/plugins/xrandr/gsd-xrandr-manager.c b/plugins/xrandr/gsd-xrandr-manager.c
index d278397..672cf99 100644
--- a/plugins/xrandr/gsd-xrandr-manager.c
+++ b/plugins/xrandr/gsd-xrandr-manager.c
@@ -87,8 +87,8 @@ struct GsdXrandrManagerPrivate
{
DBusGConnection *dbus_connection;
- /* Key code of the fn-F7 video key (XF86Display) */
- guint keycode;
+ /* Key code of the XF86Display key (Fn-F7 on Thinkpads, Fn-F4 on HP machines, etc.) */
+ guint switch_video_mode_keycode;
GnomeRRScreen *rw_screen;
gboolean running;
@@ -1004,7 +1004,7 @@ event_filter (GdkXEvent *xevent,
if (xev->xany.type != KeyPress && xev->xany.type != KeyRelease)
return GDK_FILTER_CONTINUE;
- if (xev->xany.type == KeyPress && xev->xkey.keycode == manager->priv->keycode) {
+ if (xev->xany.type == KeyPress && xev->xkey.keycode == manager->priv->switch_video_mode_keycode) {
handle_fn_f7 (manager, xev->xkey.time);
return GDK_FILTER_CONTINUE;
@@ -1917,11 +1917,11 @@ gsd_xrandr_manager_start (GsdXrandrManager *manager,
(GConfClientNotifyFunc)on_config_changed,
manager, NULL, NULL);
- if (manager->priv->keycode) {
+ if (manager->priv->switch_video_mode_keycode) {
gdk_error_trap_push ();
XGrabKey (gdk_x11_get_default_xdisplay(),
- manager->priv->keycode, AnyModifier,
+ manager->priv->switch_video_mode_keycode, AnyModifier,
gdk_x11_get_default_root_xwindow(),
True, GrabModeAsync, GrabModeAsync);
@@ -1950,13 +1950,15 @@ gsd_xrandr_manager_stop (GsdXrandrManager *manager)
manager->priv->running = FALSE;
- gdk_error_trap_push ();
+ if (manager->priv->switch_video_mode_keycode) {
+ gdk_error_trap_push ();
- XUngrabKey (gdk_x11_get_default_xdisplay(),
- manager->priv->keycode, AnyModifier,
- gdk_x11_get_default_root_xwindow());
+ XUngrabKey (gdk_x11_get_default_xdisplay(),
+ manager->priv->switch_video_mode_keycode, AnyModifier,
+ gdk_x11_get_default_root_xwindow());
- gdk_error_trap_pop ();
+ gdk_error_trap_pop ();
+ }
gdk_window_remove_filter (gdk_get_default_root_window (),
(GdkFilterFunc) event_filter,
@@ -2065,16 +2067,24 @@ gsd_xrandr_manager_class_init (GsdXrandrManagerClass *klass)
g_type_class_add_private (klass, sizeof (GsdXrandrManagerPrivate));
}
+static guint
+get_keycode_for_keysym_name (const char *name)
+{
+ Display *dpy;
+ guint keyval;
+
+ dpy = gdk_x11_get_default_xdisplay ();
+
+ keyval = gdk_keyval_from_name (name);
+ return XKeysymToKeycode (dpy, keyval);
+}
+
static void
gsd_xrandr_manager_init (GsdXrandrManager *manager)
{
- Display *dpy = gdk_x11_get_default_xdisplay ();
- guint keyval = gdk_keyval_from_name (VIDEO_KEYSYM);
- guint keycode = XKeysymToKeycode (dpy, keyval);
-
manager->priv = GSD_XRANDR_MANAGER_GET_PRIVATE (manager);
- manager->priv->keycode = keycode;
+ manager->priv->switch_video_mode_keycode = get_keycode_for_keysym_name (VIDEO_KEYSYM);
manager->priv->current_fn_f7_config = -1;
manager->priv->fn_f7_configs = NULL;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]