Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/src/sugar3/graphics/palette.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/sugar3/graphics/palette.py')
-rw-r--r--src/sugar3/graphics/palette.py70
1 files changed, 45 insertions, 25 deletions
diff --git a/src/sugar3/graphics/palette.py b/src/sugar3/graphics/palette.py
index 7a2dcc7..7d5833e 100644
--- a/src/sugar3/graphics/palette.py
+++ b/src/sugar3/graphics/palette.py
@@ -29,7 +29,7 @@ from sugar3.graphics import palettegroup
from sugar3.graphics import animator
from sugar3.graphics import style
from sugar3.graphics.icon import Icon
-from sugar3.graphics import palettewindow
+from sugar3.graphics.palettewindow import PaletteWindow, _PaletteWindowWidget, _PaletteMenuWidget
# DEPRECATED
# Import these for backwards compatibility
@@ -37,7 +37,7 @@ from sugar3.graphics.palettewindow import MouseSpeedDetector, Invoker, \
WidgetInvoker, CanvasInvoker, ToolInvoker, CellRendererInvoker
-class Palette(palettewindow.PaletteWindow):
+class Palette(PaletteWindow):
PRIMARY = 0
SECONDARY = 1
@@ -52,19 +52,16 @@ class Palette(palettewindow.PaletteWindow):
# DEPRECATED: label is passed with the primary-text property,
# accel_path is set via the invoker property
- self.widget = palettewindow._PaletteWindowWidget()
-
-
self._primary_text = None
self._secondary_text = None
self._icon = None
self._icon_visible = True
self._palette_state = self.PRIMARY
- palette_box = Gtk.VBox()
+ self._palette_box = Gtk.VBox()
primary_box = Gtk.HBox()
- palette_box.pack_start(primary_box, False, True, 0)
+ self._palette_box.pack_start(primary_box, False, True, 0)
primary_box.show()
self._icon_box = Gtk.HBox()
@@ -98,7 +95,7 @@ class Palette(palettewindow.PaletteWindow):
labels_box.pack_start(self._secondary_label, True, True, 0)
self._secondary_box = Gtk.VBox()
- palette_box.pack_start(self._secondary_box, True, True, 0)
+ self._palette_box.pack_start(self._secondary_box, True, True, 0)
self._separator = Gtk.HSeparator()
self._secondary_box.pack_start(self._separator, True, True, 0)
@@ -107,7 +104,7 @@ class Palette(palettewindow.PaletteWindow):
self._secondary_anim.add(_SecondaryAnimation(self))
# we init after initializing all of our containers
- palettewindow.PaletteWindow.__init__(self, **kwargs)
+ PaletteWindow.__init__(self, **kwargs)
self._full_request = [0, 0]
self._content = None
@@ -122,13 +119,19 @@ class Palette(palettewindow.PaletteWindow):
self._secondary_box.pack_start(self.action_bar, True, True, 0)
self.action_bar.show()
- self.widget.add(palette_box)
- palette_box.show()
+ self._palette_box.show()
self.connect('notify::invoker', self.__notify_invoker_cb)
- self.widget.connect('realize', self.__realize_cb)
- self.widget.connect('hide', self.__hide_cb)
- self.widget.connect('destroy', self.__destroy_cb)
+ self.connect('popdown', self.__popdown_cb)
+
+ self._widget = None
+
+
+ def _setup_widget(self):
+ PaletteWindow._setup_widget(self)
+
+ # Why?
+ self._widget.connect('destroy', self.__destroy_cb)
def _invoker_right_click_cb(self, invoker):
self.popup(immediate=True, state=self.SECONDARY)
@@ -137,7 +140,7 @@ class Palette(palettewindow.PaletteWindow):
self._secondary_anim.stop()
self.popdown(immediate=True)
- def __hide_cb(self, widget):
+ def __popdown_cb(self, widget):
self._secondary_anim.stop()
def __notify_invoker_cb(self, palette, pspec):
@@ -157,7 +160,7 @@ class Palette(palettewindow.PaletteWindow):
if self._invoker is not None:
self._update_full_request()
- palettewindow.PaletteWindow.popup(self, immediate)
+ PaletteWindow.popup(self, immediate)
if state is None:
state = self.PRIMARY
@@ -173,10 +176,10 @@ class Palette(palettewindow.PaletteWindow):
self._secondary_anim.stop()
# to suppress glitches while later re-opening
self.set_palette_state(self.PRIMARY)
- palettewindow.PaletteWindow.popdown(self, immediate)
+ PaletteWindow.popdown(self, immediate)
def on_enter(self, event):
- palettewindow.PaletteWindow.on_enter(self, event)
+ PaletteWindow.on_enter(self, event)
self._secondary_anim.start()
def _add_content(self):
@@ -272,8 +275,16 @@ class Palette(palettewindow.PaletteWindow):
default=True,
getter=get_icon_visible,
setter=set_icon_visible)
-
+
def set_content(self, widget):
+ assert self._widget is None or isinstance(self._widget, _PaletteWindowWidget)
+
+ if self._widget is None:
+ self._widget = _PaletteWindowWidget()
+ self._setup_widget()
+
+ self._widget.add(self._palette_box)
+
if self._content.get_children():
self._content.remove(self._content.get_children()[0])
@@ -288,7 +299,7 @@ class Palette(palettewindow.PaletteWindow):
# We need to figure out how to do the size request with GTK+ 3.
# def do_size_request(self, requisition):
-# palettewindow.PaletteWindow.do_size_request(self, requisition)
+# PaletteWindow.do_size_request(self, requisition)
# # Gtk.AccelLabel request doesn't include the accelerator.
# label_width = self._label_alignment.size_request()[0] + \
@@ -305,16 +316,13 @@ class Palette(palettewindow.PaletteWindow):
def _update_accept_focus(self):
accept_focus = len(self._content.get_children())
- self.widget.set_accept_focus(accept_focus)
-
- def __realize_cb(self, widget):
- self._update_accept_focus()
+ self._widget.set_accept_focus(accept_focus)
def _update_full_request(self):
if self._palette_state == self.PRIMARY:
self._secondary_box.show()
- self._full_request = self.widget.size_request()
+ self._full_request = self._widget.size_request()
if self._palette_state == self.PRIMARY:
self._secondary_box.hide()
@@ -331,6 +339,18 @@ class Palette(palettewindow.PaletteWindow):
self._palette_state = state
+ def get_menu(self):
+ assert self._widget is None or isinstance(self._widget, _PaletteMenuWidget)
+
+ if self._widget is None:
+ self._widget = _PaletteMenuWidget()
+
+ self._setup_widget()
+
+ return self._widget
+
+ menu = GObject.property(type=object, getter=get_menu)
+
class PaletteActionBar(Gtk.HButtonBox):