Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/gtkmm-root/base/ChangeLog,v
retrieving revision 1.420
diff -u -r1.420 ChangeLog
--- ChangeLog	31 Jul 2002 09:33:05 -0000	1.420
+++ ChangeLog	1 Aug 2002 13:52:08 -0000
@@ -1,3 +1,18 @@
+2002-07-31  Andreas Holzmann  <Andreas.Holzmann@epost.de>
+
+	* gtk/src/menu.{hg,ccg}: Revert to old popup() method.
+	* gtk/src/menubar.{hg,ccg}: Connect auto acceleration init method
+	to realize signal (again). This will show accelerators if
+	the menubar is added to a window first, and menu items are added
+	later.
+	* gtk/src/optionmenu.{hg,ccg}: Use same mechanism to automatically
+	initialize menu accelerators as in Gtk::MenuBar.
+	* gtk/gtkmm/accelkey.{h,cc}: Switched accel_key and accel_mods
+	parameter to be more consistent with the rest of the accel functions.
+	* gtk/gtkmm/menu_elems.{h,cc}: Cleanup.
+	* gtk/gtkmm/accelmap.{h,cc}: New wrapper for gtk+ functions.
+	* demos/*, examples/*: Menu API changes.
+	
 2002-07-30  Michael v. Szombathely <szombath@bifab.de>
  
 	* gtk/src/liststore.ccg, gtk/src/treestore.ccg: explicit casts
Index: TODO
===================================================================
RCS file: /cvs/gnome/gtkmm-root/base/TODO,v
retrieving revision 1.51
diff -u -r1.51 TODO
--- TODO	29 Jun 2002 21:18:31 -0000	1.51
+++ TODO	1 Aug 2002 13:52:08 -0000
@@ -8,19 +8,6 @@
     gnu.org won't reply to my emails about assigning copyright. Maybe we should give up this idea. murrayc.
   - Scan for old-style docs comments and put them in gtk_docs_override.xml if necessary.
 
-Menu API (Andreas Holzmann's comments):
-
-* The interface for creating changeable accelerators is bad.
-  We need a way to create unique accelerator paths automatically
-  to improve this.
-* Menu items that are added after its container (MenuBar,
-  OptionMenu, etc) have been realized don't get its accelerators
-  initialized automatically at the moment. You have to call
-  accelerate() manually.
-* Accelerators that are in menu items of a popup menu must be
-  initialized manually with accelerate().
-
-
 DONE:
   - What's an 'action' signal. Are they only for emitting by keybindings? Maybe they shouldn't be wrapped.
     They are signals that can be directly emitted, but that's rare so people can do it via C if they need to.
Index: demos/gtk-demo/example_menus.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/demos/gtk-demo/example_menus.cc,v
retrieving revision 1.12
diff -u -r1.12 example_menus.cc
--- demos/gtk-demo/example_menus.cc	19 Jul 2002 15:58:48 -0000	1.12
+++ demos/gtk-demo/example_menus.cc	1 Aug 2002 13:52:08 -0000
@@ -100,9 +100,11 @@
     MenuList items = pMenu->items();
 
     items.push_back(SeparatorElem());
-    items.push_back( CheckMenuElem("Accelerate Me", AccelKey(Gdk::ModifierType(0), GDK_F1)) );
-    items.push_back( CheckMenuElem("Accelerator Locked", AccelKey(Gdk::ModifierType(0), GDK_F2)) ); //TODO: , true) ); //true = locked.
-    items.push_back( CheckMenuElem("Accelerator Frozen", AccelKey(Gdk::ModifierType(0), GDK_F2)) );
+    items.push_back( CheckMenuElem("Accelerate Me", AccelKey(GDK_F1, Gdk::ModifierType(0))) );
+    items.push_back( CheckMenuElem("Accelerator Locked") );
+    items.back().add_accelerator("activate", get_accel_group(), GDK_F2, Gdk::ModifierType(0), Gtk::ACCEL_VISIBLE | Gtk::ACCEL_LOCKED);
+    items.push_back( CheckMenuElem("Accelerator Frozen") );
+    items.back().add_accelerator("activate", get_accel_group(), GDK_F2, Gdk::ModifierType(0), Gtk::ACCEL_VISIBLE);
     items.back().add_accelerator("activate", get_accel_group(), GDK_F3, Gdk::ModifierType(0), Gtk::ACCEL_VISIBLE);
 
     m_OptionMenu.set_menu(*pMenu);
Index: examples/book/menus/popup/examplewindow.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/examples/book/menus/popup/examplewindow.cc,v
retrieving revision 1.2
diff -u -r1.2 examplewindow.cc
--- examples/book/menus/popup/examplewindow.cc	29 Jul 2002 14:55:18 -0000	1.2
+++ examples/book/menus/popup/examplewindow.cc	1 Aug 2002 13:52:08 -0000
@@ -53,6 +53,7 @@
 
 
   }
+  m_Menu_Popup.accelerate(*this);
 
   show_all_children();
 }
@@ -70,7 +71,7 @@
 {
   if( (event->type == GDK_BUTTON_PRESS) && (event->button == 3) )
   {
-    m_Menu_Popup.popup(*this, event->button, event->time);
+    m_Menu_Popup.popup(event->button, event->time);
     return true; //It has been handled.
   }
   else
Index: examples/menu/menu2.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/examples/menu/menu2.cc,v
retrieving revision 1.17
diff -u -r1.17 menu2.cc
--- examples/menu/menu2.cc	19 Jul 2002 15:59:06 -0000	1.17
+++ examples/menu/menu2.cc	1 Aug 2002 13:52:09 -0000
@@ -34,7 +34,6 @@
         
   void void_void_cb(void);
   void void_int_cb(int num);
-  void edit_cb(Glib::ustring action);
   void toggle_cb(Glib::ustring action);
 
   Menu menu_popup;
@@ -50,10 +49,6 @@
   cout << "reached void_int_callback, num = " << num << endl;
 }
 
-void MyWindow::edit_cb(Glib::ustring action)
-{
-  cout << "reached edit_callback, requested action " << action << endl;
-}
 void MyWindow::toggle_cb(Glib::ustring action)
 {
   cout << "reached toggle_callback, requested action " << action << endl;
@@ -62,7 +57,7 @@
 
 bool MyWindow::popup(GdkEventButton* event, Menu* menu)
 {
-  menu->popup(*this, event->button,event->time);
+  menu->popup(event->button,event->time);
   return true;
 }
 
@@ -87,29 +82,33 @@
 
      // Connecting non-default callback, getting the element's widget
      list_file.push_back(MenuElem("_New"));
-     list_file.back().signal_activate().connect(bind(slot(*this, &MyWindow::void_int_cb), 123));
-                    // ^^^^^^^^^^^^^^^^
+     list_file.back().signal_activate()
+         .connect(bind(slot(*this, &MyWindow::void_int_cb), 123));
 
      // Usage of widget functions on menuitems
-     list_file.push_back(MenuElem("_Open", slot(*this, &MyWindow::void_void_cb)));
+     list_file.push_back(MenuElem("_Open", 
+                                  slot(*this, &MyWindow::void_void_cb)));
      list_file.back().set_state(Gtk::STATE_INSENSITIVE);
-            // ^^^^^^^^
 
      // Modifying a slot
-     list_file.push_back(MenuElem("Save", bind(slot(*this, &MyWindow::void_int_cb), 234)));
-                                     //   ^^^^^^^^^^^^^^^^^^^^^^
+     list_file.push_back(MenuElem("Save",
+                                  bind(slot(*this, &MyWindow::void_int_cb), 
+                                       234)));
 
-     list_file.push_back(MenuElem("Save As",slot(*this, &MyWindow::void_void_cb)));
+     list_file.push_back(MenuElem("Save As",
+                                  slot(*this, &MyWindow::void_void_cb)));
 
      // setting an accelerator directly
-     list_file.push_back(MenuElem("_Close", AccelKey(Gdk::CONTROL_MASK, 'c', "<Demo>/File/Close"), slot(*this, &MyWindow::void_void_cb)));
-                                         // ^^^^^^^
+     list_file.push_back(MenuElem("_Close", 
+                                  AccelKey('c', Gdk::CONTROL_MASK, 
+                                           "<Demo>/File/Close"), 
+                                  slot(*this, &MyWindow::void_void_cb)));
 
      list_file.push_back(SeparatorElem());
 
      // setting an accelerator with a string
-     list_file.push_back( MenuElem("_Quit", AccelKey("<control>q"), slot(&Main::quit)) );
-                                         // ^^^^^^^^^^^^^^^^^^^^^^
+     list_file.push_back( MenuElem("_Quit", AccelKey("<control>q"), 
+                                   slot(&Main::quit)) );
 
      // Create a submenu
      Menu *menu_sub = manage( new Menu());
@@ -153,28 +152,28 @@
      //   Gtk+ does not have O(1) tail lookups so you should build menus
      //   backwards whenever you plan to make lots of access to back().
      MenuList& list_bar = menubar->items();
-     list_bar.push_front(MenuElem("_Help",AccelKey("<control>h"),*menu_help));
+     list_bar.push_front(MenuElem("_Help", AccelKey("<control>h"), *menu_help));
      list_bar.front().set_right_justified();
-     menubar->items().push_front(MenuElem("E_xamples",AccelKey("<control>x"),*menu_examples));
-     menubar->items().push_front(MenuElem("_Edit",AccelKey("<control>e"),*menu_edit));
-     menubar->items().push_front(MenuElem("_File",AccelKey("<control>f"),*menu_file));
+     menubar->items().push_front(MenuElem("E_xamples", AccelKey("<control>x"), *menu_examples));
+     menubar->items().push_front(MenuElem("_Edit", AccelKey("<control>e"), *menu_edit));
+     menubar->items().push_front(MenuElem("_File", AccelKey("<control>f"), *menu_file));
    }
 
    // vbox
-   VBox *vbox = manage( new VBox() );
+   VBox *vbox = manage(new VBox());
    add(*vbox);
-   vbox->pack_start (*menubar, Gtk::PACK_SHRINK);
+   vbox->pack_start(*menubar, Gtk::PACK_SHRINK);
 
    // eventbox
-   EventBox *ebox = manage( new EventBox() );
-   ebox->signal_button_press_event().connect( bind(slot(*this, &MyWindow::popup), &menu_popup) );
+   EventBox *ebox = manage(new EventBox());
+   ebox->signal_button_press_event().connect(bind(slot(*this, &MyWindow::popup), &menu_popup));
    vbox->pack_end(*ebox);
 
    // Make a popup window
    {
      using namespace Menu_Helpers;
      MenuList& list_popup = menu_popup.items();
-     list_popup.push_back(MenuElem("Floa_t 1",AccelKey("<control>t"),
+     list_popup.push_back(MenuElem("Floa_t 1", AccelKey("<control>t"),
                                    slot(*this, &MyWindow::void_void_cb)));
      list_popup.push_back(MenuElem("Float 2"));
      list_popup.push_back(MenuElem("Float 3"));
Index: examples/menu/stock.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/examples/menu/stock.cc,v
retrieving revision 1.8
diff -u -r1.8 stock.cc
--- examples/menu/stock.cc	19 Jul 2002 15:59:07 -0000	1.8
+++ examples/menu/stock.cc	1 Aug 2002 13:52:09 -0000
@@ -96,7 +96,7 @@
 
     if (event->type == GDK_BUTTON_PRESS) {
         GdkEventButton *bevent = (GdkEventButton *) event; 
-        popup(*this, bevent->button, bevent->time);
+        popup(bevent->button, bevent->time);
 
         /* Tell calling code that we have handled this event; the buck
          * stops here. */
Index: gtk/gtkmm/Makefile.am
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-build/Makefile.am,v
retrieving revision 1.38
diff -u -r1.38 Makefile.am
--- gtk/gtkmm/Makefile.am	23 Jun 2002 15:28:23 -0000	1.38
+++ gtk/gtkmm/Makefile.am	1 Aug 2002 13:52:09 -0000
@@ -13,11 +13,11 @@
 
 sublib_files_extra_posix_cc =
 sublib_files_extra_win32_cc =
-sublib_files_extra_general_cc = accelkey.cc clipboard.cc menu_elems.cc stock.cc stockid.cc targetentry.cc treemodelcolumn.cc treeview_private.cc
+sublib_files_extra_general_cc = accelkey.cc accelmap.cc clipboard.cc menu_elems.cc stock.cc stockid.cc targetentry.cc treemodelcolumn.cc treeview_private.cc
 
 sublib_files_extra_posix_h =
 sublib_files_extra_win32_h =
-sublib_files_extra_general_h = accelkey.h base.h clipboard.h menu_elems.h stock.h stockid.h targetentry.h treemodelcolumn.h treeview_private.h
+sublib_files_extra_general_h = accelkey.h accelmap.h base.h clipboard.h menu_elems.h stock.h stockid.h targetentry.h treemodelcolumn.h treeview_private.h
 
 include $(top_srcdir)/build_shared/Makefile_build_gensrc.am_fragment
 
Index: gtk/gtkmm/accelkey.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-build/accelkey.cc,v
retrieving revision 1.5
diff -u -r1.5 accelkey.cc
--- gtk/gtkmm/accelkey.cc	13 Jul 2002 15:58:35 -0000	1.5
+++ gtk/gtkmm/accelkey.cc	1 Aug 2002 13:52:09 -0000
@@ -36,7 +36,7 @@
 {
 }
 
-AccelKey::AccelKey(Gdk::ModifierType accel_mods, guint accel_key,
+AccelKey::AccelKey(guint accel_key, Gdk::ModifierType accel_mods,
                    const Glib::ustring& accel_path)
 : key_(accel_key),
   mod_(accel_mods),
Index: gtk/gtkmm/accelkey.h
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-build/accelkey.h,v
retrieving revision 1.5
diff -u -r1.5 accelkey.h
--- gtk/gtkmm/accelkey.h	13 Jul 2002 15:58:35 -0000	1.5
+++ gtk/gtkmm/accelkey.h	1 Aug 2002 13:52:09 -0000
@@ -34,6 +34,11 @@
 /** Defines accelerator key combinations.
  * For instance, pressing Control-Q to activate the File|Quit menu item.
  * Typedefed as Gtk::Menu::AccelKey
+ *
+ * By defining accelerator paths you can allow users of your application
+ * to change accelerators himself. An example of an accelerator may be
+ * "<MainWindow>/File/Open". Modified accelerators may be saved 
+ * @see Gtk::AccelMap
  * @ingroup Menus
  */
 class AccelKey
@@ -42,26 +47,44 @@
   AccelKey();
 
  /** AccelKey constructor.
-  * @param accel_mods For instance, Gdk::CONTROL_MASK
   * @param accel_key For instance, 'q'
+  * @param accel_mods For instance, Gdk::CONTROL_MASK
+  * @param accel_path For instance, "<MainWindow>/File/Open"
   */
-  AccelKey(Gdk::ModifierType accel_mods, guint accel_key, const Glib::ustring& accel_path = "");
-
-  //See GTK+ docs for gtk_accelerator_parse() for the accelerator string format.
+  AccelKey(guint accel_key, Gdk::ModifierType accel_mods, 
+           const Glib::ustring& accel_path = "");
+  
   /** AccelKey constructor.
-   * @param accelerator For instance, "<control>q" - Use <control>, <shift>. <alt> and <release>. Use F1, F2, etc, for function keys.
+   * @param accelerator For instance, "<control>q" - Use 
+   *     <control>, <shift>. <alt> and <release>. 
+   *     Use F1, F2, etc, for function keys.
+   * @param accel_path For instance, "<MainWindow>/File/Open"
    */
-  AccelKey(const Glib::ustring& accelerator, const Glib::ustring& accel_path = "");
+  AccelKey(const Glib::ustring& accelerator, 
+           const Glib::ustring& accel_path = "");
 
   AccelKey(const AccelKey& src);
 
   AccelKey& operator=(const AccelKey& src);
 
+  bool is_null() const;
+
+  /**
+   * Gets the accelerator key.
+   */
   guint get_key() const;
+  /**
+   * Gets the accelerator modifier.
+   */
   Gdk::ModifierType get_mod() const;
+  /**
+   * Gets the accelerator path.
+   */
   Glib::ustring get_path() const;
-  bool is_null() const;
-  Glib::ustring get_abbrev() const; //Get's the accelerator representation for labels.
+  /**
+   * Gets the accelerator representation for labels.
+   */
+  Glib::ustring get_abbrev() const;
 
 protected:
   guint key_;
Index: gtk/gtkmm/menu_elems.cc
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-build/menu_elems.cc,v
retrieving revision 1.10
diff -u -r1.10 menu_elems.cc
--- gtk/gtkmm/menu_elems.cc	29 Jul 2002 14:55:19 -0000	1.10
+++ gtk/gtkmm/menu_elems.cc	1 Aug 2002 13:52:09 -0000
@@ -41,58 +41,13 @@
 : child_(&child)
 {}
 
-Element::Element(Widget& widget, const AccelKey& accel_key)
-{
-  child_ = manage(new MenuItem(widget));
-  set_child_key(accel_key);
-  child_->show();
-}
-
 Element::~Element()
 {}
 
-void Element::set_child_key(const AccelKey& accel_key)
+void Element::set_accel_key(const AccelKey& accel_key)
 {
   if(child_)
-  {
-    child_->accel_key_ = accel_key;
-  }
-}
-
-void
-Element::set_slot(const CallSlot& slot, 
-                  const Glib::ustring& accel_signal)
-{
-  g_return_if_fail (child_ != 0);
-
-  if(slot)
-  {
-    if(accel_signal == "activate") //The derived classes' constructors have appropriate default argument values.
-    {
-      child_->signal_activate().connect(slot);
-    }
-    else if (accel_signal == "toggled")
-    {
-      Glib::RefPtr<CheckMenuItem> pMenuItem = Glib::RefPtr<CheckMenuItem>::cast_dynamic(child_);
-      if(pMenuItem)
-        pMenuItem->signal_toggled().connect(slot);
-    }
-/*
-    g_warning("Menu_Helpers::MenuElem: Connecting to signal \"%s\" "
-                    "not yet implemented\n", accel_signal.c_str());
-*/
-  }
-}
-
-void
-Element::set_navigation(const Glib::ustring& label,
-                        const AccelKey& accel_key)
-{
-  g_return_if_fail (child_ != 0);
-
-  child_->add_accel_label(label, true); //true = use_mnemonic.
-
-  set_child_key(accel_key);
+    child_->set_accel_key(accel_key);
 }
 
 const Glib::RefPtr<MenuItem>& Element::get_child() const
@@ -100,60 +55,44 @@
   return child_;
 }
 
-void
-Element::init(const Glib::ustring& label,
-	      const CallSlot& slot,
-	      const Glib::ustring& accel_signal,
-	      const AccelKey& key)
-{
-  set_navigation(label, key);
-  set_slot(slot, accel_signal);
-  child_->show();
-}
-
-void
-Element::init(const Glib::ustring& label, 
-              Gtk::Menu& submenu,
-              const AccelKey& key)
-{
-  set_navigation(label, key);
-  child_->set_submenu(submenu);
-  child_->show();
-}
-
 MenuElem::MenuElem(MenuItem& child)
 : Element(child)
 {}
 
 MenuElem::MenuElem(const Glib::ustring& label, 
-                   const CallSlot& slot,
-                   const Glib::ustring& accel_signal)
+                   const CallSlot& slot)
 {
-  child_ = manage(new MenuItem());
-  init(label, slot, accel_signal);
+  child_ = manage(new MenuItem(label, true));
+  if(slot)
+    child_->signal_activate().connect(slot);
+  child_->show();
 }
 
 MenuElem::MenuElem(const Glib::ustring& label,
                    const AccelKey& accel_key,
-                   const CallSlot& slot,
-                   const Glib::ustring& accel_signal)
+                   const CallSlot& slot)
 {
-  child_ = manage(new MenuItem());
-  init(label, slot, accel_signal, accel_key);
+  child_ = manage(new MenuItem(label, true));
+  if(slot)
+    child_->signal_activate().connect(slot);
+  set_accel_key(accel_key);
+  child_->show();
 }
 
 MenuElem::MenuElem(const Glib::ustring& label, Menu& submenu)
 {
-  child_ = manage(new MenuItem());
-  init(label, submenu);
+  child_ = manage(new MenuItem(label, true));
+  child_->set_submenu(submenu);
+  child_->show();
 }
 
 MenuElem::MenuElem(const Glib::ustring& label, 
                    const AccelKey& accel_key,
                    Gtk::Menu& submenu)
 {
-  child_ = manage(new MenuItem());
-  init(label, submenu, accel_key);
+  child_ = manage(new MenuItem(label, true));
+  child_->set_submenu(submenu);
+  child_->show();
 }
 
 SeparatorElem::SeparatorElem()
@@ -167,75 +106,69 @@
 {}
 
 ImageMenuElem::ImageMenuElem(const Glib::ustring& label,
-    Gtk::Widget& image_widget,
-    const CallSlot& slot,
-    const Glib::ustring& accel_signal)
-{
-  child_ = manage(new ImageMenuItem());
-  gtk_image_menu_item_set_image((GtkImageMenuItem*)child_->gobj(),
-                                (GtkWidget*)image_widget.gobj());
+                             Gtk::Widget& image_widget,
+                             const CallSlot& slot)
+{
   image_widget.show(); //We assume that the coder wants to actually show the widget.
-
-  init(label, slot, accel_signal);
+  child_ = manage(new ImageMenuItem(image_widget, label, true));
+  if(slot)
+    child_->signal_activate().connect(slot);
+  child_->show();
 }
 
 ImageMenuElem::ImageMenuElem(const Glib::ustring& label,
-    const AccelKey& accel_key,
-    Gtk::Widget& image_widget,
-    const CallSlot& slot,
-    const Glib::ustring& accel_signal)
-{
-  child_ = manage(new ImageMenuItem());
-  gtk_image_menu_item_set_image((GtkImageMenuItem*)child_->gobj(),
-                                (GtkWidget*)image_widget.gobj());
+                             const AccelKey& accel_key,
+                             Gtk::Widget& image_widget,
+                             const CallSlot& slot)
+{
   image_widget.show(); //We assume that the coder wants to actually show the widget.
-
-  init(label, slot, accel_signal, accel_key);
+  child_ = manage(new ImageMenuItem(image_widget, label, true));
+  if(slot)
+    child_->signal_activate().connect(slot);
+  set_accel_key(accel_key);
+  child_->show();
 }
 
 ImageMenuElem::ImageMenuElem(const Glib::ustring& label,
-    Gtk::Widget& image_widget,
-    Gtk::Menu& submenu)
+                             Gtk::Widget& image_widget,
+                             Gtk::Menu& submenu)
 {
-  child_ = manage(new ImageMenuItem());
-  gtk_image_menu_item_set_image((GtkImageMenuItem*)child_->gobj(),
-                                (GtkWidget*)image_widget.gobj());
   image_widget.show(); //We assume that the coder wants to actually show the widget.
-
-  init(label, submenu);
+  child_ = manage(new ImageMenuItem(image_widget, label, true));
+  child_->set_submenu(submenu);
+  child_->show();
 }
 
 ImageMenuElem::ImageMenuElem(const Glib::ustring& label,
-    const AccelKey& accel_key,
-    Gtk::Widget& image_widget,
-    Gtk::Menu& submenu)
-{
-  child_ = manage(new ImageMenuItem());
-  gtk_image_menu_item_set_image((GtkImageMenuItem*)child_->gobj(),
-                                (GtkWidget*)image_widget.gobj());
+                             const AccelKey& accel_key,
+                             Gtk::Widget& image_widget,
+                             Gtk::Menu& submenu)
+{
   image_widget.show(); //We assume that the coder wants to actually show the widget.
-
-  init(label, submenu, accel_key);
+  child_ = manage(new ImageMenuItem(image_widget, label, true));
+  set_accel_key(accel_key);
+  child_->set_submenu(submenu);
+  child_->show();
 }
 
 StockMenuElem::StockMenuElem(const Gtk::StockID& stock_id,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
 {
   child_ = manage(new ImageMenuItem(stock_id));
+  if(slot)
+    child_->signal_activate().connect(slot);
   child_->show();
-  set_slot(slot, accel_signal);
 }
 
 StockMenuElem::StockMenuElem(const Gtk::StockID& stock_id,
                              const AccelKey& accel_key,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
 {
   child_ = manage(new ImageMenuItem(stock_id));
+  if(slot)
+    child_->signal_activate().connect(slot);
+  set_accel_key(accel_key);
   child_->show();
-  set_slot(slot, accel_signal);
-  set_child_key(accel_key);
 }
 
 CheckMenuElem::CheckMenuElem(CheckMenuItem& child)
@@ -243,20 +176,25 @@
 {}
 
 CheckMenuElem::CheckMenuElem(const Glib::ustring& label,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
 {
-  child_ = manage(new CheckMenuItem());
-  init(label, slot, accel_signal);
+  CheckMenuItem* item = manage(new CheckMenuItem(label, true));
+  child_ = item;
+  if(slot)
+    item->signal_toggled().connect(slot);
+  child_->show();
 }
 
 CheckMenuElem::CheckMenuElem(const Glib::ustring& label,
                              const AccelKey& accel_key,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
 {
-  child_ = manage(new CheckMenuItem());
-  init(label, slot, accel_signal, accel_key);
+  CheckMenuItem* item = manage(new CheckMenuItem(label, true));
+  child_ = item;
+  set_accel_key(accel_key);
+  if(slot)
+    item->signal_toggled().connect(slot);
+  child_->show();
 }
 
 
@@ -266,51 +204,49 @@
 
 RadioMenuElem::RadioMenuElem(RadioMenuItem::Group& group,
                              const Glib::ustring& label,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
   : gr_(&group)
 {
-  child_ = manage(new RadioMenuItem(*gr_));
-  init(label, slot, accel_signal);
+  CheckMenuItem* item = manage(new RadioMenuItem(*gr_, label, true));
+  child_ = item;
+  if(slot)
+    item->signal_toggled().connect(slot);
+  child_->show();
 }
 
 RadioMenuElem::RadioMenuElem(RadioMenuItem::Group& gr,
                              const Glib::ustring& label,
                              const AccelKey& accel_key,
-                             const CallSlot& slot,
-                             const Glib::ustring& accel_signal)
+                             const CallSlot& slot)
   : gr_(&gr)
 {
-  child_ = manage(new RadioMenuItem(*gr_));
-  init(label, slot, accel_signal, accel_key);
+  CheckMenuItem* item = manage(new RadioMenuItem(*gr_, label, true));
+  child_ = item;
+  set_accel_key(accel_key);
+  if(slot)
+    item->signal_toggled().connect(slot);
+  child_->show();
 }
 
 TearoffMenuElem::TearoffMenuElem(TearoffMenuItem& child)
 : Element(child)
 {}
 
-TearoffMenuElem::TearoffMenuElem(const CallSlot& slot,
-                                 const Glib::ustring& accel_signal)
+TearoffMenuElem::TearoffMenuElem(const CallSlot& slot)
 {
   child_ = manage(new TearoffMenuItem());
-  init(slot, accel_signal);
+  if(slot)
+    child_->signal_activate().connect(slot);
+  child_->show();
 }
 
 TearoffMenuElem::TearoffMenuElem(const AccelKey& accel_key,
-                                 const CallSlot& slot,
-                                 const Glib::ustring& accel_signal)
+                                 const CallSlot& slot)
 {
   child_ = manage(new TearoffMenuItem());
-  init(slot, accel_signal, accel_key);
-}
-
-void
-TearoffMenuElem::init(const CallSlot& slot,
-                      const Glib::ustring& accel_signal,
-                      const AccelKey& accel_key)
-{
-  set_child_key(accel_key);
-  set_slot(slot, accel_signal);
+  set_accel_key(accel_key);
+  if(slot)
+    child_->signal_activate().connect(slot);
   child_->show();
 }
 
Index: gtk/gtkmm/menu_elems.h
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-build/menu_elems.h,v
retrieving revision 1.8
diff -u -r1.8 menu_elems.h
--- gtk/gtkmm/menu_elems.h	29 Jul 2002 14:55:19 -0000	1.8
+++ gtk/gtkmm/menu_elems.h	1 Aug 2002 13:52:09 -0000
@@ -36,8 +36,6 @@
 {
 
 class Menu;
-class MenuShell;
-class Window;
 
 namespace Menu_Helpers
 {
@@ -51,34 +49,13 @@
 
   Element();
   Element(MenuItem& child);
-  Element(Widget& widget, const AccelKey& accel_key = AccelKey());
   ~Element();
 
-  friend class MenuList;
-
   const Glib::RefPtr<MenuItem>& get_child() const;
 
 protected:
 
-  void set_child_key(const AccelKey& accel_key);
-
-  // connects a SigC::Slot to the activate signal
-  void set_slot(const CallSlot& slot,
-                    const Glib::ustring& accel_signal);
-
-  // creates a label and sets up for navigation and accelerator
-  void set_navigation(const Glib::ustring& label,
-                      const AccelKey& accel_key = AccelKey());
-
-
-  void init(const Glib::ustring& label,
-                    const CallSlot& slot,
-                    const Glib::ustring& accel_signal,
-                    const AccelKey& key = AccelKey());
-
-  void init(const Glib::ustring& label,
-                    Gtk::Menu& submenu,
-                    const AccelKey& key = AccelKey());
+  void Element::set_accel_key(const AccelKey& accel_key);
 
   //We use a RefPtr to avoid leaks when the manage()d widget never gets added to a container.
   Glib::RefPtr<MenuItem> child_;
@@ -103,8 +80,7 @@
    * @param label The menu item's name
    * @param slot Use SigC::slot() to specify a signal handler
    */
-  MenuElem(const Glib::ustring& label, const CallSlot& slot = CallSlot(),
-           const Glib::ustring& accel_signal = "activate") ;
+  MenuElem(const Glib::ustring& label, const CallSlot& slot = CallSlot());
 
   /** Create a labeled, accelerated MenuItem with a SigC::Slot
    * @param label The menu item's name
@@ -112,8 +88,7 @@
    * @param slot Use SigC::slot() to specify a signal handler
    */
   MenuElem(const Glib::ustring& label, const AccelKey& key,
-           const CallSlot& slot = CallSlot(),
-           const Glib::ustring& accel_signal = "activate");
+           const CallSlot& slot = CallSlot());
 
   /** Create a labeled, non-accelerated MenuItem with a submenu
    * @param label The menu item's name
@@ -149,8 +124,7 @@
    */
   ImageMenuElem(const Glib::ustring& label,
                 Gtk::Widget& image_widget,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "activate");
+                const CallSlot& slot = CallSlot());
 
   /** Create a labeled, accelerated MenuItem with a SigC::Slot
    * @param label The menu item's name
@@ -160,8 +134,7 @@
    */
   ImageMenuElem(const Glib::ustring& label, const AccelKey& key,
                 Gtk::Widget& image_widget,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "activate");
+                const CallSlot& slot = CallSlot());
 
   /** Create a labeled, non-accelerated MenuItem with a submenu
    * @param label The menu item's name
@@ -190,8 +163,7 @@
    * @param slot Use SigC::slot() to specify a signal handler
    */
   StockMenuElem(const Gtk::StockID& stock_id,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "activate");
+                const CallSlot& slot = CallSlot());
 
   /** Create an accelerated MenuItem from a stock item
    * @param stock_id The ID of the stock item
@@ -200,8 +172,7 @@
    */
   StockMenuElem(const Gtk::StockID& stock_id,
                 const AccelKey& key,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "activate");
+                const CallSlot& slot = CallSlot());
 };
 
 class CheckMenuElem : public Element
@@ -212,8 +183,7 @@
   /** Create a labeled, non-accelerated MenuItem with a SigC::Slot
    * @param label The menu item's name
    */
-  CheckMenuElem(const Glib::ustring& label, const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "toggled");
+  CheckMenuElem(const Glib::ustring& label, const CallSlot& slot = CallSlot());
 
   /** Create a labeled, accelerated CheckMenuItem with a SigC::Slot
    * @param label The menu item's name
@@ -221,8 +191,7 @@
    * @param slot Use SigC::slot() to specify a signal handler
    */
   CheckMenuElem(const Glib::ustring& label, const AccelKey& key,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "toggled");
+                const CallSlot& slot = CallSlot());
 };
 
 
@@ -236,8 +205,7 @@
    * @param slot Use SigC::slot() to specify a signal handler
    */
   RadioMenuElem(RadioMenuItem::Group&, const Glib::ustring& label,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "toggled");
+                const CallSlot& slot = CallSlot());
 
   /** Create a labeled, accelerated CheckMenuItem with a SigC::Slot
    * @param group The RadioMenuItem group in which to put this.
@@ -247,8 +215,7 @@
    */
   RadioMenuElem(RadioMenuItem::Group& group, const Glib::ustring& label,
                 const AccelKey& key,
-                const CallSlot& slot = CallSlot(),
-                const Glib::ustring& accel_signal = "toggled");
+                const CallSlot& slot = CallSlot());
 
 protected:
   RadioMenuItem::Group* gr_;
@@ -262,21 +229,14 @@
   /** Create a non-accelerated TearoffMenuItem with a SigC::Slot
    * @param slot Use SigC::slot() to specify a signal handler
    */
-  TearoffMenuElem(const CallSlot& slot = CallSlot(),
-                  const Glib::ustring& accel_signal = "activate");
+  TearoffMenuElem(const CallSlot& slot = CallSlot());
 
   /** Create accelerated TearoffMenuItem with a SigC::Slot
    * @param key The accelerator key combination
    * @param slot Use SigC::slot() to specify a signal handler
    */
   TearoffMenuElem(const AccelKey& key,
-                  const CallSlot& slot = CallSlot(),
-                  const Glib::ustring& accel_signal = "activate");
-
-protected:
-  void init(const CallSlot& slot,
-                    const Glib::ustring& accel_signal,
-                    const AccelKey& accel_key = AccelKey());
+                  const CallSlot& slot = CallSlot());
 };
 
 } /* namespace Menu_Helpers */
Index: gtk/src/accelgroup.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/accelgroup.hg,v
retrieving revision 1.25
diff -u -r1.25 accelgroup.hg
--- gtk/src/accelgroup.hg	13 Jul 2002 15:58:37 -0000	1.25
+++ gtk/src/accelgroup.hg	1 Aug 2002 13:52:09 -0000
@@ -95,7 +95,7 @@
   bool activate(guint accel_key, Gdk::ModifierType accel_mod);
 
   _WRAP_SIGNAL(void accel_changed(guint keyval, GdkModifierType modifier, GClosure* accel_closure), "accel_changed")
-  _IGNORE_SIGNAL("accel_activated")
+  _IGNORE_SIGNAL("accel_activate")
 };
 
 } /* namespace Gtk */
Index: gtk/src/imagemenuitem.ccg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/imagemenuitem.ccg,v
retrieving revision 1.10
diff -u -r1.10 imagemenuitem.ccg
--- gtk/src/imagemenuitem.ccg	25 Jun 2002 13:25:51 -0000	1.10
+++ gtk/src/imagemenuitem.ccg	1 Aug 2002 13:52:09 -0000
@@ -30,6 +30,15 @@
 namespace Gtk
 {
 
+ImageMenuItem::ImageMenuItem(Widget& image, 
+                             const Glib::ustring& label, bool mnemonic)
+:
+  _CONSTRUCT()
+{
+  set_image(image);
+  add_accel_label(label, mnemonic);
+}
+
 ImageMenuItem::ImageMenuItem(const Glib::ustring& label, bool mnemonic)
 :
   _CONSTRUCT()
@@ -49,7 +58,8 @@
   if(Gtk::Stock::lookup(stock_id, item))
   {
     add_accel_label(item.get_label(), true); //true = use mnemonic.
-    accel_key_ = Menu_Helpers::AccelKey(item.get_modifier(), item.get_keyval());
+    set_accel_key(Menu_Helpers::AccelKey(item.get_keyval(), 
+                                         item.get_modifier()));
   }
   else
   {
Index: gtk/src/imagemenuitem.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/imagemenuitem.hg,v
retrieving revision 1.10
diff -u -r1.10 imagemenuitem.hg
--- gtk/src/imagemenuitem.hg	29 Jul 2002 14:55:20 -0000	1.10
+++ gtk/src/imagemenuitem.hg	1 Aug 2002 13:52:09 -0000
@@ -38,10 +38,11 @@
 public:
 
   _CTOR_DEFAULT
+  explicit ImageMenuItem(Widget& image, 
+                         const Glib::ustring& label, bool mnemonic = false);
   explicit ImageMenuItem(const Glib::ustring& label, bool mnemonic = false);
-  explicit ImageMenuItem(const StockID& id); // FIXME: WTF is the accel_group arg?
+  explicit ImageMenuItem(const StockID& id);  
   
-
   _WRAP_METHOD(void set_image(Widget& image), gtk_image_menu_item_set_image)
   _WRAP_METHOD(Widget* get_image(), gtk_image_menu_item_get_image)
   _WRAP_METHOD(const Widget* get_image() const, gtk_image_menu_item_get_image)
Index: gtk/src/menu.ccg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menu.ccg,v
retrieving revision 1.13
diff -u -r1.13 menu.ccg
--- gtk/src/menu.ccg	16 Jul 2002 19:45:53 -0000	1.13
+++ gtk/src/menu.ccg	1 Aug 2002 13:52:09 -0000
@@ -65,35 +65,19 @@
   }
 }
 
-void
-Menu::popup(const SlotPositionCalc& position_calc_slot, guint button, guint32 activate_time)
+void Menu::popup(const SlotPositionCalc& position_calc_slot, guint button, guint32 activate_time)
 {
   SignalProxy_PopupPosition proxy(position_calc_slot);
   //Tell GTK+ to call the static function with Proxy's address as the extra data, so that the static function can then call the SigC::Slot:
   gtk_menu_popup(gobj(), 0, 0, &SignalProxy_PopupPosition::gtk_callback, &proxy, button, activate_time);
 }
 
-void
-Menu::popup(Gtk::Window& toplevel, guint button, guint32 activate_time)
+void Menu::popup(guint button, guint32 activate_time)
 {
-  accelerate(toplevel); //Do extra C++ stuff to show the accelerators.
   gtk_menu_popup(gobj(), 0, 0, 0, 0, button, activate_time);
 }
 
-void
-Menu::popup(Gtk::Widget& parent, guint button, guint32 activate_time)
-{
-  Gtk::Window* pWindow = dynamic_cast<Gtk::Window*>(parent.get_toplevel()); //TODO: Check the GTK_WIDGET_TOPLEVEL flag?
-  if(pWindow)
-    accelerate(*pWindow); //Do extra C++ stuff to show the accelerators.
-
-  gtk_menu_popup(gobj(), 0, 0, 0, 0, button, activate_time);
-}
-
-
-
-void
-Menu::reorder_child(const MenuItem &child, int position)
+void Menu::reorder_child(const MenuItem &child, int position)
 {
   gtk_menu_reorder_child(gobj(),
 		   const_cast<GtkWidget*>(GTK_WIDGET(child.gobj())),
Index: gtk/src/menu.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menu.hg,v
retrieving revision 1.32
diff -u -r1.32 menu.hg
--- gtk/src/menu.hg	19 Jul 2002 19:39:52 -0000	1.32
+++ gtk/src/menu.hg	1 Aug 2002 13:52:09 -0000
@@ -59,20 +59,10 @@
   /** Displays a menu and makes it available for selection.
    * Applications can use this function to display context-sensitive menus.
    * The default menu positioning function will position the menu at the current pointer position.
-   * @param toplevel Use the accelerator group from this window.
    * @param button The button which was pressed to initiate the event.
    * @param activate_time The time at which the activation event occurred.
    */
-  void popup(Gtk::Window& toplevel, guint button, guint32 activate_time);
-
-  /** Displays a menu and makes it available for selection.
-   * Applications can use this function to display context-sensitive menus.
-   * The default menu positioning function will position the menu at the current pointer position.
-   * @param parent Use the accelerator group from this widget's top-level Gtk::Window.
-   * @param button The button which was pressed to initiate the event.
-   * @param activate_time The time at which the activation event occurred.
-   */
-  void popup(Gtk::Widget& parent, guint button, guint32 activate_time);
+  void popup(guint button, guint32 activate_time);
 
   _WRAP_METHOD(void reposition(), gtk_menu_reposition)
 
Index: gtk/src/menubar.ccg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menubar.ccg,v
retrieving revision 1.6
diff -u -r1.6 menubar.ccg
--- gtk/src/menubar.ccg	13 Jul 2002 15:58:37 -0000	1.6
+++ gtk/src/menubar.ccg	1 Aug 2002 13:52:09 -0000
@@ -32,10 +32,10 @@
   // method because invocation of C++ default signal handlers is skipped
   // for gtkmmproc-generated classes (a gtkmm-wide optimization).
 
-  signal_hierarchy_changed().connect(SigC::slot(*this, &MenuBar::hierarchy_changed_handler_));
+  signal_realize().connect(SigC::slot(*this, &MenuBar::init_accels_handler_));
 }
 
-void MenuBar::hierarchy_changed_handler_(Widget*)
+void MenuBar::init_accels_handler_(void)
 {
   // TODO: We need a way to tell sigc++ to disconnect all object slots
   // before the SigC::ObjectBase destructor runs.
Index: gtk/src/menubar.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menubar.hg,v
retrieving revision 1.13
diff -u -r1.13 menubar.hg
--- gtk/src/menubar.hg	13 Jul 2002 15:58:37 -0000	1.13
+++ gtk/src/menubar.hg	1 Aug 2002 13:52:09 -0000
@@ -44,7 +44,7 @@
   // append, prepend and insert are defined in menushell
 
 private:
-  void hierarchy_changed_handler_(Widget* previous_toplevel);
+  void init_accels_handler_(void);
 };
 
 } // namespace Gtk
Index: gtk/src/menuitem.ccg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menuitem.ccg,v
retrieving revision 1.24
diff -u -r1.24 menuitem.ccg
--- gtk/src/menuitem.ccg	19 Jul 2002 11:21:30 -0000	1.24
+++ gtk/src/menuitem.ccg	1 Aug 2002 13:52:09 -0000
@@ -29,6 +29,7 @@
 #include <gtkmm/box.h>
 #include <gtkmm/window.h>
 #include <gtkmm/menubar.h>
+#include <gtkmm/accelmap.h>
 
 // gtk_menu_item_(de)select are just a wrapper for gtk_item_(de)select
 // and defined in Gtk_Item, so they do not be redefined here
@@ -54,14 +55,19 @@
 void MenuItem::add_accel_label(const Glib::ustring& label, bool mnemonic)
 {
   AccelLabel* pLabel = manage(new AccelLabel(label, mnemonic));
-  pLabel->set_alignment(Gtk::ALIGN_LEFT); //Labels are centered by default, but in menus they should be left-aligned.
-  //TODO: right-align labels for arabic/hebrew? GtkItemFactory must solve the same problem.
+  //Labels are centered by default, but in menus they should be left-aligned.
+  pLabel->property_xalign() = 0.0; 
 
   add(*pLabel);
   pLabel->set_accel_widget(*this);
   pLabel->show();
 }
 
+void MenuItem::set_accel_key(const Menu_Helpers::AccelKey& accel_key)
+{
+  accel_key_ = accel_key;
+}
+
 bool MenuItem::has_submenu() const
 {
   return get_submenu() != 0;
@@ -78,9 +84,9 @@
     }
     else
     {
-      gtk_accel_map_add_entry(accel_key_.get_path().c_str(),
-                              accel_key_.get_key(),
-                              (GdkModifierType)accel_key_.get_mod());
+      AccelMap::add_entry(accel_key_.get_path(),
+                          accel_key_.get_key(),
+                          accel_key_.get_mod());
 
       Item::set_accel_path(accel_key_.get_path(), window.get_accel_group());
     }
Index: gtk/src/menuitem.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/menuitem.hg,v
retrieving revision 1.26
diff -u -r1.26 menuitem.hg
--- gtk/src/menuitem.hg	13 Jul 2002 15:58:37 -0000	1.26
+++ gtk/src/menuitem.hg	1 Aug 2002 13:52:09 -0000
@@ -77,7 +77,11 @@
 
 protected:
 
-  virtual void add_accel_label(const Glib::ustring& label, bool mnemonic = true);
+  void add_accel_label(const Glib::ustring& label, bool mnemonic = true);
+
+  void set_accel_key(const Menu_Helpers::AccelKey& accel_key);
+
+private:
 
   friend class Menu_Helpers::Element;
 
Index: gtk/src/optionmenu.ccg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/optionmenu.ccg,v
retrieving revision 1.4
diff -u -r1.4 optionmenu.ccg
--- gtk/src/optionmenu.ccg	9 Mar 2002 00:53:11 -0000	1.4
+++ gtk/src/optionmenu.ccg	1 Aug 2002 13:52:09 -0000
@@ -28,18 +28,31 @@
 namespace Gtk
 {
 
-void OptionMenu::on_realize()
+
+OptionMenu::OptionMenu()
+:
+  _CONSTRUCT()
 {
-  Button::on_realize();
+  // Connect to the signal instead of overriding the on_hierarchy_changed()
+  // method because invocation of C++ default signal handlers is skipped
+  // for gtkmmproc-generated classes (a gtkmm-wide optimization).
+
+  signal_realize().connect(SigC::slot(*this, &OptionMenu::init_accels_handler_));
+}
 
-  if(get_toplevel()->is_toplevel())
+void OptionMenu::init_accels_handler_(void)
+{
+  // TODO: We need a way to tell sigc++ to disconnect all object slots
+  // before the SigC::ObjectBase destructor runs.
+  if(gobj())
   {
-    Gtk::Window* window = dynamic_cast<Gtk::Window*>(get_toplevel());
-    if(window && get_menu())
-      get_menu()->accelerate(*window);
+    Window *const toplevel = dynamic_cast<Window*>(get_toplevel());
+    if(toplevel && get_menu())
+    {
+      get_menu()->accelerate(*toplevel);
+    }
   }
 }
-
 
 } /* namespace Gtk */
 
Index: gtk/src/optionmenu.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/optionmenu.hg,v
retrieving revision 1.18
diff -u -r1.18 optionmenu.hg
--- gtk/src/optionmenu.hg	13 Jul 2002 15:58:37 -0000	1.18
+++ gtk/src/optionmenu.hg	1 Aug 2002 13:52:09 -0000
@@ -42,8 +42,7 @@
   _CLASS_GTKOBJECT(OptionMenu,GtkOptionMenu,GTK_OPTION_MENU,Gtk::Button,GtkButton)
 public:
 
-  _CTOR_DEFAULT
-  
+  OptionMenu();
   
   _WRAP_METHOD(void set_menu(Menu& menu),gtk_option_menu_set_menu)
   _WRAP_METHOD(Menu* get_menu(), gtk_option_menu_get_menu)
@@ -54,9 +53,8 @@
 
   _WRAP_SIGNAL(void changed(), "changed")	
 
-protected:
-  // initializes menu accelerators
-  virtual void on_realize();
+private:
+  void init_accels_handler_(void);
 };
 
 } /* namespace Gtk */
Index: gtk/src/radiomenuitem.hg
===================================================================
RCS file: /cvs/gnome/gtkmm-root/gtk-src/radiomenuitem.hg,v
retrieving revision 1.18
diff -u -r1.18 radiomenuitem.hg
--- gtk/src/radiomenuitem.hg	13 Jul 2002 15:58:37 -0000	1.18
+++ gtk/src/radiomenuitem.hg	1 Aug 2002 13:52:09 -0000
@@ -51,6 +51,7 @@
   
 
   _WRAP_METHOD(Group get_group(), gtk_radio_menu_item_get_group)
+  _IGNORE(gtk_radio_menu_item_set_group)
   void set_group(Group& group);
   void reset_group();
 
