[gtk/wip/otte/win32-cleanup: 8/11] win32: Clean up keymap code
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/win32-cleanup: 8/11] win32: Clean up keymap code
- Date: Fri, 23 Jul 2021 03:11:48 +0000 (UTC)
commit 14acf545168922555a51decaa9b3f50c221dd1df
Author: Benjamin Otte <otte redhat com>
Date: Wed Jul 21 05:23:15 2021 +0200
win32: Clean up keymap code
1. Store the keymap in the display
2. Don't pretend that a different keymap might be passed
gdk/win32/gdkdisplay-win32.c | 17 +++++--
gdk/win32/gdkdisplay-win32.h | 1 +
gdk/win32/gdkevents-win32.c | 10 ++--
gdk/win32/gdkkeys-win32.c | 107 ++++++++++---------------------------------
gdk/win32/gdkprivate-win32.h | 3 --
5 files changed, 44 insertions(+), 94 deletions(-)
---
diff --git a/gdk/win32/gdkdisplay-win32.c b/gdk/win32/gdkdisplay-win32.c
index 86e39938a6..66d4f291c8 100644
--- a/gdk/win32/gdkdisplay-win32.c
+++ b/gdk/win32/gdkdisplay-win32.c
@@ -519,7 +519,6 @@ _gdk_win32_display_open (const char *display_name)
gdk_win32_display_init_monitors (win32_display);
- _gdk_win32_keymap_set_active_layout (GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (display)),
_gdk_input_locale);
_gdk_events_init (display);
_gdk_input_ignore_core = 0;
@@ -529,7 +528,9 @@ _gdk_win32_display_open (const char *display_name)
_gdk_win32_lang_notification_init ();
_gdk_drag_init ();
_gdk_drop_init ();
-
+
+ win32_display->keymap = g_object_new (GDK_TYPE_WIN32_KEYMAP, NULL);
+ _gdk_win32_keymap_set_active_layout (win32_display->keymap, _gdk_input_locale);
display->clipboard = gdk_win32_clipboard_new (display);
display->primary_clipboard = gdk_clipboard_new (display);
@@ -680,6 +681,7 @@ gdk_win32_display_finalize (GObject *object)
g_list_store_remove_all (G_LIST_STORE (display_win32->monitors));
g_object_unref (display_win32->monitors);
+ g_object_unref (display_win32->keymap);
while (display_win32->filters)
_gdk_win32_message_filter_unref (display_win32, display_win32->filters->data);
@@ -1054,6 +1056,14 @@ gdk_win32_display_get_monitors (GdkDisplay *display)
return self->monitors;
}
+static GdkKeymap *
+gdk_win32_display_get_keymap (GdkDisplay *display)
+{
+ GdkWin32Display *self = GDK_WIN32_DISPLAY (display);
+
+ return self->keymap;
+}
+
guint
gdk_win32_display_get_monitor_scale_factor (GdkWin32Display *display_win32,
GdkSurface *surface,
@@ -1240,8 +1250,7 @@ gdk_win32_display_class_init (GdkWin32DisplayClass *klass)
display_class->notify_startup_complete = gdk_win32_display_notify_startup_complete;
display_class->create_surface = _gdk_win32_display_create_surface;
- display_class->get_keymap = _gdk_win32_display_get_keymap;
-
+ display_class->get_keymap = gdk_win32_display_get_keymap;
display_class->get_monitors = gdk_win32_display_get_monitors;
#ifdef GDK_RENDERING_VULKAN
diff --git a/gdk/win32/gdkdisplay-win32.h b/gdk/win32/gdkdisplay-win32.h
index fc6699fc00..3839dd0b7e 100644
--- a/gdk/win32/gdkdisplay-win32.h
+++ b/gdk/win32/gdkdisplay-win32.h
@@ -137,6 +137,7 @@ struct _GdkWin32Display
HDC hdc_egl_temp;
#endif
+ GdkKeymap *keymap;
GListModel *monitors;
guint hasWglARBCreateContext : 1;
diff --git a/gdk/win32/gdkevents-win32.c b/gdk/win32/gdkevents-win32.c
index b951b8025f..2b8a6876a5 100644
--- a/gdk/win32/gdkevents-win32.c
+++ b/gdk/win32/gdkevents-win32.c
@@ -645,7 +645,7 @@ build_key_event_state (GdkDisplay *display,
if (key_state[VK_XBUTTON2] & 0x80)
state |= GDK_BUTTON5_MASK;
- keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (display));
+ keymap = GDK_WIN32_KEYMAP (gdk_display_get_keymap (display));
if (_gdk_win32_keymap_has_altgr (keymap) &&
(key_state[VK_LCONTROL] & 0x80) &&
@@ -673,7 +673,7 @@ get_active_group (GdkDisplay *display)
{
GdkWin32Keymap *keymap;
- keymap = GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (display));
+ keymap = GDK_WIN32_KEYMAP (gdk_display_get_keymap (display));
return _gdk_win32_keymap_get_active_group (keymap);
}
@@ -1829,7 +1829,7 @@ gdk_event_translate (MSG *msg,
{
case WM_INPUTLANGCHANGE:
_gdk_input_locale = (HKL) msg->lParam;
- _gdk_win32_keymap_set_active_layout (GDK_WIN32_KEYMAP (_gdk_win32_display_get_keymap (display)),
_gdk_input_locale);
+ _gdk_win32_keymap_set_active_layout (GDK_WIN32_KEYMAP (gdk_display_get_keymap (display)),
_gdk_input_locale);
GetLocaleInfo (MAKELCID (LOWORD (_gdk_input_locale), SORT_DEFAULT),
LOCALE_IDEFAULTANSICODEPAGE,
buf, sizeof (buf));
@@ -1960,7 +1960,7 @@ gdk_event_translate (MSG *msg,
}
}
else if (msg->wParam == VK_SHIFT &&
- LOBYTE (HIWORD (msg->lParam)) == _gdk_win32_keymap_get_rshift_scancode (GDK_WIN32_KEYMAP
(_gdk_win32_display_get_keymap (display))))
+ LOBYTE (HIWORD (msg->lParam)) == _gdk_win32_keymap_get_rshift_scancode (GDK_WIN32_KEYMAP
(gdk_display_get_keymap (display))))
keycode = VK_RSHIFT;
is_modifier = (msg->wParam == VK_CONTROL ||
@@ -1995,7 +1995,7 @@ gdk_event_translate (MSG *msg,
}
else
{
- gdk_keymap_translate_keyboard_state (_gdk_win32_display_get_keymap (display),
+ gdk_keymap_translate_keyboard_state (gdk_display_get_keymap (display),
keycode,
state,
group,
diff --git a/gdk/win32/gdkkeys-win32.c b/gdk/win32/gdkkeys-win32.c
index 981f52ab54..fafad579dc 100644
--- a/gdk/win32/gdkkeys-win32.c
+++ b/gdk/win32/gdkkeys-win32.c
@@ -1178,17 +1178,6 @@ _gdk_win32_keymap_get_active_group (GdkWin32Keymap *keymap)
return 0;
}
-GdkKeymap*
-_gdk_win32_display_get_keymap (GdkDisplay *display)
-{
- g_return_val_if_fail (display == gdk_display_get_default (), NULL);
-
- if (default_keymap == NULL)
- default_keymap = g_object_new (gdk_win32_keymap_get_type (), NULL);
-
- return default_keymap;
-}
-
static PangoDirection
get_hkl_direction (HKL hkl)
{
@@ -1211,14 +1200,8 @@ get_hkl_direction (HKL hkl)
static PangoDirection
gdk_win32_keymap_get_direction (GdkKeymap *gdk_keymap)
{
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (gdk_keymap);
HKL active_hkl;
- GdkWin32Keymap *keymap;
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
-
- if (gdk_keymap == NULL || gdk_keymap != default_keymap)
- keymap = GDK_WIN32_KEYMAP (default_keymap);
- else
- keymap = GDK_WIN32_KEYMAP (gdk_keymap);
update_keymap (GDK_KEYMAP (keymap));
@@ -1233,16 +1216,10 @@ gdk_win32_keymap_get_direction (GdkKeymap *gdk_keymap)
static gboolean
gdk_win32_keymap_have_bidi_layouts (GdkKeymap *gdk_keymap)
{
- GdkWin32Keymap *keymap;
- gboolean have_rtl = FALSE;
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (gdk_keymap);
+ gboolean have_rtl = FALSE;
gboolean have_ltr = FALSE;
int group;
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
-
- if (gdk_keymap == NULL || gdk_keymap != default_keymap)
- keymap = GDK_WIN32_KEYMAP (default_keymap);
- else
- keymap = GDK_WIN32_KEYMAP (gdk_keymap);
update_keymap (GDK_KEYMAP (keymap));
@@ -1286,48 +1263,34 @@ gdk_win32_keymap_get_entries_for_keyval (GdkKeymap *gdk_keymap,
guint keyval,
GArray *retval)
{
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (gdk_keymap);
guint len = retval->len;
+ int vk;
- g_return_val_if_fail (gdk_keymap == NULL || GDK_IS_KEYMAP (gdk_keymap), FALSE);
- g_return_val_if_fail (keyval != 0, FALSE);
+ update_keymap (gdk_keymap);
- /* Accept only the default keymap */
- if (gdk_keymap == NULL || gdk_keymap == default_keymap)
+ for (vk = 0; vk < KEY_STATE_SIZE; vk++)
{
- int vk;
- GdkWin32Keymap *keymap;
-
- if (gdk_keymap == NULL)
- keymap = GDK_WIN32_KEYMAP (default_keymap);
- else
- keymap = GDK_WIN32_KEYMAP (gdk_keymap);
-
- update_keymap (gdk_keymap);
+ int group;
- for (vk = 0; vk < KEY_STATE_SIZE; vk++)
+ for (group = 0; group < keymap->layout_handles->len; group++)
{
- int group;
+ GdkWin32KeyLevelState level;
- for (group = 0; group < keymap->layout_handles->len; group++)
+ for (level = GDK_WIN32_LEVEL_NONE; level < GDK_WIN32_LEVEL_COUNT; level++)
{
- GdkWin32KeyLevelState level;
+ guint *keygroup;
- for (level = GDK_WIN32_LEVEL_NONE; level < GDK_WIN32_LEVEL_COUNT; level++)
- {
- guint *keygroup;
+ keygroup = &keymap->keysym_tab[(vk * keymap->layout_handles->len + group) *
GDK_WIN32_LEVEL_COUNT];
- keygroup = &keymap->keysym_tab[(vk * keymap->layout_handles->len + group) *
GDK_WIN32_LEVEL_COUNT];
-
- if (keygroup[level] == keyval)
- {
- GdkKeymapKey key;
+ if (keygroup[level] == keyval)
+ {
+ GdkKeymapKey key;
- key.keycode = vk;
- key.group = group;
- key.level = level;
- g_array_append_val (retval, key);
- }
+ key.keycode = vk;
+ key.group = group;
+ key.level = level;
+ g_array_append_val (retval, key);
}
}
}
@@ -1359,19 +1322,14 @@ gdk_win32_keymap_get_entries_for_keycode (GdkKeymap *gdk_keymap,
guint **keyvals,
int *n_entries)
{
- GArray *key_array;
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (default_keymap);
+ GArray *key_array;
GArray *keyval_array;
int group;
- GdkWin32Keymap *keymap;
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
-
- g_return_val_if_fail (gdk_keymap == NULL || GDK_IS_KEYMAP (gdk_keymap), FALSE);
- g_return_val_if_fail (n_entries != NULL, FALSE);
if (hardware_keycode <= 0 ||
hardware_keycode >= KEY_STATE_SIZE ||
- (keys == NULL && keyvals == NULL) ||
- (gdk_keymap != NULL && gdk_keymap != default_keymap))
+ (keys == NULL && keyvals == NULL))
{
/* Wrong keycode or NULL output arrays or wrong keymap */
if (keys)
@@ -1393,7 +1351,6 @@ gdk_win32_keymap_get_entries_for_keycode (GdkKeymap *gdk_keymap,
else
keyval_array = NULL;
- keymap = GDK_WIN32_KEYMAP (default_keymap);
update_keymap (GDK_KEYMAP (keymap));
for (group = 0; group < keymap->layout_handles->len; group++)
@@ -1453,18 +1410,12 @@ static guint
gdk_win32_keymap_lookup_key (GdkKeymap *gdk_keymap,
const GdkKeymapKey *key)
{
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (default_keymap);
guint sym;
- GdkWin32Keymap *keymap;
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
g_return_val_if_fail (gdk_keymap == NULL || GDK_IS_KEYMAP (gdk_keymap), 0);
g_return_val_if_fail (key != NULL, 0);
- /* Accept only the default keymap */
- if (gdk_keymap != NULL && gdk_keymap != default_keymap)
- return 0;
-
- keymap = GDK_WIN32_KEYMAP (default_keymap);
update_keymap (GDK_KEYMAP (keymap));
if (key->keycode >= KEY_STATE_SIZE ||
@@ -1490,14 +1441,11 @@ gdk_win32_keymap_translate_keyboard_state (GdkKeymap *gdk_keymap,
int *level,
GdkModifierType *consumed_modifiers)
{
- GdkWin32Keymap *keymap;
+ GdkWin32Keymap *keymap = GDK_WIN32_KEYMAP (default_keymap);
guint tmp_keyval;
guint *keygroup;
GdkWin32KeyLevelState shift_level;
GdkModifierType modifiers = GDK_SHIFT_MASK | GDK_LOCK_MASK | GDK_MOD2_MASK;
- GdkKeymap *default_keymap = gdk_display_get_keymap (gdk_display_get_default ());
-
- g_return_val_if_fail (gdk_keymap == NULL || GDK_IS_KEYMAP (gdk_keymap), FALSE);
#if 0
GDK_NOTE (EVENTS, g_print ("gdk_keymap_translate_keyboard_state: keycode=%#x state=%#x group=%d\n",
@@ -1512,14 +1460,9 @@ gdk_win32_keymap_translate_keyboard_state (GdkKeymap *gdk_keymap,
if (consumed_modifiers)
*consumed_modifiers = 0;
- /* Accept only the default keymap */
- if (gdk_keymap != NULL && gdk_keymap != default_keymap)
- return FALSE;
-
if (hardware_keycode >= KEY_STATE_SIZE)
return FALSE;
- keymap = GDK_WIN32_KEYMAP (default_keymap);
update_keymap (GDK_KEYMAP (keymap));
if (group < 0 || group >= keymap->layout_handles->len)
diff --git a/gdk/win32/gdkprivate-win32.h b/gdk/win32/gdkprivate-win32.h
index 2823d0f912..feeb6cea20 100644
--- a/gdk/win32/gdkprivate-win32.h
+++ b/gdk/win32/gdkprivate-win32.h
@@ -366,9 +366,6 @@ guint8 _gdk_win32_keymap_get_rshift_scancode (GdkWin32Keymap *keymap);
void _gdk_win32_keymap_set_active_layout (GdkWin32Keymap *keymap,
HKL hkl);
-
-GdkKeymap *_gdk_win32_display_get_keymap (GdkDisplay *display);
-
GdkSurface *_gdk_win32_display_create_surface (GdkDisplay *display,
GdkSurfaceType surface_type,
GdkSurface *parent,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]