[Xfce4-commits] [xfce/xfce4-settings] 01/01: Handle failure to get Xkl engine for display (bug #16017)
noreply at xfce.org
noreply at xfce.org
Sun Apr 12 13:33:16 CEST 2020
This is an automated email from the git hooks/post-receive script.
b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h x f c e - 4 . 1 4
in repository xfce/xfce4-settings.
commit b73852916f1b9f47466dd2d1c22c433ae3ee4528
Author: Sean Davis <smd.seandavis at gmail.com>
Date: Sun Apr 12 07:27:39 2020 -0400
Handle failure to get Xkl engine for display (bug #16017)
---
xfsettingsd/keyboard-layout.c | 65 +++++++++++++++++++++++++++----------------
1 file changed, 41 insertions(+), 24 deletions(-)
diff --git a/xfsettingsd/keyboard-layout.c b/xfsettingsd/keyboard-layout.c
index 1ddc6bc..3e9a02b 100644
--- a/xfsettingsd/keyboard-layout.c
+++ b/xfsettingsd/keyboard-layout.c
@@ -58,7 +58,7 @@ static void xfce_keyboard_layout_helper_channel_property_changed (XfconfChannel
const GValue *value,
XfceKeyboardLayoutHelper *helper);
static gchar* xfce_keyboard_layout_get_option (gchar **options,
- const gchar *option_name,
+ const gchar *option_name,
gchar **other_options);
static GdkFilterReturn handle_xevent (GdkXEvent *xev,
GdkEvent *event,
@@ -113,25 +113,30 @@ xfce_keyboard_layout_helper_init (XfceKeyboardLayoutHelper *helper)
helper->xkb_disable_settings = xfconf_channel_get_bool (helper->channel, "/Default/XkbDisable", TRUE);
#ifdef HAVE_LIBXKLAVIER
- /* monitor channel changes */
- g_signal_connect (G_OBJECT (helper->channel), "property-changed", G_CALLBACK (xfce_keyboard_layout_helper_channel_property_changed), helper);
-
helper->engine = xkl_engine_get_instance (GDK_DISPLAY_XDISPLAY(gdk_display_get_default()));
- helper->config = xkl_config_rec_new ();
- xkl_config_rec_get_from_server (helper->config, helper->engine);
- helper->system_keyboard_model = g_strdup (helper->config->model);
-
- gdk_window_add_filter (NULL, (GdkFilterFunc) handle_xevent, helper);
- g_signal_connect (helper->engine, "X-new-device",
- G_CALLBACK (xfce_keyboard_layout_reset_xkl_config), helper);
- xkl_engine_start_listen (helper->engine, XKLL_TRACK_KEYBOARD_STATE);
-
- /* load settings */
- xfce_keyboard_layout_helper_set_model (helper);
- xfce_keyboard_layout_helper_set_layout (helper);
- xfce_keyboard_layout_helper_set_variant (helper);
- xfce_keyboard_layout_helper_set_grpkey (helper);
- xfce_keyboard_layout_helper_set_composekey (helper);
+ if (helper->engine == NULL) {
+ g_warning ("Failed to get Xkl engine for display");
+ } else {
+ /* monitor channel changes */
+ g_signal_connect(G_OBJECT(helper->channel), "property-changed", G_CALLBACK(xfce_keyboard_layout_helper_channel_property_changed), helper);
+
+ helper->config = xkl_config_rec_new();
+ xkl_config_rec_get_from_server(helper->config, helper->engine);
+ helper->system_keyboard_model = g_strdup(helper->config->model);
+
+ gdk_window_add_filter(NULL, (GdkFilterFunc)handle_xevent, helper);
+ g_signal_connect(helper->engine, "X-new-device",
+ G_CALLBACK(xfce_keyboard_layout_reset_xkl_config), helper);
+ xkl_engine_start_listen(helper->engine, XKLL_TRACK_KEYBOARD_STATE);
+
+ /* load settings */
+ xfce_keyboard_layout_helper_set_model(helper);
+ xfce_keyboard_layout_helper_set_layout(helper);
+ xfce_keyboard_layout_helper_set_variant(helper);
+ xfce_keyboard_layout_helper_set_grpkey(helper);
+ xfce_keyboard_layout_helper_set_composekey(helper);
+ }
+
#endif /* HAVE_LIBXKLAVIER */
xfce_keyboard_layout_helper_process_xmodmap ();
@@ -143,11 +148,14 @@ xfce_keyboard_layout_helper_finalize (GObject *object)
#ifdef HAVE_LIBXKLAVIER
XfceKeyboardLayoutHelper *helper = XFCE_KEYBOARD_LAYOUT_HELPER (object);
- xkl_engine_stop_listen (helper->engine, XKLL_TRACK_KEYBOARD_STATE);
- gdk_window_remove_filter (NULL, (GdkFilterFunc) handle_xevent, helper);
- g_object_unref (helper->config);
- g_object_unref (helper->engine);
- g_free (helper->system_keyboard_model);
+ if (helper->engine != NULL)
+ {
+ xkl_engine_stop_listen (helper->engine, XKLL_TRACK_KEYBOARD_STATE);
+ gdk_window_remove_filter (NULL, (GdkFilterFunc) handle_xevent, helper);
+ g_object_unref (helper->config);
+ g_object_unref (helper->engine);
+ g_free (helper->system_keyboard_model);
+ }
#endif /* HAVE_LIBXKLAVIER */
G_OBJECT_CLASS (xfce_keyboard_layout_helper_parent_class)->finalize (object);
@@ -189,6 +197,8 @@ xfce_keyboard_layout_helper_set_model (XfceKeyboardLayoutHelper *helper)
{
gchar *xkbmodel;
+ g_return_if_fail (helper->engine != NULL);
+
if (!helper->xkb_disable_settings)
{
xkbmodel = xfconf_channel_get_string (helper->channel, "/Default/XkbModel", NULL);
@@ -223,6 +233,8 @@ xfce_keyboard_layout_helper_set (XfceKeyboardLayoutHelper *helper,
gchar *xfconf_values, *xkl_values;
gchar **values;
+ g_return_if_fail (helper->engine != NULL);
+
if (!helper->xkb_disable_settings)
{
xfconf_values = g_strjoinv (",", *xkl_config_option);
@@ -309,6 +321,8 @@ xfce_keyboard_layout_helper_set_option (XfceKeyboardLayoutHelper *helper,
const gchar *xkb_option_name,
const gchar *xfconf_option_name)
{
+ g_return_if_fail (helper->engine != NULL);
+
if (!helper->xkb_disable_settings)
{
gchar *option_value;
@@ -372,6 +386,7 @@ xfce_keyboard_layout_helper_channel_property_changed (XfconfChannel *channe
XfceKeyboardLayoutHelper *helper)
{
g_return_if_fail (helper->channel == channel);
+ g_return_if_fail (helper->engine != NULL);
if (strcmp (property_name, "/Default/XkbDisable") == 0)
{
@@ -419,6 +434,8 @@ static void
xfce_keyboard_layout_reset_xkl_config (XklEngine *xklengine,
XfceKeyboardLayoutHelper *helper)
{
+ g_return_if_fail (helper->engine != NULL);
+
if (!helper->xkb_disable_settings)
{
gchar *xfconf_model;
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Xfce4-commits
mailing list