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 | ... | ... |