From c26a2092833517c98bb9e87c957a99e568336cae Mon Sep 17 00:00:00 2001 From: Christian Hergert Date: Fri, 3 Dec 2021 12:11:25 -0800 Subject: [PATCH] inspector: add im-module This adds a new row to the Global/Information section which displays the GTK im-module that is likely to be in use unless changed by an application. It responds to updates of GtkSettings:gtk-im-module unless the GTK_IM_MODULE environment variable is set. Fixes #4512 (cherry picked from commit 6be352f4468b4dbbb1d71f427948dda154b9a658) --- gtk/inspector/general.c | 38 ++++++++++++++++++++++++++++++++++++++ gtk/inspector/general.ui | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/gtk/inspector/general.c b/gtk/inspector/general.c index 3c2c7056ee..a3a341956b 100644 --- a/gtk/inspector/general.c +++ b/gtk/inspector/general.c @@ -26,10 +26,12 @@ #include "gtkswitch.h" #include "gtklistbox.h" #include "gtkprivate.h" +#include "gtksettings.h" #include "gtksizegroup.h" #include "gtkimage.h" #include "gtkadjustment.h" #include "gtkbox.h" +#include "gtkimmoduleprivate.h" #ifdef GDK_WINDOWING_X11 #include "x11/gdkx.h" @@ -66,6 +68,7 @@ struct _GtkInspectorGeneralPrivate GtkWidget *app_id_frame; GtkWidget *app_id; GtkWidget *resource_path; + GtkWidget *im_module; GtkWidget *gl_version; GtkWidget *gl_vendor; GtkWidget *prefix; @@ -522,6 +525,39 @@ init_pango (GtkInspectorGeneral *gen) gtk_label_set_label (GTK_LABEL (gen->priv->pango_fontmap), name); } +static void +im_module_changed (GtkSettings *settings, + GParamSpec *pspec, + GtkInspectorGeneral *gen) +{ + gtk_label_set_label (GTK_LABEL (gen->priv->im_module), + _gtk_im_module_get_default_context_id ()); +} + +static void +init_im_module (GtkInspectorGeneral *gen) +{ + GdkScreen *screen = gdk_screen_get_default (); + GtkSettings *settings = gtk_settings_get_for_screen (screen); + const char *default_context_id = _gtk_im_module_get_default_context_id (); + + gtk_label_set_label (GTK_LABEL (gen->priv->im_module), default_context_id); + + if (g_getenv ("GTK_IM_MODULE") != NULL) + { + /* This can't update if GTK_IM_MODULE envvar is set */ + gtk_widget_set_tooltip_text (gen->priv->im_module, + _("IM Context is hardcoded by GTK_IM_MODULE")); + gtk_widget_set_sensitive (gen->priv->im_module, FALSE); + return; + } + + g_signal_connect_object (settings, + "notify::gtk-im-module", + G_CALLBACK (im_module_changed), + gen, 0); +} + static void populate_seats (GtkInspectorGeneral *gen); static void @@ -693,6 +729,7 @@ gtk_inspector_general_init (GtkInspectorGeneral *gen) init_env (gen); init_display (gen); init_pango (gen); + init_im_module (gen); init_gl (gen); init_device (gen); } @@ -781,6 +818,7 @@ gtk_inspector_general_class_init (GtkInspectorGeneralClass *klass) gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gtk_version); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, gdk_backend); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, pango_fontmap); + gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, im_module); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, app_id_frame); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, app_id); gtk_widget_class_bind_template_child_private (widget_class, GtkInspectorGeneral, resource_path); diff --git a/gtk/inspector/general.ui b/gtk/inspector/general.ui index bd5e9c09d3..649d60ae03 100644 --- a/gtk/inspector/general.ui +++ b/gtk/inspector/general.ui @@ -120,6 +120,40 @@ + + + True + False + + + True + horizontal + 10 + 40 + + + True + Input Method + start + baseline + 0.0 + + + + + True + True + end + baseline + + + True + + + + + + @@ -685,6 +719,7 @@ +