From 6cf2c5ddc1f3ce8cbf27e35b9dee15c17be72fa4 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 15 Dec 2020 22:00:30 -0300 Subject: [PATCH] Delaying 'gsettings' change on application preferences dialog. --- src/include/pw3270/settings.h | 16 +++++++++------- src/objects/actions/view.c | 2 +- src/objects/application/application.c | 18 +++++++++--------- src/objects/settings/dialog.c | 24 ++++++++++++++++-------- src/objects/settings/widget.c | 12 ++++++------ src/objects/toolbar/settings.c | 14 ++++++-------- src/objects/window/header-settings.c | 15 ++++++--------- 7 files changed, 53 insertions(+), 48 deletions(-) diff --git a/src/include/pw3270/settings.h b/src/include/pw3270/settings.h index 0000754..8eee44d 100644 --- a/src/include/pw3270/settings.h +++ b/src/include/pw3270/settings.h @@ -51,19 +51,19 @@ GType PW3270Settings_get_type(void); - typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; + typedef struct _PW3270SettingsPage PW3270SettingsPage; typedef struct _PW3270Settings { GtkGrid parent; - PW3270SettingsPrivate * settings; ///< @brief Private Data. - const gchar * label; ///< @brief Page lagel. - const gchar * title; ///< @brief Page title. + PW3270SettingsPage * settings; ///< @brief Page Data. + const gchar * label; ///< @brief Page lagel. + const gchar * title; ///< @brief Page title. - void (*load)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method to load the properties from terminal widget - void (*apply)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method for GTK_RESPONSE_APPLY - void (*revert)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method for GTK_RESPONSE_CANCEL + void (*load)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method to load the properties from terminal widget + void (*apply)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method for GTK_RESPONSE_APPLY + void (*revert)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method for GTK_RESPONSE_CANCEL } PW3270Settings; @@ -73,8 +73,10 @@ } PW3270SettingsClass; + /// @brief Create a new pw3270 settings. PW3270Settings * pw3270_settings_new(); + /*--[ PW3270 Settings Dialog ]-----------------------------------------------------------------------*/ #define GTK_TYPE_PW3270_SETTINGS_DIALOG (PW3270SettingsDialog_get_type()) diff --git a/src/objects/actions/view.c b/src/objects/actions/view.c index ac0b252..1dfcfbf 100644 --- a/src/objects/actions/view.c +++ b/src/objects/actions/view.c @@ -409,7 +409,7 @@ return g_string_free(str,FALSE); } - static void check_4_sensitive(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gboolean *sensitive) { + static void check_4_sensitive(GtkTreeModel *model, GtkTreePath G_GNUC_UNUSED(*path), GtkTreeIter *iter, gboolean *sensitive) { GValue value = { 0, }; gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); diff --git a/src/objects/application/application.c b/src/objects/application/application.c index 9c38b93..7ae388f 100644 --- a/src/objects/application/application.c +++ b/src/objects/application/application.c @@ -417,20 +417,20 @@ // Load keypad models // { -#ifdef DEBUG - const gchar * keypad_path = "keypad"; -#else lib3270_autoptr(char) keypad_path = lib3270_build_data_filename("keypad",NULL); -#endif // DEBUG g_autoptr(GError) error = NULL; g_autoptr(GDir) dir = g_dir_open(keypad_path,0,&error); - const gchar *name = g_dir_read_name(dir); - while(!error && name) { - g_autofree gchar * path = g_build_filename(keypad_path,name,NULL); - app->keypads = pw3270_keypad_model_new_from_xml(app->keypads,path); - name = g_dir_read_name(dir); + if(dir) { + + const gchar *name = g_dir_read_name(dir); + while(!error && name) { + g_autofree gchar * path = g_build_filename(keypad_path,name,NULL); + app->keypads = pw3270_keypad_model_new_from_xml(app->keypads,path); + name = g_dir_read_name(dir); + } + } if(error) { diff --git a/src/objects/settings/dialog.c b/src/objects/settings/dialog.c index 2a65971..9eb75b6 100644 --- a/src/objects/settings/dialog.c +++ b/src/objects/settings/dialog.c @@ -35,6 +35,7 @@ #include #include #include + #include #include #include @@ -144,18 +145,18 @@ void dialog_close(GtkDialog *dialog) { gtk_widget_destroy(GTK_WIDGET(dialog)); } -static void apply(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { +static void apply(GtkWidget *widget, GSettings *settings) { if(GTK_IS_PW3270_SETTINGS(widget)) { - GTK_PW3270_SETTINGS(widget)->apply(widget,GTK_PW3270_SETTINGS(widget)->settings); + GTK_PW3270_SETTINGS(widget)->apply(widget,settings,GTK_PW3270_SETTINGS(widget)->settings); } } -static void revert(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { +static void revert(GtkWidget *widget, GSettings *settings, GtkWidget G_GNUC_UNUSED(*dialog)) { if(GTK_IS_PW3270_SETTINGS(widget)) { - GTK_PW3270_SETTINGS(widget)->revert(widget,GTK_PW3270_SETTINGS(widget)->settings); + GTK_PW3270_SETTINGS(widget)->revert(widget,settings,GTK_PW3270_SETTINGS(widget)->settings); } } @@ -164,12 +165,15 @@ void response(GtkDialog *dialog, gint response_id) { debug("%s(%d)",__FUNCTION__,response_id); + g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); + g_settings_delay(settings); + switch(response_id) { case GTK_RESPONSE_APPLY: gtk_container_foreach( GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), (GtkCallback) apply, - dialog + settings ); break; @@ -177,13 +181,15 @@ void response(GtkDialog *dialog, gint response_id) { gtk_container_foreach( GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), (GtkCallback) revert, - dialog + settings ); break; } + g_settings_apply(settings); gtk_widget_destroy(GTK_WIDGET(dialog)); + } void add(GtkContainer *container, GtkWidget *widget) { @@ -196,7 +202,9 @@ void add(GtkContainer *container, GtkWidget *widget) { if(GTK_IS_PW3270_SETTINGS(widget)) { PW3270Settings * settings = GTK_PW3270_SETTINGS(widget); label = gtk_label_new(settings->label); - settings->load(widget,settings->settings); + + g_autoptr(GSettings) gs = pw3270_application_window_settings_new(); + settings->load(widget,gs,settings->settings); } gtk_widget_show(widget); @@ -212,7 +220,7 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); } -void switch_page(GtkNotebook *notebook, PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { +void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); diff --git a/src/objects/settings/widget.c b/src/objects/settings/widget.c index 65eb177..6cfe910 100644 --- a/src/objects/settings/widget.c +++ b/src/objects/settings/widget.c @@ -39,9 +39,9 @@ G_DEFINE_TYPE(PW3270Settings, PW3270Settings, GTK_TYPE_GRID); - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); - static void revert(GtkWidget *widget, PW3270SettingsPrivate *settings); + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); + static void revert(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); static void finalize(GObject *object); /*--[ Implement ]------------------------------------------------------------------------------------*/ @@ -78,12 +78,12 @@ } - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { } - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { } - void revert(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { + void revert(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { } diff --git a/src/objects/toolbar/settings.c b/src/objects/toolbar/settings.c index bf4f66b..f52b72c 100644 --- a/src/objects/toolbar/settings.c +++ b/src/objects/toolbar/settings.c @@ -35,8 +35,8 @@ #include #include - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); /*--[ Constants ]------------------------------------------------------------------------------------*/ @@ -77,7 +77,7 @@ }; - struct _PW3270SettingsPrivate { + struct _PW3270SettingsPage { GtkWidget * views[2]; // GtkTreeModel * models[G_N_ELEMENTS(comboboxes)]; GtkWidget * combos[G_N_ELEMENTS(comboboxes)]; @@ -97,7 +97,7 @@ settings->load = load; // Create private data. - PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1); + PW3270SettingsPage * page = settings->settings = g_new0(PW3270SettingsPage,1); // // Create views @@ -222,10 +222,9 @@ return GTK_WIDGET(settings); } - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { size_t ix; - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); // Populate views Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); @@ -274,10 +273,9 @@ } - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { size_t ix; - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); g_autofree gchar * action_names = pw3270_action_view_get_action_names(page->views[0]); g_settings_set_string(settings,"toolbar-action-names",action_names); diff --git a/src/objects/window/header-settings.c b/src/objects/window/header-settings.c index 1ff4e6b..539ab6c 100644 --- a/src/objects/window/header-settings.c +++ b/src/objects/window/header-settings.c @@ -34,12 +34,12 @@ #include #include - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); /*--[ Constants ]------------------------------------------------------------------------------------*/ - struct _PW3270SettingsPrivate { + struct _PW3270SettingsPage { GtkWidget * editor; /* GtkWidget * views[3]; @@ -87,7 +87,7 @@ settings->load = load; // Create private data. - PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1); + PW3270SettingsPage * page = settings->settings = g_new0(PW3270SettingsPage,1); page->editor = pw3270_settings_actions_new(); @@ -102,9 +102,7 @@ return GTK_WIDGET(settings); } - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { - - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { // Get avaliable actions. Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); @@ -162,10 +160,9 @@ pw3270_action_list_free(action_list); } - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { g_autofree gchar * action_names = pw3270_settings_action_get(page->editor); - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); g_settings_set_string(settings,"header-action-names",action_names); } -- libgit2 0.21.2