kov changed libgksu/branches/libgksu2/libgksuui/ChangeLog, libgksu/branches/libgksu2/libgksuui/gksuui-dialog.c, libgksu/branches/libgksu2/libgksuui/gksuui-dialog.h

Gustavo Noronha kov at costa.debian.org
Wed Jan 25 00:08:28 UTC 2006


Mensagem de log: 
applied patch by Michael Vogt to report that capslock is enabled
with small modifications


-----


Modified: libgksu/branches/libgksu2/libgksuui/ChangeLog
===================================================================
--- libgksu/branches/libgksu2/libgksuui/ChangeLog	2006-01-24 13:06:18 UTC (rev 505)
+++ libgksu/branches/libgksu2/libgksuui/ChangeLog	2006-01-25 00:08:27 UTC (rev 506)
@@ -1,3 +1,9 @@
+2006-01-24  Gustavo Noronha Silva  <kov at debian.org>
+
+	* gksuui-dialog.{c,h}:
+	- applied patch by Michael Vogt to report that capslock is enabled
+	  with small modifications
+
 2006-01-07  Gustavo Noronha Silva  <kov at debian.org>
 
 	* Make it a sub, static library for libgksu only.

Modified: libgksu/branches/libgksu2/libgksuui/gksuui-dialog.c
===================================================================
--- libgksu/branches/libgksu2/libgksuui/gksuui-dialog.c	2006-01-24 13:06:18 UTC (rev 505)
+++ libgksu/branches/libgksu2/libgksuui/gksuui-dialog.c	2006-01-25 00:08:27 UTC (rev 506)
@@ -19,6 +19,8 @@
  */
 
 #include <gtk/gtk.h>
+#include <gdk/gdkx.h>
+#include <X11/XKBlib.h>
 
 #include "defines.h"
 #include "../config.h"
@@ -63,6 +65,36 @@
 {
 }
 
+/** 
+ * Helper that can detect if caps lock is pressed
+ */
+static gboolean
+is_capslock_on (void)
+{
+  XkbStateRec states;
+  Display *dsp;
+
+  dsp = GDK_DISPLAY ();
+  if (XkbGetState (dsp, XkbUseCoreKbd, &states) != Success)
+      return FALSE;
+
+  return (states.locked_mods & LockMask) != 0;
+}
+
+static gboolean
+verify_capslock_cb (GtkWidget *widget, GdkEventKey *event, gpointer user_data)
+{
+   GksuuiDialog *dialog = user_data;
+
+   if (is_capslock_on ()) 
+      gtk_widget_show (dialog->label_warn_capslock);
+   else 
+      gtk_widget_hide (dialog->label_warn_capslock);
+
+   return FALSE;
+}
+
+
 static void
 gksuui_dialog_init (GksuuiDialog *gksuui_dialog)
 {
@@ -152,6 +184,8 @@
   
   /* entry */
   gksuui_dialog->entry = gtk_entry_new();
+  g_signal_connect (G_OBJECT(gksuui_dialog->entry), "key-press-event",
+		    G_CALLBACK(verify_capslock_cb), gksuui_dialog);
   g_signal_connect_swapped (G_OBJECT(gksuui_dialog->entry), "activate",
 			    G_CALLBACK(gtk_button_clicked), 
 			    gksuui_dialog->ok_button);
@@ -162,6 +196,19 @@
   gtk_widget_show (gksuui_dialog->entry);
   gtk_widget_grab_focus(gksuui_dialog->entry);
 
+  /* label capslock warning */
+  gksuui_dialog->label_warn_capslock = gtk_label_new (_("<b>You have capslock on</b>"));
+  gtk_label_set_justify (GTK_LABEL(gksuui_dialog->label_warn_capslock), 
+			 GTK_JUSTIFY_CENTER);
+  gtk_label_set_use_markup (GTK_LABEL(gksuui_dialog->label_warn_capslock), TRUE);
+  gtk_box_pack_start (GTK_BOX(gksuui_dialog->entry_vbox), 
+		      gksuui_dialog->label_warn_capslock, TRUE, TRUE, 0);
+
+  /* expose event */
+  g_signal_connect (G_OBJECT(gksuui_dialog), "focus-in-event",
+		    G_CALLBACK(verify_capslock_cb), gksuui_dialog);
+
+
   gtk_widget_pop_composite_child ();
 }
 

Modified: libgksu/branches/libgksu2/libgksuui/gksuui-dialog.h
===================================================================
--- libgksu/branches/libgksu2/libgksuui/gksuui-dialog.h	2006-01-24 13:06:18 UTC (rev 505)
+++ libgksu/branches/libgksu2/libgksuui/gksuui-dialog.h	2006-01-25 00:08:27 UTC (rev 506)
@@ -64,6 +64,7 @@
   GtkWidget *image;
   GtkWidget *entry_vbox;
   GtkWidget *label;
+  GtkWidget *label_warn_capslock;
   GtkWidget *entry;
   GtkWidget *ok_button;
   GtkWidget *cancel_button;




More information about the gksu-commits mailing list