[gtk+] W32: Fix for commit 1f74f12d9, re-enabling decimal separator key
- From: Руслан Ижбулатов <ruslanizhb src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] W32: Fix for commit 1f74f12d9, re-enabling decimal separator key
- Date: Fri, 26 Feb 2016 17:27:28 +0000 (UTC)
commit 0a6ee5e2cfe365e9ff6d391193edecf511d3a962
Author: Fredy Paquet <fredy opag ch>
Date: Fri Feb 26 17:21:26 2016 +0000
W32: Fix for commit 1f74f12d9, re-enabling decimal separator key
1f74f12d9 rendered entry of keypad decimal mark unuseable for
several national keyboard layouts, this commit amends that, at
least for W32, and makes GTK+ behave more or less the same way
W32 behaves.
The patch works like this:
- When typing the first character at the keyboard or when switching
keyboard layouts, the decimal mark character will be cached in the
static variable "decimal_mark" within gdkkeys-win32.c
- in case of WIN32, gdk_keyval_to_unicode() asks gdkkeys-win32.c for the
current decimal_mark when converting GDK_KEY_KP_Decimal.
https://bugzilla.gnome.org/show_bug.cgi?id=756751
gdk/gdkkeyuni.c | 12 ++++++++++++
gdk/win32/gdkkeys-win32.c | 22 ++++++++++++++++++++--
gdk/win32/gdkprivate-win32.h | 2 ++
3 files changed, 34 insertions(+), 2 deletions(-)
---
diff --git a/gdk/gdkkeyuni.c b/gdk/gdkkeyuni.c
index d770737..4b4431f 100644
--- a/gdk/gdkkeyuni.c
+++ b/gdk/gdkkeyuni.c
@@ -27,6 +27,10 @@
#include "gdkkeys.h"
#include "gdktypes.h"
+#ifdef GDK_WINDOWING_WIN32
+#include "win32/gdkwin32.h"
+#include "win32/gdkprivate-win32.h"
+#endif
/* Thanks to Markus G. Kuhn <mkuhn acm org> for the ksysym<->Unicode
* mapping functions, from the xterm sources.
@@ -899,6 +903,14 @@ gdk_keyval_to_unicode (guint keyval)
if ((keyval & 0xff000000) == 0x01000000)
return keyval & 0x00ffffff;
+#if defined(GDK_WINDOWING_WIN32)
+ if (GDK_IS_WIN32_DISPLAY (gdk_display_get_default ()))
+ {
+ if (keyval == 0xffae)
+ return (guint32) _gdk_win32_keymap_get_decimal_mark ();
+ }
+#endif
+
/* binary search in table */
while (max >= min) {
mid = (min + max) / 2;
diff --git a/gdk/win32/gdkkeys-win32.c b/gdk/win32/gdkkeys-win32.c
index b77edb7..e1ad6cf 100644
--- a/gdk/win32/gdkkeys-win32.c
+++ b/gdk/win32/gdkkeys-win32.c
@@ -64,6 +64,7 @@ static GdkModifierType gdk_shift_modifiers = GDK_SHIFT_MASK;
static GdkKeymap *default_keymap = NULL;
static guint *keysym_tab = NULL;
+static wchar_t decimal_mark = 0;
#define KEY_STATE_SIZE 256
@@ -348,6 +349,18 @@ handle_dead (guint keysym,
}
}
+/* keypad decimal mark depends on active keyboard layout
+ * return current decimal mark as unicode character
+ */
+guint32
+_gdk_win32_keymap_get_decimal_mark (void)
+{
+ if (decimal_mark)
+ return (decimal_mark);
+
+ return ((guint32) '.');
+}
+
static void
update_keymap (void)
{
@@ -401,7 +414,7 @@ update_keymap (void)
*/
handle_special (vk, ksymp, shift);
- if (*ksymp == 0)
+ if ((*ksymp == 0) || ((vk == VK_DECIMAL) && (shift == 0)))
{
wchar_t wcs[10];
gint k;
@@ -415,7 +428,12 @@ update_keymap (void)
vk, scancode, shift, k,
wcs[0], wcs[1]);
#endif
- if (k == 1)
+ if ((vk == VK_DECIMAL) && (shift == 0))
+ {
+ if (k == 1)
+ decimal_mark = wcs[0];
+ }
+ else if (k == 1)
*ksymp = gdk_unicode_to_keyval (wcs[0]);
else if (k == -1)
{
diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
index 292ea5f..fbce80b 100644
--- a/gdk/win32/gdkprivate-win32.h
+++ b/gdk/win32/gdkprivate-win32.h
@@ -533,6 +533,8 @@ gchar *_gdk_win32_display_manager_get_atom_name (GdkDisplayManager *manager,
void _gdk_win32_append_event (GdkEvent *event);
void _gdk_win32_emit_configure_event (GdkWindow *window);
+guint32 _gdk_win32_keymap_get_decimal_mark (void);
+
/* Initialization */
void _gdk_win32_windowing_init (void);
void _gdk_screen_init_root_window (GdkWin32Screen *screen_win32);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]