Commit f24b2b22e1828692156a730a9e162765059bea9c
1 parent
6e737ce0
Exists in
master
and in
1 other branch
Adjustments on 'load' dialog.
Showing
3 changed files
with
58 additions
and
50 deletions
Show diff stats
src/dialogs/load.c
@@ -35,6 +35,7 @@ | @@ -35,6 +35,7 @@ | ||
35 | #include <clipboard.h> | 35 | #include <clipboard.h> |
36 | #include <limits.h> | 36 | #include <limits.h> |
37 | #include <v3270/dialogs.h> | 37 | #include <v3270/dialogs.h> |
38 | + #include <v3270/tools.h> | ||
38 | 39 | ||
39 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ | 40 | /*--[ Widget definition ]----------------------------------------------------------------------------*/ |
40 | 41 | ||
@@ -73,16 +74,7 @@ | @@ -73,16 +74,7 @@ | ||
73 | 74 | ||
74 | } | 75 | } |
75 | 76 | ||
76 | - static void cancel_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | ||
77 | - { | ||
78 | - gtk_dialog_response(dialog,GTK_RESPONSE_CANCEL); | ||
79 | - } | ||
80 | - | ||
81 | - static void apply_operation(GtkButton G_GNUC_UNUSED(*button), GtkDialog *dialog) | ||
82 | - { | ||
83 | - gtk_dialog_response(dialog,GTK_RESPONSE_APPLY); | ||
84 | - } | ||
85 | - | 77 | +/* |
86 | #ifdef WIN32 | 78 | #ifdef WIN32 |
87 | static void icon_press(GtkEntry G_GNUC_UNUSED(*entry), G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270LoadDialog *widget) | 79 | static void icon_press(GtkEntry G_GNUC_UNUSED(*entry), G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, V3270LoadDialog *widget) |
88 | { | 80 | { |
@@ -128,9 +120,38 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -128,9 +120,38 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
128 | 120 | ||
129 | } | 121 | } |
130 | #endif // _WIN32 | 122 | #endif // _WIN32 |
123 | +*/ | ||
131 | 124 | ||
132 | - static void V3270LoadDialog_init(V3270LoadDialog *dialog) | ||
133 | - { | 125 | + static void filename_changed(GtkEntry *entry, V3270LoadDialog *dialog) { |
126 | + | ||
127 | + const gchar * text = gtk_entry_get_text(entry); | ||
128 | + GtkWidget * button = gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY); | ||
129 | + | ||
130 | + if(!(text && *text)) { | ||
131 | + gtk_widget_set_sensitive(button,FALSE); | ||
132 | + return; | ||
133 | + } | ||
134 | + | ||
135 | + if(g_str_has_suffix(text,G_DIR_SEPARATOR_S)) { | ||
136 | + gtk_widget_set_sensitive(button,FALSE); | ||
137 | + return; | ||
138 | + } | ||
139 | + | ||
140 | + g_autofree gchar * dirname = g_path_get_dirname(text); | ||
141 | + | ||
142 | + if(!g_file_test(dirname,G_FILE_TEST_IS_DIR)) { | ||
143 | + gtk_widget_set_sensitive(button,FALSE); | ||
144 | + return; | ||
145 | + } | ||
146 | + | ||
147 | + | ||
148 | + // g_autofree gchar * basename = g_path_get_basename(text); | ||
149 | + | ||
150 | + | ||
151 | + gtk_widget_set_sensitive(button,TRUE); | ||
152 | + } | ||
153 | + | ||
154 | + static void V3270LoadDialog_init(V3270LoadDialog *dialog) { | ||
134 | // 0--------1---------------------2-------3--------------------4 | 155 | // 0--------1---------------------2-------3--------------------4 |
135 | // 0 - Filename xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx. x | 156 | // 0 - Filename xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx.xxxxxxxxx. x |
136 | // 1 - Charset xxxxxxxxx.xxxxxxxxx. Format: xxxxxxxxx.xxxxxxxxx. | 157 | // 1 - Charset xxxxxxxxx.xxxxxxxxx. Format: xxxxxxxxx.xxxxxxxxx. |
@@ -141,7 +162,6 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -141,7 +162,6 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
141 | // Setup visual elements | 162 | // Setup visual elements |
142 | // https://developer.gnome.org/hig/stable/visual-layout.html.en | 163 | // https://developer.gnome.org/hig/stable/visual-layout.html.en |
143 | GtkWidget *widget; | 164 | GtkWidget *widget; |
144 | - GtkWidget *button; | ||
145 | 165 | ||
146 | GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); | 166 | GtkBox * box = GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))); |
147 | gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); | 167 | gtk_window_set_resizable(GTK_WINDOW(dialog),FALSE); |
@@ -166,10 +186,23 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -166,10 +186,23 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
166 | gtk_grid_attach(grid,widget,0,0,1,1); | 186 | gtk_grid_attach(grid,widget,0,0,1,1); |
167 | gtk_label_set_mnemonic_widget(GTK_LABEL(widget),dialog->filename); | 187 | gtk_label_set_mnemonic_widget(GTK_LABEL(widget),dialog->filename); |
168 | 188 | ||
189 | + /* | ||
169 | gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); | 190 | gtk_entry_set_icon_from_icon_name(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,"document-open"); |
170 | gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); | 191 | gtk_entry_set_icon_activatable(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,TRUE); |
171 | gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file")); | 192 | gtk_entry_set_icon_tooltip_text(GTK_ENTRY(dialog->filename),GTK_ENTRY_ICON_SECONDARY,_("Select file")); |
172 | g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); | 193 | g_signal_connect(G_OBJECT(dialog->filename),"icon-press",G_CALLBACK(icon_press),dialog); |
194 | + */ | ||
195 | + | ||
196 | + g_signal_connect(dialog->filename,"changed",G_CALLBACK(filename_changed),dialog); | ||
197 | + | ||
198 | + gtk_entry_bind_to_filechooser( | ||
199 | + dialog->filename, | ||
200 | + GTK_FILE_CHOOSER_ACTION_OPEN, | ||
201 | + _( "Select file" ), | ||
202 | + NULL, | ||
203 | + "*.txt", | ||
204 | + _("Text files") | ||
205 | + ); | ||
173 | 206 | ||
174 | gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60); | 207 | gtk_entry_set_width_chars(GTK_ENTRY(dialog->filename),60); |
175 | gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX); | 208 | gtk_entry_set_max_length(GTK_ENTRY(dialog->filename),PATH_MAX); |
@@ -191,41 +224,20 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -191,41 +224,20 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
191 | 224 | ||
192 | // Buttons | 225 | // Buttons |
193 | // https://developer.gnome.org/icon-naming-spec/ | 226 | // https://developer.gnome.org/icon-naming-spec/ |
194 | -#ifdef _WIN32 | ||
195 | - widget = NULL; | ||
196 | -#elif GTK_CHECK_VERSION(3,14,0) | ||
197 | - widget = gtk_dialog_get_header_bar(GTK_DIALOG(dialog)); | ||
198 | -#else | ||
199 | - widget = NULL; | ||
200 | -#endif // GTK(3,14,0) | 227 | + gtk_dialog_add_buttons( |
228 | + GTK_DIALOG (dialog), | ||
229 | + _("_Cancel"), GTK_RESPONSE_CANCEL, | ||
230 | + _("_Load"), GTK_RESPONSE_APPLY, | ||
231 | + NULL | ||
232 | + ); | ||
201 | 233 | ||
202 | - if(widget) | ||
203 | - { | ||
204 | - // Have header bar | ||
205 | - button = gtk_button_new_with_mnemonic(_("_Cancel")); | ||
206 | - gtk_widget_set_tooltip_markup(button,_("Click to cancel operation")); | ||
207 | - gtk_header_bar_pack_start(GTK_HEADER_BAR(widget),button); | ||
208 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(cancel_operation),dialog); | ||
209 | - | ||
210 | - button = gtk_button_new_with_mnemonic(_("_Load")); | ||
211 | - gtk_widget_set_tooltip_markup(button,_("Click to load file")); | ||
212 | - gtk_header_bar_pack_end(GTK_HEADER_BAR(widget),button); | ||
213 | - g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(apply_operation),dialog); | 234 | + if(!v3270_dialog_get_use_header()) { |
235 | + GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); | ||
236 | + gtk_box_set_spacing(GTK_BOX(content_area),6); | ||
214 | } | 237 | } |
215 | - else | ||
216 | - { | ||
217 | - gtk_box_set_spacing( | ||
218 | - GTK_BOX(gtk_dialog_get_content_area(GTK_DIALOG(dialog))), | ||
219 | - 18 | ||
220 | - ); | ||
221 | 238 | ||
222 | - gtk_dialog_add_buttons( | ||
223 | - GTK_DIALOG (dialog), | ||
224 | - _("_Cancel"), GTK_RESPONSE_CANCEL, | ||
225 | - _("_Load"), GTK_RESPONSE_APPLY, | ||
226 | - NULL | ||
227 | - ); | ||
228 | - } | 239 | + gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); |
240 | + | ||
229 | 241 | ||
230 | } | 242 | } |
231 | 243 |
src/dialogs/save/save.c
@@ -345,7 +345,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | @@ -345,7 +345,7 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_ | ||
345 | 345 | ||
346 | if(!v3270_dialog_get_use_header()) { | 346 | if(!v3270_dialog_get_use_header()) { |
347 | GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); | 347 | GtkWidget * content_area = gtk_dialog_get_content_area(GTK_DIALOG(dialog)); |
348 | - gtk_box_set_spacing(GTK_BOX(content_area),3); | 348 | + gtk_box_set_spacing(GTK_BOX(content_area),6); |
349 | } | 349 | } |
350 | 350 | ||
351 | gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); | 351 | gtk_widget_set_sensitive(gtk_dialog_get_widget_for_response(GTK_DIALOG(dialog),GTK_RESPONSE_APPLY),FALSE); |
src/dialogs/tools.c
@@ -218,10 +218,6 @@ | @@ -218,10 +218,6 @@ | ||
218 | 218 | ||
219 | gboolean v3270_dialog_get_use_header() { | 219 | gboolean v3270_dialog_get_use_header() { |
220 | 220 | ||
221 | -#ifdef DEBUG | ||
222 | - return FALSE; | ||
223 | -#endif // DEBUG | ||
224 | - | ||
225 | #ifdef _WIN32 | 221 | #ifdef _WIN32 |
226 | return FALSE; | 222 | return FALSE; |
227 | #elif GTK_CHECK_VERSION(3,12,0) | 223 | #elif GTK_CHECK_VERSION(3,12,0) |