diff options
Diffstat (limited to 'src/sugar3/graphics/palette.py')
-rw-r--r-- | src/sugar3/graphics/palette.py | 70 |
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): |