From b5036faa2a478b9cb0f265cd86170493e91ee058 Mon Sep 17 00:00:00 2001 From: Luca Bacci Date: Mon, 21 Feb 2022 12:39:52 +0100 Subject: [PATCH] Win32 IME: Keep track of the client widget --- gtk/gtkimcontextime.c | 12 +++++------- gtk/gtkimcontextime.h | 1 + 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/gtk/gtkimcontextime.c b/gtk/gtkimcontextime.c index 6a423fca9d..1fe4745fe5 100644 --- a/gtk/gtkimcontextime.c +++ b/gtk/gtkimcontextime.c @@ -156,6 +156,7 @@ gtk_im_context_ime_class_init (GtkIMContextIMEClass *class) static void gtk_im_context_ime_init (GtkIMContextIME *context_ime) { + context_ime->client_widget = NULL; context_ime->client_surface = NULL; context_ime->use_preedit = TRUE; context_ime->preediting = FALSE; @@ -272,6 +273,7 @@ gtk_im_context_ime_set_client_widget (GtkIMContext *context, gtk_im_context_ime_focus_out (context); } + context_ime->client_widget = widget; context_ime->client_surface = client_surface; } @@ -825,7 +827,6 @@ static void gtk_im_context_ime_set_preedit_font (GtkIMContext *context) { GtkIMContextIME *context_ime; - GtkWidget *widget = NULL; HWND hwnd; HIMC himc; HKL ime = GetKeyboardLayout (0); @@ -839,11 +840,8 @@ gtk_im_context_ime_set_preedit_font (GtkIMContext *context) g_return_if_fail (GTK_IS_IM_CONTEXT_IME (context)); context_ime = GTK_IM_CONTEXT_IME (context); - if (!context_ime->client_surface) - return; - widget = GTK_WIDGET (gtk_native_get_for_surface (context_ime->client_surface)); - if (!widget) + if (!(context_ime->client_widget && context_ime->client_surface)) return; hwnd = gdk_win32_surface_get_impl_hwnd (context_ime->client_surface); @@ -852,7 +850,7 @@ gtk_im_context_ime_set_preedit_font (GtkIMContext *context) return; /* set font */ - pango_context = gtk_widget_get_pango_context (widget); + pango_context = gtk_widget_get_pango_context (context_ime->client_widget); if (!pango_context) goto ERROR_OUT; @@ -887,7 +885,7 @@ gtk_im_context_ime_set_preedit_font (GtkIMContext *context) lang = ""; break; } - font_desc = gtk_css_style_get_pango_font (gtk_style_context_lookup_style (gtk_widget_get_style_context (widget))); + font_desc = gtk_css_style_get_pango_font (gtk_style_context_lookup_style (gtk_widget_get_style_context (context_ime->client_widget))); if (lang[0]) { diff --git a/gtk/gtkimcontextime.h b/gtk/gtkimcontextime.h index 8621bc6dfe..27e09f2426 100644 --- a/gtk/gtkimcontextime.h +++ b/gtk/gtkimcontextime.h @@ -36,6 +36,7 @@ struct _GtkIMContextIME { GtkIMContext object; + GtkWidget *client_widget; GdkSurface *client_surface; guint use_preedit : 1; guint preediting : 1; -- 2.30.2