[maemo-commits] [maemo-commits] r13919 - in projects/haf/trunk/hildon-input-method-framework: . src

From: subversion at stage.maemo.org subversion at stage.maemo.org
Date: Wed Sep 19 17:15:07 EEST 2007
Author: tjunnone
Date: 2007-09-19 17:15:05 +0300 (Wed, 19 Sep 2007)
New Revision: 13919

Modified:
   projects/haf/trunk/hildon-input-method-framework/ChangeLog
   projects/haf/trunk/hildon-input-method-framework/src/hildon-im-context.c
Log:
* src/hildon-im-context.c:
- Enable sticky shift for non-printable keys. Fixes NB#70297.


Modified: projects/haf/trunk/hildon-input-method-framework/ChangeLog
===================================================================
--- projects/haf/trunk/hildon-input-method-framework/ChangeLog	2007-09-19 13:39:44 UTC (rev 13918)
+++ projects/haf/trunk/hildon-input-method-framework/ChangeLog	2007-09-19 14:15:05 UTC (rev 13919)
@@ -1,7 +1,8 @@
 2007-09-19  Tomas Junnonen  <tomas.junnonen at nokia.com>
 
-	* src/hildon-im-context.c: Exclude return from changing the focus.
-	  Fixes NB#69697.
+	* src/hildon-im-context.c:
+	- Exclude return from changing the focus. Fixes NB#69697.
+	- Enable sticky shift for non-printable keys. Fixes NB#70297.
 
 2007-09-12  Tomas Junnonen  <tomas.junnonen at nokia.com>
 

Modified: projects/haf/trunk/hildon-input-method-framework/src/hildon-im-context.c
===================================================================
--- projects/haf/trunk/hildon-input-method-framework/src/hildon-im-context.c	2007-09-19 13:39:44 UTC (rev 13918)
+++ projects/haf/trunk/hildon-input-method-framework/src/hildon-im-context.c	2007-09-19 14:15:05 UTC (rev 13919)
@@ -1529,13 +1529,30 @@
   {
     event->keyval = gdk_keyval_to_upper(event->keyval);
   }
-  /* Sticky shift negates the case, autocap included */
   else if (self->mask & HILDON_IM_SHIFT_STICKY_MASK)
   {
-    if (gdk_keyval_is_upper(event->keyval))
-      event->keyval = gdk_keyval_to_lower(event->keyval);
+    guint lower, upper;
+
+    gdk_keyval_convert_case(event->keyval, &lower, &upper);
+    /* Simulate shift key being held down in sticky state for non-printables  */
+    if (lower == upper)
+    {
+      gdk_keymap_translate_keyboard_state(gdk_keymap_get_default(),
+                                          event->hardware_keycode,
+                                          GDK_SHIFT_MASK,
+                                          event->group,
+                                          &event->keyval,
+                                          NULL, NULL, NULL);
+    }
+    /* For printable characters sticky shift negates the case,
+       including any autocapitalization changes */
     else
-      event->keyval = gdk_keyval_to_upper(event->keyval);
+    {
+      if (gdk_keyval_is_upper(event->keyval))
+        event->keyval = lower;
+      else
+        event->keyval = upper;
+    }
   }
 
   /* Sticky and lock state reset */


More information about the maemo-commits mailing list