Commit 6cf2c5ddc1f3ce8cbf27e35b9dee15c17be72fa4
1 parent
60bd7fdd
Exists in
master
and in
2 other branches
Delaying 'gsettings' change on application preferences dialog.
Showing
7 changed files
with
53 additions
and
48 deletions
Show diff stats
src/include/pw3270/settings.h
@@ -51,19 +51,19 @@ | @@ -51,19 +51,19 @@ | ||
51 | 51 | ||
52 | GType PW3270Settings_get_type(void); | 52 | GType PW3270Settings_get_type(void); |
53 | 53 | ||
54 | - typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; | 54 | + typedef struct _PW3270SettingsPage PW3270SettingsPage; |
55 | 55 | ||
56 | typedef struct _PW3270Settings { | 56 | typedef struct _PW3270Settings { |
57 | 57 | ||
58 | GtkGrid parent; | 58 | GtkGrid parent; |
59 | 59 | ||
60 | - PW3270SettingsPrivate * settings; ///< @brief Private Data. | ||
61 | - const gchar * label; ///< @brief Page lagel. | ||
62 | - const gchar * title; ///< @brief Page title. | 60 | + PW3270SettingsPage * settings; ///< @brief Page Data. |
61 | + const gchar * label; ///< @brief Page lagel. | ||
62 | + const gchar * title; ///< @brief Page title. | ||
63 | 63 | ||
64 | - void (*load)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method to load the properties from terminal widget | ||
65 | - void (*apply)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method for GTK_RESPONSE_APPLY | ||
66 | - void (*revert)(GtkWidget *widget, PW3270SettingsPrivate *settings); ///< @brief Method for GTK_RESPONSE_CANCEL | 64 | + void (*load)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method to load the properties from terminal widget |
65 | + void (*apply)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method for GTK_RESPONSE_APPLY | ||
66 | + void (*revert)(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); ///< @brief Method for GTK_RESPONSE_CANCEL | ||
67 | 67 | ||
68 | } PW3270Settings; | 68 | } PW3270Settings; |
69 | 69 | ||
@@ -73,8 +73,10 @@ | @@ -73,8 +73,10 @@ | ||
73 | 73 | ||
74 | } PW3270SettingsClass; | 74 | } PW3270SettingsClass; |
75 | 75 | ||
76 | + /// @brief Create a new pw3270 settings. | ||
76 | PW3270Settings * pw3270_settings_new(); | 77 | PW3270Settings * pw3270_settings_new(); |
77 | 78 | ||
79 | + | ||
78 | /*--[ PW3270 Settings Dialog ]-----------------------------------------------------------------------*/ | 80 | /*--[ PW3270 Settings Dialog ]-----------------------------------------------------------------------*/ |
79 | 81 | ||
80 | #define GTK_TYPE_PW3270_SETTINGS_DIALOG (PW3270SettingsDialog_get_type()) | 82 | #define GTK_TYPE_PW3270_SETTINGS_DIALOG (PW3270SettingsDialog_get_type()) |
src/objects/actions/view.c
@@ -409,7 +409,7 @@ | @@ -409,7 +409,7 @@ | ||
409 | return g_string_free(str,FALSE); | 409 | return g_string_free(str,FALSE); |
410 | } | 410 | } |
411 | 411 | ||
412 | - static void check_4_sensitive(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gboolean *sensitive) { | 412 | + static void check_4_sensitive(GtkTreeModel *model, GtkTreePath G_GNUC_UNUSED(*path), GtkTreeIter *iter, gboolean *sensitive) { |
413 | 413 | ||
414 | GValue value = { 0, }; | 414 | GValue value = { 0, }; |
415 | gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); | 415 | gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); |
src/objects/application/application.c
@@ -417,20 +417,20 @@ | @@ -417,20 +417,20 @@ | ||
417 | // Load keypad models | 417 | // Load keypad models |
418 | // | 418 | // |
419 | { | 419 | { |
420 | -#ifdef DEBUG | ||
421 | - const gchar * keypad_path = "keypad"; | ||
422 | -#else | ||
423 | lib3270_autoptr(char) keypad_path = lib3270_build_data_filename("keypad",NULL); | 420 | lib3270_autoptr(char) keypad_path = lib3270_build_data_filename("keypad",NULL); |
424 | -#endif // DEBUG | ||
425 | 421 | ||
426 | g_autoptr(GError) error = NULL; | 422 | g_autoptr(GError) error = NULL; |
427 | g_autoptr(GDir) dir = g_dir_open(keypad_path,0,&error); | 423 | g_autoptr(GDir) dir = g_dir_open(keypad_path,0,&error); |
428 | 424 | ||
429 | - const gchar *name = g_dir_read_name(dir); | ||
430 | - while(!error && name) { | ||
431 | - g_autofree gchar * path = g_build_filename(keypad_path,name,NULL); | ||
432 | - app->keypads = pw3270_keypad_model_new_from_xml(app->keypads,path); | ||
433 | - name = g_dir_read_name(dir); | 425 | + if(dir) { |
426 | + | ||
427 | + const gchar *name = g_dir_read_name(dir); | ||
428 | + while(!error && name) { | ||
429 | + g_autofree gchar * path = g_build_filename(keypad_path,name,NULL); | ||
430 | + app->keypads = pw3270_keypad_model_new_from_xml(app->keypads,path); | ||
431 | + name = g_dir_read_name(dir); | ||
432 | + } | ||
433 | + | ||
434 | } | 434 | } |
435 | 435 | ||
436 | if(error) { | 436 | if(error) { |
src/objects/settings/dialog.c
@@ -35,6 +35,7 @@ | @@ -35,6 +35,7 @@ | ||
35 | #include <pw3270.h> | 35 | #include <pw3270.h> |
36 | #include <pw3270/settings.h> | 36 | #include <pw3270/settings.h> |
37 | #include <pw3270/actions.h> | 37 | #include <pw3270/actions.h> |
38 | + #include <pw3270/window.h> | ||
38 | #include <lib3270.h> | 39 | #include <lib3270.h> |
39 | #include <lib3270/log.h> | 40 | #include <lib3270/log.h> |
40 | 41 | ||
@@ -144,18 +145,18 @@ void dialog_close(GtkDialog *dialog) { | @@ -144,18 +145,18 @@ void dialog_close(GtkDialog *dialog) { | ||
144 | gtk_widget_destroy(GTK_WIDGET(dialog)); | 145 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
145 | } | 146 | } |
146 | 147 | ||
147 | -static void apply(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { | 148 | +static void apply(GtkWidget *widget, GSettings *settings) { |
148 | 149 | ||
149 | if(GTK_IS_PW3270_SETTINGS(widget)) { | 150 | if(GTK_IS_PW3270_SETTINGS(widget)) { |
150 | - GTK_PW3270_SETTINGS(widget)->apply(widget,GTK_PW3270_SETTINGS(widget)->settings); | 151 | + GTK_PW3270_SETTINGS(widget)->apply(widget,settings,GTK_PW3270_SETTINGS(widget)->settings); |
151 | } | 152 | } |
152 | 153 | ||
153 | } | 154 | } |
154 | 155 | ||
155 | -static void revert(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { | 156 | +static void revert(GtkWidget *widget, GSettings *settings, GtkWidget G_GNUC_UNUSED(*dialog)) { |
156 | 157 | ||
157 | if(GTK_IS_PW3270_SETTINGS(widget)) { | 158 | if(GTK_IS_PW3270_SETTINGS(widget)) { |
158 | - GTK_PW3270_SETTINGS(widget)->revert(widget,GTK_PW3270_SETTINGS(widget)->settings); | 159 | + GTK_PW3270_SETTINGS(widget)->revert(widget,settings,GTK_PW3270_SETTINGS(widget)->settings); |
159 | } | 160 | } |
160 | 161 | ||
161 | } | 162 | } |
@@ -164,12 +165,15 @@ void response(GtkDialog *dialog, gint response_id) { | @@ -164,12 +165,15 @@ void response(GtkDialog *dialog, gint response_id) { | ||
164 | 165 | ||
165 | debug("%s(%d)",__FUNCTION__,response_id); | 166 | debug("%s(%d)",__FUNCTION__,response_id); |
166 | 167 | ||
168 | + g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | ||
169 | + g_settings_delay(settings); | ||
170 | + | ||
167 | switch(response_id) { | 171 | switch(response_id) { |
168 | case GTK_RESPONSE_APPLY: | 172 | case GTK_RESPONSE_APPLY: |
169 | gtk_container_foreach( | 173 | gtk_container_foreach( |
170 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), | 174 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), |
171 | (GtkCallback) apply, | 175 | (GtkCallback) apply, |
172 | - dialog | 176 | + settings |
173 | ); | 177 | ); |
174 | break; | 178 | break; |
175 | 179 | ||
@@ -177,13 +181,15 @@ void response(GtkDialog *dialog, gint response_id) { | @@ -177,13 +181,15 @@ void response(GtkDialog *dialog, gint response_id) { | ||
177 | gtk_container_foreach( | 181 | gtk_container_foreach( |
178 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), | 182 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), |
179 | (GtkCallback) revert, | 183 | (GtkCallback) revert, |
180 | - dialog | 184 | + settings |
181 | ); | 185 | ); |
182 | break; | 186 | break; |
183 | 187 | ||
184 | } | 188 | } |
185 | 189 | ||
190 | + g_settings_apply(settings); | ||
186 | gtk_widget_destroy(GTK_WIDGET(dialog)); | 191 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
192 | + | ||
187 | } | 193 | } |
188 | 194 | ||
189 | void add(GtkContainer *container, GtkWidget *widget) { | 195 | void add(GtkContainer *container, GtkWidget *widget) { |
@@ -196,7 +202,9 @@ void add(GtkContainer *container, GtkWidget *widget) { | @@ -196,7 +202,9 @@ void add(GtkContainer *container, GtkWidget *widget) { | ||
196 | if(GTK_IS_PW3270_SETTINGS(widget)) { | 202 | if(GTK_IS_PW3270_SETTINGS(widget)) { |
197 | PW3270Settings * settings = GTK_PW3270_SETTINGS(widget); | 203 | PW3270Settings * settings = GTK_PW3270_SETTINGS(widget); |
198 | label = gtk_label_new(settings->label); | 204 | label = gtk_label_new(settings->label); |
199 | - settings->load(widget,settings->settings); | 205 | + |
206 | + g_autoptr(GSettings) gs = pw3270_application_window_settings_new(); | ||
207 | + settings->load(widget,gs,settings->settings); | ||
200 | } | 208 | } |
201 | 209 | ||
202 | gtk_widget_show(widget); | 210 | gtk_widget_show(widget); |
@@ -212,7 +220,7 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint | @@ -212,7 +220,7 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint | ||
212 | gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); | 220 | gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); |
213 | } | 221 | } |
214 | 222 | ||
215 | -void switch_page(GtkNotebook *notebook, PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { | 223 | +void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { |
216 | 224 | ||
217 | GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | 225 | GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); |
218 | 226 |
src/objects/settings/widget.c
@@ -39,9 +39,9 @@ | @@ -39,9 +39,9 @@ | ||
39 | 39 | ||
40 | G_DEFINE_TYPE(PW3270Settings, PW3270Settings, GTK_TYPE_GRID); | 40 | G_DEFINE_TYPE(PW3270Settings, PW3270Settings, GTK_TYPE_GRID); |
41 | 41 | ||
42 | - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); | ||
43 | - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); | ||
44 | - static void revert(GtkWidget *widget, PW3270SettingsPrivate *settings); | 42 | + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); |
43 | + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); | ||
44 | + static void revert(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); | ||
45 | static void finalize(GObject *object); | 45 | static void finalize(GObject *object); |
46 | 46 | ||
47 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 47 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
@@ -78,12 +78,12 @@ | @@ -78,12 +78,12 @@ | ||
78 | 78 | ||
79 | } | 79 | } |
80 | 80 | ||
81 | - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { | 81 | + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { |
82 | } | 82 | } |
83 | 83 | ||
84 | - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { | 84 | + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { |
85 | } | 85 | } |
86 | 86 | ||
87 | - void revert(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate G_GNUC_UNUSED(*settings)) { | 87 | + void revert(GtkWidget G_GNUC_UNUSED(*widget), GSettings G_GNUC_UNUSED(*settings), PW3270SettingsPage G_GNUC_UNUSED(*page)) { |
88 | } | 88 | } |
89 | 89 |
src/objects/toolbar/settings.c
@@ -35,8 +35,8 @@ | @@ -35,8 +35,8 @@ | ||
35 | #include <pw3270/window.h> | 35 | #include <pw3270/window.h> |
36 | #include <v3270/dialogs.h> | 36 | #include <v3270/dialogs.h> |
37 | 37 | ||
38 | - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); | ||
39 | - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); | 38 | + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); |
39 | + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); | ||
40 | 40 | ||
41 | /*--[ Constants ]------------------------------------------------------------------------------------*/ | 41 | /*--[ Constants ]------------------------------------------------------------------------------------*/ |
42 | 42 | ||
@@ -77,7 +77,7 @@ | @@ -77,7 +77,7 @@ | ||
77 | 77 | ||
78 | }; | 78 | }; |
79 | 79 | ||
80 | - struct _PW3270SettingsPrivate { | 80 | + struct _PW3270SettingsPage { |
81 | GtkWidget * views[2]; | 81 | GtkWidget * views[2]; |
82 | // GtkTreeModel * models[G_N_ELEMENTS(comboboxes)]; | 82 | // GtkTreeModel * models[G_N_ELEMENTS(comboboxes)]; |
83 | GtkWidget * combos[G_N_ELEMENTS(comboboxes)]; | 83 | GtkWidget * combos[G_N_ELEMENTS(comboboxes)]; |
@@ -97,7 +97,7 @@ | @@ -97,7 +97,7 @@ | ||
97 | settings->load = load; | 97 | settings->load = load; |
98 | 98 | ||
99 | // Create private data. | 99 | // Create private data. |
100 | - PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1); | 100 | + PW3270SettingsPage * page = settings->settings = g_new0(PW3270SettingsPage,1); |
101 | 101 | ||
102 | // | 102 | // |
103 | // Create views | 103 | // Create views |
@@ -222,10 +222,9 @@ | @@ -222,10 +222,9 @@ | ||
222 | return GTK_WIDGET(settings); | 222 | return GTK_WIDGET(settings); |
223 | } | 223 | } |
224 | 224 | ||
225 | - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { | 225 | + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { |
226 | 226 | ||
227 | size_t ix; | 227 | size_t ix; |
228 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | ||
229 | 228 | ||
230 | // Populate views | 229 | // Populate views |
231 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); | 230 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |
@@ -274,10 +273,9 @@ | @@ -274,10 +273,9 @@ | ||
274 | 273 | ||
275 | } | 274 | } |
276 | 275 | ||
277 | - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { | 276 | + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { |
278 | 277 | ||
279 | size_t ix; | 278 | size_t ix; |
280 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | ||
281 | 279 | ||
282 | g_autofree gchar * action_names = pw3270_action_view_get_action_names(page->views[0]); | 280 | g_autofree gchar * action_names = pw3270_action_view_get_action_names(page->views[0]); |
283 | g_settings_set_string(settings,"toolbar-action-names",action_names); | 281 | g_settings_set_string(settings,"toolbar-action-names",action_names); |
src/objects/window/header-settings.c
@@ -34,12 +34,12 @@ | @@ -34,12 +34,12 @@ | ||
34 | #include <pw3270/application.h> | 34 | #include <pw3270/application.h> |
35 | #include <v3270/dialogs.h> | 35 | #include <v3270/dialogs.h> |
36 | 36 | ||
37 | - static void load(GtkWidget *widget, PW3270SettingsPrivate *settings); | ||
38 | - static void apply(GtkWidget *widget, PW3270SettingsPrivate *settings); | 37 | + static void load(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); |
38 | + static void apply(GtkWidget *widget, GSettings *settings, PW3270SettingsPage *page); | ||
39 | 39 | ||
40 | /*--[ Constants ]------------------------------------------------------------------------------------*/ | 40 | /*--[ Constants ]------------------------------------------------------------------------------------*/ |
41 | 41 | ||
42 | - struct _PW3270SettingsPrivate { | 42 | + struct _PW3270SettingsPage { |
43 | GtkWidget * editor; | 43 | GtkWidget * editor; |
44 | /* | 44 | /* |
45 | GtkWidget * views[3]; | 45 | GtkWidget * views[3]; |
@@ -87,7 +87,7 @@ | @@ -87,7 +87,7 @@ | ||
87 | settings->load = load; | 87 | settings->load = load; |
88 | 88 | ||
89 | // Create private data. | 89 | // Create private data. |
90 | - PW3270SettingsPrivate * page = settings->settings = g_new0(PW3270SettingsPrivate,1); | 90 | + PW3270SettingsPage * page = settings->settings = g_new0(PW3270SettingsPage,1); |
91 | 91 | ||
92 | page->editor = pw3270_settings_actions_new(); | 92 | page->editor = pw3270_settings_actions_new(); |
93 | 93 | ||
@@ -102,9 +102,7 @@ | @@ -102,9 +102,7 @@ | ||
102 | return GTK_WIDGET(settings); | 102 | return GTK_WIDGET(settings); |
103 | } | 103 | } |
104 | 104 | ||
105 | - void load(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { | ||
106 | - | ||
107 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | 105 | + void load(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { |
108 | 106 | ||
109 | // Get avaliable actions. | 107 | // Get avaliable actions. |
110 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); | 108 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |
@@ -162,10 +160,9 @@ | @@ -162,10 +160,9 @@ | ||
162 | pw3270_action_list_free(action_list); | 160 | pw3270_action_list_free(action_list); |
163 | } | 161 | } |
164 | 162 | ||
165 | - void apply(GtkWidget G_GNUC_UNUSED(*widget), PW3270SettingsPrivate *page) { | 163 | + void apply(GtkWidget G_GNUC_UNUSED(*widget), GSettings *settings, PW3270SettingsPage *page) { |
166 | 164 | ||
167 | g_autofree gchar * action_names = pw3270_settings_action_get(page->editor); | 165 | g_autofree gchar * action_names = pw3270_settings_action_get(page->editor); |
168 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | ||
169 | g_settings_set_string(settings,"header-action-names",action_names); | 166 | g_settings_set_string(settings,"header-action-names",action_names); |
170 | 167 | ||
171 | } | 168 | } |