From e9ea1d3cc107fd728a33d2661611d1bf5762f931 Mon Sep 17 00:00:00 2001
From: Simon Schampijer <simon@laptop.org>
Date: Tue, 16 Oct 2012 15:33:18 +0200
Subject: [PATCH shell] NetworkView: add the custom SugarPalette instead of
the GTK.Menu based one, part of SL #3992
The Gtk.Menu triggers a Palette popdown in a long press (and actually as well
a long click). There is not realy a way around that so we go with our custom
Palettes.
This adds the custom Palette for the SugarAdhocView, the WirelessNetworkView
and the OlpcMeshView.
Use the toggle_palette property from the invoker in order to popup/popdown
Palette on left click or tap.
Fix appearance of AdHoc icons as well, error introduced
in 02218ea3e0c4ac2edaa8b08dbc066f2d22f29e8a.
Signed-off-by: Simon Schampijer <simon@laptop.org>
---
src/jarabe/desktop/networkviews.py | 75 +++++++++++++++++++++++---------------
1 file changed, 46 insertions(+), 29 deletions(-)
diff --git a/src/jarabe/desktop/networkviews.py b/src/jarabe/desktop/networkviews.py
index c7d21c6..f72b2d2 100644
a
|
b
|
import uuid |
24 | 24 | import dbus |
25 | 25 | import glib |
26 | 26 | |
| 27 | from gi.repository import Gtk |
| 28 | |
27 | 29 | from sugar3.graphics.icon import Icon |
28 | 30 | from sugar3.graphics.xocolor import XoColor |
29 | 31 | from sugar3.graphics import xocolor |
30 | 32 | from sugar3.graphics import style |
31 | 33 | from sugar3.graphics.icon import get_icon_state |
32 | 34 | from sugar3.graphics import palette |
33 | | from sugar3.graphics.menuitem import MenuItem |
| 35 | from sugar3.graphics.palettemenuitem import PaletteMenuItem |
| 36 | from sugar3.graphics.palettemenuitem import PaletteMenuItemSeparator |
34 | 37 | from sugar3 import profile |
35 | 38 | |
36 | 39 | from jarabe.view.pulsingicon import EventPulsingIcon |
… |
… |
class WirelessNetworkView(EventPulsingIcon): |
122 | 125 | label = glib.markup_escape_text(self._display_name) |
123 | 126 | p = palette.Palette(primary_text=label, icon=self._palette_icon) |
124 | 127 | |
125 | | self._connect_item = MenuItem(_('Connect'), 'dialog-ok') |
| 128 | self.menu_box = Gtk.VBox() |
| 129 | |
| 130 | self._connect_item = PaletteMenuItem(_('Connect')) |
| 131 | icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='dialog-ok') |
| 132 | self._connect_item.set_image(icon) |
126 | 133 | self._connect_item.connect('activate', self.__connect_activate_cb) |
127 | | p.menu.append(self._connect_item) |
| 134 | self.menu_box.add(self._connect_item) |
| 135 | |
| 136 | self._disconnect_item = PaletteMenuItem(_('Disconnect')) |
| 137 | icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='media-eject') |
| 138 | self._disconnect_item.set_image(icon) |
| 139 | self._disconnect_item.connect('activate', self.__disconnect_activate_cb) |
| 140 | self.menu_box.add(self._disconnect_item) |
128 | 141 | |
129 | | self._disconnect_item = MenuItem(_('Disconnect'), 'media-eject') |
130 | | self._disconnect_item.connect('activate', |
131 | | self._disconnect_activate_cb) |
132 | | p.menu.append(self._disconnect_item) |
| 142 | p.set_content(self.menu_box) |
| 143 | self.menu_box.show_all() |
133 | 144 | |
134 | 145 | self.connect_to_palette_pop_events(p) |
135 | 146 | |
… |
… |
class WirelessNetworkView(EventPulsingIcon): |
261 | 272 | else: |
262 | 273 | self.props.alpha = 1.0 |
263 | 274 | |
264 | | def _disconnect_activate_cb(self, item): |
| 275 | def __disconnect_activate_cb(self, item): |
265 | 276 | ap_paths = self._access_points.keys() |
266 | 277 | network.disconnect_access_points(ap_paths) |
267 | 278 | |
… |
… |
class SugarAdhocView(EventPulsingIcon): |
464 | 475 | get_adhoc_manager_instance().connect('state-changed', |
465 | 476 | self.__state_changed_cb) |
466 | 477 | |
467 | | self.connect('button-release-event', self.__button_release_event_cb) |
468 | 478 | |
469 | 479 | pulse_color = XoColor('%s,%s' % (style.COLOR_BUTTON_GREY.get_svg(), |
470 | 480 | style.COLOR_TRANSPARENT.get_svg())) |
… |
… |
class SugarAdhocView(EventPulsingIcon): |
473 | 483 | (profile.get_color().get_stroke_color(), |
474 | 484 | style.COLOR_TRANSPARENT.get_svg())) |
475 | 485 | self.props.base_color = self._state_color |
| 486 | self.palette_invoker.props.toggle_palette = True |
476 | 487 | self._palette = self._create_palette() |
477 | 488 | self.set_palette(self._palette) |
478 | 489 | self._palette_icon.props.xo_color = self._state_color |
… |
… |
class SugarAdhocView(EventPulsingIcon): |
486 | 497 | palette_ = palette.Palette(glib.markup_escape_text(text), |
487 | 498 | icon=self._palette_icon) |
488 | 499 | |
489 | | self._connect_item = MenuItem(_('Connect'), 'dialog-ok') |
| 500 | self.menu_box = Gtk.VBox() |
| 501 | |
| 502 | self._connect_item = PaletteMenuItem(_('Connect')) |
| 503 | icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='dialog-ok') |
| 504 | self._connect_item.set_image(icon) |
490 | 505 | self._connect_item.connect('activate', self.__connect_activate_cb) |
491 | | palette_.menu.append(self._connect_item) |
492 | | self._connect_item.show() |
| 506 | self.menu_box.add(self._connect_item) |
493 | 507 | |
494 | | self._disconnect_item = MenuItem(_('Disconnect'), 'media-eject') |
495 | | self._disconnect_item.connect('activate', |
496 | | self.__disconnect_activate_cb) |
497 | | palette_.menu.append(self._disconnect_item) |
| 508 | self._disconnect_item = PaletteMenuItem(_('Disconnect')) |
| 509 | icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='media-eject') |
| 510 | self._disconnect_item.set_image(icon) |
| 511 | self._disconnect_item.connect('activate', self.__disconnect_activate_cb) |
| 512 | self.menu_box.add(self._disconnect_item) |
498 | 513 | |
499 | | self.connect_to_palette_pop_events(palette) |
| 514 | palette_.set_content(self.menu_box) |
| 515 | self.menu_box.show_all() |
| 516 | self._disconnect_item.hide() |
500 | 517 | |
501 | | return palette_ |
| 518 | self.connect_to_palette_pop_events(palette_) |
502 | 519 | |
503 | | def __button_release_event_cb(self, icon, event): |
504 | | self._palette.popup(immediate=True, |
505 | | state=palette.Palette.SECONDARY) |
| 520 | return palette_ |
506 | 521 | |
507 | 522 | def __connect_activate_cb(self, icon): |
508 | 523 | get_adhoc_manager_instance().activate_channel(self._channel) |
… |
… |
class OlpcMeshView(EventPulsingIcon): |
592 | 607 | self._active = False |
593 | 608 | device = mesh_mgr.mesh_device |
594 | 609 | |
595 | | self.connect('button-release-event', self.__button_release_event_cb) |
596 | | |
597 | 610 | interface_props = dbus.Interface(device, dbus.PROPERTIES_IFACE) |
598 | 611 | interface_props.Get(network.NM_DEVICE_IFACE, 'State', |
599 | 612 | reply_handler=self.__get_device_state_reply_cb, |
… |
… |
class OlpcMeshView(EventPulsingIcon): |
615 | 628 | style.COLOR_TRANSPARENT.get_svg())) |
616 | 629 | self.props.pulse_color = pulse_color |
617 | 630 | self.props.base_color = profile.get_color() |
| 631 | self.palette_invoker.props.toggle_palette = True |
618 | 632 | self._palette = self._create_palette() |
619 | 633 | self.set_palette(self._palette) |
620 | 634 | |
… |
… |
class OlpcMeshView(EventPulsingIcon): |
622 | 636 | text = _('Mesh Network %d') % (self._channel, ) |
623 | 637 | _palette = palette.Palette(glib.markup_escape_text(text)) |
624 | 638 | |
625 | | self._connect_item = MenuItem(_('Connect'), 'dialog-ok') |
| 639 | self.menu_box = Gtk.VBox() |
| 640 | |
| 641 | self._connect_item = PaletteMenuItem(_('Connect')) |
| 642 | icon = Icon(icon_size=Gtk.IconSize.MENU, icon_name='dialog-ok') |
| 643 | self._connect_item.set_image(icon) |
626 | 644 | self._connect_item.connect('activate', self.__connect_activate_cb) |
627 | | _palette.menu.append(self._connect_item) |
| 645 | self.menu_box.add(self._connect_item) |
| 646 | |
| 647 | _palette_.set_content(self.menu_box) |
| 648 | self.menu_box.show_all() |
628 | 649 | |
629 | 650 | return _palette |
630 | 651 | |
… |
… |
class OlpcMeshView(EventPulsingIcon): |
691 | 712 | def __connect_activate_cb(self, icon): |
692 | 713 | self._connect() |
693 | 714 | |
694 | | def __button_release_event_cb(self, icon, event): |
695 | | self._palette.popup(immediate=True, |
696 | | state=palette.Palette.SECONDARY) |
697 | | |
698 | 715 | def _connect(self): |
699 | 716 | self._mesh_mgr.user_activate_channel(self._channel) |
700 | 717 | |