int main (int argc, char *argv[]) { GOptionContext *opt_ctx; GError *error = NULL; BMConnectionList *list; DBusGConnection *bus; char *type = NULL; GType ctype; NMCEService *service = NULL; DBusGProxy *proxy = NULL; /* GOptionEntry entries[] = { { ARG_TYPE, 0, 0, G_OPTION_ARG_STRING, &type, "Type of connection to show at launch", BM_SETTING_WIRED_SETTING_NAME }, { NULL } };*/ bindtextdomain (GETTEXT_PACKAGE, BMALOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); gtk_init (&argc, &argv); textdomain (GETTEXT_PACKAGE); /* parse arguments: an idea is to use gconf://$setting_name / system://$setting_name to allow this program to work with both GConf and system-wide settings */ opt_ctx = g_option_context_new (NULL); g_option_context_set_summary (opt_ctx, "Allows users to view and edit network connection settings"); // g_option_context_add_main_entries (opt_ctx, entries, NULL); if (!g_option_context_parse (opt_ctx, &argc, &argv, &error)) { g_warning ("%s\n", error->message); g_error_free (error); return 1; } g_option_context_free (opt_ctx); /* Inits the dbus-glib type system too */ bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (bus) { proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus"); /* Check for an existing instance on the bus */ if (proxy) { if (try_existing_instance (bus, proxy, type)) goto exit; } } loop = g_main_loop_new (NULL, FALSE); /* if (!type) type = (char *) BM_SETTING_WIRED_SETTING_NAME; if (!strcmp (type, BM_SETTING_CDMA_SETTING_NAME)) type = (char *) BM_SETTING_GSM_SETTING_NAME; */ ctype = bm_connection_lookup_setting_type (type); // FIXME list = bm_connection_list_new (ctype); list = NULL; if (!list) { g_warning ("Failed to initialize the UI, exiting..."); return 1; } /* Create our single-instance-app service if we can */ if (proxy) service = bm_ce_service_new (bus, proxy, list); g_signal_connect_swapped (G_OBJECT (list), "done", G_CALLBACK (g_main_loop_quit), loop); // FIXME bm_connection_list_run (list); setup_signals (); g_main_loop_run (loop); g_object_unref (list); if (service) g_object_unref (service); exit: if (proxy) g_object_unref (proxy); if (bus) dbus_g_connection_unref (bus); return 0; }
int main (int argc, char *argv[]) { GOptionContext *opt_ctx; GError *error = NULL; NMConnectionList *list; DBusGConnection *bus; char *type = NULL; gboolean create = FALSE; gboolean show = FALSE; gboolean success; char *uuid = NULL; NMCEService *service = NULL; DBusGProxy *proxy = NULL; gboolean show_list; GOptionEntry entries[] = { { ARG_TYPE, 0, 0, G_OPTION_ARG_STRING, &type, "Type of connection to show or create", NM_SETTING_WIRED_SETTING_NAME }, { ARG_CREATE, 0, 0, G_OPTION_ARG_NONE, &create, "Create a new connection", NULL }, { ARG_SHOW, 0, 0, G_OPTION_ARG_NONE, &show, "Show a given connection type page", NULL }, { "edit", 0, 0, G_OPTION_ARG_STRING, &uuid, "Edit an existing connection with a given UUID", "UUID" }, { NULL } }; bindtextdomain (GETTEXT_PACKAGE, NMALOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); gtk_init (&argc, &argv); textdomain (GETTEXT_PACKAGE); opt_ctx = g_option_context_new (NULL); g_option_context_set_summary (opt_ctx, "Allows users to view and edit network connection settings"); g_option_context_add_main_entries (opt_ctx, entries, NULL); success = g_option_context_parse (opt_ctx, &argc, &argv, &error); g_option_context_free (opt_ctx); if (!success) { g_warning ("%s\n", error->message); g_error_free (error); return 1; } /* Just one page for both CDMA & GSM, handle that here */ if (type && g_strcmp0 (type, NM_SETTING_CDMA_SETTING_NAME) == 0) type = (char *) NM_SETTING_GSM_SETTING_NAME; /* Inits the dbus-glib type system too */ bus = dbus_g_bus_get (DBUS_BUS_SESSION, NULL); if (bus) { proxy = dbus_g_proxy_new_for_name (bus, "org.freedesktop.DBus", "/org/freedesktop/DBus", "org.freedesktop.DBus"); g_assert (proxy); /* Check for an existing instance on the bus, and if there * is one, send the arguments to it and exit instead of opening * a second instance of the connection editor. */ if (try_existing_instance (bus, proxy, type, create, show, uuid)) return 0; } loop = g_main_loop_new (NULL, FALSE); list = nm_connection_list_new (); if (!list) { g_warning ("Failed to initialize the UI, exiting..."); return 1; } g_signal_connect_swapped (list, "done", G_CALLBACK (g_main_loop_quit), loop); /* Create our single-instance-app service if we can */ if (proxy) service = nm_ce_service_new (bus, proxy, list); /* Show the dialog */ g_signal_connect_swapped (list, "done", G_CALLBACK (g_main_loop_quit), loop); /* Figure out what page or editor window we'll show initially */ show_list = handle_arguments (list, type, create, show, uuid, (create || show || uuid)); if (show_list) nm_connection_list_present (list); setup_signals (); g_main_loop_run (loop); /* Cleanup */ g_object_unref (list); if (service) g_object_unref (service); if (proxy) g_object_unref (proxy); if (bus) dbus_g_connection_unref (bus); return 0; }
int main (int argc, char *argv[]) { GOptionContext *opt_ctx = NULL; GError *error = NULL; NMConnectionList *list = NULL; guint owner_id = 0, registration_id = 0; GDBusConnection *bus = NULL; gs_free char *type = NULL, *uuid = NULL, *import = NULL; gboolean create = FALSE, show = FALSE; int ret = 1; GOptionEntry entries[] = { { ARG_TYPE, 't', 0, G_OPTION_ARG_STRING, &type, "Type of connection to show or create", NM_SETTING_WIRED_SETTING_NAME }, { ARG_CREATE, 'c', 0, G_OPTION_ARG_NONE, &create, "Create a new connection", NULL }, { ARG_SHOW, 's', 0, G_OPTION_ARG_NONE, &show, "Show a given connection type page", NULL }, { "edit", 'e', 0, G_OPTION_ARG_STRING, &uuid, "Edit an existing connection with a given UUID", "UUID" }, { ARG_IMPORT, 'i', 0, G_OPTION_ARG_STRING, &import, "Import a VPN connection from given file", NULL }, /* This is not passed over D-Bus. */ { "keep-above", 0, G_OPTION_FLAG_HIDDEN, G_OPTION_ARG_NONE, &nm_ce_keep_above, NULL, NULL }, { NULL } }; bindtextdomain (GETTEXT_PACKAGE, NMALOCALEDIR); bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); gtk_init (&argc, &argv); textdomain (GETTEXT_PACKAGE); opt_ctx = g_option_context_new (NULL); g_option_context_set_summary (opt_ctx, "Allows users to view and edit network connection settings"); g_option_context_add_main_entries (opt_ctx, entries, NULL); if (!g_option_context_parse (opt_ctx, &argc, &argv, &error)) { g_printerr ("Failed to parse options: %s\n", error->message); goto out; } /* Just one page for both CDMA & GSM, handle that here */ if (g_strcmp0 (type, NM_SETTING_CDMA_SETTING_NAME) == 0) { g_free (type); type = g_strdup (NM_SETTING_GSM_SETTING_NAME); } bus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL); if (bus) { /* Check for an existing instance on the bus, and if there * is one, send the arguments to it and exit instead of opening * a second instance of the connection editor. */ if (try_existing_instance (bus, type, create, show, uuid, import)) { /* success */ ret = 0; goto out; } } loop = g_main_loop_new (NULL, FALSE); list = nm_connection_list_new (); if (!list) { g_warning ("Failed to initialize the UI, exiting..."); goto out; } g_signal_connect_swapped (list, "done", G_CALLBACK (g_main_loop_quit), loop); owner_id = start_service (bus, list, ®istration_id); /* Figure out what page or editor window we'll show initially */ if (handle_arguments (list, type, create, show, uuid, import, (create || show || uuid || import))) nm_connection_list_present (list); g_unix_signal_add (SIGTERM, signal_handler, GINT_TO_POINTER (SIGTERM)); g_unix_signal_add (SIGINT, signal_handler, GINT_TO_POINTER (SIGINT)); g_main_loop_run (loop); ret = 0; out: if (owner_id) g_bus_unown_name (owner_id); if (registration_id) g_dbus_connection_unregister_object (bus, registration_id); if (introspection_data) g_dbus_node_info_unref (introspection_data); g_clear_error (&error); if (opt_ctx) g_option_context_free (opt_ctx); g_clear_object (&list); g_clear_object (&bus); return ret; }