From: phantomjinx <pha...@us...> - 2010-12-24 22:21:41
|
commit afc2179643c98b67cea36701e39d026ff9c66061 Author: phantomjinx <p.g...@ph...> Date: Fri Dec 24 22:20:25 2010 +0000 Core Preferences fixes * plugin.c * Create proper destroy function for dialogs etc ... * core_prefs.c * Reformat source file in line with other source files * Instead of destroying the dialogs, hide them so that they can be reopened * core_prefs.xml * Destroy the dialog when the parent preference notebook is destroyed * Connect gtk_widget_hide_on_delete to delete event of each dialog so that clicking the cross on the dialog hides it rather than destroys it. plugins/core_preferences/core_prefs.c | 797 ++++++++++++++----------------- plugins/core_preferences/core_prefs.h | 1 + plugins/core_preferences/core_prefs.xml | 16 + plugins/core_preferences/plugin.c | 2 +- 4 files changed, 378 insertions(+), 438 deletions(-) --- diff --git a/plugins/core_preferences/core_prefs.c b/plugins/core_preferences/core_prefs.c index 0cc6bd9..b12febd 100644 --- a/plugins/core_preferences/core_prefs.c +++ b/plugins/core_preferences/core_prefs.c @@ -39,10 +39,9 @@ static gchar *builder_path = NULL; static GtkWidget *notebook = NULL; /* - Begin types -*/ -typedef struct _ind_string -{ + Begin types + */ +typedef struct _ind_string { gint index; const gchar *string; } ind_string; @@ -51,85 +50,83 @@ typedef struct _ind_string #define COUNTOF(x) (sizeof(x) / sizeof((x)[0])) /* - Begin data + Begin data - 0: checkbox glade ID - 1: preference - 2: dependency glade IDs, comma-separated -*/ -const gchar *checkbox_map[][3] = { + 0: checkbox glade ID + 1: preference + 2: dependency glade IDs, comma-separated + */ +const gchar *checkbox_map[][3] = + { /* Music tab */ - { "background_transfer", "file_convert_background_transfer", NULL }, - { "add_subfolders", "add_recursively", NULL }, - { "allow_duplicates", "!sha1", NULL }, - { "delete_missing", "sync_delete_tracks", NULL }, - { "update_existing_track", "update_existing", NULL }, - { "include_neverplayed", "not_played_track", NULL }, + { "background_transfer", "file_convert_background_transfer", NULL }, + { "add_subfolders", "add_recursively", NULL }, + { "allow_duplicates", "!sha1", NULL }, + { "delete_missing", "sync_delete_tracks", NULL }, + { "update_existing_track", "update_existing", NULL }, + { "include_neverplayed", "not_played_track", NULL }, /* Metadata tab */ - { "read_tags", "readtags", NULL }, - { "parse_filename_tags", "parsetags", "customize_tags" }, - { "last_resort_tags", NULL, "tag_title,tag_artist,tag_album,tag_composer,tag_genre" }, - { "write_tags", "id3_write", "tag_encoding,write_tags_legacy" }, - { "write_tags_legacy", "!id3_write_id3v24", NULL }, - { "mass_modify_tags", "multi_edit", NULL }, - { "read_coverart", "coverart_apic", NULL }, - { "template_coverart", "coverart_file", "customize_coverart" }, - { "generate_video_thumbnails", "video_thumbnailer", "customize_video_thumbnailer" }, + { "read_tags", "readtags", NULL }, + { "parse_filename_tags", "parsetags", "customize_tags" }, + { "last_resort_tags", NULL, "tag_title,tag_artist,tag_album,tag_composer,tag_genre" }, + { "write_tags", "id3_write", "tag_encoding,write_tags_legacy" }, + { "write_tags_legacy", "!id3_write_id3v24", NULL }, + { "mass_modify_tags", "multi_edit", NULL }, + { "read_coverart", "coverart_apic", NULL }, + { "template_coverart", "coverart_file", "customize_coverart" }, + { "generate_video_thumbnails", "video_thumbnailer", "customize_video_thumbnailer" }, /* Feedback tab */ - { "confirm_del_tracks", NULL, "confirm_from_ipod,confirm_from_hdd,confirm_from_db" }, - { "confirm_from_ipod", "delete_ipod", NULL }, - { "confirm_from_hdd", "delete_local_file", NULL }, - { "confirm_from_db", "delete_database", NULL }, - { "confirm_del_pl", "delete_file", NULL }, - { "confirm_del_sync", "sync_confirm_delete", NULL }, - { "msg_startup", "startup_messages", NULL }, - { "msg_duplicates", "show_duplicates", NULL }, - { "msg_results", "sync_show_summary", NULL }, - { "msg_updated", "show_updated", NULL }, - { "msg_unupdated", "show_non_updated", NULL }, -}; - -const gchar *conv_checkbox_map[][3] = { - { "convert_ogg", "convert_ogg", NULL }, - { "convert_flac", "convert_flac", NULL }, - { "convert_mp3", "convert_mp3", NULL }, - { "convert_aac", "convert_m4a", NULL }, - { "convert_wav", "convert_wav", NULL }, - { "convert_mp4", "convert_mp4", NULL }, - { "display_conversion_log", "", NULL }, -}; - -ind_string tag_checkbox_map[] = { - { 0, "tag_title" }, - { 1, "tag_artist" }, - { 2, "tag_album" }, - { 3, "tag_genre" }, - { 4, "tag_composer" }, -}; - -const gchar *conv_scripts[] = { - "convert-2mp3.sh", - "convert-2m4a.sh", -}; - -ind_string conv_paths[] = { - { -1, "path_conv_ogg" }, - { -1, "path_conv_flac" }, - { TARGET_FORMAT_AAC, "path_conv_m4a" }, - { TARGET_FORMAT_MP3, "path_conv_mp3" }, - { -1, "path_conv_wav" }, - { -1, "path_conv_mp4" } -}; + { "confirm_del_tracks", NULL, "confirm_from_ipod,confirm_from_hdd,confirm_from_db" }, + { "confirm_from_ipod", "delete_ipod", NULL }, + { "confirm_from_hdd", "delete_local_file", NULL }, + { "confirm_from_db", "delete_database", NULL }, + { "confirm_del_pl", "delete_file", NULL }, + { "confirm_del_sync", "sync_confirm_delete", NULL }, + { "msg_startup", "startup_messages", NULL }, + { "msg_duplicates", "show_duplicates", NULL }, + { "msg_results", "sync_show_summary", NULL }, + { "msg_updated", "show_updated", NULL }, + { "msg_unupdated", "show_non_updated", NULL }, }; + +const gchar *conv_checkbox_map[][3] = + { + { "convert_ogg", "convert_ogg", NULL }, + { "convert_flac", "convert_flac", NULL }, + { "convert_mp3", "convert_mp3", NULL }, + { "convert_aac", "convert_m4a", NULL }, + { "convert_wav", "convert_wav", NULL }, + { "convert_mp4", "convert_mp4", NULL }, + { "display_conversion_log", "", NULL }, }; + +ind_string tag_checkbox_map[] = + { + { 0, "tag_title" }, + { 1, "tag_artist" }, + { 2, "tag_album" }, + { 3, "tag_genre" }, + { 4, "tag_composer" }, }; + +const gchar *conv_scripts[] = + { "convert-2mp3.sh", "convert-2m4a.sh", }; + +ind_string conv_paths[] = + { + { -1, "path_conv_ogg" }, + { -1, "path_conv_flac" }, + { TARGET_FORMAT_AAC, "path_conv_m4a" }, + { TARGET_FORMAT_MP3, "path_conv_mp3" }, + { -1, "path_conv_wav" }, + { -1, "path_conv_mp4" } }; static TempPrefs *temp_prefs = NULL; static GtkBuilder* builder = NULL; -static void update_checkbox_deps (GtkToggleButton *checkbox, const gchar *deps); -static void init_checkbox (GtkToggleButton *checkbox, const gchar *pref, const gchar *deps); -static gboolean tree_get_current_iter (GtkTreeView *view, GtkTreeIter *iter); +static void update_checkbox_deps(GtkToggleButton *checkbox, const gchar *deps); +static void init_checkbox(GtkToggleButton *checkbox, const gchar *pref, const gchar *deps); +static gboolean tree_get_current_iter(GtkTreeView *view, GtkTreeIter *iter); static GtkWindow *notebook_get_parent_window() { - if (! notebook) { + if (!notebook) { return NULL; } @@ -137,48 +134,43 @@ static GtkWindow *notebook_get_parent_window() { } /* - glade callback -*/ -G_MODULE_EXPORT void on_agp_track_count_value_changed (GtkSpinButton *sender, gpointer e) -{ - gint num = gtk_spin_button_get_value_as_int (sender); - prefs_set_int ("misc_track_nr", num); + glade callback + */ +G_MODULE_EXPORT void on_agp_track_count_value_changed(GtkSpinButton *sender, gpointer e) { + gint num = gtk_spin_button_get_value_as_int(sender); + prefs_set_int("misc_track_nr", num); } /* - generic glade callback, used by many checkboxes -*/ -G_MODULE_EXPORT void on_simple_checkbox_toggled (GtkToggleButton *sender, gpointer e) -{ - gboolean active = gtk_toggle_button_get_active (sender); - gchar *pref = (gchar *) g_object_get_data (G_OBJECT(sender), "pref"); - gchar *deps = (gchar *) g_object_get_data (G_OBJECT(sender), "deps"); - - if(pref) - { - if(pref[0] == '!') /* Checkbox is !preference */ + generic glade callback, used by many checkboxes + */ +G_MODULE_EXPORT void on_simple_checkbox_toggled(GtkToggleButton *sender, gpointer e) { + gboolean active = gtk_toggle_button_get_active(sender); + gchar *pref = (gchar *) g_object_get_data(G_OBJECT(sender), "pref"); + gchar *deps = (gchar *) g_object_get_data(G_OBJECT(sender), "deps"); + + if (pref) { + if (pref[0] == '!') /* Checkbox is !preference */ prefs_set_int(pref + 1, !active); else prefs_set_int(pref, active); } - update_checkbox_deps (sender, deps); + update_checkbox_deps(sender, deps); } /* - glade callback -*/ -G_MODULE_EXPORT void on_tag_checkbox_toggled (GtkToggleButton *sender, gpointer e) -{ - gint index = *(gint *) g_object_get_data (G_OBJECT(sender), "index"); - prefs_set_int_index ("tag_autoset", index, gtk_toggle_button_get_active (sender)); + glade callback + */ +G_MODULE_EXPORT void on_tag_checkbox_toggled(GtkToggleButton *sender, gpointer e) { + gint index = *(gint *) g_object_get_data(G_OBJECT(sender), "index"); + prefs_set_int_index("tag_autoset", index, gtk_toggle_button_get_active(sender)); } /* - glade callback -*/ -G_MODULE_EXPORT void on_browse_button_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_browse_button_clicked(GtkButton *sender, gpointer e) { GtkWidget *dialog; gchar *base, *args, *path; const gchar *space, *current; @@ -186,287 +178,246 @@ G_MODULE_EXPORT void on_browse_button_clicked (GtkButton *sender, gpointer e) g_return_if_fail (entry); - dialog = gtk_file_chooser_dialog_new (_("Browse"), - GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sender))), - GTK_FILE_CHOOSER_ACTION_OPEN, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, - NULL); - + dialog + = gtk_file_chooser_dialog_new(_("Browse"), GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (sender))), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); - current = gtk_entry_get_text (entry); + current = gtk_entry_get_text(entry); /* separate filename from command line arguments */ - space = strchr (current, ' '); - if (space) - { - base = g_strndup (current, space-current); - args = g_strdup (space); + space = strchr(current, ' '); + if (space) { + base = g_strndup(current, space - current); + args = g_strdup(space); } - else - { - base = g_strdup (current); + else { + base = g_strdup(current); args = NULL; } - path = g_find_program_in_path (base); + path = g_find_program_in_path(base); - if (path) - { - gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (dialog), path); + if (path) { + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER (dialog), path); } - else - { - gchar *dir = g_path_get_dirname (base); - if (dir) - { - if (g_file_test (dir, G_FILE_TEST_IS_DIR) && g_path_is_absolute (dir)) - { - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), - dir); - } + else { + gchar *dir = g_path_get_dirname(base); + if (dir) { + if (g_file_test(dir, G_FILE_TEST_IS_DIR) && g_path_is_absolute(dir)) { + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (dialog), dir); + } } - g_free (dir); + g_free(dir); } - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) - { - gchar *filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); - if (args) - { /* add args to filename */ - gchar *new = g_strdup_printf ("%s%s", filename, args); - gtk_entry_set_text (entry, new); - g_free (new); + if (gtk_dialog_run(GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { + gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER (dialog)); + if (args) { /* add args to filename */ + gchar *new = g_strdup_printf("%s%s", filename, args); + gtk_entry_set_text(entry, new); + g_free(new); } - else - { - gtk_entry_set_text (entry, filename); + else { + gtk_entry_set_text(entry, filename); } - g_free (filename); + g_free(filename); } - gtk_widget_destroy (GTK_WIDGET (dialog)); + gtk_widget_destroy(GTK_WIDGET (dialog)); - g_free (base); - g_free (path); - g_free (args); + g_free(base); + g_free(path); + g_free(args); } /* - glade callback -*/ -G_MODULE_EXPORT void on_unsetdeps_checkbox_toggled (GtkToggleButton *sender, gpointer e) -{ - if(builder && !gtk_toggle_button_get_active (sender)) - { + glade callback + */ +G_MODULE_EXPORT void on_unsetdeps_checkbox_toggled(GtkToggleButton *sender, gpointer e) { + if (builder && !gtk_toggle_button_get_active(sender)) { int i; - const gchar *deps = (gchar *) g_object_get_data (G_OBJECT(sender), "deps"); - gchar **deparray = g_strsplit (deps, ",", 0); + const gchar *deps = (gchar *) g_object_get_data(G_OBJECT(sender), "deps"); + gchar **deparray = g_strsplit(deps, ",", 0); - for(i = 0; deparray[i]; i++) - { + for (i = 0; deparray[i]; i++) { GtkWidget *dep = GTK_WIDGET(gtk_builder_get_object(builder, deparray[i])); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (dep), FALSE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (dep), FALSE); } - g_strfreev (deparray); + g_strfreev(deparray); } /* and then call the default handler */ - on_simple_checkbox_toggled (sender, e); + on_simple_checkbox_toggled(sender, e); } /* - glade callback -*/ -G_MODULE_EXPORT void open_encoding_dialog (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void open_encoding_dialog(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object (builder, "prefs_encoding_dialog")); GtkWidget *combo = GTK_WIDGET(gtk_builder_get_object (builder, "encoding_combo")); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - init_checkbox (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "use_encoding_for_update")), - "update_charset", NULL); + init_checkbox(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "use_encoding_for_update")), "update_charset", NULL); - init_checkbox (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "use_encoding_for_writing")), - "write_charset", NULL); + init_checkbox(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "use_encoding_for_writing")), "write_charset", NULL); - charset_init_combo_box (GTK_COMBO_BOX (combo)); + charset_init_combo_box(GTK_COMBO_BOX (combo)); gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } /* - glade callback -*/ -G_MODULE_EXPORT void on_encoding_combo_changed (GtkComboBox *sender, gpointer e) -{ - gchar *description = gtk_combo_box_get_active_text (sender); - gchar *charset = charset_from_description (description); + glade callback + */ +G_MODULE_EXPORT void on_encoding_combo_changed(GtkComboBox *sender, gpointer e) { + gchar *description = gtk_combo_box_get_active_text(sender); + gchar *charset = charset_from_description(description); - prefs_set_string ("charset", charset); - g_free (charset); + prefs_set_string("charset", charset); + g_free(charset); } /* - glade callback -*/ -G_MODULE_EXPORT void on_customize_tags_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_customize_tags_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object (builder, "prefs_tag_parse_dialog")); gchar *temp = prefs_get_string("parsetags_template"); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - if(temp) - { - gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (builder, "filename_pattern")), - temp); + if (temp) { + gtk_entry_set_text(GTK_ENTRY (gtk_builder_get_object (builder, "filename_pattern")), temp); - g_free (temp); + g_free(temp); } - init_checkbox (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "overwrite_tags")), - "parsetags_overwrite", NULL); + init_checkbox(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, "overwrite_tags")), "parsetags_overwrite", NULL); gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } /* - glade callback -*/ -G_MODULE_EXPORT void on_filename_pattern_changed (GtkEditable *sender, gpointer e) -{ - prefs_set_string ("parsetags_template", gtk_entry_get_text (GTK_ENTRY (sender))); + glade callback + */ +G_MODULE_EXPORT void on_filename_pattern_changed(GtkEditable *sender, gpointer e) { + prefs_set_string("parsetags_template", gtk_entry_get_text(GTK_ENTRY (sender))); } /* - glade callback -*/ -G_MODULE_EXPORT void on_customize_coverart_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_customize_coverart_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object (builder, "prefs_coverart_dialog")); gchar *temp = prefs_get_string("coverart_template"); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - if(temp) - { - gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (builder, "coverart_pattern")), - temp); + if (temp) { + gtk_entry_set_text(GTK_ENTRY (gtk_builder_get_object (builder, "coverart_pattern")), temp); - g_free (temp); + g_free(temp); } gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } /* - glade callback -*/ -G_MODULE_EXPORT void on_customize_video_thumbnailer_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_customize_video_thumbnailer_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object (builder, "prefs_video_thumbnailer_dialog")); gchar *temp = prefs_get_string("video_thumbnailer_prog"); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - if(temp) - { - gtk_entry_set_text (GTK_ENTRY (gtk_builder_get_object (builder, "video_thumbnailer")), - temp); + if (temp) { + gtk_entry_set_text(GTK_ENTRY (gtk_builder_get_object (builder, "video_thumbnailer")), temp); - g_free (temp); + g_free(temp); } gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } - /* - glade callback -*/ -G_MODULE_EXPORT void on_coverart_pattern_changed (GtkEditable *sender, gpointer e) -{ - prefs_set_string ("coverart_template", gtk_entry_get_text (GTK_ENTRY (sender))); + glade callback + */ +G_MODULE_EXPORT void on_coverart_pattern_changed(GtkEditable *sender, gpointer e) { + prefs_set_string("coverart_template", gtk_entry_get_text(GTK_ENTRY (sender))); } /* - glade callback -*/ -G_MODULE_EXPORT void on_video_thumbnailer_changed (GtkEditable *sender, gpointer e) -{ - prefs_set_string ("video_thumbnailer_prog", gtk_entry_get_text (GTK_ENTRY (sender))); + glade callback + */ +G_MODULE_EXPORT void on_video_thumbnailer_changed(GtkEditable *sender, gpointer e) { + prefs_set_string("video_thumbnailer_prog", gtk_entry_get_text(GTK_ENTRY (sender))); } /* - glade callback -*/ -G_MODULE_EXPORT void on_exclusions_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_exclusions_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object (builder, "prefs_exclusions_dialog")); GtkWidget *tree = GTK_WIDGET(gtk_builder_get_object (builder, "exclusion_list")); - GtkListStore *store = gtk_list_store_new (1, G_TYPE_STRING); - GtkTreeViewColumn *column = gtk_tree_view_column_new (); - GtkCellRenderer *renderer = gtk_cell_renderer_text_new (); + GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING); + GtkTreeViewColumn *column = gtk_tree_view_column_new(); + GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gchar *temp = prefs_get_string("exclude_file_mask"); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - if (temp) - { + if (temp) { gint i; - gchar **masks = g_strsplit (temp, ";", 0); + gchar **masks = g_strsplit(temp, ";", 0); GtkTreeIter iter; - g_free (temp); + g_free(temp); - for (i = 0; masks[i]; i++) - { - gtk_list_store_append (store, &iter); + for (i = 0; masks[i]; i++) { + gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, masks[i], -1); } - g_strfreev (masks); + g_strfreev(masks); } - gtk_tree_view_column_pack_start (column, renderer, TRUE); - gtk_tree_view_column_set_attributes (column, renderer, "text", 0, NULL); - gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); - gtk_tree_view_set_model (GTK_TREE_VIEW (tree), GTK_TREE_MODEL (store)); - g_object_unref (store); + gtk_tree_view_column_pack_start(column, renderer, TRUE); + gtk_tree_view_column_set_attributes(column, renderer, "text", 0, NULL); + gtk_tree_view_append_column(GTK_TREE_VIEW (tree), column); + gtk_tree_view_set_model(GTK_TREE_VIEW (tree), GTK_TREE_MODEL (store)); + g_object_unref(store); gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } -static gboolean tree_get_current_iter (GtkTreeView *view, GtkTreeIter *iter) -{ - GtkTreeModel *model = gtk_tree_view_get_model (view); +static gboolean tree_get_current_iter(GtkTreeView *view, GtkTreeIter *iter) { + GtkTreeModel *model = gtk_tree_view_get_model(view); GtkTreePath *path; - gtk_tree_view_get_cursor (view, &path, NULL); + gtk_tree_view_get_cursor(view, &path, NULL); if (!path) return FALSE; - gtk_tree_model_get_iter (model, iter, path); - gtk_tree_path_free (path); + gtk_tree_model_get_iter(model, iter, path); + gtk_tree_path_free(path); return TRUE; } -static void update_exclusions (GtkListStore *store) -{ +static void update_exclusions(GtkListStore *store) { GtkTreeModel *model = GTK_TREE_MODEL (store); - gint rows = gtk_tree_model_iter_n_children (model, NULL); + gint rows = gtk_tree_model_iter_n_children(model, NULL); gchar **array = g_new (gchar *, rows + 1); gchar *temp; gint i; @@ -474,312 +425,274 @@ static void update_exclusions (GtkListStore *store) array[rows] = NULL; - for (i = 0; i < rows; i++) - { - gtk_tree_model_iter_nth_child (model, &iter, NULL, i); - gtk_tree_model_get (model, &iter, 0, array + i, -1); + for (i = 0; i < rows; i++) { + gtk_tree_model_iter_nth_child(model, &iter, NULL, i); + gtk_tree_model_get(model, &iter, 0, array + i, -1); } - temp = g_strjoinv (";", array); - prefs_set_string ("exclude_file_mask", temp); - g_free (temp); - g_strfreev (array); + temp = g_strjoinv(";", array); + prefs_set_string("exclude_file_mask", temp); + g_free(temp); + g_strfreev(array); } /* - glade callback -*/ -G_MODULE_EXPORT void on_add_exclusion_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_add_exclusion_clicked(GtkButton *sender, gpointer e) { GtkWidget *tree = GTK_WIDGET(gtk_builder_get_object(builder, "exclusion_list")); GtkWidget *entry = GTK_WIDGET(gtk_builder_get_object(builder, "new_exclusion")); - const gchar *text = gtk_entry_get_text (GTK_ENTRY (entry)); + const gchar *text = gtk_entry_get_text(GTK_ENTRY (entry)); - if (text && text[0]) - { + if (text && text[0]) { GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (tree))); GtkTreeIter iter; - gtk_list_store_append (store, &iter); + gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, text, -1); - gtk_entry_set_text (GTK_ENTRY (entry), ""); + gtk_entry_set_text(GTK_ENTRY (entry), ""); - update_exclusions (store); + update_exclusions(store); } } /* - glade callback -*/ -G_MODULE_EXPORT void on_remove_exclusion_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_remove_exclusion_clicked(GtkButton *sender, gpointer e) { GtkWidget *tree = GTK_WIDGET(gtk_builder_get_object(builder, "exclusion_list")); GtkListStore *store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (tree))); - GtkTreeIter iter; + GtkTreeIter iter; - if(!tree_get_current_iter (GTK_TREE_VIEW (tree), &iter) || gtk_list_store_iter_is_valid (store, &iter)) - { - gtk_list_store_remove (store, &iter); - update_exclusions (store); + if (!tree_get_current_iter(GTK_TREE_VIEW (tree), &iter) || gtk_list_store_iter_is_valid(store, &iter)) { + gtk_list_store_remove(store, &iter); + update_exclusions(store); } } -static void cmd_setup_widget (const gchar *entry_name, const gchar *envname, const gchar *browse_name) -{ +static void cmd_setup_widget(const gchar *entry_name, const gchar *envname, const gchar *browse_name) { GtkWidget *entry = GTK_WIDGET(gtk_builder_get_object(builder, entry_name)); - gchar *temp = prefs_get_string (envname); - if (!temp) - { - temp = g_strdup (""); + gchar *temp = prefs_get_string(envname); + if (!temp) { + temp = g_strdup(""); } - gtk_entry_set_text (GTK_ENTRY (entry), temp); - g_free (temp); + gtk_entry_set_text(GTK_ENTRY (entry), temp); + g_free(temp); - g_object_set_data (G_OBJECT (entry), "envname", (gpointer)envname); - g_object_set_data (G_OBJECT (gtk_builder_get_object(builder, browse_name)), - "entry", entry); + g_object_set_data(G_OBJECT (entry), "envname", (gpointer) envname); + g_object_set_data(G_OBJECT (gtk_builder_get_object(builder, browse_name)), "entry", entry); } - /* - glade callback -*/ -G_MODULE_EXPORT void on_normalization_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_normalization_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object(builder, "prefs_normalization_dialog")); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - cmd_setup_widget ("cmd_mp3gain", "path_mp3gain", "browse_mp3gain"); - cmd_setup_widget ("cmd_aacgain", "path_aacgain", "browse_aacgain"); + cmd_setup_widget("cmd_mp3gain", "path_mp3gain", "browse_mp3gain"); + cmd_setup_widget("cmd_aacgain", "path_aacgain", "browse_aacgain"); gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } /* - glade callback -*/ -G_MODULE_EXPORT void on_cmd_entry_changed (GtkEditable *sender, gpointer e) -{ - const gchar *envname = g_object_get_data (G_OBJECT (sender), "envname"); + glade callback + */ +G_MODULE_EXPORT void on_cmd_entry_changed(GtkEditable *sender, gpointer e) { + const gchar *envname = g_object_get_data(G_OBJECT (sender), "envname"); - prefs_set_string (envname, gtk_entry_get_text (GTK_ENTRY (sender))); + prefs_set_string(envname, gtk_entry_get_text(GTK_ENTRY (sender))); } /* - glade callback -*/ -G_MODULE_EXPORT void on_conversion_settings_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_conversion_settings_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object(builder, "prefs_conversion_dialog")); - gchar *temp = prefs_get_string ("file_convert_cachedir"); + gchar *temp = prefs_get_string("file_convert_cachedir"); gint i; - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - if(temp) - { - gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (gtk_builder_get_object(builder, "cache_folder")), - temp); - - g_free (temp); + if (temp) { + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER (gtk_builder_get_object(builder, "cache_folder")), temp); + g_free(temp); } - gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "bg_threads")), - prefs_get_int("file_convert_max_threads_num")); - - gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "cache_size")), - prefs_get_int("file_convert_maxdirsize")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "bg_threads")), prefs_get_int("file_convert_max_threads_num")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "cache_size")), prefs_get_int("file_convert_maxdirsize")); - for (i = 0; i < COUNTOF(conv_checkbox_map); i++) - { - init_checkbox (GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder, conv_checkbox_map[i][0])), - conv_checkbox_map[i][1], conv_checkbox_map[i][2]); + for (i = 0; i < COUNTOF(conv_checkbox_map); i++) { + init_checkbox(GTK_TOGGLE_BUTTON (gtk_builder_get_object(builder, conv_checkbox_map[i][0])), conv_checkbox_map[i][1], conv_checkbox_map[i][2]); } gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); - file_convert_prefs_changed (); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); + file_convert_prefs_changed(); } /* - glade callback -*/ -G_MODULE_EXPORT void on_cache_folder_current_folder_changed (GtkFileChooser *sender, gpointer e) -{ - prefs_set_string ("file_convert_cachedir", - gtk_file_chooser_get_current_folder (GTK_FILE_CHOOSER (sender))); + glade callback + */ +G_MODULE_EXPORT void on_cache_folder_current_folder_changed(GtkFileChooser *sender, gpointer e) { + prefs_set_string("file_convert_cachedir", gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER (sender))); } /* - glade callback -*/ -G_MODULE_EXPORT void on_bg_threads_value_changed (GtkSpinButton *sender, gpointer e) -{ - prefs_set_int ("file_convert_max_threads_num", gtk_spin_button_get_value_as_int (sender)); + glade callback + */ +G_MODULE_EXPORT void on_bg_threads_value_changed(GtkSpinButton *sender, gpointer e) { + prefs_set_int("file_convert_max_threads_num", gtk_spin_button_get_value_as_int(sender)); } /* - glade callback -*/ -G_MODULE_EXPORT void on_cache_size_value_changed (GtkSpinButton *sender, gpointer e) -{ - prefs_set_int ("file_convert_maxdirsize", gtk_spin_button_get_value_as_int (sender)); + glade callback + */ +G_MODULE_EXPORT void on_cache_size_value_changed(GtkSpinButton *sender, gpointer e) { + prefs_set_int("file_convert_maxdirsize", gtk_spin_button_get_value_as_int(sender)); } /* - glade callback -*/ -G_MODULE_EXPORT void on_target_format_changed (GtkComboBox *sender, gpointer e) -{ - gint index = gtk_combo_box_get_active (sender); - gchar *script = g_build_filename (get_script_dir(), conv_scripts[index], NULL); + glade callback + */ +G_MODULE_EXPORT void on_target_format_changed(GtkComboBox *sender, gpointer e) { + gint index = gtk_combo_box_get_active(sender); + gchar *script = g_build_filename(get_script_dir(), conv_scripts[index], NULL); gint i; - for (i = 0; i < COUNTOF (conv_paths); i++) - { - if (conv_paths[i].index == index) - { + for (i = 0; i < COUNTOF (conv_paths); i++) { + if (conv_paths[i].index == index) { /* - The source format is the same as the target format - - we set "null conversion" without touching the boolean preference - */ - prefs_set_string (conv_paths[i].string, ""); + The source format is the same as the target format - + we set "null conversion" without touching the boolean preference + */ + prefs_set_string(conv_paths[i].string, ""); } else - prefs_set_string (conv_paths[i].string, script); + prefs_set_string(conv_paths[i].string, script); } - prefs_set_int ("conversion_target_format", index); - g_free (script); - file_convert_prefs_changed (); + prefs_set_int("conversion_target_format", index); + g_free(script); + file_convert_prefs_changed(); } /* - glade callback -*/ -G_MODULE_EXPORT void on_replaygain_clicked (GtkButton *sender, gpointer e) -{ + glade callback + */ +G_MODULE_EXPORT void on_replaygain_clicked(GtkButton *sender, gpointer e) { GtkWidget *dlg = GTK_WIDGET(gtk_builder_get_object(builder, "prefs_replaygain_dialog")); GtkWidget *mode_album_radio = GTK_WIDGET(gtk_builder_get_object(builder, "mode_album")); GtkWidget *mode_track_radio = GTK_WIDGET(gtk_builder_get_object(builder, "mode_track")); - gtk_window_set_transient_for (GTK_WINDOW (dlg), notebook_get_parent_window()); + gtk_window_set_transient_for(GTK_WINDOW (dlg), notebook_get_parent_window()); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "replaygain_offset")), prefs_get_int("replaygain_offset")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON (gtk_builder_get_object(builder, "replaygain_offset")), prefs_get_int("replaygain_offset")); - if(prefs_get_int("replaygain_mode_album_priority")) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mode_album_radio), TRUE); + if (prefs_get_int("replaygain_mode_album_priority")) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (mode_album_radio), TRUE); else - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (mode_track_radio), TRUE); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (mode_track_radio), TRUE); gtk_builder_connect_signals(builder, NULL); - gtk_dialog_run (GTK_DIALOG (dlg)); - gtk_widget_destroy (dlg); + gtk_dialog_run(GTK_DIALOG (dlg)); + gtk_widget_hide(dlg); } /* - glade callback -*/ -G_MODULE_EXPORT void on_replaygain_mode_album_toggled (GtkToggleButton *sender, gpointer e) -{ - gboolean active = gtk_toggle_button_get_active (sender); + glade callback + */ +G_MODULE_EXPORT void on_replaygain_mode_album_toggled(GtkToggleButton *sender, gpointer e) { + gboolean active = gtk_toggle_button_get_active(sender); - prefs_set_int ("replaygain_mode_album_priority", active); + prefs_set_int("replaygain_mode_album_priority", active); } /* - glade callback -*/ -G_MODULE_EXPORT void on_replaygain_offset_value_changed (GtkSpinButton *sender, gpointer e) -{ - prefs_set_int ("replaygain_offset", gtk_spin_button_get_value_as_int (sender)); + glade callback + */ +G_MODULE_EXPORT void on_replaygain_offset_value_changed(GtkSpinButton *sender, gpointer e) { + prefs_set_int("replaygain_offset", gtk_spin_button_get_value_as_int(sender)); } -static void update_checkbox_deps (GtkToggleButton *checkbox, const gchar *deps) -{ +static void update_checkbox_deps(GtkToggleButton *checkbox, const gchar *deps) { /* Enable or disable dependent checkboxes */ - gboolean active = gtk_toggle_button_get_active (checkbox); + gboolean active = gtk_toggle_button_get_active(checkbox); gchar **deparray; int i; - if(!builder || !deps) + if (!builder || !deps) return; - deparray = g_strsplit (deps, ",", 0); + deparray = g_strsplit(deps, ",", 0); - for(i = 0; deparray[i]; i++) - { - GtkWidget *dep = GTK_WIDGET(gtk_builder_get_object(builder, deparray[i])); - gtk_widget_set_sensitive (dep, active); + for (i = 0; deparray[i]; i++) { + GtkWidget *dep = GTK_WIDGET(gtk_builder_get_object(builder, deparray[i])); + gtk_widget_set_sensitive(dep, active); } - g_strfreev (deparray); + g_strfreev(deparray); } -static void init_checkbox (GtkToggleButton *checkbox, const gchar *pref, const gchar *deps) -{ +static void init_checkbox(GtkToggleButton *checkbox, const gchar *pref, const gchar *deps) { g_object_set_data(G_OBJECT(checkbox), "pref", (gchar *) pref); g_object_set_data(G_OBJECT(checkbox), "deps", (gchar *) deps); - if(pref) - { - if(pref[0] == '!') /* Checkbox is !preference */ + if (pref) { + if (pref[0] == '!') /* Checkbox is !preference */ gtk_toggle_button_set_active(checkbox, !prefs_get_int(pref + 1)); else gtk_toggle_button_set_active(checkbox, prefs_get_int(pref)); } - update_checkbox_deps (checkbox, deps); + update_checkbox_deps(checkbox, deps); } -static void setup_values () -{ +static void setup_values() { gint i; GtkWidget *skip_track_update_radio = GTK_WIDGET(gtk_builder_get_object (builder, "skip_track_update")); - gtk_spin_button_set_value (GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "agp_track_count")), - prefs_get_int("misc_track_nr")); + gtk_spin_button_set_value(GTK_SPIN_BUTTON (gtk_builder_get_object (builder, "agp_track_count")), prefs_get_int("misc_track_nr")); /* Check boxes */ - for (i = 0; i < COUNTOF(checkbox_map); i++) - { - init_checkbox (GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, checkbox_map[i][0])), - checkbox_map[i][1], checkbox_map[i][2]); + for (i = 0; i < COUNTOF(checkbox_map); i++) { + init_checkbox(GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, checkbox_map[i][0])), checkbox_map[i][1], checkbox_map[i][2]); } - for (i = 0; i < COUNTOF(tag_checkbox_map); i++) - { + for (i = 0; i < COUNTOF(tag_checkbox_map); i++) { GtkWidget *widget = GTK_WIDGET(gtk_builder_get_object (builder, tag_checkbox_map[i].string)); - g_object_set_data (G_OBJECT (widget), "index", &tag_checkbox_map[i].index); + g_object_set_data(G_OBJECT (widget), "index", &tag_checkbox_map[i].index); - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (widget), - prefs_get_int_index ("tag_autoset", tag_checkbox_map[i].index)); + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (widget), prefs_get_int_index("tag_autoset", tag_checkbox_map[i].index)); } - if(!prefs_get_int("update_existing")) - gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (skip_track_update_radio), TRUE); + if (!prefs_get_int("update_existing")) + gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON (skip_track_update_radio), TRUE); - gtk_combo_box_set_active (GTK_COMBO_BOX (gtk_builder_get_object (builder, "target_format")), - prefs_get_int ("conversion_target_format")); + gtk_combo_box_set_active(GTK_COMBO_BOX (gtk_builder_get_object (builder, "target_format")), prefs_get_int("conversion_target_format")); } static GtkWidget *create_preference_notebook() { - GError* error = NULL; GtkWidget *notebook; + GError* error = NULL; + + g_return_val_if_fail(builder_path, NULL); builder = gtk_builder_new(); gtk_builder_add_from_file(builder, builder_path, &error); if (error) { - g_warning("Could not load settings preferences: %s", error->message); + g_warning("Failed to load core preferences component because '%s'", error->message); g_error_free(error); return NULL; } + notebook = GTK_WIDGET (gtk_builder_get_object (builder, "settings_notebook")); GtkWidget *parent = gtk_widget_get_parent(notebook); g_object_ref(notebook); @@ -797,8 +710,18 @@ GtkWidget *init_settings_preferences(gchar *builder_file_path) { builder_path = builder_file_path; temp_prefs = temp_prefs_create(); - temp_prefs_copy_prefs (temp_prefs); + temp_prefs_copy_prefs(temp_prefs); notebook = create_preference_notebook(); return notebook; } + +void destroy_settings_preferences() { + if (notebook) + gtk_widget_destroy(notebook); + + if (builder) + g_object_unref(builder); + + builder_path = NULL; +} diff --git a/plugins/core_preferences/core_prefs.h b/plugins/core_preferences/core_prefs.h index 3494ead..a9e7a2b 100644 --- a/plugins/core_preferences/core_prefs.h +++ b/plugins/core_preferences/core_prefs.h @@ -37,5 +37,6 @@ #include <gtk/gtk.h> GtkWidget *init_settings_preferences(); +void destroy_settings_preferences(); #endif diff --git a/plugins/core_preferences/core_prefs.xml b/plugins/core_preferences/core_prefs.xml index 9d378fa..ef341be 100644 --- a/plugins/core_preferences/core_prefs.xml +++ b/plugins/core_preferences/core_prefs.xml @@ -66,9 +66,11 @@ <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox7"> <property name="visible">True</property> @@ -209,9 +211,11 @@ <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox8"> <property name="visible">True</property> @@ -337,9 +341,11 @@ Example: <i>%a - %A/%T %t.mp3;%t.wav</i>. <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox10"> <property name="visible">True</property> @@ -455,9 +461,11 @@ Examples: <property name="resizable">False</property> <property name="modal">True</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox17"> <property name="visible">True</property> @@ -558,9 +566,11 @@ Examples: <property name="modal">True</property> <property name="window_position">center-on-parent</property> <property name="default_height">350</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox11"> <property name="visible">True</property> @@ -710,9 +720,11 @@ Examples: <property name="border_width">5</property> <property name="resizable">False</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox13"> <property name="visible">True</property> @@ -981,9 +993,11 @@ Examples: <property name="title" translatable="yes">Conversion Preferences</property> <property name="resizable">False</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="skip_taskbar_hint">True</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox14"> <property name="visible">True</property> @@ -1418,8 +1432,10 @@ Examples: <property name="title" translatable="yes">ReplayGain Preferences</property> <property name="resizable">False</property> <property name="window_position">center-on-parent</property> + <property name="destroy_with_parent">True</property> <property name="type_hint">dialog</property> <property name="has_separator">False</property> + <signal name="delete_event" handler="gtk_widget_hide_on_delete"/> <child internal-child="vbox"> <object class="GtkVBox" id="dialog-vbox19"> <property name="visible">True</property> diff --git a/plugins/core_preferences/plugin.c b/plugins/core_preferences/plugin.c index daf0096..ea68aee 100644 --- a/plugins/core_preferences/plugin.c +++ b/plugins/core_preferences/plugin.c @@ -130,7 +130,7 @@ static void ipreferences_merge(IAnjutaPreferences* ipref, AnjutaPreferences* pre static void ipreferences_unmerge(IAnjutaPreferences* ipref, AnjutaPreferences* prefs, GError** e) { anjuta_preferences_remove_page(prefs, _("Settings")); CorePrefsPlugin* prefs_plugin = GTKPOD_CORE_PREFS_PLUGIN(ipref); - gtk_widget_destroy(prefs_plugin->prefs); + destroy_settings_preferences(); } static void ipreferences_iface_init(IAnjutaPreferencesIface* iface) { |