summaryrefslogtreecommitdiff
path: root/plugins/gtkui/plcommon.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/gtkui/plcommon.c')
-rw-r--r--plugins/gtkui/plcommon.c98
1 files changed, 89 insertions, 9 deletions
diff --git a/plugins/gtkui/plcommon.c b/plugins/gtkui/plcommon.c
index 2347540b..a6077929 100644
--- a/plugins/gtkui/plcommon.c
+++ b/plugins/gtkui/plcommon.c
@@ -32,6 +32,7 @@
#include "actions.h"
#include "search.h"
#include "actionhandlers.h"
+#include "../../strdupa.h"
#define min(x,y) ((x)<(y)?(x):(y))
//#define trace(...) { fprintf(stderr, __VA_ARGS__); }
@@ -466,6 +467,70 @@ on_remove2_activate (GtkMenuItem *menuitem,
deadbeef->sendmessage (DB_EV_PLAYLISTCHANGED, 0, 0, 0);
}
+static void
+on_toggle_set_custom_title (GtkToggleButton *togglebutton, gpointer user_data) {
+ gboolean active = gtk_toggle_button_get_active (togglebutton);
+ deadbeef->conf_set_int ("gtkui.location_set_custom_title", active);
+
+ GtkWidget *ct = lookup_widget (GTK_WIDGET (user_data), "custom_title");
+ gtk_widget_set_sensitive (ct, active);
+
+ deadbeef->conf_save ();
+}
+
+void
+on_set_custom_title_activate (GtkMenuItem *menuitem, gpointer user_data)
+{
+ DdbListview *lv = user_data;
+ int idx = lv->binding->cursor ();
+ if (idx < 0) {
+ return;
+ }
+ DdbListviewIter it = lv->binding->get_for_idx (idx);
+ if (!it) {
+ return;
+ }
+
+ GtkWidget *dlg = create_setcustomtitledlg ();
+ GtkWidget *sct = lookup_widget (dlg, "set_custom_title");
+ GtkWidget *ct = lookup_widget (dlg, "custom_title");
+ if (deadbeef->conf_get_int ("gtkui.location_set_custom_title", 0)) {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sct), TRUE);
+ gtk_widget_set_sensitive (ct, TRUE);
+ }
+ else {
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (sct), FALSE);
+ gtk_widget_set_sensitive (ct, FALSE);
+ }
+ deadbeef->pl_lock ();
+ const char *custom_title = deadbeef->pl_find_meta ((DB_playItem_t *)it, ":CUSTOM_TITLE");
+ if (custom_title) {
+ custom_title = strdupa (custom_title);
+ }
+ else {
+ custom_title = "";
+ }
+ deadbeef->pl_unlock ();
+
+ g_signal_connect ((gpointer) sct, "toggled",
+ G_CALLBACK (on_toggle_set_custom_title),
+ dlg);
+ gtk_entry_set_text (GTK_ENTRY (ct), custom_title);
+
+ gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK);
+ gint response = gtk_dialog_run (GTK_DIALOG (dlg));
+ if (response == GTK_RESPONSE_OK) {
+ if (it && deadbeef->conf_get_int ("gtkui.location_set_custom_title", 0)) {
+ deadbeef->pl_replace_meta ((DB_playItem_t *)it, ":CUSTOM_TITLE", gtk_entry_get_text (GTK_ENTRY (ct)));
+ }
+ else {
+ deadbeef->pl_delete_meta ((DB_playItem_t *)it, ":CUSTOM_TITLE");
+ }
+ }
+ gtk_widget_destroy (dlg);
+ lv->binding->unref (it);
+}
+
void
on_remove_from_disk_activate (GtkMenuItem *menuitem,
gpointer user_data)
@@ -553,12 +618,13 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
GtkWidget *playlist_menu;
GtkWidget *add_to_playback_queue1;
GtkWidget *remove_from_playback_queue1;
- GtkWidget *separator9;
+ GtkWidget *separator;
GtkWidget *remove2;
GtkWidget *remove_from_disk;
GtkWidget *separator8;
GtkWidget *properties1;
GtkWidget *reload_metadata;
+ GtkWidget *set_custom_title;
playlist_menu = gtk_menu_new ();
add_to_playback_queue1 = gtk_menu_item_new_with_mnemonic (_("Add To Playback Queue"));
@@ -579,10 +645,10 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
gtk_container_add (GTK_CONTAINER (playlist_menu), reload_metadata);
g_object_set_data (G_OBJECT (reload_metadata), "ps", listview);
- separator9 = gtk_separator_menu_item_new ();
- gtk_widget_show (separator9);
- gtk_container_add (GTK_CONTAINER (playlist_menu), separator9);
- gtk_widget_set_sensitive (separator9, FALSE);
+ separator = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator);
+ gtk_container_add (GTK_CONTAINER (playlist_menu), separator);
+ gtk_widget_set_sensitive (separator, FALSE);
remove2 = gtk_menu_item_new_with_mnemonic (_("Remove"));
gtk_widget_show (remove2);
@@ -598,10 +664,10 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
g_object_set_data (G_OBJECT (remove_from_disk), "ps", listview);
}
- separator8 = gtk_separator_menu_item_new ();
- gtk_widget_show (separator8);
- gtk_container_add (GTK_CONTAINER (playlist_menu), separator8);
- gtk_widget_set_sensitive (separator8, FALSE);
+ separator = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator);
+ gtk_container_add (GTK_CONTAINER (playlist_menu), separator);
+ gtk_widget_set_sensitive (separator, FALSE);
int selected_count = 0;
DB_playItem_t *pit = deadbeef->pl_get_first (PL_MAIN);
@@ -729,6 +795,17 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
gtk_widget_set_sensitive (separator8, FALSE);
}
+ set_custom_title = gtk_menu_item_new_with_mnemonic (_("Set Custom Title"));
+ gtk_widget_show (set_custom_title);
+ gtk_container_add (GTK_CONTAINER (playlist_menu), set_custom_title);
+ if (selected_count != 1) {
+ gtk_widget_set_sensitive (GTK_WIDGET (set_custom_title), FALSE);
+ }
+
+ separator = gtk_separator_menu_item_new ();
+ gtk_widget_show (separator);
+ gtk_container_add (GTK_CONTAINER (playlist_menu), separator);
+ gtk_widget_set_sensitive (separator, FALSE);
properties1 = gtk_menu_item_new_with_mnemonic (_("Track Properties"));
gtk_widget_show (properties1);
@@ -752,6 +829,9 @@ list_context_menu (DdbListview *listview, DdbListviewIter it, int idx) {
G_CALLBACK (on_remove_from_disk_activate),
NULL);
}
+ g_signal_connect ((gpointer) set_custom_title, "activate",
+ G_CALLBACK (on_set_custom_title_activate),
+ listview);
g_signal_connect ((gpointer) properties1, "activate",
G_CALLBACK (main_properties_activate),
NULL);