Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar
diff options
context:
space:
mode:
authorTomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-10-11 09:25:49 (GMT)
committer Tomeu Vizoso <tomeu.vizoso@collabora.co.uk>2010-10-14 17:06:31 (GMT)
commit29582de67f3189d232e170b1e07e9bf34233fb51 (patch)
tree4997dce62624d53c252e42ca3e4b41cd0c7d9697 /src/sugar
parentb91c2102b4b692f98a885847b7ce43f37715d593 (diff)
Add 'cache-palette' property to Invoker #1742
Meaning that the palette will be cached after it's created.
Diffstat (limited to 'src/sugar')
-rw-r--r--src/sugar/graphics/palette.py1
-rw-r--r--src/sugar/graphics/palettewindow.py23
2 files changed, 21 insertions, 3 deletions
diff --git a/src/sugar/graphics/palette.py b/src/sugar/graphics/palette.py
index d4632eb..d4f844c 100644
--- a/src/sugar/graphics/palette.py
+++ b/src/sugar/graphics/palette.py
@@ -158,6 +158,7 @@ class Palette(PaletteWindow):
self.popdown(immediate=True)
# Break the reference cycle. It looks like the gc is not able to free
# it, possibly because gtk.Menu memory handling is very special.
+ self.menu.disconnect_by_func(self.__menu_item_inserted_cb)
self.menu = None
def __show_cb(self, widget):
diff --git a/src/sugar/graphics/palettewindow.py b/src/sugar/graphics/palettewindow.py
index 22131c2..f51c938 100644
--- a/src/sugar/graphics/palettewindow.py
+++ b/src/sugar/graphics/palettewindow.py
@@ -179,6 +179,7 @@ class PaletteWindow(gtk.Window):
def __destroy_cb(self, palette):
self.set_group_id(None)
+ self._mouse_detector.disconnect_by_func(self._mouse_slow_cb)
def set_invoker(self, invoker):
for hid in self._invoker_hids[:]:
@@ -457,6 +458,7 @@ class Invoker(gobject.GObject):
self._cursor_x = -1
self._cursor_y = -1
self._palette = None
+ self._cache_palette = True
def attach(self, parent):
self.parent = parent
@@ -639,18 +641,33 @@ class Invoker(gobject.GObject):
def set_palette(self, palette):
if self._palette is not None:
self._palette.popdown(immediate=True)
-
- if self._palette:
self._palette.props.invoker = None
+ self._palette.destroy()
self._palette = palette
- if self._palette:
+ if self._palette is not None:
self._palette.props.invoker = self
+ self._palette.connect('popdown', self.__palette_popdown_cb)
palette = gobject.property(
type=object, setter=set_palette, getter=get_palette)
+ def get_cache_palette(self):
+ return self._cache_palette
+
+ def set_cache_palette(self, cache_palette):
+ self._cache_palette = cache_palette
+
+ cache_palette = gobject.property(type=object, setter=set_cache_palette,
+ getter=get_cache_palette)
+ """Whether the invoker will cache the palette after its creation. Defaults
+ to True.
+ """
+
+ def __palette_popdown_cb(self, palette):
+ if not self.props.cache_palette:
+ self.set_palette(None)
class WidgetInvoker(Invoker):