Modifid IPanel and IEngine interfaces.
This commit is contained in:
Родитель
aaff3dcec0
Коммит
e911456cf2
|
@ -37,9 +37,10 @@ class Engine (interface.IEngine):
|
|||
self._update ()
|
||||
return True
|
||||
elif keyval == keysyms.space:
|
||||
self._commit_string (self._preedit_string)
|
||||
self._preedit_string = ""
|
||||
self._update ()
|
||||
if self._lookup_table.get_number_of_candidates () > 0:
|
||||
self._commit_string (self._lookup_table.get_current_candidate ()[0])
|
||||
else:
|
||||
self._commit_string (self._preedit_string)
|
||||
return False
|
||||
elif keyval >= keysyms._1 and keyval <= keysyms._9:
|
||||
index = keyval - keysyms._1
|
||||
|
@ -103,14 +104,14 @@ class Engine (interface.IEngine):
|
|||
attrs.append (ibus.AttributeForeground (0xff0000, 0, preedit_len))
|
||||
for text in self._dict.suggest (self._preedit_string):
|
||||
self._lookup_table.append_candidate (text)
|
||||
|
||||
self.AuxStringChanged (self._preedit_string, attrs.to_dbus_value ())
|
||||
self.UpdateAuxString (self._preedit_string, attrs.to_dbus_value (), preedit_len > 0)
|
||||
attrs.append (ibus.AttributeUnderline (pango.UNDERLINE_SINGLE, 0, preedit_len))
|
||||
self.PreeditChanged (self._preedit_string, attrs.to_dbus_value (), dbus.Int32 (preedit_len))
|
||||
self.UpdatePreedit (self._preedit_string, attrs.to_dbus_value (), dbus.Int32 (preedit_len), preedit_len > 0)
|
||||
self._update_lookup_table ()
|
||||
|
||||
def _update_lookup_table (self):
|
||||
self.UpdateLookupTable (self._lookup_table.to_dbus_value ())
|
||||
show = self._lookup_table.get_number_of_candidates () > 0
|
||||
self.UpdateLookupTable (self._lookup_table.to_dbus_value (), show)
|
||||
|
||||
|
||||
def FocusIn (self):
|
||||
|
|
|
@ -50,6 +50,7 @@ struct _GikIMClientPrivate {
|
|||
gchar *preedit_string;
|
||||
PangoAttrList *preedit_attrs;
|
||||
gint preedit_cursor;
|
||||
gboolean preedit_show;
|
||||
};
|
||||
|
||||
/* functions prototype */
|
||||
|
@ -59,11 +60,12 @@ static void gik_im_client_finalize (GObject *obj);
|
|||
|
||||
static void gik_im_client_commit_string(GikIMClient *client,
|
||||
const gchar *string);
|
||||
static void gik_im_client_preedit_changed
|
||||
static void gik_im_client_update_preedit
|
||||
(GikIMClient *client,
|
||||
const gchar *string,
|
||||
PangoAttrList *attrs,
|
||||
gint cursor_pos);
|
||||
gint cursor_pos,
|
||||
gboolean show);
|
||||
|
||||
static void gik_im_client_sync_hotkeys (GikIMClient *client);
|
||||
static gboolean _ibus_call_with_reply_and_block
|
||||
|
@ -421,7 +423,8 @@ gik_im_client_commit_string (GikIMClient *client, const gchar *string)
|
|||
}
|
||||
|
||||
static void
|
||||
gik_im_client_preedit_changed (GikIMClient *client, const gchar *string, PangoAttrList *attrs, gint cursor_pos)
|
||||
gik_im_client_update_preedit (GikIMClient *client, const gchar *string,
|
||||
PangoAttrList *attrs, gint cursor_pos, gboolean show)
|
||||
{
|
||||
GikIMClientPrivate *priv = client->priv;
|
||||
if (priv->preedit_string) {
|
||||
|
@ -439,6 +442,7 @@ gik_im_client_preedit_changed (GikIMClient *client, const gchar *string, PangoAt
|
|||
}
|
||||
|
||||
priv->preedit_cursor = cursor_pos;
|
||||
priv->preedit_show = show;
|
||||
if (priv->context) {
|
||||
g_signal_emit_by_name (priv->context, "preedit-changed");
|
||||
}
|
||||
|
@ -462,24 +466,26 @@ _gik_signal_commit_string_handler (DBusConnection *connection, DBusMessage *mess
|
|||
}
|
||||
|
||||
static void
|
||||
_gik_signal_preedit_changed_handler (DBusConnection *connection, DBusMessage *message, GikIMClient *client)
|
||||
_gik_signal_update_preedit_handler (DBusConnection *connection, DBusMessage *message, GikIMClient *client)
|
||||
{
|
||||
/* Handle PreeditChanged signal */
|
||||
/* Handle UpdatePreedit signal */
|
||||
DBusError error = {0};
|
||||
gchar *string = NULL;
|
||||
gint cursor = 0;
|
||||
DBusMessageIter iter, sub_iter;
|
||||
gint type, sub_type;
|
||||
|
||||
gchar *string = NULL;
|
||||
PangoAttrList *attrs = NULL;
|
||||
gint cursor = 0;
|
||||
gboolean show = False;
|
||||
|
||||
if (!dbus_message_iter_init (message, &iter)) {
|
||||
g_warning ("The PreeditChanged signal does have args!");
|
||||
g_warning ("The UpdatePreedit signal does have args!");
|
||||
return;
|
||||
}
|
||||
|
||||
type = dbus_message_iter_get_arg_type (&iter);
|
||||
if (type != DBUS_TYPE_STRING) {
|
||||
g_warning ("The frist argument of PreeditChanged signal must be a String");
|
||||
g_warning ("The frist argument of UpdatePreedit signal must be a String");
|
||||
return;
|
||||
}
|
||||
dbus_message_iter_get_basic (&iter, &string);
|
||||
|
@ -488,7 +494,7 @@ _gik_signal_preedit_changed_handler (DBusConnection *connection, DBusMessage *me
|
|||
|
||||
type = dbus_message_iter_get_arg_type (&iter);
|
||||
if (type != DBUS_TYPE_ARRAY) {
|
||||
g_warning ("The secode argument of PreeditChanged signal must be a Struct Array");
|
||||
g_warning ("The secode argument of UpdatePreedit signal must be a Struct Array");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -497,7 +503,7 @@ _gik_signal_preedit_changed_handler (DBusConnection *connection, DBusMessage *me
|
|||
if (dbus_message_iter_get_array_len (&sub_iter) > 0) {
|
||||
if (dbus_message_iter_get_arg_type (&sub_iter) != DBUS_TYPE_ARRAY ||
|
||||
dbus_message_iter_get_element_type (&sub_iter) != DBUS_TYPE_INT32 ) {
|
||||
g_warning ("The secode argument of PreeditChanged signal must be a Struct Array");
|
||||
g_warning ("The secode argument of UpdatePreedit signal must be a Struct Array");
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -512,7 +518,7 @@ _gik_signal_preedit_changed_handler (DBusConnection *connection, DBusMessage *me
|
|||
dbus_message_iter_get_fixed_array (&sub_sub_iter, &values, &length);
|
||||
|
||||
if (length <= 0) {
|
||||
g_warning ("The element of the second argument of PreeditChanged should not be a empty array");
|
||||
g_warning ("The element of the second argument of UpdatePreedit should not be a empty array");
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -557,14 +563,23 @@ _gik_signal_preedit_changed_handler (DBusConnection *connection, DBusMessage *me
|
|||
|
||||
type = dbus_message_iter_get_arg_type (&iter);
|
||||
if (type != DBUS_TYPE_INT32) {
|
||||
g_warning ("The third argument of PreeditChanged signal must be an Int32 %c", type);
|
||||
g_warning ("The third argument of UpdatePreedit signal must be an Int32 %c", type);
|
||||
pango_attr_list_unref (attrs);
|
||||
return;
|
||||
}
|
||||
dbus_message_iter_get_basic (&iter, &cursor);
|
||||
dbus_message_iter_next (&iter);
|
||||
|
||||
gik_im_client_preedit_changed (client, string, attrs, cursor);
|
||||
type = dbus_message_iter_get_arg_type (&iter);
|
||||
if (type != DBUS_TYPE_BOOLEAN) {
|
||||
g_warning ("The third argument of UpdatePreedit signal must be an Int32 %c", type);
|
||||
pango_attr_list_unref (attrs);
|
||||
return;
|
||||
}
|
||||
dbus_message_iter_get_basic (&iter, &show);
|
||||
dbus_message_iter_next (&iter);
|
||||
|
||||
gik_im_client_update_preedit (client, string, attrs, cursor, show);
|
||||
pango_attr_list_unref (attrs);
|
||||
|
||||
}
|
||||
|
@ -626,7 +641,7 @@ _gik_im_client_message_filter_cb (DBusConnection *connection, DBusMessage *messa
|
|||
} handlers[] = {
|
||||
{ DBUS_INTERFACE_DBUS, "NameOwnerChanged", _gik_signal_name_owner_changed_handler },
|
||||
{ IBUS_IFACE, "CommitString", _gik_signal_commit_string_handler },
|
||||
{ IBUS_IFACE, "PreeditChanged", _gik_signal_preedit_changed_handler },
|
||||
{ IBUS_IFACE, "UpdatePreedit", _gik_signal_update_preedit_handler },
|
||||
{ IBUS_IFACE, "Enabled", _gik_signal_enabled_handler },
|
||||
{ IBUS_IFACE, "Disabled", _gik_signal_disabled_handler },
|
||||
{0},
|
||||
|
@ -940,6 +955,13 @@ gik_im_client_get_preedit_string (
|
|||
{
|
||||
GikIMClientPrivate *priv = client->priv;
|
||||
|
||||
if (priv->preedit_show) {
|
||||
if (str) *str = g_strdup ("");
|
||||
if (attrs) *attrs = pango_attr_list_new ();
|
||||
if (cursor_pos) *cursor_pos = 0;
|
||||
return True;
|
||||
}
|
||||
|
||||
if (str) {
|
||||
*str = g_strdup (priv->preedit_string ? priv->preedit_string: "");
|
||||
}
|
||||
|
|
|
@ -34,20 +34,20 @@ class IEngine (dbus.service.Object):
|
|||
|
||||
@method ()
|
||||
def Reset (self): pass
|
||||
|
||||
|
||||
# signals for lookup table
|
||||
@method ()
|
||||
def PageUp (self): pass
|
||||
|
||||
|
||||
@method ()
|
||||
def PageDown (self): pass
|
||||
|
||||
|
||||
@method ()
|
||||
def CursorUp (self): pass
|
||||
|
||||
|
||||
@method ()
|
||||
def CursorDown (self): pass
|
||||
|
||||
|
||||
@method (in_signature = "b")
|
||||
def SetEnable (self, enable): pass
|
||||
|
||||
|
@ -63,18 +63,24 @@ class IEngine (dbus.service.Object):
|
|||
@signal (signature="ubu")
|
||||
def ForwardKeyEvent (self, keyval, is_press, state): pass
|
||||
|
||||
@signal (signature="saaii")
|
||||
def PreeditChanged (self, text, attrs, cursor_pos): pass
|
||||
@signal (signature="saaiib")
|
||||
def UpdatePreedit (self, text, attrs, cursor_pos, show): pass
|
||||
|
||||
# below signals are optional. The engine could create and maintain panel by self.
|
||||
@signal (signature="v")
|
||||
def UpdateProperties (self, properties): pass
|
||||
|
||||
@signal (signature="sv")
|
||||
def AuxStringChanged (self, text, attrs): pass
|
||||
@signal (signature="svb")
|
||||
def UpdateAuxString (self, text, attrs, show): pass
|
||||
|
||||
@signal (signature="v")
|
||||
def UpdateLookupTable (self, lookup_table): pass
|
||||
@signal ()
|
||||
def ShowAuxStringChanged (self): pass
|
||||
|
||||
@signal ()
|
||||
def HideAuxStringChanged (self): pass
|
||||
|
||||
@signal (signature="vb")
|
||||
def UpdateLookupTable (self, lookup_table, show): pass
|
||||
|
||||
@signal ()
|
||||
def ShowLookupTable (self): pass
|
||||
|
|
|
@ -21,8 +21,8 @@ class IPanel (dbus.service.Object):
|
|||
@method (in_signature="iiii")
|
||||
def SetCursorLocation (self, x, y, w, h): pass
|
||||
|
||||
@method (in_signature="svu")
|
||||
def SetPreeditString (self, text, attrs, cursor_pos): pass
|
||||
@method (in_signature="svub")
|
||||
def UpdatePreedit (self, text, attrs, cursor_pos, show): pass
|
||||
|
||||
@method ()
|
||||
def ShowPreeditString (self): pass
|
||||
|
@ -30,8 +30,8 @@ class IPanel (dbus.service.Object):
|
|||
@method ()
|
||||
def HidePreeditString (self): pass
|
||||
|
||||
@method (in_signature="sv")
|
||||
def SetAuxString (self, text, attrs): pass
|
||||
@method (in_signature="svb")
|
||||
def UpdateAuxString (self, text, attrs, show): pass
|
||||
|
||||
@method ()
|
||||
def ShowAuxString (self): pass
|
||||
|
@ -39,8 +39,8 @@ class IPanel (dbus.service.Object):
|
|||
@method ()
|
||||
def HideAuxString (self): pass
|
||||
|
||||
@method (in_signature="v")
|
||||
def UpdateLookupTable (self, lookup_table): pass
|
||||
@method (in_signature="vb")
|
||||
def UpdateLookupTable (self, lookup_table, show): pass
|
||||
|
||||
@method ()
|
||||
def ShowCandidateWindow (self): pass
|
||||
|
@ -54,6 +54,9 @@ class IPanel (dbus.service.Object):
|
|||
@method ()
|
||||
def HideLanguageBar (self): pass
|
||||
|
||||
@method ()
|
||||
def Reste (self): pass
|
||||
|
||||
@method ()
|
||||
def Destroy (self): pass
|
||||
|
||||
|
|
|
@ -60,17 +60,14 @@ class IBus (ibus.Object):
|
|||
self._focused_client.focus_out ()
|
||||
|
||||
# Install all callback functions
|
||||
id = client.connect ("preedit-changed", self._preedit_changed_cb)
|
||||
id = client.connect ("update-preedit", self._update_preedit_cb)
|
||||
self._client_handlers.append (id)
|
||||
id = client.connect ("aux-string-changed", self._aux_string_changed_cb)
|
||||
id = client.connect ("update-aux-string", self._update_aux_string_cb)
|
||||
self._client_handlers.append (id)
|
||||
id = client.connect ("update-lookup-table", self._update_lookup_table_cb)
|
||||
self._client_handlers.append (id)
|
||||
id = client.connect ("show-lookup-table", self._show_lookup_table_cb)
|
||||
self._client_handlers.append (id)
|
||||
id = client.connect ("hide-lookup-table", self._hide_lookup_table_cb)
|
||||
self._client_handlers.append (id)
|
||||
|
||||
self._panel.reset ()
|
||||
self._focused_client = client
|
||||
self._last_focused_client = client
|
||||
client.focus_in ()
|
||||
|
@ -83,9 +80,11 @@ class IBus (ibus.Object):
|
|||
del self._client_handlers[:]
|
||||
self._focused_client = None
|
||||
client.focus_out ()
|
||||
self._panel.reset ()
|
||||
|
||||
def reset (self, dbusconn):
|
||||
client = self._lookup_client (dbusconn)
|
||||
self._panel.reset ()
|
||||
client.reset ()
|
||||
|
||||
def is_enabled (self, dbusconn):
|
||||
|
@ -127,20 +126,20 @@ class IBus (ibus.Object):
|
|||
raise ibus.IBusException ("not register the client")
|
||||
return self._clients[dbusconn]
|
||||
|
||||
def _preedit_changed_cb (self, client, text, attrs, cursor_pos):
|
||||
def _update_preedit_cb (self, client, text, attrs, cursor_pos, show):
|
||||
assert self._focused_client == client
|
||||
|
||||
self._panel.set_preedit_string (text, attrs, cursor_pos)
|
||||
self._panel.update_preedit_string (text, attrs, cursor_pos, show)
|
||||
|
||||
def _aux_string_changed_cb (self, client, text, attrs):
|
||||
def _update_aux_string_cb (self, client, text, attrs, show):
|
||||
assert self._focused_client == client
|
||||
|
||||
self._panel.set_aux_string (text, attrs)
|
||||
self._panel.update_aux_string (text, attrs, show)
|
||||
|
||||
def _update_lookup_table_cb (self, client, lookup_table):
|
||||
def _update_lookup_table_cb (self, client, lookup_table, show):
|
||||
assert self._focused_client == client
|
||||
|
||||
self._panel.update_lookup_table (lookup_table)
|
||||
self._panel.update_lookup_table (lookup_table, show)
|
||||
|
||||
def _show_lookup_table_cb (self, client, lookup_table):
|
||||
assert self._focused_client == client
|
||||
|
|
|
@ -3,26 +3,18 @@ import ibus
|
|||
|
||||
class Client (ibus.Object):
|
||||
__gsignals__ = {
|
||||
"preedit-changed" : (
|
||||
"update-preedit" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_INT)),
|
||||
"aux-string-changed" : (
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
|
||||
"update-aux-string" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
|
||||
"update-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_PYOBJECT, )),
|
||||
"show-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
()),
|
||||
"hide-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
())
|
||||
(gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
|
||||
}
|
||||
|
||||
def __init__ (self, name, ibusconn):
|
||||
|
@ -113,12 +105,12 @@ class Client (ibus.Object):
|
|||
def commit_string (self, text):
|
||||
self._ibusconn.emit_dbus_signal ("CommitString", text)
|
||||
|
||||
def preedit_changed (self, text, attrs, cursor_pos):
|
||||
def update_preedit (self, text, attrs, cursor_pos, show):
|
||||
if self._use_preedit:
|
||||
self._ibusconn.emit_dbus_signal ("PreeditChanged", text, attrs, cursor_pos)
|
||||
self._ibusconn.emit_dbus_signal ("UpdatePreedit", text, attrs, cursor_pos, show)
|
||||
else:
|
||||
# show preedit on panel
|
||||
self.emit ("preedit-changed", text, attrs, cursor_pos)
|
||||
self.emit ("update-preedit", text, attrs, cursor_pos, show)
|
||||
|
||||
def set_engine (self, engine):
|
||||
if self._engine == engine:
|
||||
|
@ -149,25 +141,17 @@ class Client (ibus.Object):
|
|||
def _commit_string_cb (self, engine, text):
|
||||
self.commit_string (text)
|
||||
|
||||
def _preedit_changed_cb (self, engine, text, attrs, cursor_pos):
|
||||
self.preedit_changed (text, attrs, cursor_pos)
|
||||
def _update_preedit_cb (self, engine, text, attrs, cursor_pos, show):
|
||||
self.update_preedit (text, attrs, cursor_pos, show)
|
||||
|
||||
def _aux_string_changed_cb (self, engine, text, attrs):
|
||||
def _update_aux_string_cb (self, engine, text, attrs, show):
|
||||
self._aux_string = text
|
||||
self._aux_attrs = attrs
|
||||
self.emit ("aux-string-changed", text, attrs)
|
||||
self.emit ("update-aux-string", text, attrs, show)
|
||||
|
||||
def _update_lookup_table_cb (self, engine, lookup_table):
|
||||
def _update_lookup_table_cb (self, engine, lookup_table, show):
|
||||
self._lookup_table = lookup_table
|
||||
self.emit ("update-lookup-table", lookup_table)
|
||||
|
||||
def _show_lookup_table_cb (self, engine):
|
||||
self._show_lookup_table = True
|
||||
self.emit ("show-lookup-table")
|
||||
|
||||
def _hide_lookup_table_cb (self, engine):
|
||||
self._show_lookup_table = False
|
||||
self.emit ("hide-lookup-table")
|
||||
self.emit ("update-lookup-table", lookup_table, show)
|
||||
|
||||
def _remove_engine_handlers (self):
|
||||
assert self._engine != None
|
||||
|
@ -180,14 +164,10 @@ class Client (ibus.Object):
|
|||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("commit-string", self._commit_string_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("preedit-changed", self._preedit_changed_cb)
|
||||
id = self._engine.connect ("update-preedit", self._update_preedit_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("aux-string-changed", self._aux_string_changed_cb)
|
||||
id = self._engine.connect ("update-aux-string", self._update_aux_string_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("update-lookup-table", self._update_lookup_table_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("show-lookup-table", self._show_lookup_table_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
id = self._engine.connect ("hide-lookup-table", self._hide_lookup_table_cb)
|
||||
self._engine_handler_ids.append (id)
|
||||
gobject.type_register (Client)
|
||||
|
|
|
@ -12,26 +12,18 @@ class Engine (ibus.Object):
|
|||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_UINT, gobject.TYPE_BOOLEAN, gobject.TYPE_UINT )),
|
||||
"preedit-changed" : (
|
||||
"update-preedit" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_INT)),
|
||||
"aux-string-changed" : (
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_INT, gobject.TYPE_BOOLEAN)),
|
||||
"update-aux-string" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT)),
|
||||
(gobject.TYPE_STRING, gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
|
||||
"update-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
(gobject.TYPE_PYOBJECT, )),
|
||||
"show-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
()),
|
||||
"hide-lookup-table" : (
|
||||
gobject.SIGNAL_RUN_FIRST,
|
||||
gobject.TYPE_NONE,
|
||||
())
|
||||
(gobject.TYPE_PYOBJECT, gobject.TYPE_BOOLEAN)),
|
||||
}
|
||||
|
||||
def __init__ (self, factory, ibusconn, object_path):
|
||||
|
@ -55,23 +47,17 @@ class Engine (ibus.Object):
|
|||
args = message.get_args_list ()
|
||||
self.emit ("forward-key-event", args[0], bool (arg[1]), arg[2])
|
||||
return True
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "PreeditChanged"):
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "UpdatePreedit"):
|
||||
args = message.get_args_list ()
|
||||
self.emit ("preedit-changed", args[0], args[1], args[2])
|
||||
self.emit ("update-preedit", args[0], args[1], args[2], args[3])
|
||||
return True
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "AuxStringChanged"):
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "UpdateAuxString"):
|
||||
args = message.get_args_list ()
|
||||
self.emit ("aux-string-changed", args[0], args[1])
|
||||
self.emit ("update-aux-string", args[0], args[1], args[2])
|
||||
return True
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "UpdateLookupTable"):
|
||||
args = message.get_args_list ()
|
||||
self.emit ("update-lookup-table", args[0])
|
||||
return True
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "ShowLookupTable"):
|
||||
self.emit ("show-lookup-table")
|
||||
return True
|
||||
elif message.is_signal (ibus.IBUS_ENGINE_IFACE, "HideLookupTable"):
|
||||
self.emit ("hide-lookup-table")
|
||||
self.emit ("update-lookup-table", args[0], args[1])
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
|
|
@ -34,8 +34,8 @@ class Panel (ibus.Object):
|
|||
def set_cursor_location (self, x, y, w, h):
|
||||
self._panel.SetCursorLocation (x, y, w, h)
|
||||
|
||||
def set_preedit_string (self, text, attrs, cursor_pos):
|
||||
self._panel.SetPreeditString (text, attrs, cursor_pos)
|
||||
def update_preedit (self, text, attrs, cursor_pos, show):
|
||||
self._panel.UpdatePreedit (text, attrs, cursor_pos, show)
|
||||
|
||||
def show_preedit_string (self):
|
||||
self._panel.ShowPreeditString ()
|
||||
|
@ -43,8 +43,8 @@ class Panel (ibus.Object):
|
|||
def hide_preedit_string (self):
|
||||
slef._panel.HidePreeditString ()
|
||||
|
||||
def set_aux_string (self, text, attrs):
|
||||
self._panel.SetAuxString (text, attrs)
|
||||
def update_aux_string (self, text, attrs, show):
|
||||
self._panel.UpdateAuxString (text, attrs, show)
|
||||
|
||||
def show_aux_string (self):
|
||||
self._panel.ShowAuxString ()
|
||||
|
@ -52,8 +52,8 @@ class Panel (ibus.Object):
|
|||
def hide_aux_string (self):
|
||||
slef._panel.HideAuxString ()
|
||||
|
||||
def update_lookup_table (self, lookup_table):
|
||||
self._panel.UpdateLookupTable (lookup_table)
|
||||
def update_lookup_table (self, lookup_table, show):
|
||||
self._panel.UpdateLookupTable (lookup_table, show)
|
||||
|
||||
def show_candidate_window (self):
|
||||
self._panel.ShowCandidateWindow ()
|
||||
|
@ -67,6 +67,9 @@ class Panel (ibus.Object):
|
|||
def hide_language_bar (self):
|
||||
self._panel.HideLanguageBar ()
|
||||
|
||||
def reset (self):
|
||||
self._panel.Reste ()
|
||||
|
||||
def destroy (self):
|
||||
if self._ibusconn != None:
|
||||
self._panel.Destroy ()
|
||||
|
|
|
@ -82,7 +82,6 @@ class CandidateArea (gtk.HBox):
|
|||
else:
|
||||
self._labels[0][0].set_text ("1.")
|
||||
|
||||
|
||||
class CandidatePanel (gtk.VBox):
|
||||
__gproperties__ = {
|
||||
'orientation' : (gtk.Orientation, # type
|
||||
|
@ -110,9 +109,11 @@ class CandidatePanel (gtk.VBox):
|
|||
self._orientation = gtk.ORIENTATION_HORIZONTAL
|
||||
self._orientation = gtk.ORIENTATION_VERTICAL
|
||||
self._show_preedit_string = False
|
||||
self._preedit_string = "preedit string"
|
||||
self._show_aux_string = False
|
||||
self._show_lookup_table = False
|
||||
self._preedit_string = ""
|
||||
self._preedit_attrs = pango.AttrList ()
|
||||
self._aux_string = "aux string"
|
||||
self._aux_string = ""
|
||||
self._aux_attrs = pango.AttrList ()
|
||||
self._lookup_table = None
|
||||
|
||||
|
@ -138,9 +139,15 @@ class CandidatePanel (gtk.VBox):
|
|||
self._aux_label.set_alignment (0.0, 0.5)
|
||||
self._aux_label.set_padding (8, 0)
|
||||
self._tooltips.set_tip (self._aux_label, "Aux string")
|
||||
self._aux_label.set_no_show_all (True)
|
||||
if self._show_aux_string:
|
||||
self._aux_label.show ()
|
||||
|
||||
# create candidates area
|
||||
self._candidate_area = CandidateArea (self._orientation)
|
||||
self._candidate_area.set_no_show_all (True)
|
||||
if self._show_lookup_table:
|
||||
self._candidate_area.show_all ()
|
||||
|
||||
# create state label
|
||||
self._state_label = gtk.Label ()
|
||||
|
@ -206,26 +213,22 @@ class CandidatePanel (gtk.VBox):
|
|||
self.hide_all ()
|
||||
self.show_all ()
|
||||
|
||||
|
||||
def show_preedit_string (self):
|
||||
self._show_preedit_string = True
|
||||
self._preedit_label.show ()
|
||||
self._check_show_states ()
|
||||
|
||||
def hide_preedit_string (self):
|
||||
self._hide_preedit_string = False
|
||||
self._show_preedit_string = False
|
||||
self._preedit_label.hide ()
|
||||
self._check_show_states ()
|
||||
|
||||
def set_aux_string (self, text, attrs):
|
||||
attrs = PangoAttrList (attrs)
|
||||
self._aux_string = text
|
||||
self._aux_label.set_text (text)
|
||||
if attrs == None:
|
||||
attrs = pango.AttrList ()
|
||||
self._aux_attrs = attrs
|
||||
self._aux_label.set_attributes (attrs)
|
||||
|
||||
def set_preedit_string (self, text, attrs, cursor_pos):
|
||||
def update_preedit (self, text, attrs, cursor_pos, show):
|
||||
attrs = PangoAttrList (attrs)
|
||||
if show:
|
||||
self.show_preedit_string ()
|
||||
else:
|
||||
self.hide_preedit_string ()
|
||||
self._preedit_string = text
|
||||
self._preedit_label.set_text (text)
|
||||
if attrs == None:
|
||||
|
@ -233,12 +236,76 @@ class CandidatePanel (gtk.VBox):
|
|||
self._preedit_attrs = attrs
|
||||
self._preedit_label.set_attributes (attrs)
|
||||
|
||||
def set_lookup_table (self, lookup_table):
|
||||
def show_aux_string (self):
|
||||
self._show_aux_string = True
|
||||
self._aux_label.show ()
|
||||
self._check_show_states ()
|
||||
|
||||
def hide_aux_string (self):
|
||||
self._show_aux_string = False
|
||||
self._aux_label.hide ()
|
||||
self._check_show_states ()
|
||||
|
||||
def update_aux_string (self, text, attrs, show):
|
||||
attrs = PangoAttrList (attrs)
|
||||
|
||||
if show:
|
||||
self.show_aux_string ()
|
||||
else:
|
||||
self.hide_aux_string ()
|
||||
|
||||
self._aux_string = text
|
||||
self._aux_label.set_text (text)
|
||||
if attrs == None:
|
||||
attrs = pango.AttrList ()
|
||||
self._aux_attrs = attrs
|
||||
self._aux_label.set_attributes (attrs)
|
||||
|
||||
def show_lookup_table (self):
|
||||
self._show_lookup_table = True
|
||||
self._candidate_area.set_no_show_all (False)
|
||||
self._candidate_area.show_all ()
|
||||
self._check_show_states ()
|
||||
|
||||
def hide_lookup_table (self):
|
||||
self._show_lookup_table = False
|
||||
self._candidate_area.hide_all ()
|
||||
self._candidate_area.set_no_show_all (True)
|
||||
self._check_show_states ()
|
||||
|
||||
def update_lookup_table (self, lookup_table, show):
|
||||
if lookup_table == None:
|
||||
lookup_table = ibus.LookupTable ()
|
||||
|
||||
if show:
|
||||
self.show_lookup_table ()
|
||||
else:
|
||||
self.hide_lookup_table ()
|
||||
|
||||
self._lookup_table = lookup_table
|
||||
candidates = self._lookup_table.get_canidates_in_current_page ()
|
||||
candidates = map (lambda x: (x[0], PangoAttrList (x[1])), candidates)
|
||||
self._candidate_area.set_candidates (candidates, self._lookup_table.get_cursor_pos_in_current_page ())
|
||||
|
||||
def _check_show_states (self):
|
||||
if self._show_preedit_string or \
|
||||
self._show_aux_string or \
|
||||
self._show_lookup_table:
|
||||
self.show_all ()
|
||||
self.emit ("show")
|
||||
else:
|
||||
self.hide_all ()
|
||||
self.emit ("hide")
|
||||
|
||||
def reset (self):
|
||||
self.hide ()
|
||||
self.hide_preedit_string ()
|
||||
self.hide_aux_string ()
|
||||
self.hide_lookup_table ()
|
||||
self.set_preedit_string ("", None, 0)
|
||||
self.set_aux_string ("", None)
|
||||
self.set_lookup_table (None)
|
||||
|
||||
def set_orientation (self, orientation):
|
||||
if self._orientation == orientation:
|
||||
return
|
||||
|
|
|
@ -28,12 +28,13 @@ class CandidateWindow (gtk.Window):
|
|||
self._candidate_panel.connect ("size-request", self._size_request_cb)
|
||||
self._candidate_panel.connect ("cursor-up", lambda x: self.emit ("cursor-up"))
|
||||
self._candidate_panel.connect ("cursor-down", lambda x: self.emit ("cursor-down"))
|
||||
self._candidate_panel.connect ("show", lambda x: self.show ())
|
||||
self._candidate_panel.connect ("hide", lambda x: self.hide ())
|
||||
self.add (self._candidate_panel)
|
||||
self.move (100, 100)
|
||||
self.show_all ()
|
||||
|
||||
def set_preedit_string (self, text, attrs, cursor_pos):
|
||||
self._candidate_panel.set_preedit_string (text, attrs, cursor_pos)
|
||||
def update_preedit (self, text, attrs, cursor_pos, show):
|
||||
self._candidate_panel.update_preedit (text, attrs, cursor_pos, show)
|
||||
|
||||
def show_preedit_string (self, text, attrs):
|
||||
self._candidate_panel.show_preedit_string ()
|
||||
|
@ -41,11 +42,15 @@ class CandidateWindow (gtk.Window):
|
|||
def hide_preedit_string (self, text, attrs):
|
||||
self._candidate_panel.hide_preedit_string ()
|
||||
|
||||
def set_aux_string (self, text, attrs):
|
||||
self._candidate_panel.set_aux_string (text, attrs)
|
||||
def update_aux_string (self, text, attrs, show):
|
||||
self._candidate_panel.update_aux_string (text, attrs, show)
|
||||
|
||||
def set_lookup_table (self, lookup_table):
|
||||
self._candidate_panel.set_lookup_table (lookup_table)
|
||||
def update_lookup_table (self, lookup_table, show):
|
||||
self._candidate_panel.update_lookup_table (lookup_table, show)
|
||||
|
||||
def reset (self):
|
||||
self.hide ()
|
||||
self._candidate_panel.reset ()
|
||||
|
||||
def _size_request_cb (self, widget, size):
|
||||
self.resize (1, 1)
|
||||
|
|
|
@ -55,6 +55,9 @@ class LanguageBarWindow (gtk.Window):
|
|||
def _size_request_cb (self, widget, size):
|
||||
self.resize (size.width, size.height)
|
||||
|
||||
def reset (self):
|
||||
pass
|
||||
|
||||
def do_size_allocate (self, allocation):
|
||||
gtk.Window.do_size_allocate (self, allocation)
|
||||
root = gdk.get_default_root_window ()
|
||||
|
|
|
@ -18,9 +18,9 @@ class Panel (gobject.GObject):
|
|||
|
||||
def set_cursor_location (self, x, y, w, h):
|
||||
self._candidate_panel.move (x + w, y + h)
|
||||
|
||||
def set_preedit_string (self, text, attrs, cursor_pos):
|
||||
self._candidate_panel.set_preedit_string (text, attrs, cursor_pos)
|
||||
|
||||
def update_preedit (self, text, attrs, cursor_pos, show):
|
||||
self._candidate_panel.update_preedit (text, attrs, cursor_pos, show)
|
||||
|
||||
def show_preedit_string (self):
|
||||
self._candidate_panel.show_preedit_string ()
|
||||
|
@ -28,17 +28,17 @@ class Panel (gobject.GObject):
|
|||
def hide_preedit_string (self):
|
||||
self._candidate_panel.hide_preedit_string ()
|
||||
|
||||
def set_aux_string (self, text, attrs):
|
||||
self._candidate_panel.set_aux_string (text, attrs)
|
||||
def update_aux_string (self, text, attrs, show):
|
||||
self._candidate_panel.update_aux_string (text, attrs, show)
|
||||
|
||||
def show_aux_string (self):
|
||||
self._candidate_panel.show_aux_string ()
|
||||
|
||||
def hide_aux_string (self):
|
||||
self._candidate_panel.hide_aux_string ()
|
||||
|
||||
def update_lookup_table (self, lookup_table):
|
||||
self._candidate_panel.set_lookup_table (lookup_table)
|
||||
|
||||
def update_lookup_table (self, lookup_table, show):
|
||||
self._candidate_panel.update_lookup_table (lookup_table, show)
|
||||
|
||||
def show_candidate_window (self):
|
||||
self._candidate_panel.show ()
|
||||
|
@ -52,6 +52,10 @@ class Panel (gobject.GObject):
|
|||
def hide_language_bar (self):
|
||||
selk._language_bar.hide ()
|
||||
|
||||
def reset (self):
|
||||
self._candidate_panel.reset ()
|
||||
self._language_bar.reset ()
|
||||
|
||||
class PanelProxy (interface.IPanel):
|
||||
def __init__ (self, dbusconn, object_path):
|
||||
interface.IPanel.__init__ (self, dbusconn, object_path)
|
||||
|
@ -60,10 +64,10 @@ class PanelProxy (interface.IPanel):
|
|||
|
||||
def SetCursorLocation (self, x, y, w, h):
|
||||
self._panel.set_cursor_location (x, y, w, h)
|
||||
|
||||
def SetPreeditString (self, text, attrs, cursor_pos):
|
||||
|
||||
def UpdatePreedit (self, text, attrs, cursor_pos, show):
|
||||
attrs = ibus.attr_list_from_dbus_value (attrs)
|
||||
self._panel.set_preedit_string (text, atrrs, cursor_pos)
|
||||
self._panel.update_preedit (text, atrrs, cursor_pos, show)
|
||||
|
||||
def ShowPreeditString (self):
|
||||
self._panel.show_preedit_string ()
|
||||
|
@ -71,9 +75,9 @@ class PanelProxy (interface.IPanel):
|
|||
def HidePreeditString (self):
|
||||
self._panel.hide_preedit_string ()
|
||||
|
||||
def SetAuxString (self, text, attrs):
|
||||
def UpdateAuxString (self, text, attrs, show):
|
||||
attrs = ibus.attr_list_from_dbus_value (attrs)
|
||||
self._panel.set_aux_string (text, attrs)
|
||||
self._panel.update_aux_string (text, attrs, show)
|
||||
|
||||
def ShowAuxString (self):
|
||||
self._panel.show_aux_string ()
|
||||
|
@ -81,9 +85,9 @@ class PanelProxy (interface.IPanel):
|
|||
def HideAuxString (self):
|
||||
self._panel.hide_aux_string ()
|
||||
|
||||
def UpdateLookupTable (self, lookup_table):
|
||||
def UpdateLookupTable (self, lookup_table, show):
|
||||
lookup_table = ibus.lookup_table_from_dbus_value (lookup_table)
|
||||
self._panel.update_lookup_table (lookup_table)
|
||||
self._panel.update_lookup_table (lookup_table, show)
|
||||
|
||||
def ShowCandidateWindow (self):
|
||||
self._panel.show_candidate_window ()
|
||||
|
@ -97,6 +101,9 @@ class PanelProxy (interface.IPanel):
|
|||
def HideLanguageBar (self):
|
||||
self._panel.hide_language_bar ()
|
||||
|
||||
def Reset (self):
|
||||
self._panel.reset ()
|
||||
|
||||
def Destroy (self):
|
||||
self._pabel.destroy ()
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче