diff options
author | waker <wakeroid@gmail.com> | 2010-12-27 22:24:39 +0100 |
---|---|---|
committer | waker <wakeroid@gmail.com> | 2010-12-27 22:24:39 +0100 |
commit | ad072a13964e24e5592956e1ff4da2c7685daa4d (patch) | |
tree | aa82b49807acef9ae184937192a45c9254091a27 | |
parent | f097d2946c4eaa4bb418f6ad9330ba8b7bf08fe1 (diff) |
converter gui is now thread-safe, and runs conversion in background thread(s)
-rw-r--r-- | plugins/converter/converter.c | 10 | ||||
-rw-r--r-- | plugins/converter/converter.h | 3 | ||||
-rw-r--r-- | plugins/gtkui/convgui.c | 380 | ||||
-rw-r--r-- | plugins/gtkui/deadbeef.glade | 7 | ||||
-rw-r--r-- | plugins/gtkui/interface.c | 11 |
5 files changed, 240 insertions, 171 deletions
diff --git a/plugins/converter/converter.c b/plugins/converter/converter.c index 6046002f..c66c3ee1 100644 --- a/plugins/converter/converter.c +++ b/plugins/converter/converter.c @@ -155,6 +155,15 @@ encoder_preset_save (ddb_encoder_preset_t *p, int overwrite) { return 0; } +void +encoder_preset_copy (ddb_encoder_preset_t *to, ddb_encoder_preset_t *from) { + to->title = strdup (from->title); + to->fname = strdup (from->fname); + to->encoder = strdup (from->encoder); + to->method = from->method; + to->formats = from->formats; +} + ddb_encoder_preset_t * encoder_preset_get_list (void) { return encoder_presets; @@ -752,6 +761,7 @@ static ddb_converter_t plugin = { .encoder_preset_free = encoder_preset_free, .encoder_preset_load = encoder_preset_load, .encoder_preset_save = encoder_preset_save, + .encoder_preset_copy = encoder_preset_copy, .encoder_preset_get_list = encoder_preset_get_list, .encoder_preset_get_for_idx = encoder_preset_get_for_idx, .encoder_preset_append = encoder_preset_append, diff --git a/plugins/converter/converter.h b/plugins/converter/converter.h index ca9a83e6..60677b1e 100644 --- a/plugins/converter/converter.h +++ b/plugins/converter/converter.h @@ -75,6 +75,9 @@ typedef struct { int (*encoder_preset_save) (ddb_encoder_preset_t *p, int overwrite); + void + (*encoder_preset_copy) (ddb_encoder_preset_t *to, ddb_encoder_preset_t *from); + ddb_encoder_preset_t * (*encoder_preset_get_list) (void); diff --git a/plugins/gtkui/convgui.c b/plugins/gtkui/convgui.c index 546d2b14..80eddfeb 100644 --- a/plugins/gtkui/convgui.c +++ b/plugins/gtkui/convgui.c @@ -28,11 +28,26 @@ #include "gtkui.h" #include "pluginconf.h" -ddb_encoder_preset_t *current_encoder_preset; -ddb_dsp_preset_t *current_dsp_preset; ddb_converter_t *converter_plugin; -static GtkWidget *converter; +typedef struct { + GtkWidget *converter; + ddb_encoder_preset_t *current_encoder_preset; + ddb_dsp_preset_t *current_dsp_preset; + + DB_playItem_t **convert_items; + int convert_items_count; + char *outfolder; + int selected_format; + ddb_encoder_preset_t *encoder_preset; + ddb_dsp_preset_t *dsp_preset; + GtkWidget *progress; + GtkWidget *progress_entry; + int cancelled; + char *progress_text; +} converter_ctx_t; + +converter_ctx_t *current_ctx; void fill_presets (GtkListStore *mdl, ddb_preset_t *head) { @@ -44,6 +59,108 @@ fill_presets (GtkListStore *mdl, ddb_preset_t *head) { p = p->next; } } + +void +on_converter_progress_cancel (GtkDialog *dialog, gint response_id, gpointer user_data) { + converter_ctx_t *ctx = user_data; + ctx->cancelled = 1; +} + +static gboolean +update_progress_cb (gpointer ctx) { + converter_ctx_t *conv = ctx; + gtk_entry_set_text (GTK_ENTRY (conv->progress_entry), conv->progress_text); + free (conv->progress_text); + return FALSE; +} + +static gboolean +destroy_progress_cb (gpointer ctx) { + converter_ctx_t *conv = ctx; + gtk_widget_destroy (conv->progress); + return FALSE; +} + +static void +converter_worker (void *ctx) { + converter_ctx_t *conv = ctx; + + for (int n = 0; n < conv->convert_items_count; n++) { + conv->progress_text = strdup (conv->convert_items[n]->fname); + g_idle_add (update_progress_cb, conv); + + converter_plugin->convert (conv->convert_items[n], conv->outfolder, conv->selected_format, conv->encoder_preset, conv->dsp_preset); + deadbeef->pl_item_unref (conv->convert_items[n]); + if (conv->cancelled) { + break; + } + } + g_idle_add (destroy_progress_cb, ctx); + if (conv->convert_items) { + free (conv->convert_items); + } + free (conv->outfolder); + converter_plugin->encoder_preset_free (conv->encoder_preset); + converter_plugin->dsp_preset_free (conv->dsp_preset); + free (conv); +} + +void +converter_process (converter_ctx_t *conv) +{ + conv->outfolder = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (conv->converter, "output_folder")))); + deadbeef->conf_set_str ("converter.output_folder", conv->outfolder); + deadbeef->conf_save (); + + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "encoder")); + int enc_preset = gtk_combo_box_get_active (combo); + if (enc_preset < 0) { + fprintf (stderr, "Encoder preset not selected\n"); + return; + } + + ddb_encoder_preset_t *encoder_preset = converter_plugin->encoder_preset_get_for_idx (enc_preset); + if (!encoder_preset) { + return; + } + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "dsp_preset")); + int dsp_idx = gtk_combo_box_get_active (combo) - 1; + + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "output_format")); + int selected_format = gtk_combo_box_get_active (combo); + + ddb_dsp_preset_t *dsp_preset = NULL; + if (dsp_idx >= 0) { + dsp_preset = converter_plugin->dsp_preset_get_for_idx (dsp_idx); + } + + if (encoder_preset) { + conv->encoder_preset = converter_plugin->encoder_preset_alloc (); + converter_plugin->encoder_preset_copy (conv->encoder_preset, encoder_preset); + } + if (dsp_preset) { + conv->dsp_preset = converter_plugin->dsp_preset_alloc (); + converter_plugin->dsp_preset_copy (conv->dsp_preset, dsp_preset); + } + + GtkWidget *progress = gtk_dialog_new_with_buttons (_("Converting..."), GTK_WINDOW (mainwin), GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, NULL); + GtkWidget *vbox = GTK_DIALOG (progress)->vbox; + GtkWidget *entry = gtk_entry_new (); + gtk_widget_set_size_request (entry, 400, -1); + gtk_editable_set_editable (GTK_EDITABLE (entry), FALSE); + gtk_widget_show (entry); + gtk_box_pack_start (GTK_BOX (vbox), entry, TRUE, TRUE, 12); + + g_signal_connect ((gpointer)progress, "response", G_CALLBACK (on_converter_progress_cancel), conv); + + gtk_widget_show (progress); + + conv->progress = progress; + conv->progress_entry = entry; + intptr_t tid = deadbeef->thread_start (converter_worker, conv); + deadbeef->thread_detach (tid); +} + void converter_show (void) { if (!converter_plugin) { @@ -52,40 +169,81 @@ converter_show (void) { return; } } - if (!converter) { - converter = create_converterdlg (); - gtk_entry_set_text (GTK_ENTRY (lookup_widget (converter, "output_folder")), deadbeef->conf_get_str ("converter.output_folder", "")); - GtkComboBox *combo; - // fill encoder presets - combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); - GtkListStore *mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo)); - fill_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ()); - gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.encoder_preset", 0)); + converter_ctx_t *conv = malloc (sizeof (converter_ctx_t)); + current_ctx = conv; + memset (conv, 0, sizeof (converter_ctx_t)); - // fill dsp presets - combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); - mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo)); - GtkTreeIter iter; - gtk_list_store_append (mdl, &iter); - gtk_list_store_set (mdl, &iter, 0, "Pass through", -1); - fill_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ()); + deadbeef->pl_lock (); + // copy list + int nsel = deadbeef->pl_getselcount (); + conv->convert_items_count = nsel; + if (0 < nsel) { + conv->convert_items = malloc (sizeof (DB_playItem_t *) * nsel); + if (conv->convert_items) { + int n = 0; + DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN); + while (it) { + if (deadbeef->pl_is_selected (it)) { + assert (n < nsel); + deadbeef->pl_item_ref (it); + conv->convert_items[n++] = it; + } + DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN); + deadbeef->pl_item_unref (it); + it = next; + } + } + } + deadbeef->pl_unlock (); + + conv->converter = create_converterdlg (); + gtk_entry_set_text (GTK_ENTRY (lookup_widget (conv->converter, "output_folder")), deadbeef->conf_get_str ("converter.output_folder", "")); + + GtkComboBox *combo; + // fill encoder presets + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "encoder")); + GtkListStore *mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo)); + fill_presets (mdl, (ddb_preset_t *)converter_plugin->encoder_preset_get_list ()); + gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.encoder_preset", 0)); + + // fill dsp presets + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "dsp_preset")); + mdl = GTK_LIST_STORE (gtk_combo_box_get_model (combo)); + GtkTreeIter iter; + gtk_list_store_append (mdl, &iter); + gtk_list_store_set (mdl, &iter, 0, "Pass through", -1); + fill_presets (mdl, (ddb_preset_t *)converter_plugin->dsp_preset_get_list ()); + + gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.dsp_preset", -1) + 1); + + // select output format + combo = GTK_COMBO_BOX (lookup_widget (conv->converter, "output_format")); + gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.output_format", 0)); - gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.dsp_preset", -1) + 1); - - // select output format - combo = GTK_COMBO_BOX (lookup_widget (converter, "output_format")); - gtk_combo_box_set_active (combo, deadbeef->conf_get_int ("converter.output_format", 0)); + current_ctx = NULL; + int response = gtk_dialog_run (GTK_DIALOG (conv->converter)); + if (response == GTK_RESPONSE_OK) { + converter_process (conv); + } + else { + if (conv->convert_items) { + for (int n = 0; n < conv->convert_items_count; n++) { + deadbeef->pl_item_unref (conv->convert_items[n]); + } + free (conv->convert_items); + } } - gtk_widget_show (converter); + gtk_widget_destroy (conv->converter); + free (conv); } void on_converter_encoder_changed (GtkComboBox *combobox, gpointer user_data) { - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder")); int act = gtk_combo_box_get_active (combo); deadbeef->conf_set_int ("converter.encoder_preset", act); } @@ -94,7 +252,7 @@ void on_converter_dsp_preset_changed (GtkComboBox *combobox, gpointer user_data) { - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset")); int act = gtk_combo_box_get_active (combo); deadbeef->conf_set_int ("converter.dsp_preset", act-1); } @@ -103,8 +261,8 @@ void on_converter_output_browse_clicked (GtkButton *button, gpointer user_data) { - GtkWidget *dlg = gtk_file_chooser_dialog_new (_("Select folder..."), GTK_WINDOW (converter), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (converter)); + GtkWidget *dlg = gtk_file_chooser_dialog_new (_("Select folder..."), GTK_WINDOW (current_ctx->converter), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_OK, NULL); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (current_ctx->converter)); gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (dlg), FALSE); // restore folder @@ -121,7 +279,7 @@ on_converter_output_browse_clicked (GtkButton *button, folder = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dlg)); gtk_widget_destroy (dlg); if (folder) { - GtkWidget *entry = lookup_widget (converter, "output_folder"); + GtkWidget *entry = lookup_widget (current_ctx->converter, "output_folder"); gtk_entry_set_text (GTK_ENTRY (entry), folder); g_free (folder); } @@ -131,15 +289,6 @@ on_converter_output_browse_clicked (GtkButton *button, } } - -void -on_converter_cancel_clicked (GtkButton *button, - gpointer user_data) -{ - gtk_widget_destroy (converter); - converter = NULL; -} - DB_decoder_t * plug_get_decoder_for_id (const char *id) { DB_decoder_t **plugins = deadbeef->plug_get_decoder_list (); @@ -151,89 +300,6 @@ plug_get_decoder_for_id (const char *id) { return NULL; } - -void -on_converter_ok_clicked (GtkButton *button, - gpointer user_data) -{ - char *outfolder = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (converter, "output_folder")))); - deadbeef->conf_set_str ("converter.output_folder", outfolder); - deadbeef->conf_save (); - - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); - int enc_preset = gtk_combo_box_get_active (combo); - if (enc_preset < 0) { - fprintf (stderr, "Encoder preset not selected\n"); - return; - } - - ddb_encoder_preset_t *p = converter_plugin->encoder_preset_get_for_idx (enc_preset); - if (!p) { - return; - } - combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); - int dsp_idx = gtk_combo_box_get_active (combo) - 1; - - combo = GTK_COMBO_BOX (lookup_widget (converter, "output_format")); - int selected_format = gtk_combo_box_get_active (combo); - - gtk_widget_destroy (converter); - converter = NULL; - - deadbeef->pl_lock (); - - // copy list - int nsel = deadbeef->pl_getselcount (); - if (0 < nsel) { - DB_playItem_t **items = malloc (sizeof (DB_playItem_t *) * nsel); - if (items) { - int n = 0; - DB_playItem_t *it = deadbeef->pl_get_first (PL_MAIN); - while (it) { - if (deadbeef->pl_is_selected (it)) { - assert (n < nsel); - deadbeef->pl_item_ref (it); - items[n++] = it; - } - DB_playItem_t *next = deadbeef->pl_get_next (it, PL_MAIN); - deadbeef->pl_item_unref (it); - it = next; - } - deadbeef->pl_unlock (); - - ddb_dsp_preset_t *dsp_preset = NULL; - if (dsp_idx >= 0) { - dsp_preset = converter_plugin->dsp_preset_get_for_idx (dsp_idx); - } - - for (n = 0; n < nsel; n++) { - converter_plugin->convert (items[n], outfolder, selected_format, p, dsp_preset); - } - - for (n = 0; n < nsel; n++) { - deadbeef->pl_item_unref (items[n]); - } - free (items); - } - else { - fprintf (stderr, "converter: error allocating memory to store %d tracks\n", nsel); - deadbeef->pl_unlock (); - } - } - - - free (outfolder); -} - -gboolean -on_converterdlg_delete_event (GtkWidget *widget, - GdkEvent *event, - gpointer user_data) -{ - converter = NULL; - return FALSE; -} - void init_encoder_preset_from_dlg (GtkWidget *dlg, ddb_encoder_preset_t *p) { p->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title")))); @@ -274,7 +340,7 @@ edit_encoder_preset (char *title, GtkWidget *toplevel, int overwrite) { gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (toplevel)); - ddb_encoder_preset_t *p = current_encoder_preset; + ddb_encoder_preset_t *p = current_ctx->current_encoder_preset; if (p->title) { gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "title")), p->title); @@ -381,15 +447,15 @@ on_encoder_preset_add (GtkButton *button, { GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); - current_encoder_preset = converter_plugin->encoder_preset_alloc (); + current_ctx->current_encoder_preset = converter_plugin->encoder_preset_alloc (); if (GTK_RESPONSE_OK == edit_encoder_preset (_("Add new encoder"), toplevel, 0)) { - converter_plugin->encoder_preset_append (current_encoder_preset); - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); + converter_plugin->encoder_preset_append (current_ctx->current_encoder_preset); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder")); GtkWidget *list = lookup_widget (toplevel, "presets"); refresh_encoder_lists (combo, GTK_TREE_VIEW (list)); } - current_encoder_preset = NULL; + current_ctx->current_encoder_preset = NULL; } void @@ -410,15 +476,15 @@ on_encoder_preset_edit (GtkButton *button, g_free (indices); ddb_encoder_preset_t *p = converter_plugin->encoder_preset_get_for_idx (idx); - current_encoder_preset = p; + current_ctx->current_encoder_preset = p; int r = edit_encoder_preset (_("Edit encoder"), toplevel, 1); if (r == GTK_RESPONSE_OK) { - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder")); refresh_encoder_lists (combo, GTK_TREE_VIEW (list)); } - current_encoder_preset = NULL; + current_ctx->current_encoder_preset = NULL; } void @@ -460,7 +526,7 @@ on_encoder_preset_remove (GtkButton *button, converter_plugin->encoder_preset_remove (p); converter_plugin->encoder_preset_free (p); - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "encoder")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "encoder")); refresh_encoder_lists (combo, GTK_TREE_VIEW (list)); } } @@ -471,7 +537,7 @@ on_edit_encoder_presets_clicked (GtkButton *button, { GtkWidget *dlg = create_preset_list (); gtk_window_set_title (GTK_WINDOW (dlg), _("Encoders")); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (converter)); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (current_ctx->converter)); g_signal_connect ((gpointer)lookup_widget (dlg, "add"), "clicked", G_CALLBACK (on_encoder_preset_add), NULL); g_signal_connect ((gpointer)lookup_widget (dlg, "remove"), "clicked", G_CALLBACK (on_encoder_preset_remove), NULL); g_signal_connect ((gpointer)lookup_widget (dlg, "edit"), "clicked", G_CALLBACK (on_encoder_preset_edit), NULL); @@ -506,7 +572,7 @@ fill_dsp_plugin_list (GtkListStore *mdl) { void fill_dsp_preset_chain (GtkListStore *mdl) { - ddb_dsp_context_t *dsp = current_dsp_preset->chain; + ddb_dsp_context_t *dsp = current_ctx->current_dsp_preset->chain; while (dsp) { GtkTreeIter iter; gtk_list_store_append (mdl, &iter); @@ -546,7 +612,7 @@ on_dsp_preset_add_plugin_clicked (GtkButton *button, } if (inst) { // append to DSP chain - ddb_dsp_context_t *tail = current_dsp_preset->chain; + ddb_dsp_context_t *tail = current_ctx->current_dsp_preset->chain; while (tail && tail->next) { tail = tail->next; } @@ -554,7 +620,7 @@ on_dsp_preset_add_plugin_clicked (GtkButton *button, tail->next = inst; } else { - current_dsp_preset->chain = inst; + current_ctx->current_dsp_preset->chain = inst; } // reinit list of instances @@ -591,7 +657,7 @@ on_dsp_preset_remove_plugin_clicked (GtkButton *button, return; } - ddb_dsp_context_t *p = current_dsp_preset->chain; + ddb_dsp_context_t *p = current_ctx->current_dsp_preset->chain; ddb_dsp_context_t *prev = NULL; int i = idx; while (p && i--) { @@ -603,7 +669,7 @@ on_dsp_preset_remove_plugin_clicked (GtkButton *button, prev->next = p->next; } else { - current_dsp_preset->chain = p->next; + current_ctx->current_dsp_preset->chain = p->next; } p->plugin->close (p); GtkListStore *mdl = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW(list))); @@ -647,7 +713,7 @@ on_dsp_preset_plugin_configure_clicked (GtkButton *button, if (idx == -1) { return; } - ddb_dsp_context_t *p = current_dsp_preset->chain; + ddb_dsp_context_t *p = current_ctx->current_dsp_preset->chain; int i = idx; while (p && i--) { p = p->next; @@ -772,8 +838,8 @@ edit_dsp_preset (const char *title, GtkWidget *toplevel, int overwrite) { // title - if (current_dsp_preset->title) { - gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "title")), current_dsp_preset->title); + if (current_ctx->current_dsp_preset->title) { + gtk_entry_set_text (GTK_ENTRY (lookup_widget (dlg, "title")), current_ctx->current_dsp_preset->title); } { @@ -791,11 +857,11 @@ edit_dsp_preset (const char *title, GtkWidget *toplevel, int overwrite) { r = gtk_dialog_run (GTK_DIALOG (dlg)); if (r == GTK_RESPONSE_OK) { - if (current_dsp_preset->title) { - free (current_dsp_preset->title); + if (current_ctx->current_dsp_preset->title) { + free (current_ctx->current_dsp_preset->title); } - current_dsp_preset->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title")))); - int err = converter_plugin->dsp_preset_save (current_dsp_preset, overwrite); + current_ctx->current_dsp_preset->title = strdup (gtk_entry_get_text (GTK_ENTRY (lookup_widget (dlg, "title")))); + int err = converter_plugin->dsp_preset_save (current_ctx->current_dsp_preset, overwrite); if (err < 0) { GtkWidget *warndlg = gtk_message_dialog_new (GTK_WINDOW (mainwin), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Failed to save DSP preset")); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (warndlg), err == -1 ? _("Check preset folder permissions, try to pick different title, or free up some disk space") : _("Preset with the same name already exists. Try to pick another title.")); @@ -853,21 +919,21 @@ on_dsp_preset_add (GtkButton *button, gpointer user_data) { - current_dsp_preset = converter_plugin->dsp_preset_alloc (); + current_ctx->current_dsp_preset = converter_plugin->dsp_preset_alloc (); GtkWidget *toplevel = gtk_widget_get_toplevel (GTK_WIDGET (button)); if (GTK_RESPONSE_OK == edit_dsp_preset (_("New DSP Preset"), toplevel, 0)) { - converter_plugin->dsp_preset_append (current_dsp_preset); - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); + converter_plugin->dsp_preset_append (current_ctx->current_dsp_preset); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset")); GtkWidget *list = lookup_widget (toplevel, "presets"); refresh_dsp_lists (combo, GTK_TREE_VIEW (list)); } else { - converter_plugin->dsp_preset_free (current_dsp_preset); + converter_plugin->dsp_preset_free (current_ctx->current_dsp_preset); } - current_dsp_preset = NULL; + current_ctx->current_dsp_preset = NULL; } void @@ -912,7 +978,7 @@ on_dsp_preset_remove (GtkButton *button, converter_plugin->dsp_preset_remove (p); converter_plugin->dsp_preset_free (p); - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset")); refresh_dsp_lists (combo, GTK_TREE_VIEW (list)); } } @@ -946,22 +1012,22 @@ on_dsp_preset_edit (GtkButton *button, return; } - current_dsp_preset = converter_plugin->dsp_preset_alloc (); - converter_plugin->dsp_preset_copy (current_dsp_preset, p); + current_ctx->current_dsp_preset = converter_plugin->dsp_preset_alloc (); + converter_plugin->dsp_preset_copy (current_ctx->current_dsp_preset, p); int r = edit_dsp_preset (_("Edit DSP Preset"), toplevel, 1); if (r == GTK_RESPONSE_OK) { // replace preset - converter_plugin->dsp_preset_replace (p, current_dsp_preset); + converter_plugin->dsp_preset_replace (p, current_ctx->current_dsp_preset); converter_plugin->dsp_preset_free (p); - GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (converter, "dsp_preset")); + GtkComboBox *combo = GTK_COMBO_BOX (lookup_widget (current_ctx->converter, "dsp_preset")); refresh_dsp_lists (combo, GTK_TREE_VIEW (list)); } else { - converter_plugin->dsp_preset_free (current_dsp_preset); + converter_plugin->dsp_preset_free (current_ctx->current_dsp_preset); } - current_dsp_preset = NULL; + current_ctx->current_dsp_preset = NULL; } void @@ -970,7 +1036,7 @@ on_edit_dsp_presets_clicked (GtkButton *button, { GtkWidget *dlg = create_preset_list (); gtk_window_set_title (GTK_WINDOW (dlg), _("DSP Presets")); - gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (converter)); + gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (current_ctx->converter)); g_signal_connect ((gpointer)lookup_widget (dlg, "add"), "clicked", G_CALLBACK (on_dsp_preset_add), NULL); g_signal_connect ((gpointer)lookup_widget (dlg, "remove"), "clicked", G_CALLBACK (on_dsp_preset_remove), NULL); g_signal_connect ((gpointer)lookup_widget (dlg, "edit"), "clicked", G_CALLBACK (on_dsp_preset_edit), NULL); diff --git a/plugins/gtkui/deadbeef.glade b/plugins/gtkui/deadbeef.glade index 32917903..ea423884 100644 --- a/plugins/gtkui/deadbeef.glade +++ b/plugins/gtkui/deadbeef.glade @@ -6115,9 +6115,9 @@ SOCKS5_HOSTNAME</property> <property name="title" translatable="yes">Converter</property> <property name="type">GTK_WINDOW_TOPLEVEL</property> <property name="window_position">GTK_WIN_POS_NONE</property> - <property name="modal">False</property> + <property name="modal">True</property> <property name="resizable">True</property> - <property name="destroy_with_parent">False</property> + <property name="destroy_with_parent">True</property> <property name="decorated">True</property> <property name="skip_taskbar_hint">False</property> <property name="skip_pager_hint">False</property> @@ -6126,7 +6126,6 @@ SOCKS5_HOSTNAME</property> <property name="focus_on_map">True</property> <property name="urgency_hint">False</property> <property name="has_separator">False</property> - <signal name="delete_event" handler="on_converterdlg_delete_event" last_modification_time="Thu, 02 Dec 2010 20:15:41 GMT"/> <child internal-child="vbox"> <widget class="GtkVBox" id="dialog-vbox6"> @@ -6149,7 +6148,6 @@ SOCKS5_HOSTNAME</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="response_id">-6</property> - <signal name="clicked" handler="on_converter_cancel_clicked" last_modification_time="Thu, 02 Dec 2010 19:59:54 GMT"/> </widget> </child> @@ -6163,7 +6161,6 @@ SOCKS5_HOSTNAME</property> <property name="relief">GTK_RELIEF_NORMAL</property> <property name="focus_on_click">True</property> <property name="response_id">-5</property> - <signal name="clicked" handler="on_converter_ok_clicked" last_modification_time="Thu, 02 Dec 2010 19:59:57 GMT"/> </widget> </child> </widget> diff --git a/plugins/gtkui/interface.c b/plugins/gtkui/interface.c index 0e0cc76e..9b72cefe 100644 --- a/plugins/gtkui/interface.c +++ b/plugins/gtkui/interface.c @@ -3286,6 +3286,8 @@ create_converterdlg (void) converterdlg = gtk_dialog_new (); gtk_window_set_title (GTK_WINDOW (converterdlg), _("Converter")); + gtk_window_set_modal (GTK_WINDOW (converterdlg), TRUE); + gtk_window_set_destroy_with_parent (GTK_WINDOW (converterdlg), TRUE); gtk_window_set_type_hint (GTK_WINDOW (converterdlg), GDK_WINDOW_TYPE_HINT_DIALOG); gtk_dialog_set_has_separator (GTK_DIALOG (converterdlg), FALSE); @@ -3411,9 +3413,6 @@ create_converterdlg (void) gtk_dialog_add_action_widget (GTK_DIALOG (converterdlg), converter_ok, GTK_RESPONSE_OK); GTK_WIDGET_SET_FLAGS (converter_ok, GTK_CAN_DEFAULT); - g_signal_connect ((gpointer) converterdlg, "delete_event", - G_CALLBACK (on_converterdlg_delete_event), - NULL); g_signal_connect ((gpointer) converter_output_browse, "clicked", G_CALLBACK (on_converter_output_browse_clicked), NULL); @@ -3432,12 +3431,6 @@ create_converterdlg (void) g_signal_connect ((gpointer) output_format, "changed", G_CALLBACK (on_converter_output_format_changed), NULL); - g_signal_connect ((gpointer) converter_cancel, "clicked", - G_CALLBACK (on_converter_cancel_clicked), - NULL); - g_signal_connect ((gpointer) converter_ok, "clicked", - G_CALLBACK (on_converter_ok_clicked), - NULL); /* Store pointers to all widgets, for use by lookup_widget(). */ GLADE_HOOKUP_OBJECT_NO_REF (converterdlg, converterdlg, "converterdlg"); |