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,6 +48,8 @@ | ||
48 | #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS)) | 48 | #define GTK_IS_PW3270_SETTINGS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GTK_TYPE_PW3270_SETTINGS)) |
49 | #define GTK_PW3270_SETTINGS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GTK_TYPE_PW3270_SETTINGS, PW3270SettingsClass)) | 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 | typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; | 53 | typedef struct _PW3270SettingsPrivate PW3270SettingsPrivate; |
52 | 54 | ||
53 | typedef struct _PW3270Settings { | 55 | typedef struct _PW3270Settings { |
src/objects/settings/dialog.c
@@ -46,7 +46,7 @@ | @@ -46,7 +46,7 @@ | ||
46 | 46 | ||
47 | static void add(GtkContainer *container, GtkWidget *widget); | 47 | static void add(GtkContainer *container, GtkWidget *widget); |
48 | static void page_changed(GtkNotebook *notebook, GtkWidget *child, guint page_num, PW3270SettingsDialog *dialog); | 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 | static void dialog_close(GtkDialog *dialog); | 50 | static void dialog_close(GtkDialog *dialog); |
51 | static void response(GtkDialog *dialog, gint response_id); | 51 | static void response(GtkDialog *dialog, gint response_id); |
52 | 52 | ||
@@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) { | @@ -120,10 +120,45 @@ void dialog_close(GtkDialog *dialog) { | ||
120 | gtk_widget_destroy(GTK_WIDGET(dialog)); | 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 | void response(GtkDialog *dialog, gint response_id) { | 139 | void response(GtkDialog *dialog, gint response_id) { |
124 | 140 | ||
125 | debug("%s(%d)",__FUNCTION__,response_id); | 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 | gtk_widget_destroy(GTK_WIDGET(dialog)); | 162 | gtk_widget_destroy(GTK_WIDGET(dialog)); |
128 | } | 163 | } |
129 | 164 | ||
@@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) { | @@ -131,6 +166,15 @@ void add(GtkContainer *container, GtkWidget *widget) { | ||
131 | 166 | ||
132 | GtkWidget * label = NULL; | 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 | gtk_notebook_append_page( | 178 | gtk_notebook_append_page( |
135 | GTK_PW3270_SETTINGS_DIALOG(container)->tabs, | 179 | GTK_PW3270_SETTINGS_DIALOG(container)->tabs, |
136 | widget, | 180 | widget, |
@@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint | @@ -143,18 +187,13 @@ void page_changed(GtkNotebook *notebook, GtkWidget G_GNUC_UNUSED(*child), guint | ||
143 | gtk_notebook_set_show_tabs(notebook,gtk_notebook_get_n_pages(notebook) > 1); | 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 |