Commit 008d7136d8d2c884134987ebb412d72e447894ed
1 parent
7816d759
Exists in
master
and in
1 other branch
Fixing dialog boxes.
Showing
12 changed files
with
73 additions
and
129 deletions
Show diff stats
src/dialogs/dialog.c
... | ... | @@ -54,13 +54,10 @@ |
54 | 54 | |
55 | 55 | #elif GTK_CHECK_VERSION(3,12,0) |
56 | 56 | |
57 | - gboolean use_header; | |
58 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
59 | - | |
60 | 57 | GtkWidget * dialog = |
61 | 58 | GTK_WIDGET(g_object_new( |
62 | 59 | GTK_TYPE_DIALOG, |
63 | - "use-header-bar", (use_header ? 1 : 0), | |
60 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
64 | 61 | NULL |
65 | 62 | )); |
66 | 63 | ... | ... |
src/dialogs/load.c
... | ... | @@ -233,14 +233,11 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
233 | 233 | { |
234 | 234 | g_return_val_if_fail(GTK_IS_V3270(widget),NULL); |
235 | 235 | |
236 | - gboolean use_header; | |
237 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
238 | - | |
239 | 236 | // Create dialog |
240 | 237 | V3270LoadDialog * dialog = V3270_LOAD_DIALOG( |
241 | 238 | g_object_new( |
242 | 239 | GTK_TYPE_V3270LoadDialog, |
243 | - "use-header-bar", (use_header ? 1 : 0), | |
240 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
244 | 241 | NULL) |
245 | 242 | ); |
246 | 243 | ... | ... |
src/dialogs/popups.c
... | ... | @@ -32,6 +32,7 @@ |
32 | 32 | #include <terminal.h> |
33 | 33 | #include <v3270/dialogs.h> |
34 | 34 | #include <v3270/settings.h> |
35 | + #include <v3270/tools.h> | |
35 | 36 | #include <lib3270/popup.h> |
36 | 37 | |
37 | 38 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | ... | ... |
src/dialogs/print/settingsdialog.c
... | ... | @@ -454,13 +454,10 @@ static void V3270FTSettingsDialog_init(V3270FTSettingsDialog *widget) |
454 | 454 | |
455 | 455 | LIB3270_EXPORT GtkWidget * v3270_ft_settings_dialog_new(GtkWidget *parent) |
456 | 456 | { |
457 | - gboolean use_header; | |
458 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
459 | - | |
460 | 457 | GtkWidget * dialog = |
461 | 458 | GTK_WIDGET(g_object_new( |
462 | 459 | GTK_TYPE_V3270_FT_DIALOG, |
463 | - "use-header-bar", (use_header ? 1 : 0), | |
460 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
464 | 461 | NULL |
465 | 462 | )); |
466 | 463 | ... | ... |
src/dialogs/save/private.h
src/dialogs/save/save.c
... | ... | @@ -63,13 +63,6 @@ |
63 | 63 | |
64 | 64 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
65 | 65 | |
66 | -/* | |
67 | - static void V3270SaveDialog_finalize(V3270SaveDialog *object) | |
68 | - { | |
69 | - V3270SaveDialog *dialog = V3270_SAVE_DIALOG(object); | |
70 | - } | |
71 | -*/ | |
72 | - | |
73 | 66 | static void V3270SaveDialog_class_init(V3270SaveDialogClass G_GNUC_UNUSED(*klass)) |
74 | 67 | { |
75 | 68 | |
... | ... | @@ -78,16 +71,6 @@ |
78 | 71 | |
79 | 72 | } |
80 | 73 | |
81 | - static void cancel_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | |
82 | - { | |
83 | - gtk_dialog_response(dialog,GTK_RESPONSE_CANCEL); | |
84 | - } | |
85 | - | |
86 | - static void apply_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | |
87 | - { | |
88 | - gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); | |
89 | - } | |
90 | - | |
91 | 74 | #ifdef WIN32 |
92 | 75 | static void icon_press(GtkEntry G_GNUC_UNUSED(*entry), G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270SaveDialog *widget) |
93 | 76 | { |
... | ... | @@ -138,27 +121,42 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
138 | 121 | #endif // _WIN32 |
139 | 122 | |
140 | 123 | |
141 | - static void filename_changed(GtkEntry *entry, GtkComboBox *formats) | |
124 | + static void filename_changed(GtkEntry *entry, V3270SaveDialog *dialog) | |
142 | 125 | { |
143 | 126 | const gchar * text = gtk_entry_get_text(entry); |
127 | + GtkWidget * button = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY); | |
144 | 128 | |
145 | - if(!(text && *text)) | |
129 | + if(!(text && *text)) { | |
130 | + gtk_widget_set_sensitive(button,FALSE); | |
146 | 131 | return; |
132 | + } | |
133 | + | |
134 | + if(g_str_has_suffix(text,G_DIR_SEPARATOR_S)) { | |
135 | + gtk_widget_set_sensitive(button,FALSE); | |
136 | + return; | |
137 | + } | |
138 | + | |
139 | + g_autofree gchar * dirname = g_path_get_dirname(text); | |
140 | + g_autofree gchar * basename = g_path_get_basename(text); | |
147 | 141 | |
148 | - const gchar * extension = strrchr(text,'.'); | |
142 | + gtk_widget_set_sensitive(button,g_file_test(dirname,G_FILE_TEST_IS_DIR) && *basename && (*basename != '.')); | |
143 | + | |
144 | + debug("*************[%s]***********",basename); | |
145 | + | |
146 | + const gchar * extension = strrchr(basename,'.'); | |
149 | 147 | if(!extension) |
150 | 148 | return; |
151 | 149 | |
152 | 150 | extension++; |
153 | - const gchar * format = gtk_combo_box_get_active_id(formats); | |
151 | + const gchar * format = gtk_combo_box_get_active_id(dialog->format); | |
154 | 152 | if(*format == '.') |
155 | 153 | format++; |
156 | 154 | |
157 | 155 | if(g_ascii_strcasecmp(extension,format) == 0) |
158 | 156 | return; |
159 | 157 | |
160 | - gint column = gtk_combo_box_get_id_column(formats); | |
161 | - GtkTreeModel * model = gtk_combo_box_get_model(formats); | |
158 | + gint column = gtk_combo_box_get_id_column(dialog->format); | |
159 | + GtkTreeModel * model = gtk_combo_box_get_model(dialog->format); | |
162 | 160 | GtkTreeIter iter; |
163 | 161 | |
164 | 162 | debug("id_column=%d",column); |
... | ... | @@ -172,7 +170,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
172 | 170 | |
173 | 171 | if(g_ascii_strcasecmp(extension,id + (*id == '.' ? 1 : 0)) == 0) |
174 | 172 | { |
175 | - gtk_combo_box_set_active_iter(formats,&iter); | |
173 | + gtk_combo_box_set_active_iter(dialog->format,&iter); | |
176 | 174 | break; |
177 | 175 | } |
178 | 176 | |
... | ... | @@ -228,7 +226,6 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
228 | 226 | // Setup visual elements |
229 | 227 | // https://developer.gnome.org/hig/stable/visual-layout.html.en |
230 | 228 | GtkWidget *widget; |
231 | - GtkWidget *button; | |
232 | 229 | |
233 | 230 | GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); |
234 | 231 | gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); |
... | ... | @@ -284,9 +281,9 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
284 | 281 | gtk_widget_set_valign(widget,GTK_ALIGN_CENTER); |
285 | 282 | gtk_grid_attach(grid,widget,2,1,1,1); |
286 | 283 | |
287 | - dialog->format = gtk_combo_box_text_new(); | |
284 | + dialog->format = GTK_COMBO_BOX(gtk_combo_box_text_new()); | |
288 | 285 | |
289 | - gtk_grid_attach(grid,dialog->format,3,1,1,1); | |
286 | + gtk_grid_attach(grid,GTK_WIDGET(dialog->format),3,1,1,1); | |
290 | 287 | |
291 | 288 | for(ix=0;ix<G_N_ELEMENTS(formats);ix++) |
292 | 289 | { |
... | ... | @@ -320,7 +317,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
320 | 317 | |
321 | 318 | } |
322 | 319 | |
323 | - g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog->format); | |
320 | + g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog); | |
324 | 321 | g_signal_connect(dialog->format,"changed",G_CALLBACK(fileformat_changed),dialog->filename); |
325 | 322 | |
326 | 323 | } |
... | ... | @@ -328,41 +325,19 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
328 | 325 | |
329 | 326 | // Buttons |
330 | 327 | // https://developer.gnome.org/icon-naming-spec/ |
331 | -#ifdef _WIN32 | |
332 | - widget = NULL; | |
333 | -#elif GTK_CHECK_VERSION(3,14,0) | |
334 | - widget = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | |
335 | -#else | |
336 | - widget = NULL; | |
337 | -#endif // GTK(3,14,0) | |
338 | - | |
339 | - if(widget) | |
340 | - { | |
341 | - // Have header bar | |
342 | - button = gtk_button_new_with_mnemonic(_("_Cancel")); | |
343 | - gtk_widget_set_tooltip_markup(button,_("Click to cancel operation")); | |
344 | - gtk_header_bar_pack_start(GTK_HEADER_BAR(widget),button); | |
345 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cancel_operation),dialog); | |
346 | - | |
347 | - button = gtk_button_new_with_mnemonic(_("_Save")); | |
348 | - gtk_widget_set_tooltip_markup(button,_("Click to save file")); | |
349 | - gtk_header_bar_pack_end(GTK_HEADER_BAR(widget),button); | |
350 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(apply_operation),dialog); | |
328 | + gtk_dialog_add_buttons( | |
329 | + GTK_DIALOG (dialog), | |
330 | + _("_Cancel"), GTK_RESPONSE_CANCEL, | |
331 | + _("_Save"), GTK_RESPONSE_APPLY, | |
332 | + NULL | |
333 | + ); | |
334 | + | |
335 | + if(!v3270_dialog_get_use_header()) { | |
336 | + GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); | |
337 | + gtk_box_set_spacing(GTK_BOX(content_area),3); | |
351 | 338 | } |
352 | - else | |
353 | - { | |
354 | - gtk_box_set_spacing( | |
355 | - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), | |
356 | - 18 | |
357 | - ); | |
358 | 339 | |
359 | - gtk_dialog_add_buttons( | |
360 | - GTK_DIALOG (dialog), | |
361 | - _("_Cancel"), GTK_RESPONSE_CANCEL, | |
362 | - _("_Save"), GTK_RESPONSE_APPLY, | |
363 | - NULL | |
364 | - ); | |
365 | - } | |
340 | + gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); | |
366 | 341 | |
367 | 342 | } |
368 | 343 | |
... | ... | @@ -377,14 +352,11 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ |
377 | 352 | N_("Save copy"), |
378 | 353 | }; |
379 | 354 | |
380 | - gboolean use_header; | |
381 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
382 | - | |
383 | 355 | // Create dialog |
384 | 356 | V3270SaveDialog * dialog = V3270_SAVE_DIALOG( |
385 | 357 | g_object_new( |
386 | 358 | GTK_TYPE_V3270SaveDialog, |
387 | - "use-header-bar", (use_header ? 1 : 0), | |
359 | + "use-header-bar", v3270_dialog_get_use_header() ? 1 : 0, | |
388 | 360 | NULL) |
389 | 361 | ); |
390 | 362 | ... | ... |
src/dialogs/security.c
... | ... | @@ -215,12 +215,10 @@ |
215 | 215 | |
216 | 216 | #if GTK_CHECK_VERSION(3,12,0) |
217 | 217 | |
218 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
219 | - | |
220 | 218 | GtkWidget * dialog = |
221 | 219 | GTK_WIDGET(g_object_new( |
222 | 220 | GTK_TYPE_DIALOG, |
223 | - "use-header-bar", (use_header ? 1 : 0), | |
221 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
224 | 222 | NULL |
225 | 223 | )); |
226 | 224 | ... | ... |
src/dialogs/settings/dialog.c
... | ... | @@ -48,19 +48,6 @@ |
48 | 48 | |
49 | 49 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
50 | 50 | |
51 | -/* | |
52 | -static gboolean on_tab_focus(V3270Settings *settings, GdkEvent G_GNUC_UNUSED(*event), V3270SettingsDialog *dialog) | |
53 | -{ | |
54 | - debug("title: %s",settings->title); | |
55 | - debug("label: %s",settings->label); | |
56 | - | |
57 | - if(settings->title) | |
58 | - gtk_window_set_title(dialog,settings->title); | |
59 | - | |
60 | - return FALSE; | |
61 | -} | |
62 | -*/ | |
63 | - | |
64 | 51 | static void on_switch_page(GtkNotebook G_GNUC_UNUSED(*notebook), V3270Settings *settings, guint G_GNUC_UNUSED(page_num), V3270SettingsDialog *dialog) |
65 | 52 | { |
66 | 53 | debug("title: %s",settings->title); |
... | ... | @@ -215,15 +202,9 @@ static void V3270SettingsDialog_init(V3270SettingsDialog *dialog) |
215 | 202 | GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); |
216 | 203 | |
217 | 204 | // Get use of header bar. |
218 | -#ifndef _WIN32 | |
219 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &dialog->has_subtitle, NULL); | |
220 | -#endif // _WIN32 | |
221 | - | |
222 | - // https://developer.gnome.org/hig/stable/visual-layout.html.en | |
223 | - //gtk_box_set_spacing(GTK_BOX(content_area),18); | |
224 | - //gtk_container_set_border_width(GTK_CONTAINER(content_area),18); | |
205 | + dialog->has_subtitle = v3270_dialog_get_use_header(); | |
225 | 206 | |
226 | -// gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); | |
207 | + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE); | |
227 | 208 | gtk_window_set_destroy_with_parent(GTK_WINDOW(dialog), TRUE); |
228 | 209 | |
229 | 210 | gtk_dialog_add_buttons( |
... | ... | @@ -236,11 +217,6 @@ static void V3270SettingsDialog_init(V3270SettingsDialog *dialog) |
236 | 217 | // Create notebook for settings widgets |
237 | 218 | dialog->tabs = GTK_NOTEBOOK(gtk_notebook_new()); |
238 | 219 | |
239 | -#ifdef _WIN32 | |
240 | - gtk_widget_set_margin_bottom(GTK_WIDGET(dialog->tabs),3); | |
241 | -// gtk_notebook_set_show_border(dialog->tabs, TRUE); | |
242 | -#endif // _WIN32 | |
243 | - | |
244 | 220 | gtk_notebook_set_scrollable(dialog->tabs,TRUE); |
245 | 221 | gtk_notebook_set_show_tabs(dialog->tabs,FALSE); |
246 | 222 | g_signal_connect(G_OBJECT(dialog->tabs), "page-added", G_CALLBACK(on_page_changed), dialog); |
... | ... | @@ -248,29 +224,20 @@ static void V3270SettingsDialog_init(V3270SettingsDialog *dialog) |
248 | 224 | g_signal_connect(G_OBJECT(dialog->tabs), "switch-page", G_CALLBACK(on_switch_page), dialog); |
249 | 225 | gtk_box_pack_start(GTK_BOX(content_area),GTK_WIDGET(dialog->tabs),TRUE,TRUE,0); |
250 | 226 | |
251 | - | |
227 | + if(!dialog->has_subtitle) { | |
228 | + gtk_box_set_spacing(GTK_BOX(content_area),3); | |
229 | + gtk_widget_set_margin_bottom(content_area,3); | |
230 | + } | |
252 | 231 | } |
253 | 232 | |
254 | 233 | GtkWidget * v3270_settings_dialog_new() |
255 | 234 | { |
256 | -#ifdef _WIN32 | |
257 | - | |
258 | - GtkWidget * dialog = | |
259 | - GTK_WIDGET(g_object_new( | |
260 | - GTK_TYPE_V3270_SETTINGS_DIALOG, | |
261 | - "use-header-bar", FALSE, | |
262 | - NULL | |
263 | - )); | |
264 | - | |
265 | -#elif GTK_CHECK_VERSION(3,12,0) | |
266 | - | |
267 | - gboolean use_header; | |
268 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
235 | +#if GTK_CHECK_VERSION(3,12,0) | |
269 | 236 | |
270 | 237 | GtkWidget * dialog = |
271 | 238 | GTK_WIDGET(g_object_new( |
272 | 239 | GTK_TYPE_V3270_SETTINGS_DIALOG, |
273 | - "use-header-bar", (use_header ? 1 : 0), | |
240 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
274 | 241 | NULL |
275 | 242 | )); |
276 | 243 | ... | ... |
src/dialogs/tools.c
... | ... | @@ -216,4 +216,22 @@ |
216 | 216 | |
217 | 217 | } |
218 | 218 | |
219 | + gboolean v3270_dialog_get_use_header() { | |
220 | + | |
221 | +#ifdef DEBUG | |
222 | + return FALSE; | |
223 | +#endif // DEBUG | |
224 | + | |
225 | +#ifdef _WIN32 | |
226 | + return FALSE; | |
227 | +#elif GTK_CHECK_VERSION(3,12,0) | |
228 | + gboolean use_header; | |
229 | + g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
230 | + return use_header; | |
231 | +#else | |
232 | + return FALSE; | |
233 | +#endif // _WIN32 | |
234 | + | |
235 | + } | |
236 | + | |
219 | 237 | ... | ... |
src/dialogs/transfer.c
... | ... | @@ -126,12 +126,10 @@ LIB3270_EXPORT gint v3270_transfer_file(GtkWidget *widget, LIB3270_FT_OPTION opt |
126 | 126 | |
127 | 127 | #if GTK_CHECK_VERSION(3,12,0) |
128 | 128 | |
129 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
130 | - | |
131 | 129 | GtkWidget * dialog = |
132 | 130 | GTK_WIDGET(g_object_new( |
133 | 131 | GTK_TYPE_DIALOG, |
134 | - "use-header-bar", (use_header ? 1 : 0), | |
132 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
135 | 133 | NULL |
136 | 134 | )); |
137 | 135 | ... | ... |
src/filetransfer/v3270ft.c
... | ... | @@ -726,13 +726,10 @@ LIB3270_EXPORT GtkWidget * v3270ft_new(GtkWidget *parent) { |
726 | 726 | |
727 | 727 | #if GTK_CHECK_VERSION(3,12,0) |
728 | 728 | |
729 | - gboolean use_header; | |
730 | - g_object_get(gtk_settings_get_default(), "gtk-dialogs-use-header", &use_header, NULL); | |
731 | - | |
732 | 729 | GtkWidget * dialog = |
733 | 730 | GTK_WIDGET(g_object_new( |
734 | 731 | GTK_TYPE_V3270FT, |
735 | - "use-header-bar", (use_header ? 1 : 0), | |
732 | + "use-header-bar", (v3270_dialog_get_use_header() ? 1 : 0), | |
736 | 733 | NULL |
737 | 734 | )); |
738 | 735 | ... | ... |
src/include/internals.h
... | ... | @@ -193,6 +193,8 @@ |
193 | 193 | G_GNUC_INTERNAL GtkHeaderBar * v3270_dialog_get_header_bar(GtkWidget * widget); |
194 | 194 | #endif // ! GTK 3.12 |
195 | 195 | |
196 | + G_GNUC_INTERNAL gboolean v3270_dialog_get_use_header(); | |
197 | + | |
196 | 198 | G_GNUC_INTERNAL void v3270_grid_attach(GtkGrid *grid, const struct v3270_entry_field * description, GtkWidget *widget); |
197 | 199 | |
198 | 200 | // Toggle button widget | ... | ... |