Hi all,
I've been trying to create a dynamic menu in gtkmm3, using the
Gio::MenuModel classes. I can get the Gtk::MenuButton to popup the
Gio::MenuItem, and the Item responds to the click. Unfortunately, I
can't figure out how to connect the Gio::SimpleAction to my signal
handler. The only example I can find is a Gtk+ one, and it uses
different functions.
The problem is thet the prototype for the signal connection is:
void on_my_activate(const Glib::VariantBase& parameter)
I've tried various combinations, but I can't get the connection to
work. I don't know how to handle the VariantBase.
I'd appreciate a nudge in the right direction.
Thanks,
Marty
Here's my code:
xwin.h:
> #include <iostream>
> #include <gtkmm.h>
> #include <giomm/menu.h>
> #include <giomm/simpleaction.h>
>
>
> using std::cout;
> using std::endl;
>
> namespace geode
> {
>
>
> class Gui : public Gtk::Window
> {
> public:
> Gui();
> virtual ~Gui();
>
> void create_cv_menu ();
>
> protected:
> // void on_cv_menu_clicked( guint& index);
> // void on_cv_menu_clicked();
> // void on_cv_menu_clicked(guint& index);
> void on_cv_menu_clicked( guint& index)
> // const Glib::Variant<guint32>& parameter)
> { cout << "on_cv_clicked 0:" << endl; }
>
> //Child widgets:
> Gtk::Box m_Box;
> Glib::RefPtr<Gio::MenuModel> menumodel;
> Glib::RefPtr<Gio::Menu> giomenu;
> Gtk::MenuButton mbut1;
> Glib::RefPtr<Gio::SimpleAction> ref_action;
> }; // end class Gui
>
> } // end namespace geode
> #endif //GTKMM_EXAMPLEWINDOW_H
xwin.cpp:
#include "xwin.h"
#include <iostream>
namespace geode
{
//CCCCCC GUI CCCCCCCCCCCCCCCC
Gui::Gui()
: m_Box(Gtk::ORIENTATION_VERTICAL),
mbut1()
{
set_title("menu test");
set_default_size(200, 200);
mbut1.set_label("button 1");
add(m_Box);
create_cv_menu();
m_Box.pack_start(mbut1, Gtk::PACK_SHRINK, 5);
mbut1.set_menu_model(menumodel);
show_all_children();
}
Gui::~Gui()
{
}
//FFFFFF GUI FFFFFFFFFFFFFFFF
void Gui::create_cv_menu()
{
cout << "Gui create_cv_menu 0:" << endl;
guint32 index = 1;
giomenu = Gio::Menu::create();
menumodel = giomenu;
giomenu->append("FRONT");
ref_action = Gio::SimpleAction::create("FRONT");
ref_action->signal_activate().connect(
sigc::bind<guint32>(
sigc::mem_fun(*this, &Gui::on_cv_menu_clicked), index));
// this is Gio::SimpleAction signal_activate handler prototype
// void on_my_activate(const Glib::VariantBase& parameter)
cout << "Gui create_cv_menu 99:" << endl;
}
/*
//FFFFFF GUI FFFFFFFFFFFFFFFF
void Gui::on_cv_menu_clicked(const Glib::Variant<guint32>& index)
{
cout << "Gui on_cv_menu_clicked 0: index = " << index << endl;
// return true;
}
*/
} // end namespace geode
_______________________________________________
gtkmm-list mailing list
[email protected]
https://mail.gnome.org/mailman/listinfo/gtkmm-list