[Xfce4-commits] [apps/xfce4-screensaver] 78/425: Use GDK to detect caps lock state

noreply at xfce.org noreply at xfce.org
Mon Oct 15 01:48:45 CEST 2018


This is an automated email from the git hooks/post-receive script.

b   l   u   e   s   a   b   r   e       p   u   s   h   e   d       a       c   o   m   m   i   t       t   o       b   r   a   n   c   h       m   a   s   t   e   r   
   in repository apps/xfce4-screensaver.

commit ad6b8532ba50a2655dc34ee9ddf912a6bd943407
Author: Stefano Karapetsas <stefano at karapetsas.com>
Date:   Sat Apr 27 20:05:46 2013 +0200

    Use GDK to detect caps lock state
    
    Close #16 (https://github.com/mate-desktop/mate-screensaver/issues/16)
    
    Code adapted from:
    https://git.gnome.org/browse/gnome-screensaver/commit/?id=d30694d542ebe7db6d254bdfd8c9ba77e4b54df2
    https://git.gnome.org/browse/gnome-screensaver/commit/?id=372b4d024b367d2fa6a868a272fd994745f92fac
---
 src/gs-lock-plug.c | 43 ++++++++++++++++++++++++++-----------------
 1 file changed, 26 insertions(+), 17 deletions(-)

diff --git a/src/gs-lock-plug.c b/src/gs-lock-plug.c
index 2f37e77..6f0b465 100644
--- a/src/gs-lock-plug.c
+++ b/src/gs-lock-plug.c
@@ -35,7 +35,6 @@
 #include <glib/gi18n.h>
 #include <gdk/gdkkeysyms.h>
 #include <gdk/gdkx.h>
-#include <X11/XKBlib.h>
 #include <gtk/gtk.h>
 #include <gio/gio.h>
 
@@ -396,16 +395,17 @@ capslock_update (GSLockPlug *plug,
 static gboolean
 is_capslock_on (void)
 {
-	XkbStateRec states;
-	Display    *dsp;
+	GdkKeymap *keymap;
+	gboolean res;
 
-	dsp = GDK_DISPLAY ();
-	if (XkbGetState (dsp, XkbUseCoreKbd, &states) != Success)
-	{
-		return FALSE;
+	res = FALSE;
+
+	keymap = gdk_keymap_get_default ();
+	if (keymap != NULL) {
+		res = gdk_keymap_get_caps_lock_state (keymap);
 	}
 
-	return (states.locked_mods & LockMask) != 0;
+	return res;
 }
 
 static void
@@ -500,6 +500,13 @@ run_destroy_handler (GSLockPlug *plug,
 	ri->destroyed = TRUE;
 }
 
+static void
+run_keymap_handler (GdkKeymap *keymap,
+                    GSLockPlug *plug)
+{
+	capslock_update (plug, is_capslock_on ());
+}
+
 /* adapted from GTK+ gtkdialog.c */
 int
 gs_lock_plug_run (GSLockPlug *plug)
@@ -510,6 +517,8 @@ gs_lock_plug_run (GSLockPlug *plug)
 	gulong unmap_handler;
 	gulong destroy_handler;
 	gulong delete_handler;
+	gulong keymap_handler;
+	GdkKeymap *keymap;
 
 	g_return_val_if_fail (GS_IS_LOCK_PLUG (plug), -1);
 
@@ -526,6 +535,14 @@ gs_lock_plug_run (GSLockPlug *plug)
 		gtk_widget_show (GTK_WIDGET (plug));
 	}
 
+	keymap = gdk_keymap_get_for_display (gtk_widget_get_display (GTK_WIDGET (plug)));
+
+	keymap_handler =
+	    g_signal_connect (keymap,
+	                      "state-changed",
+	                      G_CALLBACK (run_keymap_handler),
+	                      plug);
+
 	response_handler =
 	    g_signal_connect (plug,
 	                      "response",
@@ -571,6 +588,7 @@ gs_lock_plug_run (GSLockPlug *plug)
 		g_signal_handler_disconnect (plug, unmap_handler);
 		g_signal_handler_disconnect (plug, delete_handler);
 		g_signal_handler_disconnect (plug, destroy_handler);
+		g_signal_handler_disconnect (plug, keymap_handler);
 	}
 
 	g_object_unref (plug);
@@ -1390,17 +1408,8 @@ entry_key_press (GtkWidget   *widget,
                  GdkEventKey *event,
                  GSLockPlug  *plug)
 {
-	gboolean capslock_on;
-
 	restart_cancel_timeout (plug);
 
-	capslock_on = is_capslock_on ();
-
-	if (capslock_on != plug->priv->caps_lock_on)
-	{
-		capslock_update (plug, capslock_on);
-	}
-
 	/* if the input widget is visible and ready for input
 	 * then just carry on as usual
 	 */

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list