Replaced icon_symbol property with symbol.

- Use separated keyboard engines for xkb group layouts.
 - Hide xkb default layout from ibus-setup.
This commit is contained in:
Takao Fujiwara 2011-06-29 18:31:10 +09:00
parent 577a9816b5
commit 47affbc629
7 changed files with 423 additions and 369 deletions

2
.gitignore vendored
View File

@ -11,6 +11,6 @@ ibus-1.3.6.tar.gz
/ibus-1.3.99.20110228.tar.gz /ibus-1.3.99.20110228.tar.gz
/ibus-1.3.99.20110408.tar.gz /ibus-1.3.99.20110408.tar.gz
/ibus-1.3.99.20110419.tar.gz /ibus-1.3.99.20110419.tar.gz
/gnome-shell-ibus-plugins-20110622.tar.bz2 /gnome-shell-ibus-plugins-20110629.tar.bz2
/ibus_master_da.po /ibus_master_da.po
/ibus-indicator.tar.bz2 /ibus-indicator.tar.bz2

View File

@ -1,6 +1,6 @@
From 7fab90a9962d3b4f8eff40cf08939873575d153e Mon Sep 17 00:00:00 2001 From 14986cb38f431d132332b2e8f9da1ca2b8a5d10e Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com> From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Tue, 21 Jun 2011 11:34:52 +0900 Date: Wed, 29 Jun 2011 16:52:08 +0900
Subject: [PATCH] Add XKB layouts Subject: [PATCH] Add XKB layouts
--- ---
@ -12,7 +12,7 @@ Subject: [PATCH] Add XKB layouts
ibus/__init__.py | 2 + ibus/__init__.py | 2 +
ibus/bus.py | 3 + ibus/bus.py | 3 +
ibus/interface/iibus.py | 3 + ibus/interface/iibus.py | 3 +
ibus/xkblayout.py.in | 225 ++++++++++++++++ ibus/xkblayout.py.in | 215 ++++++++++++++++
ibus/xkbxml.py.in | 413 ++++++++++++++++++++++++++++++ ibus/xkbxml.py.in | 413 ++++++++++++++++++++++++++++++
setup/Makefile.am | 1 + setup/Makefile.am | 1 +
setup/enginecombobox.py | 7 +- setup/enginecombobox.py | 7 +-
@ -36,7 +36,7 @@ Subject: [PATCH] Add XKB layouts
xkb/xkblib.h | 41 +++ xkb/xkblib.h | 41 +++
xkb/xkbxml.c | 335 ++++++++++++++++++++++++ xkb/xkbxml.c | 335 ++++++++++++++++++++++++
xkb/xkbxml.h | 110 ++++++++ xkb/xkbxml.h | 110 ++++++++
32 files changed, 4018 insertions(+), 6 deletions(-) 32 files changed, 4008 insertions(+), 6 deletions(-)
create mode 100644 ibus/xkblayout.py.in create mode 100644 ibus/xkblayout.py.in
create mode 100644 ibus/xkbxml.py.in create mode 100644 ibus/xkbxml.py.in
create mode 100644 setup/xkbsetup.py create mode 100644 setup/xkbsetup.py
@ -303,10 +303,10 @@ index 678d517..7de56fc 100644
diff --git a/ibus/xkblayout.py.in b/ibus/xkblayout.py.in diff --git a/ibus/xkblayout.py.in b/ibus/xkblayout.py.in
new file mode 100644 new file mode 100644
index 0000000..637f6c1 index 0000000..4cb3ffd
--- /dev/null --- /dev/null
+++ b/ibus/xkblayout.py.in +++ b/ibus/xkblayout.py.in
@@ -0,0 +1,225 @@ @@ -0,0 +1,215 @@
+# vim:set et sts=4 sw=4: +# vim:set et sts=4 sw=4:
+# +#
+# ibus - The Input Bus +# ibus - The Input Bus
@ -360,22 +360,12 @@ index 0000000..637f6c1
+ +
+ +
+ def __get_model_from_layout(self, layout): + def __get_model_from_layout(self, layout):
+ layout_array = layout.split(',') + left_bracket = layout.find('(')
+ option_array = [] + right_bracket = layout.find(')')
+ is_bracket = False + if left_bracket >= 0 and right_bracket > left_bracket:
+ for i, l in enumerate(layout_array): + return (layout[:left_bracket], \
+ option_array.append("") + layout[left_bracket + 1:right_bracket])
+ left_bracket = l.find('(') + return (layout, "default")
+ right_bracket = l.find(')')
+ if left_bracket >= 0 and right_bracket > left_bracket:
+ is_bracket = True
+ layout_array[i] = l[:left_bracket]
+ option_array[i] = l[left_bracket + 1:right_bracket]
+ if is_bracket == False:
+ return (layout, "default")
+ layout = ','.join(layout_array)
+ option = ','.join(option_array)
+ return (layout, option)
+ +
+ def __get_output_from_cmdline(self, arg, string): + def __get_output_from_cmdline(self, arg, string):
+ exec_command = "%s %s" % (self.__command, arg) + exec_command = "%s %s" % (self.__command, arg)
@ -4506,5 +4496,5 @@ index 0000000..56811ef
+G_END_DECLS +G_END_DECLS
+#endif +#endif
-- --
1.7.4.4 1.7.5.4

View File

@ -1,12 +1,12 @@
From faaea227c58ec17d392ec4ecdf3851e1a52ecd00 Mon Sep 17 00:00:00 2001 From b58e9d7673d255f86f5224b527457c0132eea3c8 Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com> From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 22 Jun 2011 19:26:21 +0900 Date: Wed, 29 Jun 2011 16:54:45 +0900
Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead
of on-off. of on-off.
--- ---
bus/Makefile.am | 20 ++-- bus/Makefile.am | 20 ++--
bus/ibusimpl.c | 250 +++++++++++++++++++++++++++++---------- bus/ibusimpl.c | 255 ++++++++++++++++++++++++++++++----------
bus/registry.c | 35 ++++++ bus/registry.c | 35 ++++++
configure.ac | 31 +++++ configure.ac | 31 +++++
data/Makefile.am | 6 +- data/Makefile.am | 6 +-
@ -14,18 +14,19 @@ Subject: [PATCH] Add a bridge hotkey which use prev-next engines instead
data/ibus.schemas.in.in | 286 ++++++++++++++++++++++++++++++++++++++++++++ data/ibus.schemas.in.in | 286 ++++++++++++++++++++++++++++++++++++++++++++
ibus/_config.py.in | 6 + ibus/_config.py.in | 6 +
ibus/inputcontext.py | 4 + ibus/inputcontext.py | 4 +
setup/enginetreeview.py | 3 + setup/enginecombobox.py | 3 +
src/Makefile.am | 1 + setup/enginetreeview.py | 16 ++-
src/ibusbus.c | 6 + src/Makefile.am | 18 ++--
src/ibusbus.h | 9 ++ src/ibusbus.c | 12 ++
src/ibusbus.h | 18 +++
src/ibusenginedesc.c | 4 + src/ibusenginedesc.c | 4 +
src/ibushotkey.c | 11 ++ src/ibushotkey.c | 11 ++
src/ibushotkey.h | 11 ++ src/ibushotkey.h | 11 ++
ui/gtk/panel.py | 60 +++++++++- ui/gtk/panel.py | 151 ++++++++++++++++++++---
xkb/Makefile.am | 2 + xkb/Makefile.am | 2 +
xkb/ibus-engine-xkb-main.c | 8 ++ xkb/ibus-engine-xkb-main.c | 8 ++
xkb/xkbxml.c | 8 +- xkb/xkbxml.c | 8 +-
20 files changed, 686 insertions(+), 361 deletions(-) 21 files changed, 804 insertions(+), 387 deletions(-)
delete mode 100644 data/ibus.schemas.in delete mode 100644 data/ibus.schemas.in
create mode 100644 data/ibus.schemas.in.in create mode 100644 data/ibus.schemas.in.in
@ -61,7 +62,7 @@ index 074b456..0efaa1b 100644
AM_LDADD = \ AM_LDADD = \
@GOBJECT2_LIBS@ \ @GOBJECT2_LIBS@ \
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
index 38d6d11..65a034b 100644 index b356b2c..f3ca330 100644
--- a/bus/ibusimpl.c --- a/bus/ibusimpl.c
+++ b/bus/ibusimpl.c +++ b/bus/ibusimpl.c
@@ -20,6 +20,10 @@ @@ -20,6 +20,10 @@
@ -75,16 +76,18 @@ index 38d6d11..65a034b 100644
#include <unistd.h> #include <unistd.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
@@ -79,6 +83,8 @@ struct _BusIBusImpl { @@ -79,6 +83,10 @@ struct _BusIBusImpl {
/* engine-specific hotkeys */ /* engine-specific hotkeys */
IBusHotkeyProfile *engines_hotkey_profile; IBusHotkeyProfile *engines_hotkey_profile;
GHashTable *hotkey_to_engines_map; GHashTable *hotkey_to_engines_map;
+ +
+#if USE_BRIDGE_HOTKEY
+ IBusEngineDesc *prev_hotkey_engine; + IBusEngineDesc *prev_hotkey_engine;
+#endif
}; };
struct _BusIBusImplClass { struct _BusIBusImplClass {
@@ -285,6 +291,30 @@ _panel_destroy_cb (BusPanelProxy *panel, @@ -285,6 +293,30 @@ _panel_destroy_cb (BusPanelProxy *panel,
g_object_unref (panel); g_object_unref (panel);
} }
@ -115,7 +118,7 @@ index 38d6d11..65a034b 100644
static void static void
_config_set_value_done (GObject *object, _config_set_value_done (GObject *object,
GAsyncResult *res, GAsyncResult *res,
@@ -475,8 +505,21 @@ _set_preload_engines (BusIBusImpl *ibus, @@ -475,8 +507,21 @@ _set_preload_engines (BusIBusImpl *ibus,
g_variant_unref (value); g_variant_unref (value);
} }
@ -138,7 +141,7 @@ index 38d6d11..65a034b 100644
if (ibus->engine_list) { if (ibus->engine_list) {
BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data); BusComponent *component = bus_component_from_engine_desc ((IBusEngineDesc *) ibus->engine_list->data);
@@ -573,7 +616,9 @@ bus_ibus_impl_set_trigger (BusIBusImpl * @@ -573,7 +618,9 @@ bus_ibus_impl_set_trigger (BusIBusImpl *
{ {
GQuark hotkey = g_quark_from_static_string ("trigger"); GQuark hotkey = g_quark_from_static_string ("trigger");
if (value != NULL) { if (value != NULL) {
@ -148,7 +151,7 @@ index 38d6d11..65a034b 100644
} }
#ifndef OS_CHROMEOS #ifndef OS_CHROMEOS
else { else {
@@ -1182,28 +1227,110 @@ _ibus_get_address (BusIBusImpl @@ -1182,28 +1229,110 @@ _ibus_get_address (BusIBusImpl
g_variant_new ("(s)", bus_server_get_address ())); g_variant_new ("(s)", bus_server_get_address ()));
} }
@ -276,7 +279,7 @@ index 38d6d11..65a034b 100644
} }
/** /**
@@ -1216,7 +1343,39 @@ _context_request_engine_cb (BusInputCont @@ -1216,7 +1345,39 @@ _context_request_engine_cb (BusInputCont
const gchar *engine_name, const gchar *engine_name,
BusIBusImpl *ibus) BusIBusImpl *ibus)
{ {
@ -317,7 +320,7 @@ index 38d6d11..65a034b 100644
} }
/** /**
@@ -2357,6 +2516,11 @@ bus_ibus_impl_filter_keyboard_shortcuts @@ -2357,6 +2518,11 @@ bus_ibus_impl_filter_keyboard_shortcuts
* the same hotkey, then we should switch to the next engine with the * the same hotkey, then we should switch to the next engine with the
* same hotkey in the list. Otherwise, we just switch to the first * same hotkey in the list. Otherwise, we just switch to the first
* engine in the list. */ * engine in the list. */
@ -329,22 +332,24 @@ index 38d6d11..65a034b 100644
GList *p = engine_list; GList *p = engine_list;
for (; p->next != NULL; p = p->next) { for (; p->next != NULL; p = p->next) {
if (current_engine_desc == (IBusEngineDesc *) p->data) { if (current_engine_desc == (IBusEngineDesc *) p->data) {
@@ -2364,9 +2528,14 @@ bus_ibus_impl_filter_keyboard_shortcuts @@ -2364,8 +2530,16 @@ bus_ibus_impl_filter_keyboard_shortcuts
break; break;
} }
} }
+#endif +#endif
if (current_engine_desc != new_engine_desc) { +#if USE_BRIDGE_HOTKEY
+ if (current_engine_desc != new_engine_desc ||
+ g_strcmp0 (ibus_engine_desc_get_name (new_engine_desc),
+ DEFAULT_BRIDGE_ENGINE_NAME) == 0) {
+ ibus->prev_hotkey_engine = current_engine_desc; + ibus->prev_hotkey_engine = current_engine_desc;
+#else
if (current_engine_desc != new_engine_desc) {
+#endif
bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc); bus_ibus_impl_set_context_engine_from_desc (ibus, context, new_engine_desc);
+ } else {
+ g_warning ("The engine %s is registered twice in hotkeys",
+ ibus_engine_desc_get_name (current_engine_desc));
} }
return TRUE; @@ -2470,14 +2644,6 @@ static void
@@ -2470,14 +2639,6 @@ static void
_add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus) _add_engine_hotkey (IBusEngineDesc *engine, BusIBusImpl *ibus)
{ {
const gchar *hotkeys; const gchar *hotkeys;
@ -359,7 +364,7 @@ index 38d6d11..65a034b 100644
if (!engine) { if (!engine) {
return; return;
@@ -2489,40 +2650,7 @@ _add_engine_hotkey (IBusEngineDesc *engi @@ -2489,40 +2655,7 @@ _add_engine_hotkey (IBusEngineDesc *engi
return; return;
} }
@ -607,37 +612,88 @@ index ceeb56d..2694fa3 100644
def introspect(self): def introspect(self):
return self.__context.Introspect() return self.__context.Introspect()
diff --git a/setup/enginecombobox.py b/setup/enginecombobox.py
index 7383177..247facc 100644
--- a/setup/enginecombobox.py
+++ b/setup/enginecombobox.py
@@ -64,6 +64,9 @@ class EngineComboBox(gtk.ComboBox):
self.__model.set(iter1, 0, 0)
lang = {}
for e in engines:
+ if ibus.use_bridge_hotkey() and \
+ e.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ continue
l = ibus.get_language_name(e.language)
if l not in lang:
lang[l] = []
diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py diff --git a/setup/enginetreeview.py b/setup/enginetreeview.py
index f620361..727cf89 100644 index f620361..0e50ad5 100644
--- a/setup/enginetreeview.py --- a/setup/enginetreeview.py
+++ b/setup/enginetreeview.py +++ b/setup/enginetreeview.py
@@ -210,6 +210,9 @@ class EngineTreeView(gtk.TreeView): @@ -162,6 +162,14 @@ class EngineTreeView(gtk.TreeView):
return return row[0]
row = self.__model[iter] elif property.name == "engines":
engine = row[0] engines = [ r[0] for r in self.__model if r[0] != None]
+ if ibus.use_bridge_hotkey() and \ + for i, e in enumerate(self.__engines):
+ ibus.DEFAULT_BRIDGE_ENGINE_NAME == engine.name: + if ibus.use_bridge_hotkey() and \
+ return + e.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
self.__engines.remove(engine) + if i < len(engines):
index = row.path[0] + engines.insert(i, e)
self.__model.remove(iter) + else:
+ engines.append(e)
+ break
return engines
else:
raise AttributeError, 'unknown property %s' % property.name
@@ -172,8 +180,12 @@ class EngineTreeView(gtk.TreeView):
for e in engines:
if e in self.__engines:
continue
- iter = self.__model.append(None)
- self.__model.set(iter, 0, e)
+ if ibus.use_bridge_hotkey() and \
+ e.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ pass
+ else:
+ iter = self.__model.append(None)
+ self.__model.set(iter, 0, e)
self.__engines.add(e)
self.__emit_changed()
diff --git a/src/Makefile.am b/src/Makefile.am diff --git a/src/Makefile.am b/src/Makefile.am
index 6454522..443b0db 100644 index 6454522..319df3c 100644
--- a/src/Makefile.am --- a/src/Makefile.am
+++ b/src/Makefile.am +++ b/src/Makefile.am
@@ -46,6 +46,7 @@ AM_CPPFLAGS = \ @@ -38,14 +38,16 @@ INTROSPECTION_GIRS =
-DIBUS_DATA_DIR=\"$(pkgdatadir)\" \ CLEANFILES =
-DIBUS_COMPILATION \
-DISOCODES_PREFIX=\"$(ISOCODES_PREFIX)\" \ # C preprocessor flags
+ -DUSE_BRIDGE_HOTKEY=$(USE_BRIDGE_HOTKEY) \ -AM_CPPFLAGS = \
- -DG_LOG_DOMAIN=\"IBUS\" \
- @GLIB2_CFLAGS@ \
- @GOBJECT2_CFLAGS@ \
- @GIO2_CFLAGS@ \
- -DIBUS_DATA_DIR=\"$(pkgdatadir)\" \
- -DIBUS_COMPILATION \
- -DISOCODES_PREFIX=\"$(ISOCODES_PREFIX)\" \
+AM_CPPFLAGS = \
+ -DG_LOG_DOMAIN=\"IBUS\" \
+ @GLIB2_CFLAGS@ \
+ @GOBJECT2_CFLAGS@ \
+ @GIO2_CFLAGS@ \
+ -DIBUS_DATA_DIR=\"$(pkgdatadir)\" \
+ -DIBUS_COMPILATION \
+ -DISOCODES_PREFIX=\"$(ISOCODES_PREFIX)\" \
+ -DUSE_BRIDGE_HOTKEY=$(USE_BRIDGE_HOTKEY) \
+ -DDEFAULT_BRIDGE_ENGINE_NAME=\"$(DEFAULT_BRIDGE_ENGINE_NAME)\" \
$(NULL) $(NULL)
# ibus library # ibus library
diff --git a/src/ibusbus.c b/src/ibusbus.c diff --git a/src/ibusbus.c b/src/ibusbus.c
index 39ad784..5a8f9a9 100644 index 39ad784..abc4331 100644
--- a/src/ibusbus.c --- a/src/ibusbus.c
+++ b/src/ibusbus.c +++ b/src/ibusbus.c
@@ -1902,3 +1902,9 @@ ibus_bus_call_async (IBusBus *bus, @@ -1902,3 +1902,15 @@ ibus_bus_call_async (IBusBus *bus,
(GAsyncReadyCallback) ibus_bus_call_async_done, (GAsyncReadyCallback) ibus_bus_call_async_done,
simple); simple);
} }
@ -647,11 +703,17 @@ index 39ad784..5a8f9a9 100644
+{ +{
+ return (USE_BRIDGE_HOTKEY == 1) ? TRUE : FALSE; + return (USE_BRIDGE_HOTKEY == 1) ? TRUE : FALSE;
+} +}
+
+gchar *
+ibus_bus_get_default_bridge_engine_name (IBusBus *bus)
+{
+ return g_strdup (DEFAULT_BRIDGE_ENGINE_NAME);
+}
diff --git a/src/ibusbus.h b/src/ibusbus.h diff --git a/src/ibusbus.h b/src/ibusbus.h
index 77d3916..4bdf760 100644 index 77d3916..f560671 100644
--- a/src/ibusbus.h --- a/src/ibusbus.h
+++ b/src/ibusbus.h +++ b/src/ibusbus.h
@@ -971,5 +971,14 @@ void ibus_bus_set_watch_ibus_signal @@ -971,5 +971,23 @@ void ibus_bus_set_watch_ibus_signal
*/ */
IBusConfig *ibus_bus_get_config (IBusBus *bus); IBusConfig *ibus_bus_get_config (IBusBus *bus);
@ -663,14 +725,23 @@ index 77d3916..4bdf760 100644
+ * Return %TRUE if @bus use bridge hotkey. + * Return %TRUE if @bus use bridge hotkey.
+ */ + */
+gboolean ibus_bus_use_bridge_hotkey (IBusBus *bus); +gboolean ibus_bus_use_bridge_hotkey (IBusBus *bus);
+
+/**
+ * ibus_bus_get_default_bridge_engine_name:
+ * @bus: An #IBusBus.
+ * @returns: A default bridge engine name.
+ *
+ * Return A default bridge engine name. Need to be freed.
+ */
+gchar *ibus_bus_get_default_bridge_engine_name (IBusBus *bus);
+ +
G_END_DECLS G_END_DECLS
#endif #endif
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
index d3800e1..a9e68be 100644 index fa3a768..3d6100e 100644
--- a/src/ibusenginedesc.c --- a/src/ibusenginedesc.c
+++ b/src/ibusenginedesc.c +++ b/src/ibusenginedesc.c
@@ -233,7 +233,11 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class) @@ -232,7 +232,11 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
g_param_spec_string ("hotkeys", g_param_spec_string ("hotkeys",
"description hotkeys", "description hotkeys",
"The hotkeys of engine description", "The hotkeys of engine description",
@ -723,22 +794,25 @@ index 9a341f6..92ec6af 100644
G_END_DECLS G_END_DECLS
#endif #endif
diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py diff --git a/ui/gtk/panel.py b/ui/gtk/panel.py
index de64920..7f2edcd 100644 index de64920..1dae2b1 100644
--- a/ui/gtk/panel.py --- a/ui/gtk/panel.py
+++ b/ui/gtk/panel.py +++ b/ui/gtk/panel.py
@@ -133,6 +133,11 @@ class Panel(ibus.PanelBase): @@ -133,6 +133,14 @@ class Panel(ibus.PanelBase):
# self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0) # self.__bus.request_name(ibus.panel.IBUS_SERVICE_PANEL, 0)
# init xkb # init xkb
+ self.__default_layout = 'default' + self.__default_layout = 'default'
+ self.__default_model = 'default' + self.__default_model = 'default'
+ self.__default_option = 'default' + self.__default_option = 'default'
+ self.__disabled_engine = None + self.__disabled_engines = None
+ self.__disabled_engines_id = -1
+ self.__disabled_engines_prev_id = -1
+ self.__disabled_engines_swapped = 0
+ +
self.__xkblayout = ibus.XKBLayout(self.__config) self.__xkblayout = ibus.XKBLayout(self.__config)
use_xkb = self.__config.get_value("general", "use_system_keyboard_layout", False) use_xkb = self.__config.get_value("general", "use_system_keyboard_layout", False)
if not use_xkb: if not use_xkb:
@@ -142,11 +147,18 @@ class Panel(ibus.PanelBase): @@ -142,11 +150,18 @@ class Panel(ibus.PanelBase):
value = 'default' value = 'default'
if value != 'default': if value != 'default':
self.__xkblayout.set_default_layout(value) self.__xkblayout.set_default_layout(value)
@ -757,7 +831,7 @@ index de64920..7f2edcd 100644
def set_cursor_location(self, x, y, w, h): def set_cursor_location(self, x, y, w, h):
self.__candidate_panel.set_cursor_location(x, y, w, h) self.__candidate_panel.set_cursor_location(x, y, w, h)
@@ -233,6 +245,41 @@ class Panel(ibus.PanelBase): @@ -233,12 +248,57 @@ class Panel(ibus.PanelBase):
def __set_im_name(self, name): def __set_im_name(self, name):
self.__language_bar.set_im_name(name) self.__language_bar.set_im_name(name)
@ -766,64 +840,131 @@ index de64920..7f2edcd 100644
+ default_model = self.__default_model + default_model = self.__default_model
+ if default_layout == 'default': + if default_layout == 'default':
+ default_layout = self.__xkblayout.get_default_layout()[0] + default_layout = self.__xkblayout.get_default_layout()[0]
+ default_model = None + default_model = self.__xkblayout.get_default_layout()[1]
+ if default_model == 'default': + if default_model == 'default':
+ default_model = self.__xkblayout.get_default_layout()[1] + default_model = self.__xkblayout.get_default_layout()[1]
+ layouts = default_layout.split(',') + layouts = default_layout.split(',')
+ group = self.__xkblayout.get_group() + models = None
+ layout = layouts[group]
+ model = None
+ if default_model != None and default_model != '': + if default_model != None and default_model != '':
+ models = default_model.split(',') + models = default_model.split(',')
+ if group < models.length: + if self.__disabled_engines == None or self.__disabled_engines == []:
+ model = models[group] + self.__disabled_engines = []
+ registry = ibus.XKBConfigRegistry() + for i, layout in enumerate(layouts):
+ langs = registry.get_layout_lang()[layout] + registry = ibus.XKBConfigRegistry()
+ lang = 'en' + langs = registry.get_layout_lang()[layout]
+ im_icon = layout[:2] + lang = 'en'
+ if langs != None: + if langs != None:
+ im_icon = langs[0][:2] + lang = str(langs[0])
+ lang = str(langs[0]) + model = None
+ if self.__disabled_engine == None: + if i == 0:
+ self.__disabled_engine = registry.engine_desc_new(lang, + layout = default_layout
+ self.__default_layout, + model = default_model
+ 'Default Layout', + elif i < len(models):
+ default_model, + model = models[i]
+ None) + if model == '':
+ if self.__focus_ic != None: + model = None
+ prev_engine = self.__focus_ic.get_engine() + model_desc = _("Default Layout")
+ if prev_engine == None or \ + if model != None:
+ prev_engine.name != self.__disabled_engine.name: + model_desc = model_desc + " (" + model + ")"
+ engine = registry.engine_desc_new(lang,
+ layout,
+ _("Default Layout"),
+ model,
+ model_desc)
+ self.__disabled_engines.append(engine)
+ self.__disabled_engines_id = self.__xkblayout.get_group()
+ if self.__focus_ic == None:
+ return
+ if not self.__focus_ic.is_enabled():
+ self.__focus_ic.set_bridge_engine() + self.__focus_ic.set_bridge_engine()
+ +
def focus_in(self, ic): def focus_in(self, ic):
self.reset() self.reset()
self.__focus_ic = ibus.InputContext(self.__bus, ic) self.__focus_ic = ibus.InputContext(self.__bus, ic)
@@ -240,6 +287,9 @@ class Panel(ibus.PanelBase): enabled = self.__focus_ic.is_enabled()
self.__language_bar.set_enabled(enabled) self.__language_bar.set_enabled(enabled)
+ if ibus.use_bridge_hotkey():
+ self.__set_default_layout_engine()
if not enabled: if not enabled:
+ if ibus.use_bridge_hotkey():
+ self.__set_default_layout_engine()
+
self.__set_im_icon(ICON_KEYBOARD) self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None) self.__set_im_name(None)
if self.__bus.get_use_sys_layout(): @@ -250,7 +310,7 @@ class Panel(ibus.PanelBase):
@@ -453,7 +503,12 @@ class Panel(ibus.PanelBase): self.__set_im_icon(engine.icon)
self.__set_im_name(engine.longname)
if self.__bus.get_use_sys_layout():
- self.__xkblayout.set_layout(self.__engine_get_layout_wrapper(engine))
+ self.__xkblayout.set_layout(self.__engine_get_layout_wrapper(engine, False))
else:
self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None)
@@ -287,7 +347,7 @@ class Panel(ibus.PanelBase):
self.__set_im_icon(engine.icon)
self.__set_im_name(engine.longname)
if self.__bus.get_use_sys_layout():
- self.__xkblayout.set_layout(self.__engine_get_layout_wrapper(engine))
+ self.__xkblayout.set_layout(self.__engine_get_layout_wrapper(engine, True))
else:
self.__set_im_icon(ICON_KEYBOARD)
self.__set_im_name(None)
@@ -443,6 +503,21 @@ class Panel(ibus.PanelBase):
# menu.set_take_focus(False)
# return menu
+ def __add_engine_in_menu(self, menu, engine, is_bold, size):
+ language = engine.language
+ lang = ibus.get_language_name(language)
+ item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname))
+ if is_bold:
+ for widget in item.get_children():
+ if isinstance(widget, gtk.Label):
+ widget.set_markup("<b>%s</b>" % widget.get_text())
+ if engine.icon:
+ item.set_image(_icon.IconWidget(engine.icon, size[0]))
+ else:
+ item.set_image(_icon.IconWidget(ICON_ENGINE, size[0]))
+ item.connect("activate", self.__im_menu_item_activate_cb, engine)
+ menu.add(item)
+
def __create_im_menu(self):
engines = self.__bus.list_active_engines()
current_engine = \
@@ -453,25 +528,31 @@ class Panel(ibus.PanelBase):
size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU)
menu = gtk.Menu() menu = gtk.Menu()
for i, engine in enumerate(engines): for i, engine in enumerate(engines):
- lang = ibus.get_language_name(engine.language) - lang = ibus.get_language_name(engine.language)
+ language = engine.language - item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname))
- if current_engine and current_engine.name == engine.name:
- for widget in item.get_children():
- if isinstance(widget, gtk.Label):
- widget.set_markup("<b>%s</b>" % widget.get_text())
- if engine.icon:
- item.set_image(_icon.IconWidget(engine.icon, size[0]))
- else:
- item.set_image(_icon.IconWidget(ICON_ENGINE, size[0]))
- item.connect("activate", self.__im_menu_item_activate_cb, engine)
- menu.add(item)
+ if ibus.use_bridge_hotkey() and \ + if ibus.use_bridge_hotkey() and \
+ engine.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME and \ + engine.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME and \
+ self.__disabled_engine != None: + self.__disabled_engines != None:
+ language = self.__disabled_engine.language + for j, kb_engine in enumerate(self.__disabled_engines):
+ lang = ibus.get_language_name(language) + kb_engine.is_bridge = True
item = gtk.ImageMenuItem("%s - %s" % (lang, engine.longname)) + kb_engine.disabled_engines_id = j
if current_engine and current_engine.name == engine.name: + is_bold = True if (current_engine != None and \
for widget in item.get_children(): + current_engine.name == engine.name and \
@@ -471,7 +526,8 @@ class Panel(ibus.PanelBase): + j == self.__disabled_engines_id) else False
+ self.__add_engine_in_menu(menu, kb_engine,
+ is_bold,
+ size)
+ continue
+ engine.is_bridge = False
+ is_bold = True if (current_engine != None and \
+ current_engine.name == engine.name) else False
+ self.__add_engine_in_menu(menu, engine, is_bold, size)
item = gtk.ImageMenuItem(_("Turn off input method"))
item.set_image(_icon.IconWidget("gtk-close", size[0]))
item.connect("activate", self.__im_menu_item_activate_cb, None) item.connect("activate", self.__im_menu_item_activate_cb, None)
if self.__focus_ic == None or not self.__focus_ic.is_enabled(): if self.__focus_ic == None or not self.__focus_ic.is_enabled():
item.set_sensitive(False) item.set_sensitive(False)
@ -833,6 +974,64 @@ index de64920..7f2edcd 100644
menu.show_all() menu.show_all()
menu.set_take_focus(False) menu.set_take_focus(False)
@@ -523,8 +604,25 @@ class Panel(ibus.PanelBase):
if not self.__focus_ic:
return
if engine:
- self.__focus_ic.set_engine(engine)
+ if ibus.use_bridge_hotkey() and engine.is_bridge:
+ engines = self.__bus.list_active_engines()
+ current_engine = \
+ (self.__focus_ic != None and self.__focus_ic.get_engine()) or \
+ (engines and engines[0]) or \
+ None
+ if current_engine and \
+ current_engine.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ self.__disabled_engines_prev_id = self.__disabled_engines_id
+ self.__disabled_engines_swapped = 0
+ else:
+ self.__disabled_engines_prev_id = -1
+ self.__disabled_engines_id = engine.disabled_engines_id
+ self.__focus_ic.set_bridge_engine()
+ else:
+ self.__disabled_engines_prev_id = -1
+ self.__focus_ic.set_engine(engine)
else:
+ self.__disabled_engines_prev_id = -1
self.__focus_ic.disable()
def __sys_menu_item_activate_cb(self, item, command):
@@ -573,11 +671,28 @@ class Panel(ibus.PanelBase):
self.__setup_pid = pid
glib.child_watch_add(self.__setup_pid, self.__child_watch_cb)
- def __engine_get_layout_wrapper(self, engine):
+ def __engine_get_layout_wrapper(self, engine, changed_state):
+ if ibus.use_bridge_hotkey() and \
+ self.__disabled_engines_id >= 0 and \
+ self.__disabled_engines != None and \
+ self.__disabled_engines_id < len(self.__disabled_engines):
+ if changed_state and self.__disabled_engines_prev_id != -1:
+ # state_changed is always called twice because we change
+ # the engine. So the first two calls are ignored here.
+ if self.__disabled_engines_swapped < 2:
+ self.__disabled_engines_swapped = \
+ self.__disabled_engines_swapped + 1
+ else:
+ x = self.__disabled_engines_prev_id
+ self.__disabled_engines_prev_id = self.__disabled_engines_id
+ self.__disabled_engines_id = x
+ self.__disabled_engines_swapped = 1
+ retval = self.__disabled_engines[self.__disabled_engines_id].layout
+ return retval
# This code is for the back compatibility.
# Should we remove the codes after all IM engines are changed
# to "default" layout?
- if engine.name != None and engine.name.startswith("xkb:layout:"):
+ elif engine.name != None and engine.name.startswith("xkb:layout:"):
return engine.layout
else:
return "default"
diff --git a/xkb/Makefile.am b/xkb/Makefile.am diff --git a/xkb/Makefile.am b/xkb/Makefile.am
index ad9cdd9..c4d5afb 100644 index ad9cdd9..c4d5afb 100644
--- a/xkb/Makefile.am --- a/xkb/Makefile.am
@ -899,5 +1098,5 @@ index 2ce7bcf..de6648f 100644
g_free (name); g_free (name);
-- --
1.7.4.4 1.7.5.4

View File

@ -1,124 +1,16 @@
From 1a7d35e5a29bec75dcc98e934d39cfdb3950ae48 Mon Sep 17 00:00:00 2001 From cf1fa1bc72d6d7ad71e928df1c3aa938069cfd9e Mon Sep 17 00:00:00 2001
From: fujiwarat <takao.fujiwara1@gmail.com> From: fujiwarat <takao.fujiwara1@gmail.com>
Date: Wed, 22 Jun 2011 12:21:55 +0900 Date: Wed, 29 Jun 2011 16:50:51 +0900
Subject: [PATCH] Add icon_symbol property in IBusEngineDesc. Subject: [PATCH] Add symbol property in IBusEngineDesc.
--- ---
bus/engineproxy.c | 22 +++++++++++++++ ibus/enginedesc.py | 15 +++++++++------
bus/ibusimpl.c | 33 ++++++++++++++++++++++ src/ibusenginedesc.c | 40 ++++++++++++++++++++++++++++++++++++++++
bus/ibusimpl.h | 4 +++ src/ibusenginedesc.h | 10 ++++++++++
ibus/engine.py | 3 ++ 3 files changed, 59 insertions(+), 6 deletions(-)
ibus/enginedesc.py | 18 +++++++++---
ibus/interface/iengine.py | 3 ++
src/ibusenginedesc.c | 66 +++++++++++++++++++++++++++++++++++++++++++++
src/ibusenginedesc.h | 10 +++++++
8 files changed, 155 insertions(+), 4 deletions(-)
diff --git a/bus/engineproxy.c b/bus/engineproxy.c
index f74af12..5c0cbb2 100644
--- a/bus/engineproxy.c
+++ b/bus/engineproxy.c
@@ -591,6 +591,28 @@ bus_engine_proxy_g_signal (GDBusProxy *proxy,
return;
}
+ if (g_strcmp0 (signal_name, "SetIconSymbol") == 0) {
+ const gchar *name = NULL;
+ gchar *icon_symbol = NULL;
+ GValue value = { 0, };
+
+ name = ibus_engine_desc_get_name (engine->desc);
+ g_return_if_fail (name != NULL);
+ g_variant_get (parameters, "(s)", &icon_symbol);
+ g_return_if_fail (icon_symbol != NULL);
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, icon_symbol);
+ g_object_set_property (G_OBJECT (engine->desc), "icon_symbol", &value);
+ g_value_unset (&value);
+
+ bus_ibus_impl_set_icon_symbol_with_engine_name (BUS_DEFAULT_IBUS,
+ name,
+ icon_symbol);
+ g_free (icon_symbol);
+ return;
+ }
+
g_return_if_reached ();
}
diff --git a/bus/ibusimpl.c b/bus/ibusimpl.c
index b356b2c..38d6d11 100644
--- a/bus/ibusimpl.c
+++ b/bus/ibusimpl.c
@@ -2342,3 +2342,36 @@ bus_ibus_impl_get_focused_input_context (BusIBusImpl *ibus)
return ibus->focused_context;
}
+
+void
+bus_ibus_impl_set_icon_symbol_with_engine_name (BusIBusImpl *ibus,
+ const gchar *name,
+ const gchar *icon_symbol)
+{
+ IBusEngineDesc *desc = NULL;
+ GValue value = { 0, };
+
+ g_assert (BUS_IS_IBUS_IMPL (ibus));
+ g_assert (name != NULL);
+ g_assert (icon_symbol != NULL);
+
+ desc = bus_ibus_impl_get_engine_desc (ibus, name);
+
+ if (desc == NULL) {
+ return;
+ }
+
+ g_value_init (&value, G_TYPE_STRING);
+ g_value_set_string (&value, icon_symbol);
+ g_object_set_property (G_OBJECT (desc), "icon_symbol", &value);
+ g_value_unset (&value);
+
+ /* Update status icon.
+ * "enabled" signal is caught by ibus->panel and ibus->panel calls
+ * StateChanged dbus method. */
+ if (ibus->panel && ibus->focused_context) {
+ if (bus_input_context_is_enabled (ibus->focused_context)) {
+ bus_input_context_enable (ibus->focused_context);
+ }
+ }
+}
diff --git a/bus/ibusimpl.h b/bus/ibusimpl.h
index 42edbf8..4f37cbc 100644
--- a/bus/ibusimpl.h
+++ b/bus/ibusimpl.h
@@ -99,6 +99,10 @@ gboolean bus_ibus_impl_is_embed_preedit_text
(BusIBusImpl *ibus);
BusInputContext *bus_ibus_impl_get_focused_input_context
(BusIBusImpl *ibus);
+void bus_ibus_impl_set_icon_symbol_with_engine_name
+ (BusIBusImpl *ibus,
+ const gchar *name,
+ const gchar *icon_symbol);
G_END_DECLS
#endif
diff --git a/ibus/engine.py b/ibus/engine.py
index fe5dd98..e827408 100644
--- a/ibus/engine.py
+++ b/ibus/engine.py
@@ -176,6 +176,9 @@ class EngineBase(object.Object):
self.__proxy = None
super(EngineBase,self).do_destroy()
+ def set_icon_symbol(self, icon_symbol):
+ return self.__proxy.SetIconSymbol(icon_symbol)
+
class EngineProxy(interface.IEngine):
def __init__(self, engine, conn, object_path):
diff --git a/ibus/enginedesc.py b/ibus/enginedesc.py diff --git a/ibus/enginedesc.py b/ibus/enginedesc.py
index e8a8982..f6b4110 100644 index e8a8982..3ca7f24 100644
--- a/ibus/enginedesc.py --- a/ibus/enginedesc.py
+++ b/ibus/enginedesc.py +++ b/ibus/enginedesc.py
@@ -31,7 +31,7 @@ from serializable import * @@ -31,7 +31,7 @@ from serializable import *
@ -126,7 +18,7 @@ index e8a8982..f6b4110 100644
__gtype_name__ = "PYIBusEngineDesc" __gtype_name__ = "PYIBusEngineDesc"
__NAME__ = "IBusEngineDesc" __NAME__ = "IBusEngineDesc"
- def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0): - def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0):
+ def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0, icon_symbol=""): + def __init__(self, name="", longname="", description="", language="", license="", author="", icon="", layout="", hotkeys="", rank=0, symbol=""):
super(EngineDesc, self).__init__() super(EngineDesc, self).__init__()
self.__name = name self.__name = name
self.__longname = longname self.__longname = longname
@ -134,7 +26,7 @@ index e8a8982..f6b4110 100644
self.__layout = layout self.__layout = layout
self.__rank = rank self.__rank = rank
self.__hotkeys = hotkeys self.__hotkeys = hotkeys
+ self.__icon_symbol = icon_symbol + self.__symbol = symbol
def get_name(self): def get_name(self):
return self.__name return self.__name
@ -142,8 +34,8 @@ index e8a8982..f6b4110 100644
def get_hotkeys(self): def get_hotkeys(self):
return self.__hotkeys return self.__hotkeys
+ def get_icon_symbol(self): + def get_symbol(self):
+ return self.__icon_symbol + return self.__symbol
+ +
name = property(get_name) name = property(get_name)
longname = property(get_longname) longname = property(get_longname)
@ -152,30 +44,27 @@ index e8a8982..f6b4110 100644
layout = property(get_layout) layout = property(get_layout)
rank = property(get_rank) rank = property(get_rank)
hotkeys = property(get_hotkeys) hotkeys = property(get_hotkeys)
+ icon_symbol = property(get_icon_symbol) + symbol = property(get_symbol)
def serialize(self, struct): def serialize(self, struct):
super(EngineDesc, self).serialize(struct) super(EngineDesc, self).serialize(struct)
@@ -98,7 +103,9 @@ class EngineDesc(Serializable): @@ -97,8 +102,7 @@ class EngineDesc(Serializable):
struct.append(dbus.String(self.__layout))
struct.append(dbus.UInt32(self.__rank)) struct.append(dbus.UInt32(self.__rank))
struct.append(dbus.String(self.__hotkeys)) struct.append(dbus.String(self.__hotkeys))
# New properties of EngineDesc will use dict for serialize - # New properties of EngineDesc will use dict for serialize
- struct.append(dbus.Array({}, signature=None)) - struct.append(dbus.Array({}, signature=None))
+ extension = dbus.Dictionary(signature="sv") + struct.append(dbus.String(self.__symbol))
+ extension[dbus.String('icon_symbol')] = dbus.String(self.__icon_symbol)
+ struct.append(extension)
def deserialize(self, struct): def deserialize(self, struct):
super(EngineDesc, self).deserialize(struct) super(EngineDesc, self).deserialize(struct)
@@ -113,10 +120,13 @@ class EngineDesc(Serializable): @@ -112,11 +116,10 @@ class EngineDesc(Serializable):
self.__layout = struct.pop(0)
self.__rank = struct.pop(0) self.__rank = struct.pop(0)
self.__hotkeys = struct.pop(0) self.__hotkeys = struct.pop(0)
# New properties of EngineDesc will use dict for serialize - # New properties of EngineDesc will use dict for serialize
- #value = struct.pop(0) - #value = struct.pop(0)
+ l = struct.pop(0) + self.__symbol = struct.pop(0)
+ for key, value in l.items():
+ if key == 'icon_symbol':
+ self.__icon_symbol= unicode(value)
def test(): def test():
- engine = EngineDesc("Hello", "", "", "", "", "", "", "", "") - engine = EngineDesc("Hello", "", "", "", "", "", "", "", "")
@ -183,210 +72,178 @@ index e8a8982..f6b4110 100644
value = serialize_object(engine) value = serialize_object(engine)
engine = deserialize_object(value) engine = deserialize_object(value)
diff --git a/ibus/interface/iengine.py b/ibus/interface/iengine.py
index 9e0d981..7cefcdf 100644
--- a/ibus/interface/iengine.py
+++ b/ibus/interface/iengine.py
@@ -157,3 +157,6 @@ class IEngine(dbus.service.Object):
@signal()
def RequireSurroundingText(self): pass
+
+ @signal(signature="s")
+ def SetIconSymbol(self, icon_symbol): pass
diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c diff --git a/src/ibusenginedesc.c b/src/ibusenginedesc.c
index ca5ef60..d3800e1 100644 index ca5ef60..fa3a768 100644
--- a/src/ibusenginedesc.c --- a/src/ibusenginedesc.c
+++ b/src/ibusenginedesc.c +++ b/src/ibusenginedesc.c
@@ -22,6 +22,7 @@ @@ -39,6 +39,7 @@ enum {
#include <stdlib.h>
#include "ibusenginedesc.h"
#include "ibusxml.h"
+#include "ibusenumtypes.h"
enum {
LAST_SIGNAL,
@@ -39,6 +40,7 @@ enum {
PROP_LAYOUT, PROP_LAYOUT,
PROP_RANK, PROP_RANK,
PROP_HOTKEYS, PROP_HOTKEYS,
+ PROP_ICON_SYMBOL, + PROP_SYMBOL,
}; };
@@ -54,6 +56,7 @@ struct _IBusEngineDescPrivate { @@ -54,6 +55,7 @@ struct _IBusEngineDescPrivate {
gchar *layout; gchar *layout;
guint rank; guint rank;
gchar *hotkeys; gchar *hotkeys;
+ gchar *icon_symbol; + gchar *symbol;
}; };
#define IBUS_ENGINE_DESC_GET_PRIVATE(o) \ #define IBUS_ENGINE_DESC_GET_PRIVATE(o) \
@@ -232,6 +235,19 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class) @@ -232,6 +234,19 @@ ibus_engine_desc_class_init (IBusEngineDescClass *class)
"The hotkeys of engine description", "The hotkeys of engine description",
"", "",
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)); G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
+ +
+ /** + /**
+ * IBusEngineDesc:icon_symbol: + * IBusEngineDesc:symbol:
+ * + *
+ * The symbol chars of engine description instead of icon image + * The symbol chars of engine description instead of icon image
+ */ + */
+ g_object_class_install_property (gobject_class, + g_object_class_install_property (gobject_class,
+ PROP_ICON_SYMBOL, + PROP_SYMBOL,
+ g_param_spec_string ("icon_symbol", + g_param_spec_string ("symbol",
+ "description icon_symbol", + "description symbol",
+ "The icon symbol chars of engine description", + "The icon symbol chars of engine description",
+ "", + "",
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT)); + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
} }
static void static void
@@ -249,6 +265,7 @@ ibus_engine_desc_init (IBusEngineDesc *desc) @@ -249,6 +264,7 @@ ibus_engine_desc_init (IBusEngineDesc *desc)
desc->priv->layout = NULL; desc->priv->layout = NULL;
desc->priv->rank = 0; desc->priv->rank = 0;
desc->priv->hotkeys = NULL; desc->priv->hotkeys = NULL;
+ desc->priv->icon_symbol = NULL; + desc->priv->symbol = NULL;
} }
static void static void
@@ -263,6 +280,7 @@ ibus_engine_desc_destroy (IBusEngineDesc *desc) @@ -263,6 +279,7 @@ ibus_engine_desc_destroy (IBusEngineDesc *desc)
g_free (desc->priv->icon); g_free (desc->priv->icon);
g_free (desc->priv->layout); g_free (desc->priv->layout);
g_free (desc->priv->hotkeys); g_free (desc->priv->hotkeys);
+ g_free (desc->priv->icon_symbol); + g_free (desc->priv->symbol);
IBUS_OBJECT_CLASS (ibus_engine_desc_parent_class)->destroy (IBUS_OBJECT (desc)); IBUS_OBJECT_CLASS (ibus_engine_desc_parent_class)->destroy (IBUS_OBJECT (desc));
} }
@@ -313,6 +331,10 @@ ibus_engine_desc_set_property (IBusEngineDesc *desc, @@ -313,6 +330,10 @@ ibus_engine_desc_set_property (IBusEngineDesc *desc,
g_assert (desc->priv->hotkeys == NULL); g_assert (desc->priv->hotkeys == NULL);
desc->priv->hotkeys = g_value_dup_string (value); desc->priv->hotkeys = g_value_dup_string (value);
break; break;
+ case PROP_ICON_SYMBOL: + case PROP_SYMBOL:
+ g_free (desc->priv->icon_symbol); + g_assert (desc->priv->symbol == NULL);
+ desc->priv->icon_symbol = g_value_dup_string (value); + desc->priv->symbol = g_value_dup_string (value);
+ break; + break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
} }
@@ -355,6 +377,9 @@ ibus_engine_desc_get_property (IBusEngineDesc *desc, @@ -355,6 +376,9 @@ ibus_engine_desc_get_property (IBusEngineDesc *desc,
case PROP_HOTKEYS: case PROP_HOTKEYS:
g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc)); g_value_set_string (value, ibus_engine_desc_get_hotkeys (desc));
break; break;
+ case PROP_ICON_SYMBOL: + case PROP_SYMBOL:
+ g_value_set_string (value, ibus_engine_desc_get_icon_symbol (desc)); + g_value_set_string (value, ibus_engine_desc_get_symbol (desc));
+ break; + break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (desc, prop_id, pspec);
} }
@@ -382,9 +407,28 @@ ibus_engine_desc_serialize (IBusEngineDesc *desc, @@ -371,6 +395,10 @@ ibus_engine_desc_serialize (IBusEngineDesc *desc,
/* End dict iter */
#define NOTNULL(s) ((s) != NULL ? (s) : "")
+ /* If you will add a new property, you can append it at the end and
+ * you should not change the serialized order of name, longname,
+ * description, ... because the order is also used in other applications
+ * likes ibus-qt. */
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->name));
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->longname));
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->description));
@@ -381,7 +409,9 @@ ibus_engine_desc_serialize (IBusEngineDesc *desc,
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->layout));
g_variant_builder_add (builder, "u", desc->priv->rank); g_variant_builder_add (builder, "u", desc->priv->rank);
g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys)); g_variant_builder_add (builder, "s", NOTNULL (desc->priv->hotkeys));
+ g_variant_builder_add (builder, "s", NOTNULL (desc->priv->symbol));
#undef NOTNULL #undef NOTNULL
+
+ /* append extra properties */
+ GVariantBuilder array;
+ g_variant_builder_init (&array, G_VARIANT_TYPE ("a{sv}"));
+ g_variant_builder_add (&array, "{sv}", "icon_symbol", g_variant_new_string (desc->priv->icon_symbol));
+ g_variant_builder_add (builder, "v", g_variant_builder_end (&array));
+ +
return TRUE; return TRUE;
} }
+static gboolean @@ -394,6 +424,10 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
+ibus_engine_desc_deserialize_property (IBusEngineDesc *desc, retval = IBUS_SERIALIZABLE_CLASS (ibus_engine_desc_parent_class)->deserialize ((IBusSerializable *)desc, variant);
+ const gchar *name, g_return_val_if_fail (retval, 0);
+ GVariant *variant)
+{ + /* If you will add a new property, you can append it at the end and
+ if (g_strcmp0 (name, "icon_symbol") == 0) { + * you should not change the serialized order of name, longname,
+ g_variant_get (variant, "s", &desc->priv->icon_symbol); + * description, ... because the order is also used in other applications
+ return TRUE; + * likes ibus-qt. */
+ } g_variant_get_child (variant, retval++, "s", &desc->priv->name);
+ return FALSE; g_variant_get_child (variant, retval++, "s", &desc->priv->longname);
+} g_variant_get_child (variant, retval++, "s", &desc->priv->description);
+ @@ -404,6 +438,7 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
static gint g_variant_get_child (variant, retval++, "s", &desc->priv->layout);
ibus_engine_desc_deserialize (IBusEngineDesc *desc,
GVariant *variant)
@@ -405,6 +449,23 @@ ibus_engine_desc_deserialize (IBusEngineDesc *desc,
g_variant_get_child (variant, retval++, "u", &desc->priv->rank); g_variant_get_child (variant, retval++, "u", &desc->priv->rank);
g_variant_get_child (variant, retval++, "s", &desc->priv->hotkeys); g_variant_get_child (variant, retval++, "s", &desc->priv->hotkeys);
+ g_variant_get_child (variant, retval++, "s", &desc->priv->symbol);
+ /* extract extra properties */
+ GVariantIter iter;
+ GVariant *child, *array;
+
+ g_variant_get_child (variant, retval++, "v", &array);
+ g_variant_iter_init (&iter, array);
+ while ((child = g_variant_iter_next_value (&iter))) {
+ gchar *name;
+ GVariant *value;
+ g_variant_get (child, "{sv}", &name, &value);
+ if (ibus_engine_desc_deserialize_property (desc, name, value))
+ retval++;
+ g_free (name);
+ g_variant_unref (value);
+ g_variant_unref (child);
+ }
+
return retval; return retval;
} }
@@ -428,6 +463,7 @@ ibus_engine_desc_copy (IBusEngineDesc *dest,
@@ -428,6 +489,7 @@ ibus_engine_desc_copy (IBusEngineDesc *dest,
dest->priv->layout = g_strdup (src->priv->layout); dest->priv->layout = g_strdup (src->priv->layout);
dest->priv->rank = src->priv->rank; dest->priv->rank = src->priv->rank;
dest->priv->hotkeys = g_strdup (src->priv->hotkeys); dest->priv->hotkeys = g_strdup (src->priv->hotkeys);
+ dest->priv->icon_symbol = g_strdup (src->priv->icon_symbol); + dest->priv->symbol = g_strdup (src->priv->symbol);
return TRUE; return TRUE;
} }
@@ -465,6 +527,7 @@ ibus_engine_desc_output (IBusEngineDesc *desc, @@ -465,6 +501,7 @@ ibus_engine_desc_output (IBusEngineDesc *desc,
OUTPUT_ENTRY_1(icon); OUTPUT_ENTRY_1(icon);
OUTPUT_ENTRY_1(layout); OUTPUT_ENTRY_1(layout);
OUTPUT_ENTRY_1(hotkeys); OUTPUT_ENTRY_1(hotkeys);
+ OUTPUT_ENTRY_1(icon_symbol); + OUTPUT_ENTRY_1(symbol);
g_string_append_indent (output, indent + 1); g_string_append_indent (output, indent + 1);
g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank); g_string_append_printf (output, "<rank>%u</rank>\n", desc->priv->rank);
#undef OUTPUT_ENTRY #undef OUTPUT_ENTRY
@@ -498,6 +561,7 @@ ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc, @@ -498,6 +535,7 @@ ibus_engine_desc_parse_xml_node (IBusEngineDesc *desc,
PARSE_ENTRY_1(icon); PARSE_ENTRY_1(icon);
PARSE_ENTRY_1(layout); PARSE_ENTRY_1(layout);
PARSE_ENTRY_1(hotkeys); PARSE_ENTRY_1(hotkeys);
+ PARSE_ENTRY_1(icon_symbol); + PARSE_ENTRY_1(symbol);
#undef PARSE_ENTRY #undef PARSE_ENTRY
#undef PARSE_ENTRY_1 #undef PARSE_ENTRY_1
if (g_strcmp0 (sub_node->name , "rank") == 0) { if (g_strcmp0 (sub_node->name , "rank") == 0) {
@@ -526,6 +590,7 @@ IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *) @@ -526,6 +564,7 @@ IBUS_ENGINE_DESC_GET_PROPERTY (icon, const gchar *)
IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *) IBUS_ENGINE_DESC_GET_PROPERTY (layout, const gchar *)
IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint) IBUS_ENGINE_DESC_GET_PROPERTY (rank, guint)
IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *) IBUS_ENGINE_DESC_GET_PROPERTY (hotkeys, const gchar *)
+IBUS_ENGINE_DESC_GET_PROPERTY (icon_symbol, const gchar *) +IBUS_ENGINE_DESC_GET_PROPERTY (symbol, const gchar *)
#undef IBUS_ENGINE_DESC_GET_PROPERTY #undef IBUS_ENGINE_DESC_GET_PROPERTY
IBusEngineDesc * IBusEngineDesc *
@@ -573,6 +638,7 @@ ibus_engine_desc_new_varargs (const gchar *first_property_name, ...) @@ -573,6 +612,7 @@ ibus_engine_desc_new_varargs (const gchar *first_property_name, ...)
g_assert (desc->priv->icon); g_assert (desc->priv->icon);
g_assert (desc->priv->layout); g_assert (desc->priv->layout);
g_assert (desc->priv->hotkeys); g_assert (desc->priv->hotkeys);
+ g_assert (desc->priv->icon_symbol); + g_assert (desc->priv->symbol);
return desc; return desc;
} }
diff --git a/src/ibusenginedesc.h b/src/ibusenginedesc.h diff --git a/src/ibusenginedesc.h b/src/ibusenginedesc.h
index 9718b15..e3194c3 100644 index 9718b15..76a7adc 100644
--- a/src/ibusenginedesc.h --- a/src/ibusenginedesc.h
+++ b/src/ibusenginedesc.h +++ b/src/ibusenginedesc.h
@@ -249,6 +249,16 @@ guint ibus_engine_desc_get_rank (IBusEngineDesc *info); @@ -249,6 +249,16 @@ guint ibus_engine_desc_get_rank (IBusEngineDesc *info);
const gchar *ibus_engine_desc_get_hotkeys (IBusEngineDesc *info); const gchar *ibus_engine_desc_get_hotkeys (IBusEngineDesc *info);
/** /**
+ * ibus_engine_desc_get_icon_symbol: + * ibus_engine_desc_get_symbol:
+ * @info: An IBusEngineDesc + * @info: An IBusEngineDesc
+ * @returns: icon_symbol property in IBusEngineDesc + * @returns: symbol property in IBusEngineDesc
+ * + *
+ * Return the icon_symbol property in IBusEngineDesc. It should not be freed. + * Return the symbol property in IBusEngineDesc. It should not be freed.
+ */ + */
+const gchar *ibus_engine_desc_get_icon_symbol +const gchar *ibus_engine_desc_get_symbol
+ (IBusEngineDesc *info); + (IBusEngineDesc *info);
+ +
+/** +/**
@ -394,5 +251,5 @@ index 9718b15..e3194c3 100644
* @info: An IBusEngineDesc * @info: An IBusEngineDesc
* @output: XML-formatted Input method engine description. * @output: XML-formatted Input method engine description.
-- --
1.7.4.4 1.7.5.4

View File

@ -204,12 +204,24 @@ index 7383177..bff2407 100644
renderer = gtk.CellRendererPixbuf() renderer = gtk.CellRendererPixbuf()
renderer.set_property("xalign", 0) renderer.set_property("xalign", 0)
@@ -57,18 +60,51 @@ class EngineComboBox(gtk.ComboBox): @@ -57,21 +60,51 @@ class EngineComboBox(gtk.ComboBox):
self.pack_start(renderer, True) self.pack_start(renderer, True)
self.set_cell_data_func(renderer, self.__name_cell_data_cb) self.set_cell_data_func(renderer, self.__name_cell_data_cb)
- def set_engines(self, engines): - def set_engines(self, engines):
- self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT) - self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
-
- iter1 = self.__model.append(None)
- self.__model.set(iter1, 0, 0)
- lang = {}
- for e in engines:
- if ibus.use_bridge_hotkey() and \
- e.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
- continue
- l = ibus.get_language_name(e.language)
- if l not in lang:
- lang[l] = []
- lang[l].append(e)
+ def __gconf_get_lang_list_from_locale(self): + def __gconf_get_lang_list_from_locale(self):
+ common_list = ['en', 'Other'] + common_list = ['en', 'Other']
+ if self.__config == None: + if self.__config == None:
@ -244,15 +256,7 @@ index 7383177..bff2407 100644
+ if lang_list == None: + if lang_list == None:
+ return [loc] + common_list + return [loc] + common_list
+ return lang_list + common_list + return lang_list + common_list
+
- iter1 = self.__model.append(None)
- self.__model.set(iter1, 0, 0)
- lang = {}
- for e in engines:
- l = ibus.get_language_name(e.language)
- if l not in lang:
- lang[l] = []
- lang[l].append(e)
+ def __has_engine_in_lang_list(self, engine, lang_list): + def __has_engine_in_lang_list(self, engine, lang_list):
+ retval = False + retval = False
+ for lang in lang_list: + for lang in lang_list:
@ -266,7 +270,7 @@ index 7383177..bff2407 100644
keys = lang.keys() keys = lang.keys()
keys.sort(locale.strcoll) keys.sort(locale.strcoll)
#add "Others" to the end of the combo box #add "Others" to the end of the combo box
@@ -76,29 +112,86 @@ class EngineComboBox(gtk.ComboBox): @@ -79,29 +112,89 @@ class EngineComboBox(gtk.ComboBox):
keys.remove(ibus.get_language_name("Other")) keys.remove(ibus.get_language_name("Other"))
keys += [ibus.get_language_name("Other")] keys += [ibus.get_language_name("Other")]
for l in keys: for l in keys:
@ -287,13 +291,17 @@ index 7383177..bff2407 100644
+ +
+ def set_engines(self, engines): + def set_engines(self, engines):
+ self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT) + self.__model = gtk.TreeStore(gobject.TYPE_PYOBJECT)
+
- self.set_model(self.__model)
+ iter1 = self.__model.append(None) + iter1 = self.__model.append(None)
+ self.__model.set(iter1, 0, 0) + self.__model.set(iter1, 0, 0)
+ lang_list = self.__gconf_get_lang_list_from_locale() + lang_list = self.__gconf_get_lang_list_from_locale()
+ lang = {} + lang = {}
+ sub_lang = {} + sub_lang = {}
+ for e in engines: + for e in engines:
+ if ibus.use_bridge_hotkey() and \
+ e.name == ibus.DEFAULT_BRIDGE_ENGINE_NAME:
+ continue
+ l = ibus.get_language_name(e.language) + l = ibus.get_language_name(e.language)
+ if lang_list == None or \ + if lang_list == None or \
+ self.__has_engine_in_lang_list(e, lang_list): + self.__has_engine_in_lang_list(e, lang_list):
@ -318,8 +326,7 @@ index 7383177..bff2407 100644
+ self.__model_append_langs(self.__all_model, sub_lang, False) + self.__model_append_langs(self.__all_model, sub_lang, False)
+ +
+ self.__toggle_sub_lang() + self.__toggle_sub_lang()
+
- self.set_model(self.__model)
+ def __toggle_sub_lang(self): + def __toggle_sub_lang(self):
+ self.set_model(None) + self.set_model(None)
+ if self.__show_sub_lang: + if self.__show_sub_lang:
@ -361,7 +368,7 @@ index 7383177..bff2407 100644
else: else:
renderer.set_property("visible", True) renderer.set_property("visible", True)
renderer.set_property("sensitive", True) renderer.set_property("sensitive", True)
@@ -110,7 +203,8 @@ class EngineComboBox(gtk.ComboBox): @@ -113,7 +206,8 @@ class EngineComboBox(gtk.ComboBox):
renderer.set_property("pixbuf", pixbuf) renderer.set_property("pixbuf", pixbuf)
def __name_cell_data_cb(self, celllayout, renderer, model, iter): def __name_cell_data_cb(self, celllayout, renderer, model, iter):
@ -371,7 +378,7 @@ index 7383177..bff2407 100644
if isinstance (engine, str) or isinstance (engine, unicode): if isinstance (engine, str) or isinstance (engine, unicode):
renderer.set_property("sensitive", False) renderer.set_property("sensitive", False)
@@ -118,8 +212,15 @@ class EngineComboBox(gtk.ComboBox): @@ -121,8 +215,15 @@ class EngineComboBox(gtk.ComboBox):
renderer.set_property("weight", pango.WEIGHT_NORMAL) renderer.set_property("weight", pango.WEIGHT_NORMAL)
elif isinstance(engine, int): elif isinstance(engine, int):
renderer.set_property("sensitive", True) renderer.set_property("sensitive", True)
@ -389,7 +396,7 @@ index 7383177..bff2407 100644
else: else:
renderer.set_property("sensitive", True) renderer.set_property("sensitive", True)
renderer.set_property("text", engine.longname) renderer.set_property("text", engine.longname)
@@ -134,13 +235,21 @@ class EngineComboBox(gtk.ComboBox): @@ -137,13 +238,21 @@ class EngineComboBox(gtk.ComboBox):
if i == 0 or i == -1: if i == 0 or i == -1:
return None return None
iter = self.get_active_iter() iter = self.get_active_iter()

View File

@ -13,7 +13,7 @@
Name: ibus Name: ibus
Version: 1.3.99.20110419 Version: 1.3.99.20110419
Release: 5%{?dist} Release: 6%{?dist}
Summary: Intelligent Input Bus for Linux OS Summary: Intelligent Input Bus for Linux OS
License: LGPLv2+ License: LGPLv2+
Group: System Environment/Libraries Group: System Environment/Libraries
@ -21,7 +21,7 @@ URL: http://code.google.com/p/ibus/
Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz Source0: http://ibus.googlecode.com/files/%{name}-%{version}.tar.gz
Source1: xinput-ibus Source1: xinput-ibus
%if %have_gjsfile %if %have_gjsfile
Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110622.tar.bz2 Source2: http://fujiwara.fedorapeople.org/ibus/gnome-shell/gnome-shell-ibus-plugins-20110629.tar.bz2
%endif %endif
Source3: https://www.transifex.net/projects/p/ibus/resource/master/l/da/download/ibus_master_da.po Source3: https://www.transifex.net/projects/p/ibus/resource/master/l/da/download/ibus_master_da.po
Source4: http://ueno.fedorapeople.org/ibus-indicator/ibus-indicator.tar.bz2 Source4: http://ueno.fedorapeople.org/ibus-indicator/ibus-indicator.tar.bz2
@ -135,9 +135,6 @@ This is a transitional package which allows users to try out new IBus
GUI for GNOME3 in development. Note that this package will be marked GUI for GNOME3 in development. Note that this package will be marked
as obsolete once the integration has completed in the GNOME3 upstream. as obsolete once the integration has completed in the GNOME3 upstream.
%description gnome3
This package contains ibus im module for gtk3
%package devel %package devel
Summary: Development tools for ibus Summary: Development tools for ibus
Group: Development/Libraries Group: Development/Libraries
@ -167,6 +164,10 @@ sed -i \
-e "s|Config.IBUS_XKB|'/usr/libexec/ibus-xkb'|" \ -e "s|Config.IBUS_XKB|'/usr/libexec/ibus-xkb'|" \
-e "s|Config.HAVE_IBUS_XKB|true|" \ -e "s|Config.HAVE_IBUS_XKB|true|" \
js/ui/status/ibus/xkbLayout.js js/ui/status/ibus/xkbLayout.js
sed -i \
-e "s|imports.misc.config.IBUS_PREFIX|'/usr'|" \
-e "s|imports.misc.config.IBUS_PKGDATADIR|'/usr/share/ibus'|" \
js/ui/status/ibus/panel.js
bzcat %SOURCE4 | tar xf - bzcat %SOURCE4 | tar xf -
%endif %endif
cp %SOURCE3 po/da.po cp %SOURCE3 po/da.po
@ -353,7 +354,7 @@ fi
%{_datadir}/gtk-doc/html/* %{_datadir}/gtk-doc/html/*
%changelog %changelog
* Mon Jun 20 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-5 * Mon Jun 20 2011 Takao Fujiwara <tfujiwar@redhat.com> - 1.3.99.20110419-6
- Updated ibus-HEAD.patch for upstream. - Updated ibus-HEAD.patch for upstream.
- Removed ibus-435880-surrounding-text.patch as upstream. - Removed ibus-435880-surrounding-text.patch as upstream.
- Added ibus-711632-fedora-fallback-icon.patch - Added ibus-711632-fedora-fallback-icon.patch

View File

@ -1,4 +1,4 @@
d4f2729fecb92ae6b41f26c770b1a772 ibus-1.3.99.20110419.tar.gz d4f2729fecb92ae6b41f26c770b1a772 ibus-1.3.99.20110419.tar.gz
645ed3dd02f663589cdad28e57c25486 gnome-shell-ibus-plugins-20110622.tar.bz2 3d3ba1c988a81f483785c1eac4b00532 gnome-shell-ibus-plugins-20110629.tar.bz2
698c90edf0f037488e1aa969804e891f ibus_master_da.po 698c90edf0f037488e1aa969804e891f ibus_master_da.po
23756d25109745bdc1c3a54db370d210 ibus-indicator.tar.bz2 23756d25109745bdc1c3a54db370d210 ibus-indicator.tar.bz2