Commit d678623ce2b5f3e72864f5907310d7496f99fbea
1 parent
08322062
Exists in
master
and in
5 other branches
Testando em windows 32 & 64.
Showing
3 changed files
with
58 additions
and
10 deletions
Show diff stats
src/pw3270/include/v3270ft.h
@@ -75,7 +75,7 @@ | @@ -75,7 +75,7 @@ | ||
75 | void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text); | 75 | void v3270ft_append_file(GtkWidget *widget, const gchar *filename, gboolean text); |
76 | guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data); | 76 | guint v3270ft_append_selection(GtkWidget *widget, GtkSelectionData *data); |
77 | 77 | ||
78 | - gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename); | 78 | + gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ... ) G_GNUC_NULL_TERMINATED; |
79 | 79 | ||
80 | gint v3270ft_transfer(GtkWidget *dialog, H3270 *session); | 80 | gint v3270ft_transfer(GtkWidget *dialog, H3270 *session); |
81 | 81 |
src/pw3270/v3270ft/select.c
@@ -28,7 +28,8 @@ | @@ -28,7 +28,8 @@ | ||
28 | * | 28 | * |
29 | */ | 29 | */ |
30 | 30 | ||
31 | - #include "private.h" | 31 | +#include "private.h" |
32 | +#include <stdarg.h> | ||
32 | 33 | ||
33 | #ifdef WIN32 | 34 | #ifdef WIN32 |
34 | #include <gdk/gdkwin32.h> | 35 | #include <gdk/gdkwin32.h> |
@@ -53,13 +54,13 @@ static gpointer select_file(struct file *fl) { | @@ -53,13 +54,13 @@ static gpointer select_file(struct file *fl) { | ||
53 | case GTK_FILE_CHOOSER_ACTION_SAVE: // Receber arquivo | 54 | case GTK_FILE_CHOOSER_ACTION_SAVE: // Receber arquivo |
54 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx | 55 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx |
55 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file | 56 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file |
56 | - fl->ofn.Flags = OFN_OVERWRITEPROMPT; | 57 | + fl->ofn.Flags = OFN_OVERWRITEPROMPT | OFN_CREATEPROMPT | OFN_HIDEREADONLY; |
57 | fl->ok = GetSaveFileName(&fl->ofn); | 58 | fl->ok = GetSaveFileName(&fl->ofn); |
58 | break; | 59 | break; |
59 | 60 | ||
60 | case GTK_FILE_CHOOSER_ACTION_OPEN: // Enviar arquivo | 61 | case GTK_FILE_CHOOSER_ACTION_OPEN: // Enviar arquivo |
61 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx | 62 | // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx |
62 | - fl->ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; | 63 | + fl->ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY; |
63 | fl->ok = GetOpenFileName(&fl->ofn); | 64 | fl->ok = GetOpenFileName(&fl->ofn); |
64 | break; | 65 | break; |
65 | } | 66 | } |
@@ -71,7 +72,7 @@ static gpointer select_file(struct file *fl) { | @@ -71,7 +72,7 @@ static gpointer select_file(struct file *fl) { | ||
71 | 72 | ||
72 | #endif // _WIN32 | 73 | #endif // _WIN32 |
73 | 74 | ||
74 | -gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename) { | 75 | +gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ...) { |
75 | 76 | ||
76 | gchar *rc = NULL; | 77 | gchar *rc = NULL; |
77 | 78 | ||
@@ -113,10 +114,35 @@ gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *bu | @@ -113,10 +114,35 @@ gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *bu | ||
113 | fl.ofn.lpstrFile[0] = '\0'; | 114 | fl.ofn.lpstrFile[0] = '\0'; |
114 | 115 | ||
115 | fl.ofn.nMaxFile = sizeof(fl.szName); | 116 | fl.ofn.nMaxFile = sizeof(fl.szName); |
116 | - fl.ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0"; | 117 | + |
118 | + // Monta lista de arquivos. | ||
119 | + va_list args; | ||
120 | + size_t ix = 0; | ||
121 | + | ||
122 | + fl.ofn.lpstrFilter = (char *) g_malloc0(4096); | ||
123 | + | ||
124 | + va_start (args, filter); | ||
125 | + while(filter) { | ||
126 | + | ||
127 | + filter = gettext(filter); | ||
128 | + size_t sz = strlen(filter)+1; | ||
129 | + | ||
130 | + if(ix+sz > 4095) | ||
131 | + break; | ||
132 | + | ||
133 | + debug("%s",filter); | ||
134 | + | ||
135 | + memcpy(((char *) fl.ofn.lpstrFilter)+ix,filter,sz); | ||
136 | + ix += sz; | ||
137 | + filter = va_arg(args, const char *); | ||
138 | + } | ||
139 | + va_end (args); | ||
140 | + | ||
141 | + debug("%s",fl.ofn.lpstrFilter); | ||
142 | + | ||
117 | fl.ofn.nFilterIndex = 1; | 143 | fl.ofn.nFilterIndex = 1; |
118 | - fl.ofn.nMaxFileTitle = 0; | ||
119 | fl.ofn.lpstrInitialDir = NULL; | 144 | fl.ofn.lpstrInitialDir = NULL; |
145 | + fl.ofn.nMaxFileTitle = 0; | ||
120 | 146 | ||
121 | // Guarda o valor atual | 147 | // Guarda o valor atual |
122 | if(filename) | 148 | if(filename) |
@@ -137,6 +163,7 @@ gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *bu | @@ -137,6 +163,7 @@ gchar * v3270ft_select_file(v3270ft *dialog, const gchar *title, const gchar *bu | ||
137 | rc = g_strdup(fl.szName); | 163 | rc = g_strdup(fl.szName); |
138 | } | 164 | } |
139 | 165 | ||
166 | + g_free( ((char *) fl.ofn.lpstrFilter) ); | ||
140 | gtk_widget_set_sensitive(GTK_WIDGET(dialog),TRUE); | 167 | gtk_widget_set_sensitive(GTK_WIDGET(dialog),TRUE); |
141 | 168 | ||
142 | 169 |
src/pw3270/v3270ft/v3270ft.c
@@ -188,7 +188,13 @@ static void remove_file(GtkButton *button, v3270ft *dialog) { | @@ -188,7 +188,13 @@ static void remove_file(GtkButton *button, v3270ft *dialog) { | ||
188 | 188 | ||
189 | static void load_file(GtkButton *button, v3270ft *dialog) { | 189 | static void load_file(GtkButton *button, v3270ft *dialog) { |
190 | 190 | ||
191 | - gchar * filename = v3270ft_select_file(dialog, _("Load queue from file"), _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, NULL); | 191 | + gchar * filename = v3270ft_select_file( |
192 | + dialog, | ||
193 | + _("Load queue from file"), | ||
194 | + _("Load"), GTK_FILE_CHOOSER_ACTION_OPEN, | ||
195 | + "", | ||
196 | + N_("XML file"), "*.xml", | ||
197 | + NULL ); | ||
192 | 198 | ||
193 | if(filename) { | 199 | if(filename) { |
194 | v3270ft_load(GTK_WIDGET(dialog),filename); | 200 | v3270ft_load(GTK_WIDGET(dialog),filename); |
@@ -201,7 +207,14 @@ static void load_file(GtkButton *button, v3270ft *dialog) { | @@ -201,7 +207,14 @@ static void load_file(GtkButton *button, v3270ft *dialog) { | ||
201 | 207 | ||
202 | static void save_file(GtkButton *button, v3270ft *dialog) { | 208 | static void save_file(GtkButton *button, v3270ft *dialog) { |
203 | 209 | ||
204 | - gchar * filename = v3270ft_select_file(dialog, _("Save queue to file"), _("Save"), GTK_FILE_CHOOSER_ACTION_SAVE, NULL); | 210 | + gchar * filename = v3270ft_select_file( |
211 | + dialog, | ||
212 | + _("Save queue to file"), | ||
213 | + _("Save"), | ||
214 | + GTK_FILE_CHOOSER_ACTION_SAVE, | ||
215 | + "", | ||
216 | + N_("XML file"), "*.xml", | ||
217 | + NULL ); | ||
205 | 218 | ||
206 | if(filename) { | 219 | if(filename) { |
207 | v3270ft_save(GTK_WIDGET(dialog),filename); | 220 | v3270ft_save(GTK_WIDGET(dialog),filename); |
@@ -282,7 +295,15 @@ static void select_local_file(GtkButton *button, v3270ft *dialog) { | @@ -282,7 +295,15 @@ static void select_local_file(GtkButton *button, v3270ft *dialog) { | ||
282 | static void icon_press(GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, v3270ft *dialog) { | 295 | static void icon_press(GtkEntry *entry, GtkEntryIconPosition icon_pos, GdkEvent *event, v3270ft *dialog) { |
283 | #endif // WIN32 | 296 | #endif // WIN32 |
284 | 297 | ||
285 | - gchar *filename = v3270ft_select_file(dialog, _("Select local file"), _("Select"), GTK_FILE_CHOOSER_ACTION_OPEN, gtk_entry_get_text(dialog->local)); | 298 | + gchar *filename = v3270ft_select_file( |
299 | + dialog, | ||
300 | + _("Select local file"), | ||
301 | + _("Select"), | ||
302 | + GTK_FILE_CHOOSER_ACTION_OPEN, | ||
303 | + gtk_entry_get_text(dialog->local), | ||
304 | + N_("All files"), "*.*", | ||
305 | + N_("Text files"), "*.txt", | ||
306 | + NULL ); | ||
286 | 307 | ||
287 | if(filename) { | 308 | if(filename) { |
288 | 309 |