Support include directive in user compose file
Also set Ctrl-period to default Emoji shortcut key
This commit is contained in:
parent
7da805820c
commit
533a7a748e
510
ibus-HEAD.patch
510
ibus-HEAD.patch
@ -2164,6 +2164,486 @@ index 15b2369d..54b7e0d7 100755
|
|||||||
--
|
--
|
||||||
2.28.0
|
2.28.0
|
||||||
|
|
||||||
|
From 9f9c88be46436b0a7aa8e09e044a2223356b46dc Mon Sep 17 00:00:00 2001
|
||||||
|
From: lf- <software@lfcode.ca>
|
||||||
|
Date: Fri, 18 Jun 2021 15:39:19 +0900
|
||||||
|
Subject: [PATCH] src/ibuscomposetable: Add support for the include
|
||||||
|
directive
|
||||||
|
|
||||||
|
We also fix an issue with excess space at the start of lines stopping
|
||||||
|
comments being recognized.
|
||||||
|
|
||||||
|
BUG=https://github.com/ibus/ibus/pull/2296
|
||||||
|
---
|
||||||
|
src/ibuscomposetable.c | 100 ++++++++++++++++++++++++++++++++++++++---
|
||||||
|
1 file changed, 95 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
|
||||||
|
index 685ac717..66a5dfa7 100644
|
||||||
|
--- a/src/ibuscomposetable.c
|
||||||
|
+++ b/src/ibuscomposetable.c
|
||||||
|
@@ -21,7 +21,6 @@
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <glib/gstdio.h>
|
||||||
|
-#include <locale.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
@@ -36,6 +35,7 @@
|
||||||
|
|
||||||
|
#define IBUS_COMPOSE_TABLE_MAGIC "IBusComposeTable"
|
||||||
|
#define IBUS_COMPOSE_TABLE_VERSION (3)
|
||||||
|
+#define PATHLEN_MAX 256
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
gunichar *sequence;
|
||||||
|
@@ -181,7 +181,8 @@ parse_compose_sequence (IBusComposeData *compose_data,
|
||||||
|
int n = 0;
|
||||||
|
|
||||||
|
if (g_strv_length (words) < 2) {
|
||||||
|
- g_warning ("key sequence format is <a> <b>...: %s", line);
|
||||||
|
+ g_warning ("too few words; key sequence format is <a> <b>...: %s",
|
||||||
|
+ line);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -244,10 +245,68 @@ fail:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+static gchar *
|
||||||
|
+expand_include_path (const gchar *include_path) {
|
||||||
|
+ gchar *out = g_malloc0 (PATHLEN_MAX);
|
||||||
|
+ gchar *out_lastchar = out + PATHLEN_MAX - 2;
|
||||||
|
+ const gchar *i = include_path;
|
||||||
|
+ gchar *o = out;
|
||||||
|
+
|
||||||
|
+ while (*i && o < out_lastchar) {
|
||||||
|
+ // expand sequence
|
||||||
|
+ if (*i == '%') {
|
||||||
|
+ switch (*(i+1)) {
|
||||||
|
+ // $HOME
|
||||||
|
+ case 'H': {
|
||||||
|
+ const gchar *home = getenv ("HOME");
|
||||||
|
+ if (!home) {
|
||||||
|
+ g_warning ("while parsing XCompose include target %s, "
|
||||||
|
+ "%%H replacement failed because HOME is not "
|
||||||
|
+ "defined; the include has been ignored",
|
||||||
|
+ include_path);
|
||||||
|
+ goto fail;
|
||||||
|
+ }
|
||||||
|
+ o = out + g_strlcat (out, home, PATHLEN_MAX);
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ // locale compose file
|
||||||
|
+ case 'L':
|
||||||
|
+ g_warning ("while handling XCompose include target %s, found "
|
||||||
|
+ "redundant %%L include; the include has been "
|
||||||
|
+ "ignored", include_path);
|
||||||
|
+ goto fail;
|
||||||
|
+ // system compose dir
|
||||||
|
+ case 'S':
|
||||||
|
+ o = out + g_strlcat (out, "/usr/share/X11/locale",
|
||||||
|
+ PATHLEN_MAX);
|
||||||
|
+ break;
|
||||||
|
+ // escaped %
|
||||||
|
+ case '%':
|
||||||
|
+ *o++ = '%';
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ g_warning ("while parsing XCompose include target %s, found "
|
||||||
|
+ "unknown substitution character '%c'; the include "
|
||||||
|
+ "has been ignored", include_path, *(i+1));
|
||||||
|
+ goto fail;
|
||||||
|
+ }
|
||||||
|
+ i += 2;
|
||||||
|
+ } else {
|
||||||
|
+ *o++ = *i++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return out;
|
||||||
|
+fail:
|
||||||
|
+ g_free (out);
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
static void
|
||||||
|
parse_compose_line (GList **compose_list,
|
||||||
|
const gchar *line,
|
||||||
|
- int *compose_len)
|
||||||
|
+ int *compose_len,
|
||||||
|
+ gchar **include)
|
||||||
|
{
|
||||||
|
gchar **components = NULL;
|
||||||
|
IBusComposeData *compose_data = NULL;
|
||||||
|
@@ -256,11 +315,32 @@ parse_compose_line (GList **compose_list,
|
||||||
|
g_assert (compose_len);
|
||||||
|
*compose_len = 0;
|
||||||
|
|
||||||
|
+ // eat spaces at the start of the line
|
||||||
|
+ while (*line && (*line == ' ' || *line == '\t')) line++;
|
||||||
|
+
|
||||||
|
if (line[0] == '\0' || line[0] == '#')
|
||||||
|
return;
|
||||||
|
|
||||||
|
- if (g_str_has_prefix (line, "include "))
|
||||||
|
+ if (g_str_has_prefix (line, "include ")) {
|
||||||
|
+ const char *rest = line + sizeof ("include ") - 1;
|
||||||
|
+ while (*rest && *rest == ' ') rest++;
|
||||||
|
+
|
||||||
|
+ // grabbed the path part of the line
|
||||||
|
+ char *rest2;
|
||||||
|
+ if (*rest == '"') {
|
||||||
|
+ rest++;
|
||||||
|
+ rest2 = g_strdup (rest);
|
||||||
|
+ // eat the closing quote
|
||||||
|
+ char *i = rest2;
|
||||||
|
+ while (*i && *i != '"') i++;
|
||||||
|
+ *i = '\0';
|
||||||
|
+ } else {
|
||||||
|
+ rest2 = g_strdup (rest);
|
||||||
|
+ }
|
||||||
|
+ *include = expand_include_path (rest2);
|
||||||
|
+ g_free (rest2);
|
||||||
|
return;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
components = g_strsplit (line, ":", 2);
|
||||||
|
|
||||||
|
@@ -316,8 +396,18 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
|
||||||
|
lines = g_strsplit (contents, "\n", -1);
|
||||||
|
g_free (contents);
|
||||||
|
+ gchar *include = NULL;
|
||||||
|
for (i = 0; lines[i] != NULL; i++) {
|
||||||
|
- parse_compose_line (&compose_list, lines[i], &compose_len);
|
||||||
|
+ parse_compose_line (&compose_list, lines[i], &compose_len, &include);
|
||||||
|
+ if (include && *include) {
|
||||||
|
+ GList *rest = ibus_compose_list_parse_file (include,
|
||||||
|
+ max_compose_len);
|
||||||
|
+ if (rest) {
|
||||||
|
+ compose_list = g_list_concat (compose_list, rest);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
if (*max_compose_len < compose_len)
|
||||||
|
*max_compose_len = compose_len;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
||||||
|
From a755d1601a730b5fa0d463e7820311c12b1f1661 Mon Sep 17 00:00:00 2001
|
||||||
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
|
Date: Fri, 18 Jun 2021 15:39:50 +0900
|
||||||
|
Subject: [PATCH] src/ibuscomposetable: Do not include the same compose
|
||||||
|
file
|
||||||
|
|
||||||
|
BUG=https://github.com/ibus/ibus/pull/2296
|
||||||
|
---
|
||||||
|
src/ibuscomposetable.c | 130 +++++++++++++++++++++++++++++++----------
|
||||||
|
1 file changed, 100 insertions(+), 30 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
|
||||||
|
index 66a5dfa7..916fcae3 100644
|
||||||
|
--- a/src/ibuscomposetable.c
|
||||||
|
+++ b/src/ibuscomposetable.c
|
||||||
|
@@ -34,8 +34,8 @@
|
||||||
|
#include "ibusenginesimpleprivate.h"
|
||||||
|
|
||||||
|
#define IBUS_COMPOSE_TABLE_MAGIC "IBusComposeTable"
|
||||||
|
-#define IBUS_COMPOSE_TABLE_VERSION (3)
|
||||||
|
-#define PATHLEN_MAX 256
|
||||||
|
+#define IBUS_COMPOSE_TABLE_VERSION (4)
|
||||||
|
+#define X11_DATADIR X11_DATA_PREFIX "/share/X11/locale"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
gunichar *sequence;
|
||||||
|
@@ -247,17 +247,15 @@ fail:
|
||||||
|
|
||||||
|
static gchar *
|
||||||
|
expand_include_path (const gchar *include_path) {
|
||||||
|
- gchar *out = g_malloc0 (PATHLEN_MAX);
|
||||||
|
- gchar *out_lastchar = out + PATHLEN_MAX - 2;
|
||||||
|
- const gchar *i = include_path;
|
||||||
|
- gchar *o = out;
|
||||||
|
+ gchar *out = strdup ("");
|
||||||
|
+ const gchar *head, *i;
|
||||||
|
+ gchar *former, *o;
|
||||||
|
|
||||||
|
- while (*i && o < out_lastchar) {
|
||||||
|
- // expand sequence
|
||||||
|
+ for (head = i = include_path; *i; ++i) {
|
||||||
|
+ /* expand sequence */
|
||||||
|
if (*i == '%') {
|
||||||
|
- switch (*(i+1)) {
|
||||||
|
- // $HOME
|
||||||
|
- case 'H': {
|
||||||
|
+ switch (*(i + 1)) {
|
||||||
|
+ case 'H': { /* $HOME */
|
||||||
|
const gchar *home = getenv ("HOME");
|
||||||
|
if (!home) {
|
||||||
|
g_warning ("while parsing XCompose include target %s, "
|
||||||
|
@@ -266,23 +264,34 @@ expand_include_path (const gchar *include_path) {
|
||||||
|
include_path);
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
- o = out + g_strlcat (out, home, PATHLEN_MAX);
|
||||||
|
+ o = out;
|
||||||
|
+ former = g_strndup (head, i - head);
|
||||||
|
+ out = g_strdup_printf ("%s%s%s", o, former, home);
|
||||||
|
+ head = i + 2;
|
||||||
|
+ g_free (o);
|
||||||
|
+ g_free (former);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
- // locale compose file
|
||||||
|
- case 'L':
|
||||||
|
+ case 'L': /* locale compose file */
|
||||||
|
g_warning ("while handling XCompose include target %s, found "
|
||||||
|
"redundant %%L include; the include has been "
|
||||||
|
"ignored", include_path);
|
||||||
|
goto fail;
|
||||||
|
- // system compose dir
|
||||||
|
- case 'S':
|
||||||
|
- o = out + g_strlcat (out, "/usr/share/X11/locale",
|
||||||
|
- PATHLEN_MAX);
|
||||||
|
+ case 'S': /* system compose dir */
|
||||||
|
+ o = out;
|
||||||
|
+ former = g_strndup (head, i - head);
|
||||||
|
+ out = g_strdup_printf ("%s%s%s", o, former, X11_DATADIR);
|
||||||
|
+ head = i + 2;
|
||||||
|
+ g_free (o);
|
||||||
|
+ g_free (former);
|
||||||
|
break;
|
||||||
|
- // escaped %
|
||||||
|
- case '%':
|
||||||
|
- *o++ = '%';
|
||||||
|
+ case '%': /* escaped % */
|
||||||
|
+ o = out;
|
||||||
|
+ former = g_strndup (head, i - head);
|
||||||
|
+ out = g_strdup_printf ("%s%s%s", o, former, "%");
|
||||||
|
+ head = i + 2;
|
||||||
|
+ g_free (o);
|
||||||
|
+ g_free (former);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
g_warning ("while parsing XCompose include target %s, found "
|
||||||
|
@@ -290,11 +299,12 @@ expand_include_path (const gchar *include_path) {
|
||||||
|
"has been ignored", include_path, *(i+1));
|
||||||
|
goto fail;
|
||||||
|
}
|
||||||
|
- i += 2;
|
||||||
|
- } else {
|
||||||
|
- *o++ = *i++;
|
||||||
|
+ ++i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ o = out;
|
||||||
|
+ out = g_strdup_printf ("%s%s", o, head);
|
||||||
|
+ g_free (o);
|
||||||
|
return out;
|
||||||
|
fail:
|
||||||
|
g_free (out);
|
||||||
|
@@ -315,7 +325,7 @@ parse_compose_line (GList **compose_list,
|
||||||
|
g_assert (compose_len);
|
||||||
|
*compose_len = 0;
|
||||||
|
|
||||||
|
- // eat spaces at the start of the line
|
||||||
|
+ /* eat spaces at the start of the line */
|
||||||
|
while (*line && (*line == ' ' || *line == '\t')) line++;
|
||||||
|
|
||||||
|
if (line[0] == '\0' || line[0] == '#')
|
||||||
|
@@ -325,12 +335,12 @@ parse_compose_line (GList **compose_list,
|
||||||
|
const char *rest = line + sizeof ("include ") - 1;
|
||||||
|
while (*rest && *rest == ' ') rest++;
|
||||||
|
|
||||||
|
- // grabbed the path part of the line
|
||||||
|
+ /* grabbed the path part of the line */
|
||||||
|
char *rest2;
|
||||||
|
if (*rest == '"') {
|
||||||
|
rest++;
|
||||||
|
rest2 = g_strdup (rest);
|
||||||
|
- // eat the closing quote
|
||||||
|
+ /* eat the closing quote */
|
||||||
|
char *i = rest2;
|
||||||
|
while (*i && *i != '"') i++;
|
||||||
|
*i = '\0';
|
||||||
|
@@ -374,6 +384,23 @@ fail:
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
+static gchar *
|
||||||
|
+get_en_compose_file (void)
|
||||||
|
+{
|
||||||
|
+ gchar * const sys_langs[] = { "en_US.UTF-8", "en_US", "en.UTF-8",
|
||||||
|
+ "en", NULL };
|
||||||
|
+ gchar * const *sys_lang = NULL;
|
||||||
|
+ gchar *path = NULL;
|
||||||
|
+ for (sys_lang = sys_langs; *sys_lang; sys_lang++) {
|
||||||
|
+ path = g_build_filename (X11_DATADIR, *sys_lang, "Compose", NULL);
|
||||||
|
+ if (g_file_test (path, G_FILE_TEST_EXISTS))
|
||||||
|
+ break;
|
||||||
|
+ g_free (path);
|
||||||
|
+ }
|
||||||
|
+ return path;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+
|
||||||
|
static GList *
|
||||||
|
ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
int *max_compose_len)
|
||||||
|
@@ -399,6 +426,52 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
gchar *include = NULL;
|
||||||
|
for (i = 0; lines[i] != NULL; i++) {
|
||||||
|
parse_compose_line (&compose_list, lines[i], &compose_len, &include);
|
||||||
|
+ if (*max_compose_len < compose_len)
|
||||||
|
+ *max_compose_len = compose_len;
|
||||||
|
+ if (include && *include) {
|
||||||
|
+ GStatBuf buf_include = { 0, };
|
||||||
|
+ GStatBuf buf_parent = { 0, };
|
||||||
|
+ gchar *en_compose;
|
||||||
|
+ errno = 0;
|
||||||
|
+ if (g_stat (include, &buf_include)) {
|
||||||
|
+ g_warning ("Cannot access %s: %s",
|
||||||
|
+ include,
|
||||||
|
+ g_strerror (errno));
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ errno = 0;
|
||||||
|
+ if (g_stat (compose_file, &buf_parent)) {
|
||||||
|
+ g_warning ("Cannot access %s: %s",
|
||||||
|
+ compose_file,
|
||||||
|
+ g_strerror (errno));
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if (buf_include.st_ino == buf_parent.st_ino) {
|
||||||
|
+ g_warning ("Found recursive nest same file %s", include);
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ en_compose = get_en_compose_file ();
|
||||||
|
+ if (en_compose) {
|
||||||
|
+ errno = 0;
|
||||||
|
+ if (g_stat (en_compose, &buf_parent)) {
|
||||||
|
+ g_warning ("Cannot access %s: %s",
|
||||||
|
+ compose_file,
|
||||||
|
+ g_strerror (errno));
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
+ g_free (en_compose);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ g_free (en_compose);
|
||||||
|
+ if (buf_include.st_ino == buf_parent.st_ino) {
|
||||||
|
+ g_log ("System en_US Compose is already loaded %s\n", include);
|
||||||
|
+ g_clear_pointer (&include, g_free);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
if (include && *include) {
|
||||||
|
GList *rest = ibus_compose_list_parse_file (include,
|
||||||
|
max_compose_len);
|
||||||
|
@@ -406,10 +479,7 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
compose_list = g_list_concat (compose_list, rest);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-
|
||||||
|
g_clear_pointer (&include, g_free);
|
||||||
|
- if (*max_compose_len < compose_len)
|
||||||
|
- *max_compose_len = compose_len;
|
||||||
|
}
|
||||||
|
g_strfreev (lines);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
||||||
|
From 7f09379b3cb69c7de6d8d667ce398dcfc0000433 Mon Sep 17 00:00:00 2001
|
||||||
|
From: lf- <software@lfcode.ca>
|
||||||
|
Date: Thu, 24 Jun 2021 16:10:12 +0900
|
||||||
|
Subject: [PATCH] src/ibuscomposetable: Fix a buffer overflow in compose
|
||||||
|
handling
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
I believe this has no security impact but it is making my Valgrind sad.
|
||||||
|
|
||||||
|
Thanks to Omni for the help in finding the root cause of this.
|
||||||
|
|
||||||
|
~/.XCompose is:
|
||||||
|
```
|
||||||
|
<Multi_key> <g> <h> : "η"
|
||||||
|
<Multi_key> <g> <v> <t> <h> : "ϑ"
|
||||||
|
<Multi_key> <g> <h> : "ɣ"
|
||||||
|
```
|
||||||
|
|
||||||
|
BUG=https://github.com/ibus/ibus/pull/2297
|
||||||
|
---
|
||||||
|
src/ibuscomposetable.c | 15 ++++++++++++---
|
||||||
|
1 file changed, 12 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/ibuscomposetable.c b/src/ibuscomposetable.c
|
||||||
|
index 916fcae3..dd7cbf83 100644
|
||||||
|
--- a/src/ibuscomposetable.c
|
||||||
|
+++ b/src/ibuscomposetable.c
|
||||||
|
@@ -410,7 +410,6 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
gsize length = 0;
|
||||||
|
GError *error = NULL;
|
||||||
|
GList *compose_list = NULL;
|
||||||
|
- int compose_len = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
g_assert (max_compose_len);
|
||||||
|
@@ -423,8 +422,9 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
|
||||||
|
lines = g_strsplit (contents, "\n", -1);
|
||||||
|
g_free (contents);
|
||||||
|
- gchar *include = NULL;
|
||||||
|
for (i = 0; lines[i] != NULL; i++) {
|
||||||
|
+ int compose_len = 0;
|
||||||
|
+ gchar *include = NULL;
|
||||||
|
parse_compose_line (&compose_list, lines[i], &compose_len, &include);
|
||||||
|
if (*max_compose_len < compose_len)
|
||||||
|
*max_compose_len = compose_len;
|
||||||
|
@@ -467,7 +467,8 @@ ibus_compose_list_parse_file (const gchar *compose_file,
|
||||||
|
}
|
||||||
|
g_free (en_compose);
|
||||||
|
if (buf_include.st_ino == buf_parent.st_ino) {
|
||||||
|
- g_log ("System en_US Compose is already loaded %s\n", include);
|
||||||
|
+ g_message ("System en_US Compose is already loaded %s\n",
|
||||||
|
+ include);
|
||||||
|
g_clear_pointer (&include, g_free);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
@@ -583,12 +584,20 @@ ibus_compose_data_compare (gpointer a,
|
||||||
|
IBusComposeData *compose_data_b = b;
|
||||||
|
int max_compose_len = GPOINTER_TO_INT (data);
|
||||||
|
int i;
|
||||||
|
+ /* The allocation length of compose_data_a->sequence[] is different from
|
||||||
|
+ * one of compose_data_b->sequence[] and max_compose_len indicates
|
||||||
|
+ * the sequence length only but not include the compose value length.
|
||||||
|
+ * So max_compose_len is greater than any allocation lengths of sequence[]
|
||||||
|
+ * and this API should return if code_a or code_b is 0.
|
||||||
|
+ */
|
||||||
|
for (i = 0; i < max_compose_len; i++) {
|
||||||
|
gunichar code_a = compose_data_a->sequence[i];
|
||||||
|
gunichar code_b = compose_data_b->sequence[i];
|
||||||
|
|
||||||
|
if (code_a != code_b)
|
||||||
|
return code_a - code_b;
|
||||||
|
+ if (code_a == 0 && code_b == 0)
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
||||||
From ab6b9587a497e9662a2936df3dabed4582eeabdb Mon Sep 17 00:00:00 2001
|
From ab6b9587a497e9662a2936df3dabed4582eeabdb Mon Sep 17 00:00:00 2001
|
||||||
From: fujiwarat <takao.fujiwara1@gmail.com>
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
Date: Tue, 29 Jun 2021 12:40:20 +0900
|
Date: Tue, 29 Jun 2021 12:40:20 +0900
|
||||||
@ -2214,3 +2694,33 @@ index 54b7e0d7..0ef72c03 100755
|
|||||||
--
|
--
|
||||||
2.28.0
|
2.28.0
|
||||||
|
|
||||||
|
From b952d30a1b7c741052c168fe1081ecb4d4b1c034 Mon Sep 17 00:00:00 2001
|
||||||
|
From: fujiwarat <takao.fujiwara1@gmail.com>
|
||||||
|
Date: Wed, 14 Jul 2021 22:31:47 +0900
|
||||||
|
Subject: [PATCH] Change default Emoji shortcut key
|
||||||
|
|
||||||
|
The shortcut key was Ctrl-Shit-e to follow Unicode code point
|
||||||
|
shortcut key but now the shorcut key is changed to Ctrl-period
|
||||||
|
to follow GTK.
|
||||||
|
|
||||||
|
BUG=https://github.com/ibus/ibus/issues/2325
|
||||||
|
---
|
||||||
|
data/dconf/org.freedesktop.ibus.gschema.xml | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/data/dconf/org.freedesktop.ibus.gschema.xml b/data/dconf/org.freedesktop.ibus.gschema.xml
|
||||||
|
index a79e9296..099b9c60 100644
|
||||||
|
--- a/data/dconf/org.freedesktop.ibus.gschema.xml
|
||||||
|
+++ b/data/dconf/org.freedesktop.ibus.gschema.xml
|
||||||
|
@@ -183,7 +183,7 @@
|
||||||
|
<description>The shortcut keys for turning Unicode typing on or off</description>
|
||||||
|
</key>
|
||||||
|
<key name="hotkey" type="as">
|
||||||
|
- <default>[ '<Control><Shift>e' ]</default>
|
||||||
|
+ <default>[ '<Control>period' ]</default>
|
||||||
|
<summary>Emoji shortcut keys for gtk_accelerator_parse</summary>
|
||||||
|
<description>The shortcut keys for turning emoji typing on or off</description>
|
||||||
|
</key>
|
||||||
|
--
|
||||||
|
2.28.0
|
||||||
|
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
|
|
||||||
Name: ibus
|
Name: ibus
|
||||||
Version: 1.5.24
|
Version: 1.5.24
|
||||||
Release: 9%{?dist}
|
Release: 10%{?dist}
|
||||||
Summary: Intelligent Input Bus for Linux OS
|
Summary: Intelligent Input Bus for Linux OS
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: https://github.com/ibus/%name/wiki
|
URL: https://github.com/ibus/%name/wiki
|
||||||
@ -510,6 +510,10 @@ dconf update || :
|
|||||||
%{_datadir}/installed-tests/ibus
|
%{_datadir}/installed-tests/ibus
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jul 15 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-10
|
||||||
|
- Support include directive in user compose file
|
||||||
|
- Set Ctrl-period to default Emoji shortcut key
|
||||||
|
|
||||||
* Tue Jun 29 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-9
|
* Tue Jun 29 2021 Takao Fujiwara <tfujiwar@redhat.com> - 1.5.24-9
|
||||||
- Delete G_MESSAGES_DEBUG for gsettings output
|
- Delete G_MESSAGES_DEBUG for gsettings output
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user