static void killswitch_state_changed (GObject *gobject, GParamSpec *pspec, gpointer user_data) { GObject *object; BluetoothApplet *applet = BLUETOOTH_APPLET (gobject); BluetoothKillswitchState state = bluetooth_applet_get_killswitch_state (applet); gboolean sensitive = TRUE; gboolean bstate = FALSE; const char *label, *status_label; if (state == BLUETOOTH_KILLSWITCH_STATE_NO_ADAPTER) { object = gtk_builder_get_object (xml, "bluetooth-applet-popup"); gtk_menu_popdown (GTK_MENU (object)); update_icon_visibility (); return; } if (state == BLUETOOTH_KILLSWITCH_STATE_SOFT_BLOCKED) { label = N_("Turn on Bluetooth"); status_label = N_("Bluetooth: Off"); bstate = FALSE; } else if (state == BLUETOOTH_KILLSWITCH_STATE_UNBLOCKED) { label = N_("Turn off Bluetooth"); status_label = N_("Bluetooth: On"); bstate = TRUE; } else if (state == BLUETOOTH_KILLSWITCH_STATE_HARD_BLOCKED) { sensitive = FALSE; label = NULL; status_label = N_("Bluetooth: Disabled"); } else { g_assert_not_reached (); } object = gtk_builder_get_object (xml, "killswitch-label"); gtk_action_set_label (GTK_ACTION (object), _(status_label)); gtk_action_set_visible (GTK_ACTION (object), TRUE); object = gtk_builder_get_object (xml, "killswitch"); gtk_action_set_visible (GTK_ACTION (object), sensitive); gtk_action_set_label (GTK_ACTION (object), _(label)); if (sensitive != FALSE) { gtk_action_set_label (GTK_ACTION (object), _(label)); g_object_set_data (object, "bt-active", GINT_TO_POINTER (bstate)); } object = gtk_builder_get_object (xml, "bluetooth-applet-ui-manager"); gtk_ui_manager_ensure_update (GTK_UI_MANAGER (object)); update_icon_visibility (); }
static void show_icon_changed (GSettings *settings, const char *key, gpointer user_data) { show_icon_pref = g_settings_get_boolean (settings, PREF_SHOW_ICON); update_icon_visibility(); }
static void device_changed (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *_iter, gpointer data) { GtkTreeIter iter, *default_iter; gboolean powered, cont; default_iter = NULL; num_adapters_present = num_adapters_powered = 0; cont = gtk_tree_model_get_iter_first (model, &iter); while (cont) { gboolean is_default; num_adapters_present++; gtk_tree_model_get (model, &iter, BLUETOOTH_COLUMN_DEFAULT, &is_default, BLUETOOTH_COLUMN_POWERED, &powered, -1); if (powered) num_adapters_powered++; if (is_default && powered) default_iter = gtk_tree_iter_copy (&iter); cont = gtk_tree_model_iter_next (model, &iter); } update_discoverability (default_iter); update_icon_visibility (); update_menu_items (); update_device_list (default_iter); if (default_iter != NULL) gtk_tree_iter_free (default_iter); }
int main(int argc, char *argv[]) { GApplication *app; #ifdef HAVE_APP_INDICATOR AppIndicator *indicator; #else GtkStatusIcon *statusicon; #endif /* HAVE_APP_INDICATOR */ GtkWidget *menu; GOptionContext *context; GError *error = NULL; bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); g_type_init (); /* Parse command-line options */ context = g_option_context_new (N_("- Bluetooth applet")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) { g_print (_("%s\nRun '%s --help' to see a full list of available command line options.\n"), error->message, argv[0]); g_error_free (error); return 1; } if (option_debug == FALSE) { GError *error = NULL; app = g_application_new ("org.cinnamon.Bluetooth.applet", G_APPLICATION_FLAGS_NONE); if (!g_application_register (app, NULL, &error)) { g_object_unref (app); g_warning ("%s", error->message); g_error_free (error); return 1; } if (g_application_get_is_remote (app)) { g_object_unref (app); g_warning ("Applet is already running, exiting"); return 0; } } else { app = NULL; } g_set_application_name(_("Bluetooth Applet")); gtk_window_set_default_icon_name("bluetooth"); applet = g_object_new (BLUETOOTH_TYPE_APPLET, NULL); g_signal_connect (G_OBJECT (applet), "notify::killswitch-state", G_CALLBACK (killswitch_state_changed), NULL); menu = create_popupmenu(); #ifdef HAVE_APP_INDICATOR indicator = init_notification(); app_indicator_set_menu(indicator, GTK_MENU(menu)); app_indicator_set_title(indicator, _("Bluetooth")); gsettings = g_settings_new (BLUETOOTH_INDICATOR_GSETTINGS_SCHEMA_ID); g_signal_connect (gsettings, "changed::" GSETTINGS_VISIBLE_KEY, G_CALLBACK(update_icon_visibility), NULL); #else statusicon = init_notification(); #endif /* HAVE_APP_INDICATOR */ g_signal_connect (G_OBJECT (applet), "devices-changed", G_CALLBACK (update_device_list), NULL); g_signal_connect (G_OBJECT (applet), "notify::discoverable", G_CALLBACK (update_discoverability), NULL); g_signal_connect (G_OBJECT (applet), "notify::show-full-menu", G_CALLBACK (update_menu_items), NULL); killswitch_state_changed ((GObject*) applet, NULL, NULL); update_menu_items ((GObject*) applet, NULL, NULL); update_discoverability ((GObject*) applet, NULL, NULL); update_device_list (applet, NULL); update_icon_visibility(); #ifndef HAVE_APP_INDICATOR g_signal_connect(statusicon, "activate", G_CALLBACK(activate_callback), menu); g_signal_connect(statusicon, "popup-menu", G_CALLBACK(popup_callback), menu); #endif /* HAVE_APP_INDICATOR */ setup_agents(applet); gtk_main(); gtk_widget_destroy(menu); cleanup_notification(); g_object_unref(applet); if (app != NULL) g_object_unref (app); return 0; }
int main(int argc, char *argv[]) { UniqueApp *app; GtkStatusIcon *statusicon; GtkWidget *menu; GOptionContext *context; GError *error = NULL; bindtextdomain(GETTEXT_PACKAGE, LOCALEDIR); bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8"); textdomain(GETTEXT_PACKAGE); #if !GLIB_CHECK_VERSION (2, 36, 0) g_type_init (); #endif /* Parse command-line options */ context = g_option_context_new (N_("- Bluetooth applet")); g_option_context_set_translation_domain (context, GETTEXT_PACKAGE); g_option_context_add_main_entries (context, options, GETTEXT_PACKAGE); g_option_context_add_group (context, gtk_get_option_group (TRUE)); if (g_option_context_parse (context, &argc, &argv, &error) == FALSE) { g_print (_("%s\nRun '%s --help' to see a full list of available command line options.\n"), error->message, argv[0]); g_error_free (error); return 1; } if (option_debug == FALSE) { app = unique_app_new ("org.mate.Bluetooth.applet", NULL); if (unique_app_is_running (app)) { gdk_notify_startup_complete (); g_warning ("Applet is already running, exiting"); return 0; } } else { app = NULL; } g_set_application_name(_("Bluetooth Applet")); gtk_window_set_default_icon_name("bluetooth"); killswitch = bluetooth_killswitch_new (); g_signal_connect (G_OBJECT (killswitch), "state-changed", G_CALLBACK (killswitch_state_changed), NULL); menu = create_popupmenu(); client = bluetooth_client_new(); devices_model = bluetooth_client_get_model(client); g_signal_connect(G_OBJECT(devices_model), "row-inserted", G_CALLBACK(device_added), NULL); g_signal_connect(G_OBJECT(devices_model), "row-deleted", G_CALLBACK(device_removed), NULL); g_signal_connect (G_OBJECT (devices_model), "row-changed", G_CALLBACK (device_changed), NULL); /* Set the default adapter */ device_changed (devices_model, NULL, NULL, NULL); if (bluetooth_killswitch_has_killswitches (killswitch) != FALSE) { killswitch_state_changed (killswitch, bluetooth_killswitch_get_state (killswitch)); } /* Make sure all the unblocked adapters are powered, * so as to avoid seeing unpowered, but unblocked * devices */ bluetooth_set_adapter_powered (); settings = g_settings_new (SCHEMA_NAME); show_icon_pref = g_settings_get_boolean (settings, PREF_SHOW_ICON); g_signal_connect (G_OBJECT (settings), "changed::" PREF_SHOW_ICON, G_CALLBACK (show_icon_changed), NULL); statusicon = init_notification(); update_icon_visibility(); g_signal_connect(statusicon, "activate", G_CALLBACK(activate_callback), menu); g_signal_connect(statusicon, "popup-menu", G_CALLBACK(popup_callback), menu); setup_agents(); gtk_main(); gtk_widget_destroy(menu); g_object_unref(settings); cleanup_agents(); cleanup_notification(); g_object_unref(devices_model); g_object_unref(client); if (app != NULL) g_object_unref (app); return 0; }