+struct selection_data *selection_data_new(struct proxy *server,
+ GtkTreeModel *model,
+ GtkTreePath *path)
+{
+ struct selection_data *data =
+ (struct selection_data *)g_slice_alloc0(sizeof(struct selection_data));
+ data->row = gtk_tree_row_reference_new(model, path);
+ data->set = server->set;
+ return data;
+}
+
+void selection_data_free(struct selection_data *data)
+{
+ gtk_tree_row_reference_free(data->row);
+ g_slice_free(struct selection_data, data);
+}
+
+void play_window_destroy(GtkWidget *window, gpointer user_data)
+{
+ struct selection_data *data = (struct selection_data *)user_data;
+ selection_data_free(data);
+}
+
+GtkWidget *play_window_image(struct selection_data *data)
+{
+ GError *error = NULL;
+ GdkPixbuf *icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(),
+ "mediaplayer_default_album",
+ PLAY_WINDOW_IMAGE_SIZE,
+ 0, &error);
+
+ data->art_image = gtk_image_new_from_pixbuf(icon);
+
+ return data->art_image;
+}
+
+void mp_callback(GtkWidget *event_box, GdkEventButton *event,
+ gpointer user_data)
+{
+ struct toggle_data *data = (struct toggle_data *)user_data;
+
+ if (event->type == GDK_BUTTON_PRESS) {
+ if (data->toggle) data->state ^= 1;
+ gtk_image_set_from_pixbuf(GTK_IMAGE(data->image),
+ data->pixbufs[data->toggle ? data->state : 1]);
+ } else {
+ if (!data->toggle) gtk_image_set_from_pixbuf(GTK_IMAGE(data->image),
+ data->pixbufs[0]);
+ if (data->callback) (data->callback)(event_box, data->user_data);
+ }
+}
+
+GtkWidget *mp_button(char *file, char *onpress_file, gboolean toggle,
+ void (*callback)(GtkWidget *, gpointer),
+ gpointer user_data)
+{
+ char fname[256];
+ struct toggle_data *data = g_slice_alloc0(sizeof(struct toggle_data));
+ data->toggle = toggle;
+ data->user_data = user_data;
+ data->callback = callback;
+
+ GError *error = NULL;
+ strcpy(fname, MP_ICON_PATH);
+ strcat(fname, file);
+ strcat(fname, ".png");
+ data->pixbufs[0] = gdk_pixbuf_new_from_file(fname, &error);
+
+ strcpy(fname, MP_ICON_PATH);
+ strcat(fname, onpress_file);
+ strcat(fname, ".png");
+ data->pixbufs[1] = gdk_pixbuf_new_from_file(fname, &error);
+
+ data->image = GTK_IMAGE(gtk_image_new_from_pixbuf(data->pixbufs[0]));
+
+ GtkWidget *event_box = gtk_event_box_new();
+ gtk_container_add(GTK_CONTAINER(event_box), GTK_WIDGET(data->image));
+
+ g_signal_connect(G_OBJECT(event_box), "button_press_event",
+ G_CALLBACK(mp_callback), data);
+ g_signal_connect(G_OBJECT(event_box), "button_release_event",
+ G_CALLBACK(mp_callback), data);
+ return event_box;
+}
+
+GtkWidget *play_window(struct proxy *server, struct selection_data *data)