diff options
author | Eben Eliason <eben@sugar.(none)> | 2008-10-18 21:08:13 (GMT) |
---|---|---|
committer | Eben Eliason <eben@sugar.(none)> | 2008-10-18 21:08:13 (GMT) |
commit | 5cc6b27ae78a308000abc1f651bea3972f99c6d9 (patch) | |
tree | 8d352c868dfea484ce28cea298ec005fcb21dda5 /src | |
parent | e2439a7e4422c9de01a46770ecabea7e3c39bcce (diff) |
Add drag-active property to tray control (#8604)
The drag-active property can be set to provide a highlight
when the tray control is accepting target of an ongoing drag.
We can't use the drag_highlight method because we desire to
adjust the background of the widget, rather than drawing on
top of it. Overriding these methods would work in most cases,
but in cases where GTK+ calls drag_unhighlight itself things
could break, so we use a property instead.
Diffstat (limited to 'src')
-rw-r--r-- | src/sugar/graphics/tray.py | 79 |
1 files changed, 73 insertions, 6 deletions
diff --git a/src/sugar/graphics/tray.py b/src/sugar/graphics/tray.py index d5e9b39..678b235 100644 --- a/src/sugar/graphics/tray.py +++ b/src/sugar/graphics/tray.py @@ -211,7 +211,19 @@ ALIGN_TO_START = 0 ALIGN_TO_END = 1 class HTray(gtk.HBox): + __gtype_name__ = 'SugarHTray' + + __gproperties__ = { + 'align' : (int, None, None, 0, 1, ALIGN_TO_START, + gobject.PARAM_READWRITE | + gobject.PARAM_CONSTRUCT_ONLY), + 'drag-active' : (bool, None, None, False, + gobject.PARAM_READWRITE) + } def __init__(self, **kwargs): + self._drag_active = False + self.align = ALIGN_TO_START + gobject.GObject.__init__(self, **kwargs) scroll_left = _TrayScrollButton('go-left', _PREVIOUS_PAGE) @@ -235,9 +247,30 @@ class HTray(gtk.HBox): self._viewport.traybar.insert(spacer, 0) spacer.show() - align = gobject.property( - flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE, - default=ALIGN_TO_START, type=int) + def do_set_property(self, pspec, value): + if pspec.name == 'align': + self.align = value + elif pspec.name == 'drag-active': + self._set_drag_active(value) + else: + raise AssertionError + + def do_get_property(self, pspec): + if pspec.name == 'align': + return self.align + elif pspec.name == 'drag-active': + return self._drag_active + else: + raise AssertionError + + def _set_drag_active(self, active): + if self._drag_active != active: + self._drag_active = active + if self._drag_active: + self._viewport.traybar.modify_bg(gtk.STATE_NORMAL, + style.COLOR_BLACK.get_gdk_color()) + else: + self._viewport.traybar.modify_bg(gtk.STATE_NORMAL, None) def get_children(self): children = self._viewport.traybar.get_children()[:] @@ -263,7 +296,20 @@ class HTray(gtk.HBox): self._viewport.scroll_to_item(item) class VTray(gtk.VBox): + __gtype_name__ = 'SugarVTray' + + __gproperties__ = { + 'align' : (int, None, None, 0, 1, ALIGN_TO_START, + gobject.PARAM_READWRITE | + gobject.PARAM_CONSTRUCT_ONLY), + 'drag-active' : (bool, None, None, False, + gobject.PARAM_READWRITE) + } + def __init__(self, **kwargs): + self._drag_active = False + self.align = ALIGN_TO_START + gobject.GObject.__init__(self, **kwargs) # FIXME we need a go-up icon @@ -289,9 +335,30 @@ class VTray(gtk.VBox): self._viewport.traybar.insert(spacer, 0) spacer.show() - align = gobject.property( - flags=gobject.PARAM_CONSTRUCT_ONLY | gobject.PARAM_READWRITE, - default=ALIGN_TO_START, type=int) + def do_set_property(self, pspec, value): + if pspec.name == 'align': + self.align = value + elif pspec.name == 'drag-active': + self._set_drag_active(value) + else: + raise AssertionError + + def do_get_property(self, pspec): + if pspec.name == 'align': + return self.align + elif pspec.name == 'drag-active': + return self._drag_active + else: + raise AssertionError + + def _set_drag_active(self, active): + if self._drag_active != active: + self._drag_active = active + if self._drag_active: + self._viewport.traybar.modify_bg(gtk.STATE_NORMAL, + style.COLOR_BLACK.get_gdk_color()) + else: + self._viewport.traybar.modify_bg(gtk.STATE_NORMAL, None) def get_children(self): children = self._viewport.traybar.get_children()[:] |