public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/ibus] autotool: Add ibus im-module command
@ 2026-05-31  2:07 Takao Fujiwara
  0 siblings, 0 replies; only message in thread
From: Takao Fujiwara @ 2026-05-31  2:07 UTC (permalink / raw)
  To: git-commits

A new commit has been pushed.

Repo   : rpms/ibus
Branch : autotool
Commit : f85987315d8fd18594467b4dea082d468f8a35d3
Author : Takao Fujiwara <tfujiwar@redhat.com>
Date   : 2022-06-29T16:09:01+09:00
Stats  : +383/-1 in 2 file(s)
URL    : https://src.fedoraproject.org/rpms/ibus/c/f85987315d8fd18594467b4dea082d468f8a35d3?branch=autotool

Log:
Add ibus im-module command

---
diff --git a/ibus-HEAD.patch b/ibus-HEAD.patch
index c0156e6..2e08e8c 100644
--- a/ibus-HEAD.patch
+++ b/ibus-HEAD.patch
@@ -2335,3 +2335,380 @@ index f8dced6b..92464234 100755
 -- 
 2.35.3
 
+From 65a70a49416a5a2f0fe75815cafce68ca39ee1f1 Mon Sep 17 00:00:00 2001
+From: fujiwarat <takao.fujiwara1@gmail.com>
+Date: Wed, 29 Jun 2022 15:36:12 +0900
+Subject: [PATCH] tools: Add ibus im-module command
+
+ibus im-module command can retrive gtk-im-module value from an
+instance of GtkIMMultiContext.
+The GTK version can be specified by --type option and the default
+is --type=gtk3 and GTK3 im-ibus.so is dlopened.
+---
+ client/gtk2/ibusim.c            | 20 +++++++
+ client/gtk4/ibusim.c            | 20 +++++++
+ tools/IBusIMModule-1.0.metadata |  1 +
+ tools/Makefile.am               | 92 ++++++++++++++++++++++++++++++---
+ tools/ibusimmodule.c            | 84 ++++++++++++++++++++++++++++++
+ tools/ibusimmodule.h            | 36 +++++++++++++
+ tools/main.vala                 | 15 ++++++
+ 7 files changed, 262 insertions(+), 6 deletions(-)
+ create mode 100644 tools/IBusIMModule-1.0.metadata
+ create mode 100644 tools/ibusimmodule.c
+ create mode 100644 tools/ibusimmodule.h
+
+diff --git a/client/gtk2/ibusim.c b/client/gtk2/ibusim.c
+index 55609ce7..e196d536 100644
+--- a/client/gtk2/ibusim.c
++++ b/client/gtk2/ibusim.c
+@@ -77,3 +77,23 @@ im_module_list (const GtkIMContextInfo ***contexts,
+     *n_contexts = G_N_ELEMENTS (info_list);
+ }
+ 
++G_MODULE_EXPORT const char *
++im_get_context_id (int    *argc,
++                   char ***argv)
++{
++    GtkIMContext *context;
++    char *preedit_string = NULL;
++    PangoAttrList *preedit_attrs = NULL;
++    const char *context_id;
++
++    gtk_init (argc, argv);
++    context = gtk_im_multicontext_new ();
++    gtk_im_context_get_preedit_string (context,
++                                       &preedit_string,
++                                       &preedit_attrs,
++                                       0);
++    context_id = gtk_im_multicontext_get_context_id (
++            GTK_IM_MULTICONTEXT (context));
++    return context_id;
++}
++
+diff --git a/client/gtk4/ibusim.c b/client/gtk4/ibusim.c
+index 5ecf9778..562bdf2d 100644
+--- a/client/gtk4/ibusim.c
++++ b/client/gtk4/ibusim.c
+@@ -50,3 +50,23 @@ g_io_im_ibus_unload (GTypeModule *type_module)
+     g_type_module_unuse (type_module);
+ }
+ 
++G_MODULE_EXPORT const char *
++im_get_context_id (int    *argc,
++                   char ***argv)
++{
++    GtkIMContext *context;
++    char *preedit_string = NULL;
++    PangoAttrList *preedit_attrs = NULL;
++    const char *context_id;
++
++    gtk_init ();
++    context = gtk_im_multicontext_new ();
++    gtk_im_context_get_preedit_string (context,
++                                       &preedit_string,
++                                       &preedit_attrs,
++                                       0);
++    context_id = gtk_im_multicontext_get_context_id (
++            GTK_IM_MULTICONTEXT (context));
++    return context_id;
++}
++
+diff --git a/tools/IBusIMModule-1.0.metadata b/tools/IBusIMModule-1.0.metadata
+new file mode 100644
+index 00000000..14adc9ee
+--- /dev/null
++++ b/tools/IBusIMModule-1.0.metadata
+@@ -0,0 +1 @@
++IBusIMModule cheader_filename="ibusimmodule.h" name="IBusIMModule"
+diff --git a/tools/Makefile.am b/tools/Makefile.am
+index e380a9aa..f96f2ba2 100644
+--- a/tools/Makefile.am
++++ b/tools/Makefile.am
+@@ -22,6 +22,12 @@
+ # USA
+ 
+ NULL =
++noinst_LTLIBRARIES =
++noinst_DATA =
++INTROSPECTION_GIRS =
++MAINTAINERCLEANFILES =
++DISTCLEANFILES =
++VAPIGEN_VAPIS =
+ 
+ libibus = $(top_builddir)/src/libibus-@IBUS_API_VERSION@.la
+ libibus_emoji_dialog = \
+@@ -57,6 +63,8 @@ AM_LDADD = \
+ AM_VALAFLAGS = \
+ 	--vapidir=$(top_builddir)/bindings/vala \
+ 	--vapidir=$(top_srcdir)/bindings/vala \
++	--vapidir=$(builddir) \
++	--vapidir=$(srcdir) \
+ 	--pkg=gio-2.0 \
+ 	--pkg=ibus-1.0 \
+ 	--pkg=posix \
+@@ -91,14 +99,17 @@ man_onedir = $(mandir)/man1
+ 	$(AM_V_GEN) gzip -c $< > $@.tmp && mv $@.tmp $@
+ 
+ EXTRA_DIST = \
+-	$(man_one_in_files) \
+-	ibus.bash \
+-	$(NULL)
++    $(man_one_in_files) \
++    ibus.bash \
++    ibusimmodule.c \
++    ibusimmodule.h \
++    IBusIMModule-1.0.metadata \
++    $(NULL)
+ 
+ CLEANFILES = \
+-	$(man_one_DATA) \
+-	$(man_one_files) \
+-	$(NULL)
++    $(man_one_DATA) \
++    $(man_one_files) \
++    $(NULL)
+ 
+ if ENABLE_EMOJI_DICT
+ if ENABLE_UI
+@@ -108,4 +119,73 @@ AM_VALAFLAGS += \
+ endif
+ endif
+ 
++if HAVE_INTROSPECTION
++BUILT_SOURCES = $(INTROSPECTION_GIRS) $(VAPIGEN_VAPIS)
++libibusimmodule = libibusimmodule.la
++noinst_LTLIBRARIES += $(libibusimmodule)
++
++AM_LDADD += $(libibusimmodule)
++AM_VALAFLAGS += \
++    --define=LIB_IBUS_MODULE \
++    --pkg=ibus-immodule-1.0 \
++    $(NULL)
++
++libibusimmodule_la_SOURCES = \
++    ibusimmodule.c                                      \
++    ibusimmodule.h                                      \
++    $(NULL)
++libibusimmodule_la_CFLAGS = \
++    @GLIB2_CFLAGS@                                      \
++    -DGTK2_IM_MODULEDIR=\"$(GTK2_IM_MODULEDIR)\"        \
++    -DGTK3_IM_MODULEDIR=\"$(GTK3_IM_MODULEDIR)\"        \
++    -DGTK4_IM_MODULEDIR=\"$(GTK4_IM_MODULEDIR)\"        \
++    $(NULL)
++libibusimmodule_la_LIBADD = \
++    @GLIB2_LIBS@                                        \
++    $(NULL)
++libibusimmodule_la_LDFLAGS = \
++    -no-undefined                                       \
++    -export-symbols-regex "ibus_.*"                     \
++    $(NULL)
++
++-include $(INTROSPECTION_MAKEFILE)
++INTROSPECTION_SCANNER_ARGS =
++INTROSPECTION_COMPILER_ARGS = \
++    --includedir=$(srcdir)                              \
++    --includedir=.                                      \
++    $(NULL)
++
++IBusIMModule-1.0.gir: $(libibusimmodule) Makefile
++IBusIMModule_1_0_gir_SCANNERFLAGS = \
++    --pkg=glib-2.0                                      \
++    $(IBUS_GIR_SCANNERFLAGS)                            \
++    $(NULL)
++IBusIMModule_1_0_gir_INCLUDES = GLib-2.0
++IBusIMModule_1_0_gir_LIBS = $(libibusimmodule)
++IBusIMModule_1_0_gir_FILES = ibusimmodule.h
++IBusIMModule_1_0_gir_CFLAGS = \
++    -I$(srcdir)                                         \
++    -I$(builddir)                                       \
++    $(NULL)
++
++ibusimmodule_gir = IBusIMModule-1.0.gir
++INTROSPECTION_GIRS += $(ibusimmodule_gir)
++noinst_DATA += $(ibusimmodule_gir)
++EXTRA_DIST += $(ibusimmodule_gir)
++MAINTAINERCLEANFILES += $(ibusimmodule_gir)
++DISTCLEANFILES += $(ibusimmodule_gir)
++
++-include $(VAPIGEN_MAKEFILE)
++ibus-immodule-1.0.vapi: $(ibusimmodule_gir) IBusIMModule-1.0.metadata
++ibus_immodule_vapi = ibus-immodule-1.0.vapi
++ibus_immodule_1_0_vapi_DEPS = glib-2.0
++ibus_immodule_1_0_vapi_METADATADIRS = $(srcdir)
++ibus_immodule_1_0_vapi_FILES = IBusIMModule-1.0.gir
++VAPIGEN_VAPIS += $(ibus_immodule_vapi)
++noinst_DATA += $(ibus_immodule_vapi)
++EXTRA_DIST += $(ibus_immodule_vapi)
++MAINTAINERCLEANFILES += $(ibus_immodule_vapi)
++DISTCLEANFILES += $(ibus_immodule_vapi)
++
++endif
+ -include $(top_srcdir)/git.mk
+diff --git a/tools/ibusimmodule.c b/tools/ibusimmodule.c
+new file mode 100644
+index 00000000..1587af3d
+--- /dev/null
++++ b/tools/ibusimmodule.c
+@@ -0,0 +1,84 @@
++#include <glib.h>
++#include <glib/gi18n-lib.h>
++#include <dlfcn.h>
++
++#ifndef DEFAULT_IM_MODULE_TYPE
++#define DEFAULT_IM_MODULE_TYPE "gtk3"
++#endif
++
++typedef const char * (* IBusIMGetContextIdFunc) (int *argc, char ***argv);
++
++static char *im_module_type;
++
++
++char *
++ibus_im_module_get_id (int argc, char *argv[])
++{
++    static const GOptionEntry options[3] = {
++        { "type", (char)0, (int)0, G_OPTION_ARG_STRING, &im_module_type,
++         N_ ("Type im-module TYPE = \"gtk2\",  \"gtk3\", \"gtk4\". " \
++             "Default is \"" DEFAULT_IM_MODULE_TYPE "\"."),
++         "TYPE"},
++        { NULL }
++    };
++    GOptionContext *option;
++    GError *error = NULL;
++    void *module;
++    char *im_context_id;
++    IBusIMGetContextIdFunc im_get_context_id;
++
++    if (!(option = g_option_context_new (NULL))) {
++        g_critical ("malloc GOptionContext is failed.");
++        return NULL;
++    }
++    g_option_context_add_main_entries (option, options, GETTEXT_PACKAGE);
++    g_option_context_parse (option, &argc, &argv, &error);
++    if (error) {
++        g_critical ("%s", error->message);
++        g_clear_error (&error);
++        return NULL;
++    }
++    g_option_context_free (option);
++    if (!im_module_type)
++        im_module_type = g_strdup (DEFAULT_IM_MODULE_TYPE);
++
++    if (G_LIKELY (!g_strcmp0 (im_module_type, "gtk3"))) {
++        module = dlopen (GTK3_IM_MODULEDIR "/im-ibus.so",
++                         RTLD_LAZY);
++    } else if (!g_strcmp0 (im_module_type, "gtk4")) {
++        const char *module_path_env = g_getenv ("GTK_PATH");
++        char *module_path;
++        if (module_path_env) {
++            module_path = g_build_filename (module_path_env,
++                                            GTK4_IM_MODULEDIR "/libim-ibus.so",
++                                            NULL);
++        } else {
++            module_path = g_strdup (GTK4_IM_MODULEDIR "/libim-ibus.so");
++        }
++        module = dlopen (module_path, RTLD_LAZY);
++        g_free (module_path);
++    } else if (!g_strcmp0 (im_module_type, "gtk2")) {
++        module = dlopen (GTK2_IM_MODULEDIR "/im-ibus.so",
++                         RTLD_LAZY);
++    } else {
++        module = dlopen (im_module_type, RTLD_LAZY);
++    }
++    if (!module) {
++        g_warning ("Not found module: %s", dlerror ());
++        return NULL;
++    }
++
++    im_get_context_id = dlsym (module, "im_get_context_id");
++    if (!im_get_context_id) {
++        g_warning ("Not found im_get_context_id: %s", dlerror ());
++        dlclose (module);
++        return NULL;
++    }
++
++    im_context_id = strdup (im_get_context_id (&argc, &argv));
++    dlclose (module);
++    return im_context_id;
++}
++
++#undef DEFAULT_IM_MODULE_TYPE
++
+diff --git a/tools/ibusimmodule.h b/tools/ibusimmodule.h
+new file mode 100644
+index 00000000..e762a747
+--- /dev/null
++++ b/tools/ibusimmodule.h
+@@ -0,0 +1,36 @@
++/* -*- mode: C; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
++/* vim:set et sts=4: */
++/* ibus - The Input Bus
++ * Copyright (C) 2022 Takao Fujiwara <takao.fujiwara1@gmail.com>
++ *
++ * This library is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU Lesser General Public
++ * License as published by the Free Software Foundation; either
++ * version 2.1 of the License, or (at your option) any later version.
++ *
++ * This library is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
++ * Lesser General Public License for more details.
++ *
++ * You should have received a copy of the GNU Lesser General Public
++ * License along with this library; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301
++ * USA
++ */
++
++#ifndef __IBUS_IM_MODULE_CONTEXT_H_
++#define __IBUS_IM_MODULE_CONTEXT_H_
++
++/**
++ * ibus_im_module_get_id:
++ * @argc: The length of argv
++ * @argv: (array length=argc) (element-type utf8): argv from main()
++ *
++ * Retrieve im-module value from GTK instance.
++ *
++ * Returns: (nullable): im-module value.
++ */
++char * ibus_im_module_get_id (int argc, char *argv[]);
++
++#endif
+diff --git a/tools/main.vala b/tools/main.vala
+index 71134334..587f3a09 100644
+--- a/tools/main.vala
++++ b/tools/main.vala
+@@ -641,6 +641,19 @@ int emoji_dialog(string[] argv) {
+ #endif
+ 
+ 
++int read_im_module(string[] argv) {
++#if LIB_IBUS_MODULE
++    string? im_module = IBusIMModule.im_module_get_id(argv);
++    if (im_module == null)
++        return Posix.EXIT_FAILURE;
++    print("%s\n".printf(im_module));
++#else
++    print("%s\n".printf(_("Not supported in your system.")));
++#endif
++    return Posix.EXIT_SUCCESS;
++}
++
++
+ int print_help(string[] argv) {
+     print_usage(stdout);
+     return Posix.EXIT_SUCCESS;
+@@ -672,6 +685,8 @@ const CommandEntry commands[]  = {
+ #if EMOJI_DICT
+     { "emoji", N_("Save emoji on dialog to clipboard"), emoji_dialog },
+ #endif
++    { "im-module", N_("Retrieve im-module value from GTK instance"),
++      read_im_module },
+     { "help", N_("Show this information"), print_help }
+ };
+ 
+-- 
+2.35.3
+

diff --git a/ibus.spec b/ibus.spec
index b9808aa..47585f1 100644
--- a/ibus.spec
+++ b/ibus.spec
@@ -39,7 +39,7 @@
 
 Name:           ibus
 Version:        1.5.26
-Release:        11%{?dist}
+Release:        12%{?dist}
 Summary:        Intelligent Input Bus for Linux OS
 License:        LGPLv2+
 URL:            https://github.com/ibus/%name/wiki
@@ -279,6 +279,7 @@ the functionality of the installed %{name} package.
 # cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || :
 cp client/gtk2/ibusimcontext.c client/gtk3/ibusimcontext.c || :
 cp client/gtk2/ibusimcontext.c client/gtk4/ibusimcontext.c || :
+cp client/gtk2/ibusim.c client/gtk3/ibusim.c || :
 
 
 # prep test
@@ -323,6 +324,7 @@ autoreconf -f -i -v
     %{nil}
 
 make -C ui/gtk3 maintainer-clean-generic
+make -C tools maintainer-clean-generic
 %make_build
 
 %install
@@ -522,6 +524,9 @@ dconf update || :
 %{_datadir}/installed-tests/ibus
 
 %changelog
+* Wed Jun 29 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.26-12
+- Add ibus im-module command
+
 * Sat Jun 25 2022 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.26-11
 - Enable custome theme
 - Fix ibus restart for GNOME desktop

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2026-05-31  2:07 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-05-31  2:07 [rpms/ibus] autotool: Add ibus im-module command Takao Fujiwara

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox