2012-11-19 03:45, Jiergir Ogoerg skrev:
Hi, this is a reply toThe attached example works, i.e. it shows the window. I had to read some of glib's source code in order to understand that the signal_command_line() handler is called only if it is run before the default signal handler. I can't find that peculiarity mentioned in the glib documentation, and if it's not mentioned there, it's understandable that it's not mentioned in the documentation of Gio::Application. An alternative way to handle command line parameters would be to handle them in main(), adjust argc and argv[] accordingly before they are given to Gtk::Application::create() (i.e. remove the handled parameters), and call Gtk::Application::create() without the Gio::APPLICATION_HANDLES_COMMAND_LINE flag. Kjell |
// gtkmm-list, 2012-11-19 App exits with extra param - bug or feature? #include <gtkmm.h> #include <iostream> namespace { int on_command_line(const Glib::RefPtr<Gio::ApplicationCommandLine>& command_line, Glib::RefPtr<Gtk::Application>& app) { int argc = 0; char** argv = command_line->get_arguments(argc); for (int i = 0; i < argc; ++i) std::cout << "argv[" << i << "] = " << argv[i] << std::endl; app->activate(); return EXIT_SUCCESS; } } // anonymous namespace int main(int argc, char *argv[]) { Glib::RefPtr<Gtk::Application> app = Gtk::Application::create(argc, argv, "org.app.com", Gio::APPLICATION_HANDLES_COMMAND_LINE); // "org.app.com");//, Gio::APPLICATION_HANDLES_COMMAND_LINE); // Note after = false. // Only one signal handler is invoked. This signal handler must run before // the default signal handler, or else it won't run at all. app->signal_command_line().connect(sigc::bind(sigc::ptr_fun(&on_command_line), app), false); Gtk::Window win; win.show_all(); app->run(win); return 0; }