Hey, we was discussing at the hackfest today how to fixup palettes to work in gtk3. I looked more into the GtkMenuShell code on the train and I had an idea. It seems like GtkMenuShell basically gets access to all the enter/leave events while it's active (because of the grab and some local forwarding through gtk_widget_event). And we can get the actual widget that was entered/left using Gtk.get_event_widget. You can see this by running the attached code snippet.
So the palette could be a standard GtkMenu. The icon would popup() on enter. The palette would listen to those events and popdown/popup things depending if we are on the icon, the palette, another icon for the palette in the same group, a submenu of the palette. Marco --- #!/usr/bin/env python from gi.repository import Gtk class MyMenu(Gtk.Menu): __gtype_name__ = 'MyMenu' def __init__(self): super(Gtk.Menu, self).__init__() def do_enter_notify_event(self, event): print "enter %s" % Gtk.get_event_widget(event) def do_leave_notify_event(self, event): print "leave %s" % Gtk.get_event_widget(event) class MenusApp: def __init__(self): self.window = Gtk.Window() self.window.connect('destroy', Gtk.main_quit) box = Gtk.HBox() self.window.add(box) self.menu = MyMenu() menuitem = Gtk.RadioMenuItem(label="Item1") self.menu.append(menuitem) submenu = MyMenu() menuitem = Gtk.RadioMenuItem(label="Item1") submenu.append(menuitem) menuitem = Gtk.MenuItem(label='Submenu') menuitem.set_submenu(submenu) self.menu.append(menuitem) submenu.show_all() self.menu.show_all() button = Gtk.Button("Click me") button.connect('clicked', self.clicked_cb) box.pack_start(button, False, True, 0) self.window.show_all() def clicked_cb(self, button): self.menu.popup(None, None, None, None, 0, 0) app = MenusApp() Gtk.main() _______________________________________________ Sugar-devel mailing list Sugar-devel@lists.sugarlabs.org http://lists.sugarlabs.org/listinfo/sugar-devel