Ejemplo n.º 1
0
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);
	}
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
	}
}