Proper fix for #396175:

2007-01-17  Tor Lillqvist  <tml@novell.com>

	Proper fix for #396175:

	* gtk/gtkimmulticontext.c: Revert change by Hans Breuer below: Do
	include gtkprivate.h. On Win32 we do want to use the redefinition
	of GTK_LOCALEDIR as a call to the function _gtk_get_localedir().

	* gtk/gtkimmodule.c: Instead, correct the prefix also on
	simple_context_info.domain_dirname. Do the prefix corrections
	always on Win32, not just when GTK_LIBDIR is defined. i.e., until
	now they were done only in the autoconfiscated gcc builds. Hans
	needs to make sure GTK_LIBDIR and GTK_LOCALEDIR are defined also
	in MSVC builds now.
	(correct_localedir_prefix): New function, like
	correct_libdir_prefix(), but for GTK_LOCALEDIR.
	(_gtk_im_module_list): Call correct_localedir_prefix() on
	simple_context_info.domain_dirname.


svn path=/trunk/; revision=17161
This commit is contained in:
Tor Lillqvist 2007-01-17 01:18:42 +00:00 committed by Tor Lillqvist
parent 2955a65dd7
commit e6a490588f
3 changed files with 62 additions and 21 deletions

View File

@ -1,3 +1,22 @@
2007-01-17 Tor Lillqvist <tml@novell.com>
Proper fix for #396175:
* gtk/gtkimmulticontext.c: Revert change by Hans Breuer below: Do
include gtkprivate.h. On Win32 we do want to use the redefinition
of GTK_LOCALEDIR as a call to the function _gtk_get_localedir().
* gtk/gtkimmodule.c: Instead, correct the prefix also on
simple_context_info.domain_dirname. Do the prefix corrections
always on Win32, not just when GTK_LIBDIR is defined. i.e., until
now they were done only in the autoconfiscated gcc builds. Hans
needs to make sure GTK_LIBDIR and GTK_LOCALEDIR are defined also
in MSVC builds now.
(correct_localedir_prefix): New function, like
correct_libdir_prefix(), but for GTK_LOCALEDIR.
(_gtk_im_module_list): Call correct_localedir_prefix() on
simple_context_info.domain_dirname.
2007-01-16 Matthias Clasen <mclasen@redhat.com> 2007-01-16 Matthias Clasen <mclasen@redhat.com>
* gtk/gtkrange.c (range_grab_remove): Queue a redraw when the * gtk/gtkrange.c (range_grab_remove): Queue a redraw when the

View File

@ -42,8 +42,8 @@
#include "gtkalias.h" #include "gtkalias.h"
/* Do *not* include "gtkprivate.h" in this file. If you do, the /* Do *not* include "gtkprivate.h" in this file. If you do, the
* correct_libdir_prefix() function below will have to move somewhere * correct_libdir_prefix() and correct_localedir_prefix() functions
* else. * below will have to move somewhere else.
*/ */
#ifdef __GTK_PRIVATE_H__ #ifdef __GTK_PRIVATE_H__
@ -217,12 +217,7 @@ add_module (GtkIMModule *module, GSList *infos)
modules_list = g_slist_prepend (modules_list, module); modules_list = g_slist_prepend (modules_list, module);
} }
#if defined (G_OS_WIN32) && defined (GTK_LIBDIR) #ifdef G_OS_WIN32
/* This is needes on Win32, but not wanted when compiling with MSVC,
* as the makefile.msc doesn't define any GTK_LIBDIR value.
*/
#define DO_CORRECT_LIBDIR_PREFIX /* Flag to check below whether to call this */
static void static void
correct_libdir_prefix (gchar **path) correct_libdir_prefix (gchar **path)
@ -247,6 +242,21 @@ correct_libdir_prefix (gchar **path)
g_free (tem); g_free (tem);
} }
} }
static void
correct_localedir_prefix (gchar **path)
{
/* As above, but for GTK_LOCALEDIR. Use separate function in case
* GTK_LOCALEDIR isn't a subfolder of GTK_LIBDIR.
*/
if (strncmp (*path, GTK_LOCALEDIR, strlen (GTK_LOCALEDIR)) == 0)
{
extern const gchar *_gtk_get_localedir ();
gchar *tem = *path;
*path = g_strconcat (_gtk_get_localedir (), tem + strlen (GTK_LOCALEDIR), NULL);
g_free (tem);
}
}
#endif #endif
@ -311,7 +321,7 @@ gtk_im_module_initialize (void)
} }
module->path = g_strdup (tmp_buf->str); module->path = g_strdup (tmp_buf->str);
#ifdef DO_CORRECT_LIBDIR_PREFIX #ifdef G_OS_WIN32
correct_libdir_prefix (&module->path); correct_libdir_prefix (&module->path);
#endif #endif
g_type_module_set_name (G_TYPE_MODULE (module), module->path); g_type_module_set_name (G_TYPE_MODULE (module), module->path);
@ -337,8 +347,8 @@ gtk_im_module_initialize (void)
if (!pango_scan_string (&p, tmp_buf)) if (!pango_scan_string (&p, tmp_buf))
goto context_error; goto context_error;
info->domain_dirname = g_strdup (tmp_buf->str); info->domain_dirname = g_strdup (tmp_buf->str);
#ifdef DO_CORRECT_LIBDIR_PREFIX #ifdef G_OS_WIN32
correct_libdir_prefix ((char **) &info->domain_dirname); correct_localedir_prefix ((char **) &info->domain_dirname);
#endif #endif
if (!pango_scan_string (&p, tmp_buf)) if (!pango_scan_string (&p, tmp_buf))
@ -402,7 +412,11 @@ _gtk_im_module_list (const GtkIMContextInfo ***contexts,
{ {
int n = 0; int n = 0;
static const GtkIMContextInfo simple_context_info = { static
#ifndef G_OS_WIN32
const
#endif
GtkIMContextInfo simple_context_info = {
SIMPLE_ID, SIMPLE_ID,
N_("Default"), N_("Default"),
GETTEXT_PACKAGE, GETTEXT_PACKAGE,
@ -414,9 +428,25 @@ _gtk_im_module_list (const GtkIMContextInfo ***contexts,
"" ""
}; };
#ifdef G_OS_WIN32
static gboolean beenhere = FALSE;
#endif
if (!contexts_hash) if (!contexts_hash)
gtk_im_module_initialize (); gtk_im_module_initialize ();
#ifdef G_OS_WIN32
if (!beenhere)
{
beenhere = TRUE;
/* correct_localedir_prefix() requires its parameter to be a
* malloced string
*/
simple_context_info.domain_dirname = g_strdup (simple_context_info.domain_dirname);
correct_localedir_prefix ((char **) &simple_context_info.domain_dirname);
}
#endif
if (n_contexts) if (n_contexts)
*n_contexts = (n_loaded_contexts + 1); *n_contexts = (n_loaded_contexts + 1);

View File

@ -27,17 +27,9 @@
#include "gtkmain.h" #include "gtkmain.h"
#include "gtkradiomenuitem.h" #include "gtkradiomenuitem.h"
#include "gtkintl.h" #include "gtkintl.h"
#include "gtkprivate.h" /* To get redefinition of GTK_LOCALE_DIR on Win32 */
#include "gtkalias.h" #include "gtkalias.h"
/* Do *not* include "gtkprivate.h" in this file. If you do, the
* the two definitions of GTK_LOCALEDIR will trigger a wrong
* warning in gtk_im_multicontext_append_menuitems()
*/
#ifdef __GTK_PRIVATE_H__
#error gtkprivate.h should not be included in this file
#endif
struct _GtkIMMulticontextPrivate struct _GtkIMMulticontextPrivate
{ {
GdkWindow *client_window; GdkWindow *client_window;