Commit 7c91971fb6914c85f9ca34939078793934c7bd9e
1 parent
bae5af0e
Exists in
master
and in
4 other branches
Refactoring application settings dialog & related widgets as gobjects.
Showing
2 changed files
with
52 additions
and
11 deletions
Show diff stats
src/include/pw3270/settings.h
... | ... | @@ -48,6 +48,8 @@ |
48 | 48 | #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS)) |
49 | 49 | #define GTK_PW3270_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PW3270_SETTINGS, PW3270SettingsClass)) |
50 | 50 | |
51 | + GType PW3270Settings_get_type(void); | |
52 | + | |
51 | 53 | typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; |
52 | 54 | |
53 | 55 | typedef struct _PW3270Settings { | ... | ... |
src/objects/settings/dialog.c
... | ... | @@ -46,7 +46,7 @@ |
46 | 46 | |
47 | 47 | static void add(GtkContainer *container, GtkWidget *widget); |
48 | 48 | static void page_changed(GtkNotebook *notebook, GtkWidget *child, guint page_num, PW3270SettingsDialog *dialog); |
49 | - static void switch_page(GtkNotebook *notebook, GtkWidget *settings, guint page_num, PW3270SettingsDialog *dialog); | |
49 | + static void switch_page(GtkNotebook *notebook, PW3270Settings *page, guint page_num, PW3270SettingsDialog *dialog); | |
50 | 50 | static void dialog_close(GtkDialog *dialog); |
51 | 51 | static void response(GtkDialog *dialog, gint response_id); |
52 | 52 | |
... | ... | @@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) { |
120 | 120 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
121 | 121 | } |
122 | 122 | |
123 | +static void apply(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { | |
124 | + | |
125 | + if(GTK_IS_PW3270_SETTINGS(widget)) { | |
126 | + GTK_PW3270_SETTINGS(widget)->apply(widget,GTK_PW3270_SETTINGS(widget)->settings); | |
127 | + } | |
128 | + | |
129 | +} | |
130 | + | |
131 | +static void revert(GtkWidget *widget, GtkWidget G_GNUC_UNUSED(*dialog)) { | |
132 | + | |
133 | + if(GTK_IS_PW3270_SETTINGS(widget)) { | |
134 | + GTK_PW3270_SETTINGS(widget)->revert(widget,GTK_PW3270_SETTINGS(widget)->settings); | |
135 | + } | |
136 | + | |
137 | +} | |
138 | + | |
123 | 139 | void response(GtkDialog *dialog, gint response_id) { |
124 | 140 | |
125 | 141 | debug("%s(%d)",__FUNCTION__,response_id); |
126 | 142 | |
143 | + switch(response_id) { | |
144 | + case GTK_RESPONSE_APPLY: | |
145 | + gtk_container_foreach( | |
146 | + GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), | |
147 | + (GtkCallback) apply, | |
148 | + dialog | |
149 | + ); | |
150 | + break; | |
151 | + | |
152 | + case GTK_RESPONSE_CANCEL: | |
153 | + gtk_container_foreach( | |
154 | + GTK_CONTAINER(GTK_PW3270_SETTINGS_DIALOG(dialog)->tabs), | |
155 | + (GtkCallback) revert, | |
156 | + dialog | |
157 | + ); | |
158 | + break; | |
159 | + | |
160 | + } | |
161 | + | |
127 | 162 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
128 | 163 | } |
129 | 164 | |
... | ... | @@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) { |
131 | 166 | |
132 | 167 | GtkWidget * label = NULL; |
133 | 168 | |
169 | + // https://developer.gnome.org/hig/stable/visual-layout.html.en | |
170 | + gtk_container_set_border_width(GTK_CONTAINER(widget),18); | |
171 | + | |
172 | + if(GTK_IS_PW3270_SETTINGS(widget)) { | |
173 | + PW3270Settings * settings = GTK_PW3270_SETTINGS(widget); | |
174 | + label = gtk_label_new(settings->label); | |
175 | + settings->load(widget,settings->settings); | |
176 | + } | |
177 | + | |
134 | 178 | gtk_notebook_append_page( |
135 | 179 | GTK_PW3270_SETTINGS_DIALOG(container)->tabs, |
136 | 180 | widget, |
... | ... | @@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint |
143 | 187 | gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); |
144 | 188 | } |
145 | 189 | |
146 | -void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), GtkWidget *settings, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { | |
190 | +void switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), PW3270Settings *page, guint G_GNUC_UNUSED(page_num), PW3270SettingsDialog *dialog) { | |
147 | 191 | |
148 | - /* | |
149 | - debug("title: %s",settings->title); | |
150 | - debug("label: %s",settings->label); | |
192 | + GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | |
151 | 193 | |
152 | - if(dialog->has_subtitle) { | |
153 | - GtkWidget * header_bar = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | |
154 | - if(header_bar) { | |
155 | - gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar),settings->title); | |
156 | - } | |
194 | + if(header_bar) { | |
195 | + gtk_header_bar_set_subtitle(GTK_HEADER_BAR(header_bar),page->title); | |
157 | 196 | } |
158 | - */ | |
197 | + | |
159 | 198 | } |
160 | 199 | ... | ... |