[ 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.
This commit is contained in:
Owen Taylor 1999-01-28 03:38:58 +00:00 committed by Owen Taylor
parent a472efda2d
commit b2c8fed880
12 changed files with 260 additions and 43 deletions

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -1,3 +1,23 @@
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.
Wed Jan 27 20:08:54 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtkfilesel.c (open_user_dir): Patch from
Sebastian Wilhelmi <wilhelmi@ira.uka.de> to
use g_get_home_dir() instead of calling getpwuid()
ourselves.
Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com> Wed Jan 27 20:06:06 1999 Owen Taylor <otaylor@redhat.com>
* gtk/gtklayout.c (gtk_layout_adjustment_changed): * gtk/gtklayout.c (gtk_layout_adjustment_changed):

View File

@ -38,6 +38,8 @@
/* Define to enable POSIX threading awareness */ /* Define to enable POSIX threading awareness */
#undef USE_PTHREADS #undef USE_PTHREADS
#undef XIM_INST_IS_MISSING_OR_STRANGE
#undef XINPUT_NONE #undef XINPUT_NONE
#undef XINPUT_GXI #undef XINPUT_GXI
#undef XINPUT_XFREE #undef XINPUT_XFREE

View File

@ -64,6 +64,8 @@ AC_ARG_ENABLE(ansi, [ --enable-ansi turn on strict ansi [default=no]]
AC_ARG_WITH(glib, [ --with-glib=DIR Use uninstalled copy of glib]) AC_ARG_WITH(glib, [ --with-glib=DIR Use uninstalled copy of glib])
AC_ARG_ENABLE(xim, [ --enable-xim support XIM [default=yes]], AC_ARG_ENABLE(xim, [ --enable-xim support XIM [default=yes]],
, enable_xim="yes") , enable_xim="yes")
AC_ARG_ENABLE(xim_inst, [ --disable-xim-inst does not use xim instantiate callback],
, enable_xim_inst="maybe")
AC_ARG_WITH(locale, [ --with-locale=LOCALE locale name you want to use ]) AC_ARG_WITH(locale, [ --with-locale=LOCALE locale name you want to use ])
AC_ARG_WITH(xinput, [ --with-xinput=[no/gxi/xfree] support XInput ]) AC_ARG_WITH(xinput, [ --with-xinput=[no/gxi/xfree] support XInput ])
@ -290,11 +292,29 @@ AC_CHECK_LIB(X11, XConvertCase,
AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback, AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback,
: , : ,
enable_xim=no, enable_xim_inst="no",
$x_libs) $x_libs)
# On Solaris, calling XRegisterIMInstantiateCallback seems to
# cause an immediate segfault, so we disable it, unless
# the user specifically forces it to be on.
if test x$enable_xim_inst = xmaybe ; then
case host in
*-*-solaris*)
enable_xim_inst="no"
;;
*)
enable_xim_inst="yes"
;;
esac
fi
if test "x$enable_xim" = "xyes"; then if test "x$enable_xim" = "xyes"; then
GTK_XIM_FLAGS="-DUSE_XIM" GTK_XIM_FLAGS="-DUSE_XIM"
if test "x$enable_xim_inst" = "xno"; then
AC_DEFINE(XIM_INST_IS_MISSING_OR_STRANGE)
fi
fi fi
x_cflags="$X_CFLAGS" x_cflags="$X_CFLAGS"

View File

@ -54,13 +54,15 @@ typedef struct {
gpointer value; gpointer value;
} GdkImArg; } GdkImArg;
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void gdk_im_instantiate_cb (Display *display, static void gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer client_data,
XPointer call_data); XPointer call_data);
#endif
static void gdk_im_destroy_cb (XIM im, static void gdk_im_destroy_cb (XIM im,
XPointer client_data, XPointer client_data,
XPointer call_data); XPointer call_data);
static gint gdk_im_real_open (void);
static void gdk_ic_real_new (GdkIC *ic); static void gdk_ic_real_new (GdkIC *ic);
static GdkICAttributesType gdk_ic_real_set_attr (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; private->xic = NULL;
} }
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL); gdk_im_instantiate_cb, NULL);
#endif
} }
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void static void
gdk_im_instantiate_cb (Display *display, gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer call_data) XPointer client_data, XPointer call_data)
{ {
XIMCallback destroy_cb;
GList *node;
GDK_NOTE (XIM, g_message ("New IM is instantiated.")); GDK_NOTE (XIM, g_message ("New IM is instantiated."));
if (display != gdk_display) if (display != gdk_display)
return; return;
XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, gdk_im_real_open ();
gdk_im_instantiate_cb, NULL);
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); xim_im = XOpenIM (GDK_DISPLAY(), NULL, NULL, NULL);
if (xim_im == 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);
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); GDK_NOTE (XIM, g_warning ("Unable to open IM."));
if (private->xic == NULL) return FALSE;
gdk_ic_real_new ((GdkIC *)private); }
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);
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)) if (!(xim_best_allowed_style & GDK_IM_STATUS_MASK))
gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS); gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, if (gdk_im_real_open ())
gdk_im_instantiate_cb, NULL); return TRUE;
return (xim_im != NULL); #ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL);
#endif
return FALSE;
} }
void void

View File

@ -54,13 +54,15 @@ typedef struct {
gpointer value; gpointer value;
} GdkImArg; } GdkImArg;
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void gdk_im_instantiate_cb (Display *display, static void gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer client_data,
XPointer call_data); XPointer call_data);
#endif
static void gdk_im_destroy_cb (XIM im, static void gdk_im_destroy_cb (XIM im,
XPointer client_data, XPointer client_data,
XPointer call_data); XPointer call_data);
static gint gdk_im_real_open (void);
static void gdk_ic_real_new (GdkIC *ic); static void gdk_ic_real_new (GdkIC *ic);
static GdkICAttributesType gdk_ic_real_set_attr (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; private->xic = NULL;
} }
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL); gdk_im_instantiate_cb, NULL);
#endif
} }
#ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
static void static void
gdk_im_instantiate_cb (Display *display, gdk_im_instantiate_cb (Display *display,
XPointer client_data, XPointer call_data) XPointer client_data, XPointer call_data)
{ {
XIMCallback destroy_cb;
GList *node;
GDK_NOTE (XIM, g_message ("New IM is instantiated.")); GDK_NOTE (XIM, g_message ("New IM is instantiated."));
if (display != gdk_display) if (display != gdk_display)
return; return;
XUnregisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, gdk_im_real_open ();
gdk_im_instantiate_cb, NULL);
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); xim_im = XOpenIM (GDK_DISPLAY(), NULL, NULL, NULL);
if (xim_im == 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);
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); GDK_NOTE (XIM, g_warning ("Unable to open IM."));
if (private->xic == NULL) return FALSE;
gdk_ic_real_new ((GdkIC *)private); }
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);
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)) if (!(xim_best_allowed_style & GDK_IM_STATUS_MASK))
gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS); gdk_im_set_best_style (GDK_IM_STATUS_CALLBACKS);
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL, if (gdk_im_real_open ())
gdk_im_instantiate_cb, NULL); return TRUE;
return (xim_im != NULL); #ifndef XIM_INSTANTIATE_IS_MISSING_OR_STRANGE
XRegisterIMInstantiateCallback (gdk_display, NULL, NULL, NULL,
gdk_im_instantiate_cb, NULL);
#endif
return FALSE;
} }
void void

View File

@ -2189,6 +2189,9 @@ gtk_entry_update_ic_attr (GtkWidget *widget)
GtkEditable *editable = (GtkEditable *) widget; GtkEditable *editable = (GtkEditable *) widget;
GdkICAttributesType mask = 0; GdkICAttributesType mask = 0;
if (editable->ic == NULL)
return;
gdk_ic_get_attr (editable->ic, editable->ic_attr, gdk_ic_get_attr (editable->ic, editable->ic_attr,
GDK_IC_PREEDIT_FOREGROUND | GDK_IC_PREEDIT_FOREGROUND |
GDK_IC_PREEDIT_BACKGROUND | GDK_IC_PREEDIT_BACKGROUND |
@ -2209,6 +2212,8 @@ gtk_entry_update_ic_attr (GtkWidget *widget)
= widget->style->base[GTK_STATE_NORMAL]; = widget->style->base[GTK_STATE_NORMAL];
} }
if ((gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION) && if ((gdk_ic_get_style (editable->ic) & GDK_IM_PREEDIT_POSITION) &&
widget->style->font != NULL &&
widget->style->font->type == GDK_FONT_FONTSET &&
!gdk_font_equal (editable->ic_attr->preedit_fontset, !gdk_font_equal (editable->ic_attr->preedit_fontset,
widget->style->font)) widget->style->font))
{ {