summaryrefslogtreecommitdiff
path: root/plugins/gtkui
diff options
context:
space:
mode:
authorGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-02 20:31:56 +0200
committerGravatar Alexey Yakovenko <wakeroid@gmail.com>2010-05-02 20:31:56 +0200
commit2700bbbc3d62c36d9e35e3b2778547754f934fbc (patch)
treed53373f26dad148a450653ac4899a664cf6c2478 /plugins/gtkui
parentf39978309e26ca380552392e174fbc3606c16943 (diff)
ask before closing track properties if user modified metadata
Diffstat (limited to 'plugins/gtkui')
-rw-r--r--plugins/gtkui/deadbeef.glade2
-rw-r--r--plugins/gtkui/interface.c1
-rw-r--r--plugins/gtkui/trkproperties.c27
3 files changed, 21 insertions, 9 deletions
diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade
index 7504ea9f..c856d5b3 100644
--- a/plugins/gtkui/deadbeef.glade
+++ b/plugins/gtkui/deadbeef.glade
@@ -1386,7 +1386,7 @@
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="resizable">True</property>
- <property name="destroy_with_parent">True</property>
+ <property name="destroy_with_parent">False</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">True</property>
<property name="skip_pager_hint">True</property>
diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c
index 928741f4..315a0baf 100644
--- a/plugins/gtkui/interface.c
+++ b/plugins/gtkui/interface.c
@@ -1168,7 +1168,6 @@ create_trackproperties (void)
trackproperties = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_widget_set_size_request (trackproperties, 400, 400);
gtk_window_set_title (GTK_WINDOW (trackproperties), "Track Properties");
- gtk_window_set_destroy_with_parent (GTK_WINDOW (trackproperties), TRUE);
gtk_window_set_skip_taskbar_hint (GTK_WINDOW (trackproperties), TRUE);
gtk_window_set_skip_pager_hint (GTK_WINDOW (trackproperties), TRUE);
diff --git a/plugins/gtkui/trkproperties.c b/plugins/gtkui/trkproperties.c
index 4f89a5cb..0fca8145 100644
--- a/plugins/gtkui/trkproperties.c
+++ b/plugins/gtkui/trkproperties.c
@@ -37,19 +37,33 @@ static DB_playItem_t *track;
static GtkCellRenderer *rend_text2;
static GtkListStore *store;
static GtkListStore *propstore;
+static int trkproperties_modified;
gboolean
on_trackproperties_delete_event (GtkWidget *widget,
GdkEvent *event,
gpointer user_data)
{
+ if (trkproperties_modified) {
+ GtkWidget *dlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_YES_NO, "You've modified data for this track.");
+ gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (trackproperties));
+ gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dlg), "Really close the window?");
+ gtk_window_set_title (GTK_WINDOW (dlg), "Warning");
+
+ int response = gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+ if (response != GTK_RESPONSE_YES) {
+ return TRUE;
+ }
+ }
+ gtk_widget_destroy (widget);
rend_text2 = NULL;
trackproperties = NULL;
if (track) {
deadbeef->pl_item_unref (track);
track = NULL;
}
- return FALSE;
+ return TRUE;
}
gboolean
@@ -58,8 +72,7 @@ on_trackproperties_key_press_event (GtkWidget *widget,
gpointer user_data)
{
if (event->keyval == GDK_Escape) {
- on_trackproperties_delete_event (NULL, NULL, NULL);
- gtk_widget_destroy (widget);
+ on_trackproperties_delete_event (trackproperties, NULL, NULL);
return TRUE;
}
return FALSE;
@@ -68,9 +81,7 @@ on_trackproperties_key_press_event (GtkWidget *widget,
void
trkproperties_destroy (void) {
if (trackproperties) {
- GtkWidget *w = trackproperties;
- on_trackproperties_delete_event (NULL, NULL, NULL);
- gtk_widget_destroy (w);
+ on_trackproperties_delete_event (trackproperties, NULL, NULL);
}
}
@@ -89,6 +100,7 @@ on_metadata_edited (GtkCellRendererText *renderer, gchar *path, gchar *new_text,
gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, treepath);
gtk_tree_path_free (treepath);
gtk_list_store_set (store, &iter, 1, new_text, -1);
+ trkproperties_modified = 1;
}
// full metadata
@@ -118,7 +130,7 @@ trkproperties_fill_metadata (void) {
if (!trackproperties) {
return;
}
-
+ trkproperties_modified = 0;
gtk_list_store_clear (store);
deadbeef->pl_lock ();
int i = 0;
@@ -297,6 +309,7 @@ on_write_tags_clicked (GtkButton *button,
break;
}
}
+ trkproperties_modified = 0;
#if 0
DB_id3v2_tag_t tag;
memset (&tag, 0, sizeof (tag));