accel group: Make gtk_accelerator_get_default_mod_mask more lenient

Make this function harmless to call without an open display connection.
This happens during gobject introspection, which instantiates GTK+
types without calling gtk_init.
This commit is contained in:
Matthias Clasen
2015-08-29 12:23:18 -04:00
parent e6b3805c27
commit b371fb09fb

View File

@ -1719,11 +1719,12 @@ gtk_accelerator_get_label (guint accelerator_key,
* @default_mod_mask: accelerator modifier mask * @default_mod_mask: accelerator modifier mask
* *
* Sets the modifiers that will be considered significant for keyboard * Sets the modifiers that will be considered significant for keyboard
* accelerators. The default mod mask is #GDK_CONTROL_MASK | * accelerators. The default mod mask depends on the GDK backend in use,
* #GDK_SHIFT_MASK | #GDK_MOD1_MASK | #GDK_SUPER_MASK | * but will typically include #GDK_CONTROL_MASK | #GDK_SHIFT_MASK |
* #GDK_HYPER_MASK | #GDK_META_MASK, that is, Control, Shift, Alt, * #GDK_MOD1_MASK | #GDK_SUPER_MASK | #GDK_HYPER_MASK | #GDK_META_MASK.
* Super, Hyper and Meta. Other modifiers will by default be ignored * In other words, Control, Shift, Alt, Super, Hyper and Meta. Other
* by #GtkAccelGroup. * modifiers will by default be ignored by #GtkAccelGroup.
*
* You must include at least the three modifiers Control, Shift * You must include at least the three modifiers Control, Shift
* and Alt in any value you pass to this function. * and Alt in any value you pass to this function.
* *
@ -1740,7 +1741,10 @@ gtk_accelerator_set_default_mod_mask (GdkModifierType default_mod_mask)
/** /**
* gtk_accelerator_get_default_mod_mask: * gtk_accelerator_get_default_mod_mask:
* *
* Gets the value set by gtk_accelerator_set_default_mod_mask(). * Gets the modifier mask.
*
* The modifier mask determines which modifiers are considered significant
* for keyboard accelerators. See gtk_accelerator_set_default_mod_mask().
* *
* Returns: the default accelerator modifier mask * Returns: the default accelerator modifier mask
*/ */
@ -1748,9 +1752,18 @@ GdkModifierType
gtk_accelerator_get_default_mod_mask (void) gtk_accelerator_get_default_mod_mask (void)
{ {
if (!default_accel_mod_mask) if (!default_accel_mod_mask)
default_accel_mod_mask = {
gdk_keymap_get_modifier_mask (gdk_keymap_get_default (), GdkDisplay *display;
GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK);
display = gdk_display_get_default ();
if (!display)
return GDK_CONTROL_MASK | GDK_SHIFT_MASK | GDK_MOD1_MASK;
default_accel_mod_mask =
gdk_keymap_get_modifier_mask (gdk_keymap_get_for_display (display),
GDK_MODIFIER_INTENT_DEFAULT_MOD_MASK);
}
return default_accel_mod_mask; return default_accel_mod_mask;
} }