summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-10-06 19:59:53 +0200
committerBenjamin Otte <otte@redhat.com>2016-10-16 18:17:21 +0200
commit361d322bfb3a3896d447c6b1fe0bfefa5dc599fd (patch)
treeda712d85c9e124182ef8ba78d82409e0804c9ed6
parent1aa336b500c80a32fde0a3d6501ff8d61a50002b (diff)
downloadgtk+-361d322bfb3a3896d447c6b1fe0bfefa5dc599fd.tar.gz
immodules: Move path code out of gtkrc
-rw-r--r--gtk/gtkimmodule.c64
-rw-r--r--gtk/gtkimmoduleprivate.h10
-rw-r--r--gtk/queryimmodules.c11
3 files changed, 72 insertions, 13 deletions
diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c
index 24a5f62302..289cec06a0 100644
--- a/gtk/gtkimmodule.c
+++ b/gtk/gtkimmodule.c
@@ -33,6 +33,7 @@
#include <gmodule.h>
#include "gtkimmoduleprivate.h"
#include "gtkimcontextsimple.h"
+#include "gtkmodulesprivate.h"
#include "gtksettings.h"
#include "gtkprivate.h"
#include "gtkutilsprivate.h"
@@ -63,8 +64,6 @@
#define GDK_DEPRECATED
#define GDK_DEPRECATED_FOR(f)
-#include "deprecated/gtkrc.h"
-
/* We need to call getc() a lot in a loop. This is suboptimal,
* as getc() does thread locking on the FILE it is given.
* To optimize that, lock the file first, then call getc(),
@@ -332,12 +331,71 @@ add_builtin_module (const gchar *module_name,
return module;
}
+/*
+ * gtk_get_im_module_path:
+ *
+ * Obtains the path in which to look for IM modules. See the documentation
+ * of the `GTK_PATH`
+ * environment variable for more details about looking up modules. This
+ * function is useful solely for utilities supplied with GTK+ and should
+ * not be used by applications under normal circumstances.
+ *
+ * Returns: (type filename): a newly-allocated string containing the
+ * path in which to look for IM modules.
+ */
+gchar *
+gtk_get_im_module_path (void)
+{
+ gchar **paths = _gtk_get_module_path ("immodules");
+ gchar *result = g_strjoinv (G_SEARCHPATH_SEPARATOR_S, paths);
+ g_strfreev (paths);
+
+ return result;
+}
+
+/*
+ * gtk_get_im_module_file:
+ *
+ * Obtains the path to the IM modules file. See the documentation
+ * of the `GTK_IM_MODULE_FILE`
+ * environment variable for more details.
+ *
+ * Returns: (type filename): a newly-allocated string containing the
+ * name of the file listing the IM modules available for loading
+ */
+gchar *
+gtk_get_im_module_file (void)
+{
+ const gchar *var = g_getenv ("GTK_IM_MODULE_FILE");
+ gchar *result = NULL;
+
+ if (var)
+ result = g_strdup (var);
+
+ if (!result)
+ {
+ const gchar *var;
+ gchar *path;
+
+ var = g_getenv ("GTK_EXE_PREFIX");
+
+ if (var)
+ path = g_build_filename (var, "lib", "gtk-3.0", GTK_BINARY_VERSION, "immodules.cache", NULL);
+ else
+ path = g_build_filename (_gtk_get_libdir (), "gtk-3.0", GTK_BINARY_VERSION, "immodules.cache", NULL);
+
+ return path;
+ }
+
+ return result;
+}
+
static void
gtk_im_module_initialize (void)
{
GString *line_buf = g_string_new (NULL);
GString *tmp_buf = g_string_new (NULL);
- gchar *filename = gtk_rc_get_im_module_file();
+ gchar *filename = gtk_get_im_module_file();
FILE *file;
gboolean have_error = FALSE;
diff --git a/gtk/gtkimmoduleprivate.h b/gtk/gtkimmoduleprivate.h
index cae0dedc94..1796e03902 100644
--- a/gtk/gtkimmoduleprivate.h
+++ b/gtk/gtkimmoduleprivate.h
@@ -19,8 +19,8 @@
#define __GTK_IM_MODULE_PRIVATE_H__
#include <gdk/gdk.h>
-#include <gtk/gtkimcontext.h>
-#include <gtk/gtkimcontextinfo.h>
+#include "gtkimcontext.h"
+#include "gtkimcontextinfo.h"
G_BEGIN_DECLS
@@ -29,6 +29,12 @@ void _gtk_im_module_list (const GtkIMContextInfo ***
GtkIMContext * _gtk_im_module_create (const gchar *context_id);
const gchar * _gtk_im_module_get_default_context_id (void);
+/* Needs to be exported API for gtk-queryimmodules */
+GDK_AVAILABLE_IN_ALL
+gchar * gtk_get_im_module_path (void);
+GDK_AVAILABLE_IN_ALL
+gchar * gtk_get_im_module_file (void);
+
G_END_DECLS
#endif /* __GTK_IM_MODULE_PRIVATE_H__ */
diff --git a/gtk/queryimmodules.c b/gtk/queryimmodules.c
index e9978fd322..fab90fe48a 100644
--- a/gtk/queryimmodules.c
+++ b/gtk/queryimmodules.c
@@ -35,11 +35,10 @@
#endif
#include "gtk/gtkimcontextinfo.h"
+#include "gtk/gtkimmoduleprivate.h"
#include "gtk/gtkversion.h"
#include "gtk/gtkutilsprivate.h"
-#include "gtk/deprecated/gtkrc.h"
-
static void
escape_string (GString *contents, const char *str)
{
@@ -164,9 +163,7 @@ int main (int argc, char **argv)
if (argc > 1 && strcmp (argv[1], "--update-cache") == 0)
{
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- cache_file = gtk_rc_get_im_module_file ();
-G_GNUC_END_IGNORE_DEPRECATIONS
+ cache_file = gtk_get_im_module_file ();
first_file = 2;
}
@@ -184,9 +181,7 @@ G_GNUC_END_IGNORE_DEPRECATIONS
char **dirs;
GHashTable *dirs_done;
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS
- path = gtk_rc_get_im_module_path ();
-G_GNUC_END_IGNORE_DEPRECATIONS
+ path = gtk_get_im_module_path ();
g_string_append_printf (contents, "# ModulesPath = %s\n#\n", path);