static void impl_activate(PeasActivatable *activatable) { XmrIndicatorPlugin *plugin; XmrWindow *window = NULL; XmrPlayer *player; plugin = XMR_INDICATOR_PLUGIN(activatable); g_object_get(plugin, "object", &window, NULL); if (window) { plugin->window = window; if (!plugin->indicator) { #if HAVE_APP_INDICATOR gchar *icon_path; plugin->indicator = xmr_app_indicator_new(plugin->popup_menu); icon_path = g_build_filename(xmr_app_dir(), "icons", NULL); if (g_file_test(icon_path, G_FILE_TEST_EXISTS)) app_indicator_set_icon_theme_path(APP_INDICATOR(plugin->indicator), icon_path); g_free(icon_path); #else plugin->indicator = xmr_tray_icon_new(GTK_WIDGET(window), plugin->popup_menu); #endif } g_signal_connect(window, "delete-event", G_CALLBACK(on_xmr_window_delete), plugin); g_signal_connect(window, "track-changed", G_CALLBACK(track_changed), plugin); g_object_get(window, "player", &player, NULL); if (player) { g_signal_connect(player, "state-changed", G_CALLBACK(player_state_changed), plugin); g_object_unref(player); } } plugin->hide_on_exit = g_settings_get_boolean(plugin->settings, "hide-on-exit"); g_signal_connect(plugin->settings, "changed", G_CALLBACK(on_settings_changed), plugin); if (xmr_window_playing(plugin->window)){ gtk_widget_hide(plugin->menu_item_play); } else { gtk_widget_hide(plugin->menu_item_pause); } }
static GtkWidget * impl_create_configure_widget(PeasGtkConfigurable *plugin) { GtkWidget *box = NULL; GtkWidget *widget; XmrIndicatorPlugin *indicator = XMR_INDICATOR_PLUGIN(plugin); box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 5); widget = gtk_check_button_new_with_label(_("Hide on exit when playing")); gtk_box_pack_start(GTK_BOX(box), widget, TRUE, FALSE, 0); g_settings_bind(indicator->settings, "hide-on-exit", widget, "active", G_SETTINGS_BIND_DEFAULT); return box; }
static void impl_deactivate(PeasActivatable *activatable) { XmrIndicatorPlugin *plugin; XmrWindow *window = NULL; XmrPlayer *player = NULL; plugin = XMR_INDICATOR_PLUGIN(activatable); window = plugin->window; if (window) { g_object_get(window, "player", &player, NULL); g_signal_handlers_disconnect_by_func(player, player_state_changed, plugin); g_object_unref(player); g_signal_handlers_disconnect_by_func(plugin->window, on_xmr_window_delete, plugin); g_signal_handlers_disconnect_by_func(window, track_changed, plugin); g_object_unref(plugin->window); plugin->window = NULL; } if (plugin->settings != NULL) { g_object_unref(plugin->settings); plugin->settings = NULL; } if (plugin->indicator) { g_object_unref(plugin->indicator); plugin->indicator = NULL; } }