Let the invoker deal with popup/popdown redraw.

This commit is contained in:
Marco Pesenti Gritti 2007-08-15 21:18:58 +02:00
parent 43fb1627a7
commit 4f1986e8a4
4 changed files with 19 additions and 21 deletions

View File

@ -398,6 +398,9 @@ class Palette(gtk.Window):
self.menu.set_active(True) self.menu.set_active(True)
self.show() self.show()
if self._invoker:
self._invoker.notify_popup()
self._up = True self._up = True
_palette_observer.emit('popup', self) _palette_observer.emit('popup', self)
self.emit('popup') self.emit('popup')
@ -406,9 +409,13 @@ class Palette(gtk.Window):
if not self._palette_popup_sid is None: if not self._palette_popup_sid is None:
_palette_observer.disconnect(self._palette_popup_sid) _palette_observer.disconnect(self._palette_popup_sid)
self._palette_popup_sid = None self._palette_popup_sid = None
self.menu.set_active(False) self.menu.set_active(False)
self.hide() self.hide()
if self._invoker:
self._invoker.notify_popdown()
self._up = False self._up = False
self.emit('popdown') self.emit('popdown')
@ -543,6 +550,12 @@ class Invoker(gobject.GObject):
height = gtk.gdk.screen_height() height = gtk.gdk.screen_height()
return gtk.gdk.Rectangle(0, 0, width, height) return gtk.gdk.Rectangle(0, 0, width, height)
def notify_popup(self):
pass
def notify_popdown(self):
pass
class WidgetInvoker(Invoker): class WidgetInvoker(Invoker):
def __init__(self, widget): def __init__(self, widget):
Invoker.__init__(self) Invoker.__init__(self)
@ -602,6 +615,12 @@ class WidgetInvoker(Invoker):
def get_toplevel(self): def get_toplevel(self):
return self._widget.get_toplevel() return self._widget.get_toplevel()
def notify_popup(self):
self._widget.queue_draw()
def notify_popdown(self):
self._widget.queue_draw()
class CanvasInvoker(Invoker): class CanvasInvoker(Invoker):
def __init__(self, item): def __init__(self, item):
Invoker.__init__(self) Invoker.__init__(self)

View File

@ -42,9 +42,6 @@ class RadioToolButton(gtk.RadioToolButton):
self._palette.props.invoker = WidgetInvoker(self.child) self._palette.props.invoker = WidgetInvoker(self.child)
self._palette.props.draw_gap = True 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): def set_tooltip(self, text):
self._palette = Palette(text) self._palette = Palette(text)
self._palette.props.invoker = WidgetInvoker(self.child) self._palette.props.invoker = WidgetInvoker(self.child)
@ -57,8 +54,4 @@ class RadioToolButton(gtk.RadioToolButton):
gtk.RadioToolButton.do_expose_event(self, event) gtk.RadioToolButton.do_expose_event(self, event)
def _palette_changed(self, palette):
# Force a redraw to update the invoker rectangle
self.queue_draw()
palette = property(get_palette, set_palette) palette = property(get_palette, set_palette)

View File

@ -41,9 +41,6 @@ class ToggleToolButton(gtk.ToggleToolButton):
self._palette.props.invoker = WidgetInvoker(self.child) self._palette.props.invoker = WidgetInvoker(self.child)
self._palette.props.draw_gap = True 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): def set_tooltip(self, text):
self._palette = Palette(text) self._palette = Palette(text)
self._palette.props.invoker = WidgetInvoker(self.child) self._palette.props.invoker = WidgetInvoker(self.child)
@ -56,8 +53,4 @@ class ToggleToolButton(gtk.ToggleToolButton):
gtk.ToggleToolButton.do_expose_event(self, event) gtk.ToggleToolButton.do_expose_event(self, event)
def _palette_changed(self, palette):
# Force a redraw to update the invoker rectangle
self.queue_draw()
palette = property(get_palette, set_palette) palette = property(get_palette, set_palette)

View File

@ -44,9 +44,6 @@ class ToolButton(gtk.ToolButton):
self._palette.props.invoker = WidgetInvoker(self.child) self._palette.props.invoker = WidgetInvoker(self.child)
self._palette.props.draw_gap = True 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): def set_tooltip(self, text):
self.set_palette(Palette(text)) self.set_palette(Palette(text))
@ -62,8 +59,4 @@ class ToolButton(gtk.ToolButton):
if self._palette: if self._palette:
self._palette.popdown(True) 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) palette = property(get_palette, set_palette)