Ticket #3992: 0001-BuddyMenu-switch-from-GTK.Menu-to-custom-menu-part-o.patch

File 0001-BuddyMenu-switch-from-GTK.Menu-to-custom-menu-part-o.patch, 8.1 KB (added by erikos, 12 years ago)

BuddyMenu: switch from GTK.Menu to custom menu

  • src/jarabe/desktop/favoritesview.py

    From 58d3cdee1622e972f51efa32fcf9a7d9f5e5f1d2 Mon Sep 17 00:00:00 2001
    From: Simon Schampijer <simon@laptop.org>
    Date: Thu, 25 Oct 2012 14:09:00 +0200
    Subject: [PATCH shell] BuddyMenu: switch from GTK.Menu to custom menu, 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.
    
    Use the toggle_palette property from the invoker in order to popup/popdown
    Palette on left click or tap.
    
    Fixme: we need to make the Palette widget accessible through the Palette
    API.
    
    Signed-off-by: Simon Schampijer <simon@laptop.org>
    ---
     src/jarabe/desktop/favoritesview.py | 17 ++++++++--------
     src/jarabe/view/buddyicon.py        |  6 +-----
     src/jarabe/view/buddymenu.py        | 39 +++++++++++++++++++------------------
     3 files changed, 30 insertions(+), 32 deletions(-)
    
    diff --git a/src/jarabe/desktop/favoritesview.py b/src/jarabe/desktop/favoritesview.py
    index e71b769..6e32363 100644
    a b from gi.repository import GdkPixbuf 
    2929from sugar3.graphics import style
    3030from sugar3.graphics.icon import Icon
    3131from sugar3.graphics.icon import CanvasIcon
    32 from sugar3.graphics.menuitem import MenuItem
    3332from sugar3.graphics.palettemenuitem import PaletteMenuItem
    3433from sugar3.graphics.palettemenuitem import PaletteMenuItemSeparator
    3534from sugar3.graphics.alert import Alert
    class OwnerIcon(BuddyIcon): 
    606605        backup_url = client.get_string('/desktop/sugar/backup_url')
    607606
    608607        if not backup_url:
    609             self._register_menu = MenuItem(_('Register'), 'media-record')
     608            self._register_menu = PaletteMenuItem(_('Register'),
     609                                                  'media-record')
    610610        else:
    611             self._register_menu = MenuItem(_('Register again'),
    612                                            'media-record')
     611            self._register_menu = PaletteMenuItem(_('Register again'),
     612                                                  'media-record')
    613613
    614614        self._register_menu.connect('activate', self.__register_activate_cb)
    615         palette.menu.append(self._register_menu)
     615        palette.menu_box.pack_end(self._register_menu, True, True, 0)
    616616        self._register_menu.show()
    617617
    618618        self.connect_to_palette_pop_events(palette)
    class OwnerIcon(BuddyIcon): 
    623623        self.emit('register-activate')
    624624
    625625    def set_registered(self):
    626         self.palette.menu.remove(self._register_menu)
    627         self._register_menu = MenuItem(_('Register again'), 'media-record')
     626        self.palette.menu_box.remove(self._register_menu)
     627        self._register_menu = PaletteMenuItem(_('Register again'),
     628                                              'media-record')
    628629        self._register_menu.connect('activate', self.__register_activate_cb)
    629         self.palette.menu.append(self._register_menu)
     630        self.palette.menu_box.pack_end(self._register_menu, True, True, 0)
    630631        self._register_menu.show()
    631632
    632633
  • src/jarabe/view/buddyicon.py

    diff --git a/src/jarabe/view/buddyicon.py b/src/jarabe/view/buddyicon.py
    index cd648b1..6320113 100644
    a b class BuddyIcon(CanvasIcon): 
    3535        self._buddy.connect('notify::present', self.__buddy_notify_present_cb)
    3636        self._buddy.connect('notify::color', self.__buddy_notify_color_cb)
    3737
    38         self.connect('button-release-event', self.__button_release_event_cb)
    39 
     38        self.palette_invoker.props.toggle_palette = True
    4039        self.palette_invoker.cache_palette = False
    4140
    4241        self._update_color()
    class BuddyIcon(CanvasIcon): 
    4645        self.connect_to_palette_pop_events(palette)
    4746        return palette
    4847
    49     def __button_release_event_cb(self, icon, event):
    50         self.props.palette.popup(immediate=True, state=Palette.SECONDARY)
    51 
    5248    def __buddy_notify_present_cb(self, buddy, pspec):
    5349        # Update the icon's color when the buddy comes and goes
    5450        self._update_color()
  • src/jarabe/view/buddymenu.py

    diff --git a/src/jarabe/view/buddymenu.py b/src/jarabe/view/buddymenu.py
    index d17f4ff..f1cc533 100644
    a b import glib 
    2424import dbus
    2525
    2626from sugar3.graphics.palette import Palette
    27 from sugar3.graphics.menuitem import MenuItem
     27from sugar3.graphics.palettemenuitem import PaletteMenuItem
    2828from sugar3.graphics.icon import Icon
    2929
    3030from jarabe.model import shell
    class BuddyMenu(Palette): 
    4545        Palette.__init__(self, None,
    4646                         primary_text=glib.markup_escape_text(nick),
    4747                         icon=buddy_icon)
     48        self.menu_box = Gtk.VBox()
     49        self.set_content(self.menu_box)
     50        self.menu_box.show_all()
    4851        self._invite_menu = None
    4952        self._active_activity_changed_hid = None
    50         self.get_menu().connect('destroy', self.__destroy_cb)
     53        # Fixme: we need to make the widget accessible through the Palette API
     54        self._widget.connect('destroy', self.__destroy_cb)
    5155
    5256        self._buddy.connect('notify::nick', self.__buddy_notify_nick_cb)
    5357
    class BuddyMenu(Palette): 
    6468
    6569    def _add_buddy_items(self):
    6670        if friends.get_model().has_buddy(self._buddy):
    67             menu_item = MenuItem(_('Remove friend'), 'list-remove')
     71            menu_item = PaletteMenuItem(_('Remove friend'), 'list-remove')
    6872            menu_item.connect('activate', self._remove_friend_cb)
    6973        else:
    70             menu_item = MenuItem(_('Make friend'), 'list-add')
     74            menu_item = PaletteMenuItem(_('Make friend'), 'list-add')
    7175            menu_item.connect('activate', self._make_friend_cb)
    7276
    73         self.menu.append(menu_item)
    74         menu_item.show()
     77        self.menu_box.pack_start(menu_box, True, True, 0)
    7578
    76         self._invite_menu = MenuItem('')
     79        self._invite_menu = PaletteMenuItem('')
    7780        self._invite_menu.connect('activate', self._invite_friend_cb)
    78         self.menu.append(self._invite_menu)
     81        self.menu_box.pack_start(self._invite_menu, True, True, 0)
    7982
    8083        home_model = shell.get_model()
    8184        self._active_activity_changed_hid = home_model.connect(
    class BuddyMenu(Palette): 
    8487        self._update_invite_menu(activity)
    8588
    8689    def _add_my_items(self):
    87         item = MenuItem(_('Shutdown'), 'system-shutdown')
     90        item = PaletteMenuItem(_('Shutdown'), 'system-shutdown')
    8891        item.connect('activate', self.__shutdown_activate_cb)
    89         self.menu.append(item)
    90         item.show()
     92        self.menu_box.pack_start(item, True, True, 0)
    9193
    9294        client = GConf.Client.get_default()
    9395
    9496        if client.get_bool('/desktop/sugar/show_restart'):
    95             item = MenuItem(_('Restart'), 'system-restart')
     97            item = PaletteMenuItem(_('Restart'), 'system-restart')
    9698            item.connect('activate', self.__reboot_activate_cb)
    97             self.menu.append(item)
     99            self.menu_box.pack_start(item, True, True, 0)
    98100            item.show()
    99101
    100102        if client.get_bool('/desktop/sugar/show_logout'):
    101             item = MenuItem(_('Logout'), 'system-logout')
     103            item = PaletteMenuItem(_('Logout'), 'system-logout')
    102104            item.connect('activate', self.__logout_activate_cb)
    103             self.menu.append(item)
     105            self.menu_box.pack_start(item, True, True, 0)
    104106            item.show()
    105107
    106         item = MenuItem(_('My Settings'), 'preferences-system')
     108        item = PaletteMenuItem(_('My Settings'), 'preferences-system')
    107109        item.connect('activate', self.__controlpanel_activate_cb)
    108         self.menu.append(item)
     110        self.menu_box.pack_start(item, True, True, 0)
    109111        item.show()
    110112
    111113    def _quit(self, action):
    class BuddyMenu(Palette): 
    138140            self._invite_menu.hide()
    139141        else:
    140142            title = activity.get_title()
    141             label = self._invite_menu.get_children()[0]
    142             label.set_text(_('Invite to %s') % title)
     143            self._invite_menu.set_label(_('Invite to %s') % title)
    143144
    144145            icon = Icon(file=activity.get_icon_path())
    145146            icon.props.xo_color = activity.get_icon_color()