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 | 51 | |
| 52 | 52 | GType PW3270Settings_get_type(void); |
| 53 | 53 | |
| 54 | - typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; | |
| 54 | + typedef struct _PW3270SettingsPage PW3270SettingsPage; | |
| 55 | 55 | |
| 56 | 56 | typedef struct _PW3270Settings { |
| 57 | 57 | |
| 58 | 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 | 68 | } PW3270Settings; |
| 69 | 69 | |
| ... | ... | @@ -73,8 +73,10 @@ |
| 73 | 73 | |
| 74 | 74 | } PW3270SettingsClass; |
| 75 | 75 | |
| 76 | + /// @brief Create a new pw3270 settings. | |
| 76 | 77 | PW3270Settings * pw3270_settings_new(); |
| 77 | 78 | |
| 79 | + | |
| 78 | 80 | /*--[ PW3270 Settings Dialog ]-----------------------------------------------------------------------*/ |
| 79 | 81 | |
| 80 | 82 | #define GTK_TYPE_PW3270_SETTINGS_DIALOG (PW3270SettingsDialog_get_type()) | ... | ... |
src/objects/actions/view.c
| ... | ... | @@ -409,7 +409,7 @@ |
| 409 | 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 | 414 | GValue value = { 0, }; |
| 415 | 415 | gtk_tree_model_get_value(model,iter,COLUMN_FLAGS,&value); | ... | ... |
src/objects/application/application.c
| ... | ... | @@ -417,20 +417,20 @@ |
| 417 | 417 | // Load keypad models |
| 418 | 418 | // |
| 419 | 419 | { |
| 420 | -#ifdef DEBUG | |
| 421 | - const gchar * keypad_path = "keypad"; | |
| 422 | -#else | |
| 423 | 420 | lib3270_autoptr(char) keypad_path = lib3270_build_data_filename("keypad",NULL); |
| 424 | -#endif // DEBUG | |
| 425 | 421 | |
| 426 | 422 | g_autoptr(GError) error = NULL; |
| 427 | 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 | 436 | if(error) { | ... | ... |
src/objects/settings/dialog.c
| ... | ... | @@ -35,6 +35,7 @@ |
| 35 | 35 | #include <pw3270.h> |
| 36 | 36 | #include <pw3270/settings.h> |
| 37 | 37 | #include <pw3270/actions.h> |
| 38 | + #include <pw3270/window.h> | |
| 38 | 39 | #include <lib3270.h> |
| 39 | 40 | #include <lib3270/log.h> |
| 40 | 41 | |
| ... | ... | @@ -144,18 +145,18 @@ void dialog_close(GtkDialog *dialog) { |
| 144 | 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 | 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 | 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 | 165 | |
| 165 | 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 | 171 | switch(response_id) { |
| 168 | 172 | case GTK_RESPONSE_APPLY: |
| 169 | 173 | gtk_container_foreach( |
| 170 | 174 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), |
| 171 | 175 | (GtkCallback) apply, |
| 172 | - dialog | |
| 176 | + settings | |
| 173 | 177 | ); |
| 174 | 178 | break; |
| 175 | 179 | |
| ... | ... | @@ -177,13 +181,15 @@ void response(GtkDialog *dialog, gint response_id) { |
| 177 | 181 | gtk_container_foreach( |
| 178 | 182 | GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), |
| 179 | 183 | (GtkCallback) revert, |
| 180 | - dialog | |
| 184 | + settings | |
| 181 | 185 | ); |
| 182 | 186 | break; |
| 183 | 187 | |
| 184 | 188 | } |
| 185 | 189 | |
| 190 | + g_settings_apply(settings); | |
| 186 | 191 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
| 192 | + | |
| 187 | 193 | } |
| 188 | 194 | |
| 189 | 195 | void add(GtkContainer *container, GtkWidget *widget) { |
| ... | ... | @@ -196,7 +202,9 @@ void add(GtkContainer *container, GtkWidget *widget) { |
| 196 | 202 | if(GTK_IS_PW3270_SETTINGS(widget)) { |
| 197 | 203 | PW3270Settings * settings = GTK_PW3270_SETTINGS(widget); |
| 198 | 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 | 210 | gtk_widget_show(widget); |
| ... | ... | @@ -212,7 +220,7 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint |
| 212 | 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 | 225 | GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); |
| 218 | 226 | ... | ... |
src/objects/settings/widget.c
| ... | ... | @@ -39,9 +39,9 @@ |
| 39 | 39 | |
| 40 | 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 | 45 | static void finalize(GObject *object); |
| 46 | 46 | |
| 47 | 47 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
| ... | ... | @@ -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 | 35 | #include <pw3270/window.h> |
| 36 | 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 | 41 | /*--[ Constants ]------------------------------------------------------------------------------------*/ |
| 42 | 42 | |
| ... | ... | @@ -77,7 +77,7 @@ |
| 77 | 77 | |
| 78 | 78 | }; |
| 79 | 79 | |
| 80 | - struct _PW3270SettingsPrivate { | |
| 80 | + struct _PW3270SettingsPage { | |
| 81 | 81 | GtkWidget * views[2]; |
| 82 | 82 | // GtkTreeModel * models[G_N_ELEMENTS(comboboxes)]; |
| 83 | 83 | GtkWidget * combos[G_N_ELEMENTS(comboboxes)]; |
| ... | ... | @@ -97,7 +97,7 @@ |
| 97 | 97 | settings->load = load; |
| 98 | 98 | |
| 99 | 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 | 103 | // Create views |
| ... | ... | @@ -222,10 +222,9 @@ |
| 222 | 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 | 227 | size_t ix; |
| 228 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | |
| 229 | 228 | |
| 230 | 229 | // Populate views |
| 231 | 230 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |
| ... | ... | @@ -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 | 278 | size_t ix; |
| 280 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | |
| 281 | 279 | |
| 282 | 280 | g_autofree gchar * action_names = pw3270_action_view_get_action_names(page->views[0]); |
| 283 | 281 | g_settings_set_string(settings,"toolbar-action-names",action_names); | ... | ... |
src/objects/window/header-settings.c
| ... | ... | @@ -34,12 +34,12 @@ |
| 34 | 34 | #include <pw3270/application.h> |
| 35 | 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 | 40 | /*--[ Constants ]------------------------------------------------------------------------------------*/ |
| 41 | 41 | |
| 42 | - struct _PW3270SettingsPrivate { | |
| 42 | + struct _PW3270SettingsPage { | |
| 43 | 43 | GtkWidget * editor; |
| 44 | 44 | /* |
| 45 | 45 | GtkWidget * views[3]; |
| ... | ... | @@ -87,7 +87,7 @@ |
| 87 | 87 | settings->load = load; |
| 88 | 88 | |
| 89 | 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 | 92 | page->editor = pw3270_settings_actions_new(); |
| 93 | 93 | |
| ... | ... | @@ -102,9 +102,7 @@ |
| 102 | 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 | 107 | // Get avaliable actions. |
| 110 | 108 | Pw3270ActionList * action_list = pw3270_action_list_new(GTK_APPLICATION(g_application_get_default())); |
| ... | ... | @@ -162,10 +160,9 @@ |
| 162 | 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 | 165 | g_autofree gchar * action_names = pw3270_settings_action_get(page->editor); |
| 168 | - g_autoptr(GSettings) settings = pw3270_application_window_settings_new(); | |
| 169 | 166 | g_settings_set_string(settings,"header-action-names",action_names); |
| 170 | 167 | |
| 171 | 168 | } | ... | ... |