Test you stuff in python first, then move it to c/c++ if need be.  This
allows for rapid testing of what you really need to do.  Whatever you
are trying to do, it is possible, for complete menubar, menus, menuitems
on any platform.  Windowing APIs for windows, linux, mac all can handle
this.

gtk3-demo has tool-palette sample.
The gtk api jargon has set/unset, remove, append, show.
http://www.pygtk.org/pygtk2tutorial/sec-Toolbar.html
http://www.pygtk.org/pygtk2tutorial/examples/toolbar.py

Don't forget to disconnect callbacks before unsetting toolbars, menus,
menu items. Rule of thumb: if you connect it, you have to disconnect it
if you change the gui dynamically.  Don't rely on
smart-pointers/garbage-collection to take care of these things.
http://zetcode.com/tutorials/gtktutorial/gtkevents/

This is a tweaked applicationmenu.py
#!/usr/bin/env python

import gtk

class ApplicationMenu:
    def __init__(self):
        window = gtk.Window()

        menubar = gtk.MenuBar()

        self.menu_file = gtk.Menu()
        self.menu_edit = gtk.Menu()
        self.menu_help = gtk.Menu()

        item_open = gtk.MenuItem("Open")
        item_save = gtk.MenuItem("Save")
        item_quit = gtk.MenuItem("Quit")
        self.menu_file.append(item_open)
        self.menu_file.append(item_save)
        self.menu_file.append(item_quit)

        item_cut = gtk.MenuItem("Cut")
        item_copy = gtk.MenuItem("Copy")
        item_paste = gtk.MenuItem("Paste")
        item_change_menus = gtk.MenuItem("Change Menus")
        self.menu_edit.append(item_cut)
        self.menu_edit.append(item_copy)
        self.menu_edit.append(item_paste)
        self.menu_edit.append(item_change_menus)

        item_about = gtk.MenuItem("About")
        self.menu_help.append(item_about)

        item_file = gtk.MenuItem("File")
        item_edit = gtk.MenuItem("Edit")
        item_help = gtk.MenuItem("Help")

        item_file.set_submenu(self.menu_file)
        item_edit.set_submenu(self.menu_edit)
        item_help.set_submenu(self.menu_help)

        menubar.append(item_file)
        menubar.append(item_edit)
        menubar.append(item_help)

        window.connect("destroy", lambda w: gtk.main_quit())
        item_change_menus.connect("activate", self.menu_change_menus)

        window.add(menubar)
        window.show_all()


    def menu_foo(self, widget):
            print "menu_foo clicked"


    def menu_change_menus(self, widget):
        print "menu_change_menus clicked"
        for widget in self.menu_edit.get_children():
            self.menu_edit.remove(widget)
        self.item_foo1 = gtk.MenuItem("foo1")
        self.item_foo2 = gtk.MenuItem("foo2")
        self.item_foo3 = gtk.MenuItem("foo3")
        self.item_foo1.connect("activate", self.menu_foo)
        self.item_foo2.connect("activate", self.menu_foo)
        self.item_foo3.connect("activate", self.menu_foo)
        self.menu_edit.append(self.item_foo1)
        self.menu_edit.append(self.item_foo2)
        self.menu_edit.append(self.item_foo3)
        self.item_foo1.show()
        self.item_foo2.show()
        self.item_foo3.show()
        self.menu_edit.show()


ApplicationMenu()
gtk.main()

On 05/11/2014 12:29 PM, Pierre Wieser wrote:
> Hi all,
> 
> I am starting with a small app which will handle documents. 
> I want this app has two different menubars :
> - a first one when there is no document
> - another one when the document is opened.
> 
> I have tried to use gtk_application_set_menubar with two
> different GMenuModel, but no luck: the GtkApplicationWindow
> menubar never changes.
> 
> After having searched in the sources, I found that the GtkWidget 
> menubar is automatically rebuilt from a GMenu menubar_section.
> But the menubar_section itself is initially built in real_realize,
> thenonly rebuilt when some gtk-shell settings changes 
> (notify::gtk-shell-shows-menubar exactly, but this not relevant here).
> 
> So it appears to me that it is just impossible to replace the menubar.
> Am I right ? Is it the expected behavior ?
> As a side effect, I do not understand the rationale behind
> gtk_application_set_menubar: why are we allowed to change the GMenuModel
> if the visible GtkWidget is not updated ?
> 
> Thanks for some explanations..
> Regards
> Pierre
> 
> _______________________________________________
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
> 

_______________________________________________
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

Reply via email to