diff options
author | Owen Taylor <otaylor@redhat.com> | 1999-01-28 03:38:58 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1999-01-28 03:38:58 +0000 |
commit | b2c8fed88048b0f159400bad0a76bfeb13d7c626 (patch) | |
tree | fa3324ace416a9f1f7b82f2c3b672f79b6e47476 /gdk/x11 | |
parent | a472efda2da1e0e177fece9950c3fa64f9d8c9d5 (diff) | |
download | gdk-pixbuf-b2c8fed88048b0f159400bad0a76bfeb13d7c626.tar.gz |
[ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
Wed Jan 27 21:56:07 1999 Owen Taylor <otaylor@redhat.com>
[ patch from Takashi Matsuda <matsu@arch.comp.kyutech.ac.jp> ]
* acconfig.h configure.in gdk/gdkim.c: Add configure
flag for disabling XRegisterIMInstantiateCallback(), default
it to off for Solaris. Always try to open the
input method immediately, and only if that fails,
register than instantiate callback.
* gdk/gdkentry.c: Some tweaks to make sure that we
only get and set the IC attributes when appropriate.
Diffstat (limited to 'gdk/x11')
-rw-r--r-- | gdk/x11/gdkim-x11.c | 63 |
1 files changed, 44 insertions, 19 deletions
diff --git a/gdk/x11/gdkim-x11.c b/gdk/x11/gdkim-x11.c index 083a407f5..6c1c068c0 100644 --- a/gdk/x11/gdkim-x11.c +++ b/gdk/x11/gdkim-x11.c @@ -54,13 +54,15 @@ typedef struct { gpointer value; } GdkImArg; +#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE static void gdk_im_instantiate_cb (Display *display, XPointer client_data, XPointer call_data); +#endif static void gdk_im_destroy_cb (XIM im, XPointer client_data, XPointer call_data); - +static gint gdk_im_real_open (void); static void gdk_ic_real_new (GdkIC *ic); static GdkICAttributesType gdk_ic_real_set_attr (GdkIC *ic, @@ -338,39 +340,57 @@ gdk_im_destroy_cb (XIM im, XPointer client_data, XPointer call_data) private->xic = NULL; } +#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, gdk_im_instantiate_cb, NULL); +#endif } +#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE static void gdk_im_instantiate_cb (Display *display, XPointer client_data, XPointer call_data) { - XIMCallback destroy_cb; - GList *node; - GDK_NOTE (XIM, g_message ("New IM is instantiated.")); if (display != gdk_display) return; - XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, - gdk_im_instantiate_cb, NULL); + gdk_im_real_open (); + + if (xim_im != NULL) + XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, + gdk_im_instantiate_cb, NULL); +} +#endif + +static gint +gdk_im_real_open (void) +{ + XIMCallback destroy_cb; + GList *node; xim_im = XOpenIM (GDK_DISPLAY(), NULL, NULL, NULL); if (xim_im == NULL) - GDK_NOTE (XIM, g_warning ("Unable to open open IM.")); - - destroy_cb.callback = gdk_im_destroy_cb; - destroy_cb.client_data = NULL; - XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL); + { + GDK_NOTE (XIM, g_warning ("Unable to open IM.")); + return FALSE; + } + else + { + destroy_cb.callback = gdk_im_destroy_cb; + destroy_cb.client_data = NULL; + if (NULL != XSetIMValues (xim_im, XNDestroyCallback, &destroy_cb, NULL)) + GDK_NOTE (XIM, g_warning ("Could not set destroy callback to IM. Be careful to not destroy your input method.")); - XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL); + XGetIMValues (xim_im, XNQueryInputStyle, &xim_styles, NULL, NULL); - for (node = xim_ic_list; node != NULL; node = g_list_next(node)) - { - GdkICPrivate *private = (GdkICPrivate *) (node->data); - if (private->xic == NULL) - gdk_ic_real_new ((GdkIC *)private); + for (node = xim_ic_list; node != NULL; node = g_list_next(node)) + { + GdkICPrivate *private = (GdkICPrivate *) (node->data); + if (private->xic == NULL) + gdk_ic_real_new ((GdkIC *)private); + } + return TRUE; } } @@ -388,10 +408,15 @@ gdk_im_open (void) if (!(xim_best_allowed_style & GDK_IM_STATUS_MASK)) gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS); + if (gdk_im_real_open ()) + return TRUE; + +#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, - gdk_im_instantiate_cb, NULL); + gdk_im_instantiate_cb, NULL); +#endif - return (xim_im != NULL); + return FALSE; } void |