diff options
Diffstat (limited to 'addons/changecolor.py')
-rw-r--r-- | addons/changecolor.py | 58 |
1 files changed, 27 insertions, 31 deletions
diff --git a/addons/changecolor.py b/addons/changecolor.py index 27ae284..460da32 100644 --- a/addons/changecolor.py +++ b/addons/changecolor.py @@ -34,8 +34,12 @@ class ChangeColor(Action): """ ChangeColorEvent """ + # widget address property widaddr = TUAMProperty("0") + # set timeout + timeout = 500 + def __init__(self, widaddr=None): """Constructor - Change a widget color @param widaddr: the widget for which you want to change the color (UAM) @@ -44,9 +48,8 @@ class ChangeColor(Action): if widaddr: self.widaddr = widaddr - self._old_color = None + self.init_style = None self._new_color = None - self.tmp_color = None self.wid = None @@ -62,27 +65,23 @@ class ChangeColor(Action): raise TypeError("activity argument is Mandatory") # get widget instance - self.wid = find_widget(kwargs["activity"], self.widaddr) + self.wid = find_widget(kwargs["activity"], self.widaddr, ignore_errors=False) if not self.wid: - # TODO: error - raise TypeError("widget not found") + raise NameError("widget not found") # we have to get the initial color in the sugar rc theme - current_style = self.wid.rc_get_style() - self._old_color = current_style.bg[gtk.STATE_NORMAL] + self.init_style = self.wid.rc_get_style() # define new color self._new_color = gtk.gdk.color_parse(xo_fill_color) # set change color timeout (flash) - self.timeout = 500 - self.tmp_color = self._old_color - self._handler_id = gobject.timeout_add(self.timeout, self._timeout_cb) + self._handler_id = gobject.timeout_add(ChangeColor.timeout, self._timeout_cb) def undo(self): """ - Go back to the original color + Remove timer and go back to the original color """ if self._handler_id: @@ -93,34 +92,31 @@ class ChangeColor(Action): pass # modify bg color (go back to original color) - self.wid.modify_bg(gtk.STATE_NORMAL, self._old_color) + self.wid.modify_bg(gtk.STATE_NORMAL, self.init_style.bg[gtk.STATE_NORMAL]) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self.init_style.bg[gtk.STATE_PRELIGHT]) + self.wid.modify_bg(gtk.STATE_ACTIVE, self.init_style.bg[gtk.STATE_ACTIVE]) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self.init_style.bg[gtk.STATE_INSENSITIVE]) def _timeout_cb(self): """ _timeout_cb triggers the eventfilter callback. - - It is necessary because gobject timers only stop if the callback they - trigger returns False """ - if self.tmp_color == self._old_color: - self.tmp_color = self._new_color + if self.wid.rc_get_style().bg[gtk.STATE_NORMAL] == self._new_color: + # modify bg color (go back to original color) + self.wid.modify_bg(gtk.STATE_NORMAL, self.init_style.bg[gtk.STATE_NORMAL]) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self.init_style.bg[gtk.STATE_PRELIGHT]) + self.wid.modify_bg(gtk.STATE_ACTIVE, self.init_style.bg[gtk.STATE_ACTIVE]) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self.init_style.bg[gtk.STATE_INSENSITIVE]) else: - self.tmp_color = self._old_color - - # modify bg color - self.wid.modify_bg(gtk.STATE_NORMAL, self.tmp_color) - - if self._handler_id: - try: - #remove the timer - gobject.source_remove(self._handler_id) - except: - pass - - # TODO: reset - self._handler_id = gobject.timeout_add(self.timeout, self._timeout_cb) + # modify bg color (to new color) + self.wid.modify_bg(gtk.STATE_NORMAL, self._new_color) + self.wid.modify_bg(gtk.STATE_PRELIGHT, self._new_color) + self.wid.modify_bg(gtk.STATE_ACTIVE, self._new_color) + self.wid.modify_bg(gtk.STATE_INSENSITIVE, self._new_color) + return True + __action__ = { "name" : "ChangeColor", "display_name" : "Change widget color", |