gdkkeys: Avoid instantiating a display manager if none exists

For introspection scanning which ends up calling class_init() which in
turn calls into the keybindings code, we can just use the fallback
keyval conversion code.

https://bugzilla.gnome.org/show_bug.cgi?id=696457
This commit is contained in:
Colin Walters 2013-03-23 13:51:24 -04:00
parent 564b4e667a
commit d6b4e84957
3 changed files with 19 additions and 4 deletions

View File

@ -267,6 +267,8 @@ gdk_set_allowed_backends (const gchar *backends)
allowed_backends = g_strdup (backends);
}
static GdkDisplayManager *manager = NULL;
/**
* gdk_display_manager_get:
*
@ -287,8 +289,6 @@ gdk_set_allowed_backends (const gchar *backends)
GdkDisplayManager*
gdk_display_manager_get (void)
{
static GdkDisplayManager *manager = NULL;
if (manager == NULL)
{
const gchar *backend_list;
@ -381,6 +381,15 @@ gdk_display_manager_get (void)
return manager;
}
/* Used for cases where we don't actually want to instantiate a
* display manager if none exists. Internal only.
*/
GdkDisplayManager *
_gdk_display_manager_get_nocreate (void)
{
return manager;
}
/**
* gdk_display_manager_get_default_display:
* @manager: a #GdkDisplayManager

View File

@ -64,6 +64,9 @@ struct _GdkDisplayManagerClass
GdkDisplay *display);
};
GdkDisplayManager *
_gdk_display_manager_get_nocreate (void);
G_END_DECLS
#endif

View File

@ -203,9 +203,12 @@ gdk_keyval_convert_case (guint symbol,
guint *lower,
guint *upper)
{
GdkDisplayManager *manager = gdk_display_manager_get ();
GdkDisplayManager *manager = _gdk_display_manager_get_nocreate ();
if (manager)
GDK_DISPLAY_MANAGER_GET_CLASS (manager)->keyval_convert_case (manager, symbol, lower, upper);
else
_gdk_display_manager_real_keyval_convert_case (NULL, symbol, lower, upper);
}
/**