Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar/graphics/toolbutton.py
diff options
context:
space:
mode:
authorBenjamin Berg <benjamin@sipsolutions.net>2007-08-10 16:29:28 (GMT)
committer Benjamin Berg <benjamin@sipsolutions.net>2007-08-10 16:29:28 (GMT)
commit6573e8c5e6ed9ec8c9e7af10c6ad34acb10bcd67 (patch)
tree8c4df4ab62207e5a4dd075344844a8c1cd89be39 /sugar/graphics/toolbutton.py
parent6aeb95aa467c30c878ba29c66461d9254c7a7392 (diff)
Draw an invoker rectangle that looks connected to the main palette.
There is one catch though, the menu placement inside the palette seems broken. (Probably was already broken before.) Not sure what is going on there.
Diffstat (limited to 'sugar/graphics/toolbutton.py')
-rw-r--r--sugar/graphics/toolbutton.py17
1 files changed, 17 insertions, 0 deletions
diff --git a/sugar/graphics/toolbutton.py b/sugar/graphics/toolbutton.py
index e5d90ab..c447b3c 100644
--- a/sugar/graphics/toolbutton.py
+++ b/sugar/graphics/toolbutton.py
@@ -23,6 +23,7 @@ from sugar.graphics.icon import Icon
from sugar.graphics.palette import Palette, WidgetInvoker
class ToolButton(gtk.ToolButton):
+ __gtype_name__ = "SugarToolButton"
def __init__(self, icon_name=None):
gtk.ToolButton.__init__(self)
@@ -41,12 +42,28 @@ class ToolButton(gtk.ToolButton):
def set_palette(self, palette):
self._palette = palette
self._palette.props.invoker = WidgetInvoker(self.child)
+ self._palette.props.draw_gap = True
+
+ self._palette.connect("popup", self._palette_changed)
+ self._palette.connect("popdown", self._palette_changed)
def set_tooltip(self, text):
self.set_palette(Palette(text))
+ def do_expose_event(self, event):
+ if self._palette:
+ if self._palette.is_up() or self.child.state == gtk.STATE_PRELIGHT:
+ invoker = self._palette.props.invoker
+ invoker.draw_invoker_rect(event, self._palette)
+
+ gtk.ToolButton.do_expose_event(self, event)
+
def _button_clicked_cb(self, widget):
if self._palette:
self._palette.popdown(True)
+ def _palette_changed(self, palette):
+ # Force a redraw to update the invoker rectangle
+ self.queue_draw()
+
palette = property(get_palette, set_palette)