Commit 008d7136d8d2c884134987ebb412d72e447894ed

Authored by Perry Werneck
1 parent 7816d759
Exists in master and in 1 other branch develop

Fixing dialog boxes.

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
... ... @@ -49,7 +49,7 @@
49 49 GtkWidget * terminal;
50 50 GtkWidget * filename;
51 51 GtkWidget * charset;
52   - GtkWidget * format;
  52 + GtkComboBox * format;
53 53 LIB3270_CONTENT_OPTION mode;
54 54  
55 55 };
... ...
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
... ...