shared_ptr shared_instance(Args... args) { return shared_ptr(unique_instance(std::forward<Args>(args)...).release()); }
int main(int argc, char **argv) { struct Gtkabber gtkabber; gboolean version = FALSE; GError *error = NULL; UniqueApp *unique_app; int i = 1; if (!g_thread_supported()) g_thread_init(NULL); memset( >kabber, '\0', sizeof( struct Gtkabber ) ); GOptionEntry cmdline_ops[] = { { "version", 'v', 0, G_OPTION_ARG_NONE, &version, "Print version information", NULL }, { NULL } }; if (!gtk_init_with_args( &argc, &argv, "foo", cmdline_ops, NULL, &(error))) { g_printerr( "Can't init gtk: %s\n", error->message ); g_error_free( error ); return EXIT_FAILURE; } unique_app = unique_app_new_with_commands( "gtkabber.gtkabber", NULL, "next-socket", COMMAND_PRINT_XID, NULL ); if( unique_app_is_running( unique_app )) { unique_instance( argc, argv, unique_app ); return EXIT_SUCCESS; } if (version) { fprintf(stderr, "%s %s\n", "gtkabber ", VERSION); return EXIT_SUCCESS; } setup_toplevel_win( >kabber, unique_app ); for(; i < argc; ++i) { if (strcmp( argv[i], "next-socket" ) == 0) setup_new_socket_for_plug( >kabber ); } gtk_main(); g_object_unref(unique_app); return EXIT_SUCCESS; }