Hello community,

here is the log from the commit of package ibus-rime for openSUSE:Factory 
checked in at 2020-09-29 19:01:24
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ibus-rime (Old)
 and      /work/SRC/openSUSE:Factory/.ibus-rime.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "ibus-rime"

Tue Sep 29 19:01:24 2020 rev:13 rq:838145 version:1.4.1~git20200712.33b2755

Changes:
--------
--- /work/SRC/openSUSE:Factory/ibus-rime/ibus-rime.changes      2019-04-04 
15:27:03.050889826 +0200
+++ /work/SRC/openSUSE:Factory/.ibus-rime.new.4249/ibus-rime.changes    
2020-09-29 19:01:51.117777027 +0200
@@ -1,0 +2,15 @@
+Mon Sep 28 00:52:42 UTC 2020 - [email protected]
+
+- Update to version 1.4.1~git20200712.33b2755:
+  * fix(rime_engine): ignore keys with super modifier
+  * feat(ibus_rime.yaml): install config file for ibus-rime, set default UI 
style
+  * fix(logging): wrong log file name
+  * feat(rime_settings): add config options: style/preedit_style, 
style/cursor_type
+  * fix(rime_settings.h): compile with gcc 10
+  * feat(plugin): dynamically load librime plugins read from `ibus_rime.yaml` 
(#73)
+  * chore(CHANGELOG.md): fix typo
+  * chore(release): 1.4.0 :tada:
+  * chore(README.md, rime.xml): use https link
+  * fix(rime_main.cc): deploy ibus_rime.yaml on maintenance
+
+-------------------------------------------------------------------

Old:
----
  ibus-rime-1.4.1~git20190223.c80c02f.tar.xz

New:
----
  ibus-rime-1.4.1~git20200712.33b2755.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ ibus-rime.spec ++++++
--- /var/tmp/diff_new_pack.I5TqOl/_old  2020-09-29 19:01:51.901777980 +0200
+++ /var/tmp/diff_new_pack.I5TqOl/_new  2020-09-29 19:01:51.901777980 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package ibus-rime
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,12 +17,12 @@
 
 
 Name:           ibus-rime
-Version:        1.4.1~git20190223.c80c02f
+Version:        1.4.1~git20200712.33b2755
 Release:        0
 Summary:        Rime for Linux/IBus
 License:        GPL-3.0-or-later
 Group:          System/I18n/Chinese
-Url:            https://github.com/rime/ibus-rime
+URL:            https://github.com/rime/ibus-rime
 Source:         %{name}-%{version}.tar.xz
 %if 0%{?suse_version} > 1325
 BuildRequires:  libboost_headers-devel
@@ -36,7 +36,6 @@
 BuildRequires:  libkyotocabinet-devel
 BuildRequires:  libnotify-devel
 BuildRequires:  librime-devel >= 1.0
-BuildRequires:  opencc
 BuildRequires:  opencc-devel
 Requires:       rime
 
@@ -55,8 +54,10 @@
 %files
 %defattr(-,root,root)
 %doc README.md
+%dir %{_datadir}/rime-data
 %{_ibus_componentdir}/rime.xml
 %{_datadir}/ibus-rime/
-%{_libexecdir}/ibus-rime/
+%{_datadir}/rime-data/ibus_rime.yaml
+%{_prefix}/lib/ibus-rime/
 
 %changelog

++++++ ibus-rime-1.4.1~git20190223.c80c02f.tar.xz -> 
ibus-rime-1.4.1~git20200712.33b2755.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/Makefile 
new/ibus-rime-1.4.1~git20200712.33b2755/Makefile
--- old/ibus-rime-1.4.1~git20190223.c80c02f/Makefile    2019-02-23 
05:01:20.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/Makefile    2020-07-12 
09:30:51.000000000 +0200
@@ -28,11 +28,14 @@
        install -m 755 -d $(sharedir)/ibus-rime
        install -m 755 -d $(sharedir)/ibus-rime/icons
        install -m 644 -t $(sharedir)/ibus-rime/icons/ icons/*.png
+       install -m 755 -d $(sharedir)/rime-data
+       install -m 644 -t $(sharedir)/rime-data/ ibus_rime.yaml
 
 uninstall:
        rm $(sharedir)/ibus/component/rime.xml
        rm -R $(sharedir)/ibus-rime
        rm -R $(libexecdir)/ibus-rime
+       rm $(sharedir)/rime-data/ibus_rime.yaml
 
 clean:
        if  [ -e $(builddir) ]; then rm -R $(builddir); fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/ibus_rime.yaml 
new/ibus-rime-1.4.1~git20200712.33b2755/ibus_rime.yaml
--- old/ibus-rime-1.4.1~git20190223.c80c02f/ibus_rime.yaml      1970-01-01 
01:00:00.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/ibus_rime.yaml      2020-07-12 
09:30:51.000000000 +0200
@@ -0,0 +1,28 @@
+# ibus-rime configuration
+
+config_version: '1.0'
+
+style:
+  # candidate list orientation (false|true).
+  horizontal: false
+
+  # embed preedit text in the input field (false|true).
+  inline_preedit: true
+
+  # `preedit_style` specifies what to display as inline preedit text.
+  # display inline the input under conversion.
+  preedit_style: composition
+  # preview the converted text.
+  # preedit_style: preview
+
+  # `cursor_type` specifies where the inline cursor is located.
+  # inline cursor is at the insertion point.
+  cursor_type: insert
+  # inline cursor is at the beginning of text under conversion.
+  # cursor_type: select
+
+  # built-in color schemes for highlighting the portion of inline preedit text
+  # that needs focus. (null|aqua|azure|ink|luna)
+  # by default highlighting color is not used.
+  color_scheme: ~
+  # color_scheme: aqua
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/rime_engine.c 
new/ibus-rime-1.4.1~git20200712.33b2755/rime_engine.c
--- old/ibus-rime-1.4.1~git20190223.c80c02f/rime_engine.c       2019-02-23 
05:01:20.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/rime_engine.c       2020-07-12 
09:30:51.000000000 +0200
@@ -90,7 +90,11 @@
 ibus_rime_create_session (IBusRimeEngine *rime_engine)
 {
   rime_engine->session_id = rime_api->create_session();
-  rime_api->set_option(rime_engine->session_id, "soft_cursor", True);
+  Bool inline_caret =
+      g_ibus_rime_settings.embed_preedit_text &&
+      g_ibus_rime_settings.preedit_style == PREEDIT_STYLE_COMPOSITION &&
+      g_ibus_rime_settings.cursor_type == CURSOR_TYPE_INSERT;
+  rime_api->set_option(rime_engine->session_id, "soft_cursor", !inline_caret);
 }
 
 static void
@@ -302,60 +306,102 @@
   }
 
   IBusText* inline_text = NULL;
-  IBusText* text = NULL;
+  IBusText* auxiliary_text = NULL;
   guint inline_cursor_pos = 0;
-  int offset = 0;
-  gboolean inline_preedit =
-      g_ibus_rime_settings.embed_preedit_text && context.commit_text_preview;
-  gboolean highlighting =
+  int preedit_offset = 0;
+
+  const gboolean has_highlighted_span =
       (context.composition.sel_start < context.composition.sel_end);
-  if (inline_preedit) {
+
+  // display preview text inline, if the commit_text_preview API is supported.
+  if (g_ibus_rime_settings.embed_preedit_text &&
+      g_ibus_rime_settings.preedit_style == PREEDIT_STYLE_PREVIEW &&
+      RIME_STRUCT_HAS_MEMBER(context, context.commit_text_preview) &&
+      context.commit_text_preview) {
     inline_text = ibus_text_new_from_string(context.commit_text_preview);
-    guint inline_text_len = ibus_text_get_length(inline_text);
-    inline_cursor_pos = inline_text_len;
+    const guint inline_text_len = ibus_text_get_length(inline_text);
+    inline_cursor_pos =
+        g_ibus_rime_settings.cursor_type == CURSOR_TYPE_SELECT ?
+        g_utf8_strlen(context.composition.preedit,
+                      context.composition.sel_start) :
+        inline_text_len;
     inline_text->attrs = ibus_attr_list_new();
     ibus_attr_list_append(
         inline_text->attrs,
         ibus_attr_underline_new(
             IBUS_ATTR_UNDERLINE_SINGLE, 0, inline_text_len));
-    // hide converted range of auxiliary text if preedit is inline
-    if (highlighting) {
-      offset = context.composition.sel_start;
-      glong highlighting_start =
-          g_utf8_strlen(context.composition.preedit, offset);
+    // show the unconverted range of preedit text as auxiliary text
+    if (has_highlighted_span) {
+      preedit_offset = context.composition.sel_start;
+      if (g_ibus_rime_settings.color_scheme) {
+        const guint start = g_utf8_strlen(
+            context.composition.preedit, context.composition.sel_start);
+        const guint end = inline_text_len;
+        ibus_attr_list_append(
+            inline_text->attrs,
+            ibus_attr_foreground_new(
+                g_ibus_rime_settings.color_scheme->text_color, start, end));
+        ibus_attr_list_append(
+            inline_text->attrs,
+            ibus_attr_background_new(
+                g_ibus_rime_settings.color_scheme->back_color, start, end));
+      }
+    } else {
+      // hide auxiliary text
+      preedit_offset = context.composition.length;
+    }
+  }
+  // display preedit text inline
+  else if (g_ibus_rime_settings.embed_preedit_text &&
+           g_ibus_rime_settings.preedit_style == PREEDIT_STYLE_COMPOSITION) {
+    inline_text = ibus_text_new_from_string(context.composition.preedit);
+    const guint inline_text_len = ibus_text_get_length(inline_text);
+    inline_cursor_pos =
+        g_ibus_rime_settings.cursor_type == CURSOR_TYPE_SELECT ?
+        g_utf8_strlen(context.composition.preedit,
+                      context.composition.sel_start) :
+        g_utf8_strlen(context.composition.preedit,
+                      context.composition.cursor_pos);
+    inline_text->attrs = ibus_attr_list_new();
+    ibus_attr_list_append(
+        inline_text->attrs,
+        ibus_attr_underline_new(
+            IBUS_ATTR_UNDERLINE_SINGLE, 0, inline_text_len));
+    if (has_highlighted_span && g_ibus_rime_settings.color_scheme) {
+      const guint start = g_utf8_strlen(
+          context.composition.preedit, context.composition.sel_start);
+      const glong end = g_utf8_strlen(
+          context.composition.preedit, context.composition.sel_end);
       ibus_attr_list_append(
           inline_text->attrs,
           ibus_attr_foreground_new(
-              g_ibus_rime_settings.color_scheme->text_color,
-              highlighting_start,
-              inline_text_len));
+              g_ibus_rime_settings.color_scheme->text_color, start, end));
       ibus_attr_list_append(
           inline_text->attrs,
           ibus_attr_background_new(
-              g_ibus_rime_settings.color_scheme->back_color,
-              highlighting_start,
-              inline_text_len));
-    }
-    else {
-      offset = context.composition.length;  // hide auxiliary text
+              g_ibus_rime_settings.color_scheme->back_color, start, end));
     }
+    preedit_offset = context.composition.length;
   }
-  if (offset < context.composition.length) {
-    const char* preedit = context.composition.preedit + offset;
-    text = ibus_text_new_from_string(preedit);
-    glong preedit_len = g_utf8_strlen(preedit, -1);
-    glong cursor_pos =
-        g_utf8_strlen(preedit, context.composition.cursor_pos - offset);
-    text->attrs = ibus_attr_list_new();
-    if (highlighting) {
-      glong start = g_utf8_strlen(
-          preedit,context.composition.sel_start - offset);
-      glong end = g_utf8_strlen(preedit, context.composition.sel_end - offset);
+
+  // calculate auxiliary text
+  if (preedit_offset < context.composition.length) {
+    const char* preedit = context.composition.preedit + preedit_offset;
+    auxiliary_text = ibus_text_new_from_string(preedit);
+    // glong preedit_len = g_utf8_strlen(preedit, -1);
+    // glong cursor_pos = g_utf8_strlen(
+    //    preedit, context.composition.cursor_pos - preedit_offset);
+    if (has_highlighted_span) {
+      auxiliary_text->attrs = ibus_attr_list_new();
+      const glong start = g_utf8_strlen(
+          preedit, context.composition.sel_start - preedit_offset);
+      const glong end = g_utf8_strlen(
+          preedit, context.composition.sel_end - preedit_offset);
       ibus_attr_list_append(
-          text->attrs,
+          auxiliary_text->attrs,
           ibus_attr_foreground_new(RIME_COLOR_BLACK, start, end));
       ibus_attr_list_append(
-          text->attrs,
+          auxiliary_text->attrs,
           ibus_attr_background_new(RIME_COLOR_LIGHT, start, end));
     }
   }
@@ -363,14 +409,13 @@
   if (inline_text) {
     ibus_engine_update_preedit_text(
         (IBusEngine *)rime_engine, inline_text, inline_cursor_pos, TRUE);
-  }
-  else {
+  } else {
     ibus_engine_hide_preedit_text((IBusEngine *)rime_engine);
   }
-  if (text) {
-    ibus_engine_update_auxiliary_text((IBusEngine *)rime_engine, text, TRUE);
-  }
-  else {
+  if (auxiliary_text) {
+    ibus_engine_update_auxiliary_text(
+        (IBusEngine *)rime_engine, auxiliary_text, TRUE);
+  } else {
     ibus_engine_hide_auxiliary_text((IBusEngine *)rime_engine);
   }
 
@@ -458,10 +503,15 @@
                                     guint       keycode,
                                     guint       modifiers)
 {
+  // ignore super key
+  if (modifiers & IBUS_SUPER_MASK) {
+    return FALSE;
+  }
+  
   IBusRimeEngine *rime_engine = (IBusRimeEngine *)engine;
 
   modifiers &= (IBUS_RELEASE_MASK | IBUS_LOCK_MASK | IBUS_SHIFT_MASK |
-                IBUS_CONTROL_MASK | IBUS_MOD1_MASK | IBUS_SUPER_MASK);
+                IBUS_CONTROL_MASK | IBUS_MOD1_MASK);
 
   if (!rime_api->find_session(rime_engine->session_id)) {
     ibus_rime_create_session(rime_engine);
@@ -481,9 +531,10 @@
                                                 guint prop_state)
 {
   extern void ibus_rime_start(gboolean full_check);
+  extern void ibus_rime_stop();
   IBusRimeEngine *rime_engine = (IBusRimeEngine *)engine;
   if (!strcmp("deploy", prop_name)) {
-    rime_api->finalize();
+    ibus_rime_stop();
     ibus_rime_start(TRUE);
     ibus_rime_engine_update(rime_engine);
   }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/rime_main.c 
new/ibus-rime-1.4.1~git20200712.33b2755/rime_main.c
--- old/ibus-rime-1.4.1~git20190223.c80c02f/rime_main.c 2019-02-23 
05:01:20.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/rime_main.c 2020-07-12 
09:30:51.000000000 +0200
@@ -64,6 +64,117 @@
   }
 }
 
+static int n_plugin_handles = 0;
+static void **plugin_handles;
+static const char **plugin_modules;
+
+static void load_plugins(RimeConfig *config) {
+  void **new_plugin_handles;
+
+  // reserve space new plugins
+  int n = rime_api->config_list_size(config, "plugins");
+  new_plugin_handles = realloc(plugin_handles, sizeof(void *) * 
(n_plugin_handles + n));
+  if (!new_plugin_handles) {
+    return;
+  } else {
+    plugin_handles = new_plugin_handles;
+  }
+
+  RimeConfigIterator iter;
+  n = n_plugin_handles;
+  if (rime_api->config_begin_list(&iter, config, "plugins")) {
+    while(rime_api->config_next(&iter)) {
+      const char *file = rime_api->config_get_cstring(config, iter.path);
+      if (file) {
+        plugin_handles[n] = dlopen(file, RTLD_LAZY | RTLD_GLOBAL);
+        if (plugin_handles[n]) {
+          int k;
+          for (k = 0; k < n_plugin_handles; k++)
+            if (plugin_handles[k] == plugin_handles[n]) {
+              // already in plugin_handles, close
+              dlclose(plugin_handles[n]);
+              break;
+            }
+          if (k == n_plugin_handles)
+            n++;
+        }
+      }
+    }
+    rime_api->config_end(&iter);
+  }
+  n_plugin_handles = n;
+}
+
+static void load_modules(RimeConfig *config) {
+  int m = rime_api->config_list_size(config, "modules");
+  if (m == 0) {
+    return;
+  }
+
+  plugin_modules = malloc(sizeof(const char *) * (m + 2));
+  if (!plugin_modules) {
+    return;
+  }
+
+  RimeConfigIterator iter;
+  m = 1;
+  plugin_modules[0] = "default";
+  if (rime_api->config_begin_list(&iter, config, "modules")) {
+    while(rime_api->config_next(&iter)) {
+      const char *mod = rime_api->config_get_cstring(config, iter.path);
+      if (mod) {
+        plugin_modules[m] = strdup(mod);
+        m++;
+      }
+    }
+    rime_api->config_end(&iter);
+  }
+  plugin_modules[m] = NULL;
+}
+
+static void load_plugins_modules(const char *config_file)
+{
+  RimeConfig config = {0};
+
+  if (!rime_api->config_open(config_file, &config)) {
+    g_error("error loading settings for %s\n", config_file);
+    return;
+  }
+
+  load_plugins(&config);
+  load_modules(&config);
+
+  rime_api->config_close(&config);
+}
+
+static void unload_plugins() {
+  if (plugin_handles) {
+    for (int i = 0; i < n_plugin_handles; i++) {
+      dlclose(plugin_handles[i]);
+    }
+    free(plugin_handles);
+    plugin_handles = NULL;
+  }
+}
+
+static void unload_modules() {
+  if (plugin_modules) {
+    for (int i = 1; plugin_modules[i]; i++) {
+      free((void *) plugin_modules[i]);
+    }
+    free(plugin_modules);
+    plugin_modules = NULL;
+  }
+}
+
+static void fill_traits(RimeTraits *traits) {
+  traits->shared_data_dir = IBUS_RIME_SHARED_DATA_DIR;
+  traits->distribution_name = DISTRIBUTION_NAME;
+  traits->distribution_code_name = DISTRIBUTION_CODE_NAME;
+  traits->distribution_version = DISTRIBUTION_VERSION;
+  traits->app_name = "rime.ibus";
+}
+
 void ibus_rime_start(gboolean full_check) {
   char user_data_dir[512] = {0};
   char old_user_data_dir[512] = {0};
@@ -79,29 +190,30 @@
   }
   rime_api->set_notification_handler(notification_handler, NULL);
   RIME_STRUCT(RimeTraits, ibus_rime_traits);
-  ibus_rime_traits.shared_data_dir = IBUS_RIME_SHARED_DATA_DIR;
+  fill_traits(&ibus_rime_traits);
   ibus_rime_traits.user_data_dir = user_data_dir;
-  ibus_rime_traits.distribution_name = DISTRIBUTION_NAME;
-  ibus_rime_traits.distribution_code_name = DISTRIBUTION_CODE_NAME;
-  ibus_rime_traits.distribution_version = DISTRIBUTION_VERSION;
-  ibus_rime_traits.app_name = "ibus";
-  static RIME_MODULE_LIST(ibus_rime_modules, "default", "legacy");
-  ibus_rime_traits.modules = ibus_rime_modules;
+
+  // first initialization (without extra modules)
   rime_api->initialize(&ibus_rime_traits);
   if (rime_api->start_maintenance((Bool)full_check)) {
     // update frontend config
     rime_api->deploy_config_file("ibus_rime.yaml", "config_version");
   }
-}
 
-static void* legacy_module_handle = NULL;
+  // load plugins & modules
+  load_plugins_modules("ibus_rime");
 
-static void load_plugin_modules() {
-  legacy_module_handle = dlopen("librime-legacy.so", RTLD_LAZY);
+  // reinitialize if we have extra modules
+  if (plugin_modules) {
+    rime_api->finalize();
+    ibus_rime_traits.modules = plugin_modules;
+    rime_api->initialize(&ibus_rime_traits);
+  }
 }
 
-static void unload_plugin_modules() {
-  dlclose(legacy_module_handle);
+void ibus_rime_stop() {
+  rime_api->finalize();
+  unload_modules();
 }
 
 static void ibus_disconnect_cb(IBusBus *bus, gpointer user_data) {
@@ -135,15 +247,18 @@
     exit(1);
   }
 
-  load_plugin_modules();
+  RIME_STRUCT(RimeTraits, ibus_rime_traits);
+  fill_traits(&ibus_rime_traits);
+  rime_api->setup(&ibus_rime_traits);
+
   gboolean full_check = FALSE;
   ibus_rime_start(full_check);
   ibus_rime_load_settings();
 
   ibus_main();
 
-  rime_api->finalize();
-  unload_plugin_modules();
+  ibus_rime_stop();
+  unload_plugins();
   notify_uninit();
 
   g_object_unref(factory);
@@ -152,7 +267,7 @@
 
 static void sigterm_cb(int sig) {
   if (rime_api) {
-    rime_api->finalize();
+    ibus_rime_stop();
   }
   notify_uninit();
   exit(EXIT_FAILURE);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/rime_settings.c 
new/ibus-rime-1.4.1~git20200712.33b2755/rime_settings.c
--- old/ibus-rime-1.4.1~git20190223.c80c02f/rime_settings.c     2019-02-23 
05:01:20.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/rime_settings.c     2020-07-12 
09:30:51.000000000 +0200
@@ -14,9 +14,11 @@
 };
 
 static struct IBusRimeSettings ibus_rime_settings_default = {
-  FALSE,
-  IBUS_ORIENTATION_SYSTEM,
-  &preset_color_schemes[0],
+  .embed_preedit_text = TRUE,
+  .preedit_style = PREEDIT_STYLE_COMPOSITION,
+  .cursor_type = CURSOR_TYPE_INSERT,
+  .lookup_table_orientation = IBUS_ORIENTATION_SYSTEM,
+  .color_scheme = NULL,
 };
 
 struct IBusRimeSettings g_ibus_rime_settings;
@@ -34,7 +36,7 @@
     }
   }
   // fallback to default
-  settings->color_scheme = &preset_color_schemes[0];
+  settings->color_scheme = NULL;
 }
 
 void
@@ -54,6 +56,26 @@
     g_ibus_rime_settings.embed_preedit_text = !!inline_preedit;
   }
 
+  const char* preedit_style_str =
+      rime_api->config_get_cstring(&config, "style/preedit_style");
+  if(preedit_style_str) {
+    if(!strcmp(preedit_style_str, "composition")) {
+      g_ibus_rime_settings.preedit_style = PREEDIT_STYLE_COMPOSITION;
+    } else if(!strcmp(preedit_style_str, "preview")) {
+      g_ibus_rime_settings.preedit_style = PREEDIT_STYLE_PREVIEW;
+    }
+  }
+
+  const char* cursor_type_str =
+      rime_api->config_get_cstring(&config, "style/cursor_type");
+  if (cursor_type_str) {
+    if (!strcmp(cursor_type_str, "insert")) {
+      g_ibus_rime_settings.cursor_type = CURSOR_TYPE_INSERT;
+    } else if (!strcmp(cursor_type_str, "select")) {
+      g_ibus_rime_settings.cursor_type = CURSOR_TYPE_SELECT;
+    }
+  }
+
   Bool horizontal = False;
   if (rime_api->config_get_bool(&config, "style/horizontal", &horizontal)) {
     g_ibus_rime_settings.lookup_table_orientation =
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/ibus-rime-1.4.1~git20190223.c80c02f/rime_settings.h 
new/ibus-rime-1.4.1~git20200712.33b2755/rime_settings.h
--- old/ibus-rime-1.4.1~git20190223.c80c02f/rime_settings.h     2019-02-23 
05:01:20.000000000 +0100
+++ new/ibus-rime-1.4.1~git20200712.33b2755/rime_settings.h     2020-07-12 
09:30:51.000000000 +0200
@@ -8,6 +8,16 @@
 #define RIME_COLOR_DARK   0x606060
 #define RIME_COLOR_BLACK  0x000000
 
+enum PreeditStyle {
+  PREEDIT_STYLE_COMPOSITION,
+  PREEDIT_STYLE_PREVIEW,
+};
+
+enum CursorType {
+  CURSOR_TYPE_INSERT,
+  CURSOR_TYPE_SELECT,
+};
+
 struct ColorSchemeDefinition {
   const char* color_scheme_id;
   int text_color;
@@ -16,11 +26,13 @@
 
 struct IBusRimeSettings {
   gboolean embed_preedit_text;
+  gint preedit_style;
+  gint cursor_type;
   gint lookup_table_orientation;
   struct ColorSchemeDefinition* color_scheme;
 };
 
-struct IBusRimeSettings g_ibus_rime_settings;
+extern struct IBusRimeSettings g_ibus_rime_settings;
 
 void
 ibus_rime_load_settings();


Reply via email to