summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-01-28 03:38:58 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-01-28 03:38:58 +0000
commitb2c8fed88048b0f159400bad0a76bfeb13d7c626 (patch)
treefa3324ace416a9f1f7b82f2c3b672f79b6e47476
parenta472efda2da1e0e177fece9950c3fa64f9d8c9d5 (diff)
downloadgdk-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.
-rw-r--r--ChangeLog20
-rw-r--r--ChangeLog.pre-2-020
-rw-r--r--ChangeLog.pre-2-1020
-rw-r--r--ChangeLog.pre-2-220
-rw-r--r--ChangeLog.pre-2-420
-rw-r--r--ChangeLog.pre-2-620
-rw-r--r--ChangeLog.pre-2-820
-rw-r--r--acconfig.h2
-rw-r--r--configure.in22
-rw-r--r--gdk/gdkim.c63
-rw-r--r--gdk/x11/gdkim-x11.c63
-rw-r--r--gtk/gtkentry.c5
12 files changed, 256 insertions, 39 deletions
diff --git a/ChangeLog b/ChangeLog
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index 899805c7b..9a3a39a0e 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -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>
* gtk/gtklayout.c (gtk_layout_adjustment_changed):
diff --git a/acconfig.h b/acconfig.h
index 01f219e9d..6142aa465 100644
--- a/acconfig.h
+++ b/acconfig.h
@@ -38,6 +38,8 @@
/* Define to enable POSIX threading awareness */
#undef USE_PTHREADS
+#undef XIM_INST_IS_MISSING_OR_STRANGE
+
#undef XINPUT_NONE
#undef XINPUT_GXI
#undef XINPUT_XFREE
diff --git a/configure.in b/configure.in
index 19e2f59b9..1eaaca9e1 100644
--- a/configure.in
+++ b/configure.in
@@ -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_ENABLE(xim, [ --enable-xim support XIM [default=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(xinput, [ --with-xinput=[no/gxi/xfree] support XInput ])
@@ -290,11 +292,29 @@ AC_CHECK_LIB(X11, XConvertCase,
AC_CHECK_LIB(X11, XUnregisterIMInstantiateCallback,
: ,
- enable_xim=no,
+ enable_xim_inst="no",
$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
GTK_XIM_FLAGS="-DUSE_XIM"
+ if test "x$enable_xim_inst" = "xno"; then
+ AC_DEFINE(XIM_INST_IS_MISSING_OR_STRANGE)
+ fi
fi
x_cflags="$X_CFLAGS"
diff --git a/gdk/gdkim.c b/gdk/gdkim.c
index 083a407f5..6c1c068c0 100644
--- a/gdk/gdkim.c
+++ b/gdk/gdkim.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
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
diff --git a/gtk/gtkentry.c b/gtk/gtkentry.c
index 27acadd8e..045566ac9 100644
--- a/gtk/gtkentry.c
+++ b/gtk/gtkentry.c
@@ -2189,6 +2189,9 @@ gtk_entry_update_ic_attr (GtkWidget *widget)
GtkEditable *editable = (GtkEditable *) widget;
GdkICAttributesType mask = 0;
+ if (editable->ic == NULL)
+ return;
+
gdk_ic_get_attr (editable->ic, editable->ic_attr,
GDK_IC_PREEDIT_FOREGROUND |
GDK_IC_PREEDIT_BACKGROUND |
@@ -2209,6 +2212,8 @@ gtk_entry_update_ic_attr (GtkWidget *widget)
= widget->style->base[GTK_STATE_NORMAL];
}
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,
widget->style->font))
{