From: Simon Schampijer <si...@laptop.org> As Palettes can either include a Gtk.Menu or a Gtk.Window we have to use a "false" menu when we want to have both functionality in a Palette. There is a new class PaletteMenuItem in the toolkit for that.
Ported from the Frame: Journal Palette, Network Wireless Palette, Speaker Palette Signed-off-by: Simon Schampijer <si...@laptop.org> --- extensions/deviceicon/network.py | 19 ++++++++++++------- extensions/deviceicon/speaker.py | 33 +++++++++++++++++++-------------- src/jarabe/view/palettes.py | 29 +++++++++++++++++------------ 3 files changed, 48 insertions(+), 33 deletions(-) diff --git a/extensions/deviceicon/network.py b/extensions/deviceicon/network.py index 51d3ac9..b4a5393 100644 --- a/extensions/deviceicon/network.py +++ b/extensions/deviceicon/network.py @@ -34,6 +34,8 @@ import dbus from sugar3.graphics.icon import get_icon_state from sugar3.graphics import style from sugar3.graphics.palette import Palette +from sugar3.graphics.palettemenuitem import PaletteMenuItem +from sugar3.graphics.palettemenuitem import PaletteMenuItemSeparator from sugar3.graphics.toolbutton import ToolButton from sugar3.graphics.tray import TrayIcon from sugar3.graphics.menuitem import MenuItem @@ -76,6 +78,16 @@ class WirelessPalette(Palette): self._info = Gtk.VBox() + self._disconnect_item = PaletteMenuItem(_('Disconnect')) + icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='media-eject') + self._disconnect_item.set_image(icon) + self._disconnect_item.connect('activate', + self.__disconnect_activate_cb) + self._info.add(self._disconnect_item) + + separator = PaletteMenuItemSeparator() + self._info.pack_start(separator, True, True, 0) + def _padded(child, xalign=0, yalign=0.5): padder = Gtk.Alignment.new(xalign=xalign, yalign=yalign, xscale=1, yscale=0.33) @@ -90,13 +102,6 @@ class WirelessPalette(Palette): self._info.pack_start(_padded(self._ip_address_label), True, True, 0) self._info.show_all() - self._disconnect_item = MenuItem(_('Disconnect')) - icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='media-eject') - self._disconnect_item.set_image(icon) - self._disconnect_item.connect('activate', - self.__disconnect_activate_cb) - self.menu.append(self._disconnect_item) - def set_connecting(self): label = glib.markup_escape_text(_('Connecting...')) self.props.secondary_text = label diff --git a/extensions/deviceicon/speaker.py b/extensions/deviceicon/speaker.py index cc2c4ef..4a09e7b 100644 --- a/extensions/deviceicon/speaker.py +++ b/extensions/deviceicon/speaker.py @@ -26,6 +26,8 @@ from sugar3.graphics.icon import get_icon_state, Icon from sugar3.graphics.menuitem import MenuItem from sugar3.graphics.tray import TrayIcon from sugar3.graphics.palette import Palette +from sugar3.graphics.palettemenuitem import PaletteMenuItem +from sugar3.graphics.palettemenuitem import PaletteMenuItemSeparator from sugar3.graphics.xocolor import XoColor from jarabe.frame.frameinvoker import FrameWidgetInvoker @@ -102,6 +104,17 @@ class SpeakerPalette(Palette): self.set_content(vbox) vbox.show() + self._mute_item = PaletteMenuItem('') + self._mute_icon = Icon(icon_size=Gtk.IconSize.MENU) + self._mute_item.set_image(self._mute_icon) + vbox.add(self._mute_item) + self._mute_item.show() + self._mute_item.connect('activate', self.__mute_activate_cb) + + separator = PaletteMenuItemSeparator() + vbox.pack_start(separator, True, True, 0) + separator.show() + vol_step = sound.VOLUME_STEP self._adjustment = Gtk.Adjustment(value=self._model.props.level, lower=0, @@ -112,16 +125,9 @@ class SpeakerPalette(Palette): self._hscale = Gtk.HScale() self._hscale.set_adjustment(self._adjustment) self._hscale.set_digits(0) - self._hscale.set_draw_value(False) vbox.add(self._hscale) self._hscale.show() - self._mute_item = MenuItem('') - self._mute_icon = Icon(icon_size=Gtk.IconSize.MENU) - self._mute_item.set_image(self._mute_icon) - self.menu.append(self._mute_item) - self._mute_item.show() - self._adjustment_handler_id = \ self._adjustment.connect('value_changed', self.__adjustment_changed_cb) @@ -130,8 +136,6 @@ class SpeakerPalette(Palette): self._model.connect('notify::level', self.__level_changed_cb) self._model.connect('notify::muted', self.__muted_changed_cb) - self._mute_item.connect('activate', self.__mute_activate_cb) - self.connect('popup', self.__popup_cb) def _update_muted(self): @@ -141,24 +145,25 @@ class SpeakerPalette(Palette): else: mute_item_text = _('Mute') mute_item_icon_name = 'dialog-cancel' - self._mute_item.get_child().set_text(mute_item_text) + self._mute_item.set_label(mute_item_text) self._mute_icon.props.icon_name = mute_item_icon_name + self._mute_icon.show() def _update_level(self): - if self._adjustment.value != self._model.props.level: + if self._adjustment.props.value != self._model.props.level: self._adjustment.handler_block(self._adjustment_handler_id) try: - self._adjustment.value = self._model.props.level + self._adjustment.props.value = self._model.props.level finally: self._adjustment.handler_unblock(self._adjustment_handler_id) def __adjustment_changed_cb(self, adj_): self._model.handler_block(self._model_notify_level_handler_id) try: - self._model.props.level = self._adjustment.value + self._model.props.level = self._adjustment.props.value finally: self._model.handler_unblock(self._model_notify_level_handler_id) - self._model.props.muted = self._adjustment.value == 0 + self._model.props.muted = self._adjustment.props.value == 0 def __level_changed_cb(self, pspec_, param_): self._update_level() diff --git a/src/jarabe/view/palettes.py b/src/jarabe/view/palettes.py index 2d13cbd..50f6c83 100644 --- a/src/jarabe/view/palettes.py +++ b/src/jarabe/view/palettes.py @@ -25,6 +25,8 @@ from gi.repository import Gtk from sugar3 import env from sugar3.graphics.palette import Palette +from sugar3.graphics.palettemenuitem import PaletteMenuItem +from sugar3.graphics.palettemenuitem import PaletteMenuItemSeparator from sugar3.graphics.menuitem import MenuItem from sugar3.graphics.icon import Icon from sugar3.graphics import style @@ -166,6 +168,21 @@ class JournalPalette(BasePalette): self.set_content(vbox) vbox.show() + menu_item = PaletteMenuItem(_('Show contents')) + icon = Icon(file=self._home_activity.get_icon_path(), + icon_size=Gtk.IconSize.MENU, + xo_color=self._home_activity.get_icon_color()) + menu_item.set_image(icon) + icon.show() + + menu_item.connect('activate', self.__open_activate_cb) + vbox.add(menu_item) + menu_item.show() + + separator = PaletteMenuItemSeparator() + vbox.pack_start(separator, True, True, 0) + separator.show() + self._progress_bar = Gtk.ProgressBar() vbox.add(self._progress_bar) self._progress_bar.show() @@ -177,18 +194,6 @@ class JournalPalette(BasePalette): self.connect('popup', self.__popup_cb) - menu_item = MenuItem(_('Show contents')) - - icon = Icon(file=self._home_activity.get_icon_path(), - icon_size=Gtk.IconSize.MENU, - xo_color=self._home_activity.get_icon_color()) - menu_item.set_image(icon) - icon.show() - - menu_item.connect('activate', self.__open_activate_cb) - self.menu.append(menu_item) - menu_item.show() - def __open_activate_cb(self, menu_item): self._home_activity.get_window().activate(Gtk.get_current_event_time()) -- 1.7.11.4 _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel