Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/addons/changecolor.py
diff options
context:
space:
mode:
Diffstat (limited to 'addons/changecolor.py')
-rw-r--r--addons/changecolor.py58
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",