diff options
author | Rui Matos <tiagomatos@gmail.com> | 2016-09-13 16:46:57 +0200 |
---|---|---|
committer | Rui Matos <tiagomatos@gmail.com> | 2016-09-14 21:23:26 +0200 |
commit | 5f260b2b73a3eb0a275b657e1aadbc0d133a6177 (patch) | |
tree | 389d0357b550729a1d0eeedef0a3b8249d52e7ab | |
parent | 648cd5a6b9353851a12f94f422e157c3d228623b (diff) | |
download | libgnomekbd-5f260b2b73a3eb0a275b657e1aadbc0d133a6177.tar.gz |
gkbd-keyboard-drawing: Handle XkbGetKeyboard() failing
XkbGetKeyboard() might fail but we might still be able to work with a
XkbGetKeyboardByName() later in gkbd_keyboard_drawing_set_keyboard()
so don't abort the initialization if it fails.
-rw-r--r-- | libgnomekbd/gkbd-keyboard-drawing.c | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/libgnomekbd/gkbd-keyboard-drawing.c b/libgnomekbd/gkbd-keyboard-drawing.c index 6894f47..64e62ea 100644 --- a/libgnomekbd/gkbd-keyboard-drawing.c +++ b/libgnomekbd/gkbd-keyboard-drawing.c @@ -1895,6 +1895,9 @@ free_cdik ( /*colors doodads indicators keys */ static void alloc_cdik (GkbdKeyboardDrawing * drawing) { + if (!drawing->xkb) + return; + drawing->physical_indicators_size = drawing->xkb->indicators->phys_indicators + 1; drawing->physical_indicators = @@ -2047,13 +2050,14 @@ gkbd_keyboard_drawing_init (GkbdKeyboardDrawing * drawing) XkbGBN_SymbolsMask | XkbGBN_IndicatorMapMask, XkbUseCoreKbd); - if (drawing->xkb == NULL) { - g_critical - ("XkbGetKeyboard failed to get keyboard from the server!"); - return; + if (drawing->xkb) { + XkbGetNames (drawing->display, XkbAllNamesMask, drawing->xkb); + XkbSelectEventDetails (drawing->display, XkbUseCoreKbd, + XkbIndicatorStateNotify, + drawing->xkb->indicators->phys_indicators, + drawing->xkb->indicators->phys_indicators); } - XkbGetNames (drawing->display, XkbAllNamesMask, drawing->xkb); drawing->l3mod = XkbKeysymToModifiers (drawing->display, GDK_KEY_ISO_Level3_Shift); @@ -2061,11 +2065,6 @@ gkbd_keyboard_drawing_init (GkbdKeyboardDrawing * drawing) alloc_cdik (drawing); - XkbSelectEventDetails (drawing->display, XkbUseCoreKbd, - XkbIndicatorStateNotify, - drawing->xkb->indicators->phys_indicators, - drawing->xkb->indicators->phys_indicators); - mask = (XkbStateNotifyMask | XkbNamesNotifyMask | XkbControlsNotifyMask | XkbIndicatorMapNotifyMask | @@ -2312,8 +2311,12 @@ gkbd_keyboard_drawing_set_keyboard (GkbdKeyboardDrawing * drawing, drawing->xkbOnDisplay = TRUE; } - if (drawing->xkb == NULL) - return FALSE; + if (drawing->xkb) { + XkbSelectEventDetails (drawing->display, XkbUseCoreKbd, + XkbIndicatorStateNotify, + drawing->xkb->indicators->phys_indicators, + drawing->xkb->indicators->phys_indicators); + } alloc_cdik (drawing); |