From b4ae75975083abb847a654edb0d48d888056d0e5 Mon Sep 17 00:00:00 2001 From: Huang Peng Date: Wed, 11 Jun 2008 10:59:56 +0800 Subject: [PATCH] WIP property. --- engine/demo/engine.py | 1 - ibus/interface/ipanel.py | 2 +- ibusdaemon/bus.py | 21 ++++++++++++++------- ibusdaemon/client.py | 7 +++++++ ibusdaemon/panel.py | 2 +- panel/candidatepanel.py | 7 ++++--- panel/languagebar.py | 26 ++++++++++++++++++-------- 7 files changed, 45 insertions(+), 21 deletions(-) diff --git a/engine/demo/engine.py b/engine/demo/engine.py index b758fb4..de224df 100644 --- a/engine/demo/engine.py +++ b/engine/demo/engine.py @@ -159,7 +159,6 @@ class Engine (interface.IEngine): if self._enable: self.RegisterProperties (self._prop_list.to_dbus_value ()) - def PropertyActivate (self, prop_name): print "PropertyActivate (%s)" % prop_name diff --git a/ibus/interface/ipanel.py b/ibus/interface/ipanel.py index 38dfe0d..60659d7 100644 --- a/ibus/interface/ipanel.py +++ b/ibus/interface/ipanel.py @@ -43,7 +43,7 @@ class IPanel (dbus.service.Object): def HideLanguageBar (self): pass @method () - def Reste (self): pass + def Reset (self): pass @method () def Destroy (self): pass diff --git a/ibusdaemon/bus.py b/ibusdaemon/bus.py index 918ef24..3584967 100644 --- a/ibusdaemon/bus.py +++ b/ibusdaemon/bus.py @@ -44,7 +44,6 @@ class IBus (ibus.Object): def register_client (self, name, dbusconn): ibusconn = self._lookup_ibus_connection (dbusconn) client = self._client_manager.register_client (name, ibusconn) - client.connect ("destroy", self._client_destroy_cb) factory = self._factory_manager.get_default_factory () if factory: engine = factory.create_engine () @@ -55,7 +54,7 @@ class IBus (ibus.Object): if self._focused_client != client and self._focused_client != None: map (self._focused_client.disconnect, self._client_handlers) - del self._client_handlers[:] + self._client_handlers = [] self._focused_client.focus_out () # Install all callback functions @@ -69,6 +68,10 @@ class IBus (ibus.Object): self._client_handlers.append (id) id = client.connect ("update-property", self._update_property_cb) self._client_handlers.append (id) + id = client.connect ("engine-lost", self._engine_lost_cb) + self._client_handlers.append (id) + id = client.connect ("destroy", self._client_destroy_cb) + self._client_handlers.append (id) self._panel.reset () self._focused_client = client @@ -79,14 +82,13 @@ class IBus (ibus.Object): client = self._lookup_client (dbusconn) if client == self._focused_client: map (self._focused_client.disconnect, self._client_handlers) - del self._client_handlers[:] + 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): @@ -154,10 +156,15 @@ class IBus (ibus.Object): self._panel.update_property (prop) + def _engine_lost_cb (self, client): + assert self._focused_client == client + + self._panel.reset () + def _client_destroy_cb (self, client): - if client == self._focused_client: - del self._client_handlers[:] - self._focused_client = None + assert client == self._focused_client + self._client_handlers = [] + self._focused_client = None ########################################################## # methods for im engines diff --git a/ibusdaemon/client.py b/ibusdaemon/client.py index 26d9d72..0b248c3 100644 --- a/ibusdaemon/client.py +++ b/ibusdaemon/client.py @@ -23,6 +23,10 @@ class Client (ibus.Object): gobject.SIGNAL_RUN_FIRST, gobject.TYPE_NONE, (gobject.TYPE_PYOBJECT, )), + "engine-lost" : ( + gobject.SIGNAL_RUN_FIRST, + gobject.TYPE_NONE, + ()), } def __init__ (self, name, ibusconn): @@ -143,6 +147,9 @@ class Client (ibus.Object): if self._engine == engine: self._remove_engine_handlers () self._engine = None + self._enable = False + self._ibusconn.emit_dbus_signal ("Disabled") + self.emit ("engine-lost") def _ibusconn_destroy_cb (self, ibusconn): if self._engine != None: diff --git a/ibusdaemon/panel.py b/ibusdaemon/panel.py index 5893bbd..7351f6d 100644 --- a/ibusdaemon/panel.py +++ b/ibusdaemon/panel.py @@ -60,7 +60,7 @@ class Panel (ibus.Object): self._panel.HideLanguageBar () def reset (self): - self._panel.Reste () + self._panel.Reset () def destroy (self): if self._ibusconn != None: diff --git a/panel/candidatepanel.py b/panel/candidatepanel.py index 8b521f9..2955b39 100644 --- a/panel/candidatepanel.py +++ b/panel/candidatepanel.py @@ -3,6 +3,7 @@ import gtk import gtk.gdk as gdk import gobject import pango +import ibus from ibus.gtk import PangoAttrList class HSeparator (gtk.HBox): @@ -303,9 +304,9 @@ class CandidatePanel (gtk.VBox): 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) + self.update_preedit ("", None, 0, False) + self.update_aux_string ("", None, False) + self.update_lookup_table (None, False) def set_orientation (self, orientation): if self._orientation == orientation: diff --git a/panel/languagebar.py b/panel/languagebar.py index 06d84b4..f841046 100644 --- a/panel/languagebar.py +++ b/panel/languagebar.py @@ -64,14 +64,10 @@ class LanguageBar (gtk.Toolbar): self.set_size_request (width + 4, -1) def reset (self): - pass + self._remove_properties () def register_properties (self, props): - # reset all properties - for name, prop in self._properties.items (): - prop[1].destroy () - self._properties = {} - + self._remove_properties () # create new properties for prop in props: if prop._type == ibus.PROP_TYPE_NORMAL: @@ -91,14 +87,24 @@ class LanguageBar (gtk.Toolbar): else: widget.set_no_show_all (True) widget.hide () - - self._properties [prop._name] = (prop, widget) + if not self._properties.has_key (prop._name): + self._properties [prop._name] = [] + self._properties [prop._name].append ((prop, widget)) self.insert (widget, -1) self.check_resize () def update_properties (self, props): pass + def _remove_properties (self): + # reset all properties + for name, props in self._properties.items (): + for prop, widget in props: + widget.hide () + widget.destroy () + self._properties = {} + self.check_resize () + gobject.type_register (LanguageBar, "IBusLanguageBar") class LanguageBarWindow (gtk.Window): @@ -111,6 +117,7 @@ class LanguageBarWindow (gtk.Window): def __init__ (self): gtk.Window.__init__ (self, gtk.WINDOW_POPUP) self._language_bar = LanguageBar () + self._language_bar.connect ("size-request", self._size_request_cb) self._language_bar.connect ("property-activate", lambda widget, prop_name: self.emit ("property-activate", prop_name)) self.add (self._language_bar) @@ -136,5 +143,8 @@ class LanguageBarWindow (gtk.Window): def update_property (self, prop): self._labguage_bar.update_property (prop) + def _size_request_cb (self, widget, requisition): + self.resize (1, 1) + gobject.type_register (LanguageBarWindow, "IBusLanguageBarWindow") -- 2.7.4