[gtk+/wip/otte/gtk4: 38/127] immodules: Move path code out of gtkrc



commit 33fb7e362aa7b9861fc4d0308516390ee438c019
Author: Benjamin Otte <otte redhat com>
Date:   Thu Oct 6 19:59:53 2016 +0200

    immodules: Move path code out of gtkrc

 gtk/gtkimmodule.c        |   64 +++++++++++++++++++++++++++++++++++++++++++--
 gtk/gtkimmoduleprivate.h |   10 ++++++-
 gtk/queryimmodules.c     |   11 ++------
 3 files changed, 72 insertions(+), 13 deletions(-)
---
diff --git a/gtk/gtkimmodule.c b/gtk/gtkimmodule.c
index 24a5f62..289cec0 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 cae0ded..1796e03 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 e9978fd..fab90fe 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);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]