Commit 9f575fd338d8ca6590870a911a6a084956282f85

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

Working on FT dialog components.

src/v3270ft/activitylist.c
@@ -347,7 +347,7 @@ @@ -347,7 +347,7 @@
347 _("Save queue to file"), 347 _("Save queue to file"),
348 _("Save"), 348 _("Save"),
349 GTK_FILE_CHOOSER_ACTION_SAVE, 349 GTK_FILE_CHOOSER_ACTION_SAVE,
350 - "", 350 + list->filename,
351 N_("XML file"), "*.xml", 351 N_("XML file"), "*.xml",
352 NULL ); 352 NULL );
353 353
src/v3270ft/dialog.c
@@ -180,9 +180,10 @@ static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTDialog *widg @@ -180,9 +180,10 @@ static void remove_clicked(GtkWidget G_GNUC_UNUSED(*button), V3270FTDialog *widg
180 v3270_ft_settings_set_activity(widget->settings,NULL); 180 v3270_ft_settings_set_activity(widget->settings,NULL);
181 } 181 }
182 182
183 -static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, GtkWidget *button) 183 +static void enable_queue_save(GtkWidget G_GNUC_UNUSED(*save), gboolean enabled, V3270FTDialog *widget)
184 { 184 {
185 - gtk_widget_set_sensitive(button,enabled); 185 + debug("%s: %s",__FUNCTION__,(enabled ? "Enable" : "Disable"));
  186 + gtk_widget_set_sensitive(widget->queue.save,enabled);
186 } 187 }
187 188
188 static void V3270FTDialog_init(V3270FTDialog *widget) 189 static void V3270FTDialog_init(V3270FTDialog *widget)
@@ -251,7 +252,6 @@ static void V3270FTDialog_init(V3270FTDialog *widget) @@ -251,7 +252,6 @@ static void V3270FTDialog_init(V3270FTDialog *widget)
251 gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue")); 252 gtk_widget_set_tooltip_markup(widget->queue.save,_("Save transfer queue"));
252 g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget); 253 g_signal_connect(widget->queue.save,"clicked",G_CALLBACK(save_queue_clicked),widget);
253 gtk_widget_set_sensitive(widget->queue.save,FALSE); 254 gtk_widget_set_sensitive(widget->queue.save,FALSE);
254 - g_signal_connect(widget->queue.view,"has-file",G_CALLBACK(enable_queue_save),widget->queue.save);  
255 255
256 widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR); 256 widget->queue.saveAs = gtk_button_new_from_icon_name("document-save-as",GTK_ICON_SIZE_SMALL_TOOLBAR);
257 gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file")); 257 gtk_widget_set_tooltip_markup(widget->queue.saveAs,_("Save transfer queue to file"));
@@ -264,6 +264,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget) @@ -264,6 +264,7 @@ static void V3270FTDialog_init(V3270FTDialog *widget)
264 widget->queue.view = v3270_activity_list_new(); 264 widget->queue.view = v3270_activity_list_new();
265 gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer")); 265 gtk_widget_set_tooltip_markup(widget->queue.view,_("Files to transfer"));
266 g_signal_connect(G_OBJECT(widget->queue.view),"row-activated",G_CALLBACK(activity_selected),widget); 266 g_signal_connect(G_OBJECT(widget->queue.view),"row-activated",G_CALLBACK(activity_selected),widget);
  267 + g_signal_connect(G_OBJECT(widget->queue.view),"has-file",G_CALLBACK(enable_queue_save),widget);
267 268
268 // Put the view inside a scrolled window. 269 // Put the view inside a scrolled window.
269 GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL); 270 GtkWidget * scrolled = gtk_scrolled_window_new(NULL,NULL);
src/v3270ft/select.c
@@ -37,43 +37,7 @@ @@ -37,43 +37,7 @@
37 37
38 /*--[ Implement ]------------------------------------------------------------------------------------*/ 38 /*--[ Implement ]------------------------------------------------------------------------------------*/
39 39
40 -/*  
41 -#if defined(_WIN32)  
42 -  
43 -struct file {  
44 - OPENFILENAME ofn;  
45 - gboolean enabled;  
46 - char szName[260]; // buffer for file name  
47 - GtkFileChooserAction action;  
48 - BOOL ok;  
49 -};  
50 -  
51 -static gpointer select_file(struct file *fl) {  
52 -  
53 -  
54 - switch(fl->action) {  
55 - case GTK_FILE_CHOOSER_ACTION_SAVE: // Receber arquivo  
56 - // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx  
57 - // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file  
58 - fl->ofn.Flags = OFN_OVERWRITEPROMPT | OFN_CREATEPROMPT | OFN_HIDEREADONLY;  
59 - fl->ok = GetSaveFileName(&fl->ofn);  
60 - break;  
61 -  
62 - case GTK_FILE_CHOOSER_ACTION_OPEN: // Enviar arquivo  
63 - // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx  
64 - fl->ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_HIDEREADONLY;  
65 - fl->ok = GetOpenFileName(&fl->ofn);  
66 - break;  
67 - }  
68 -  
69 - fl->enabled = FALSE;  
70 -  
71 - return 0;  
72 -}  
73 -#endif // _WIN32  
74 -*/  
75 -  
76 -gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, G_GNUC_UNUSED const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) { 40 +gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, G_GNUC_UNUSED const gchar *filter, ...) {
77 41
78 gchar *rc = NULL; 42 gchar *rc = NULL;
79 43
@@ -91,84 +55,37 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar * @@ -91,84 +55,37 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *
91 ); 55 );
92 56
93 57
94 - if(gtk_native_dialog_run(GTK_NATIVE_DIALOG (native)) == GTK_RESPONSE_ACCEPT) {  
95 - rc = g_strdup(gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(native)));  
96 - }  
97 -  
98 - g_object_unref(native);  
99 -  
100 -#elif defined(_WIN32)  
101 -  
102 - GThread * thd;  
103 - struct file fl;  
104 - GdkWindow * win = gtk_widget_get_window(GTK_WIDGET(dialog));  
105 -  
106 - gtk_widget_set_sensitive(GTK_WIDGET(dialog),FALSE);  
107 -  
108 - memset(&fl,0,sizeof(fl));  
109 - fl.ofn.lStructSize = sizeof(fl.ofn);  
110 - fl.ofn.hwndOwner = GDK_WINDOW_HWND(win);  
111 - fl.ofn.lpstrFile = fl.szName;  
112 -  
113 - fl.ofn.lpstrTitle = title;  
114 -  
115 - // Set lpstrFile[0] to '\0' so that GetOpenFileName does not  
116 - // use the contents of szFile to initialize itself.  
117 - fl.ofn.lpstrFile[0] = '\0';  
118 -  
119 - fl.ofn.nMaxFile = sizeof(fl.szName);  
120 -  
121 - // Monta lista de arquivos.  
122 - va_list args;  
123 - size_t ix = 0;  
124 -  
125 - fl.ofn.lpstrFilter = (char *) g_malloc0(4096); 58 + // Setup filename
  59 + if(filename && *filename)
  60 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(native),filename);
126 61
  62 + // Setup filters
  63 + va_list args;
127 va_start (args, filter); 64 va_start (args, filter);
128 - while(filter) {  
129 -  
130 - filter = gettext(filter);  
131 - size_t sz = strlen(filter)+1;  
132 -  
133 - if(ix+sz > 4095) 65 + while(filter)
  66 + {
  67 + const gchar * name = va_arg(args, const gchar *);
  68 + if(!name)
134 break; 69 break;
135 70
136 - debug("%s",filter);  
137 -  
138 - memcpy(((char *) fl.ofn.lpstrFilter)+ix,filter,sz);  
139 - ix += sz;  
140 - filter = va_arg(args, const char *);  
141 - }  
142 - va_end (args);  
143 -  
144 - debug("%s",fl.ofn.lpstrFilter);  
145 -  
146 - fl.ofn.nFilterIndex = 1;  
147 - fl.ofn.lpstrInitialDir = NULL;  
148 - fl.ofn.nMaxFileTitle = 0;  
149 -  
150 - // Guarda o valor atual  
151 - if(filename)  
152 - strncpy(fl.szName,filename,fl.ofn.nMaxFile);  
153 -  
154 - fl.action = action; 71 + const gchar * pattern = va_arg(args, const gchar *);
  72 + if(!pattern)
  73 + break;
155 74
156 - thd = g_thread_new("GetFileName",(GThreadFunc) select_file, &fl); 75 + GtkFileFilter *filter = gtk_file_filter_new();
  76 + gtk_file_filter_set_name(filter,name);
  77 + gtk_file_filter_add_pattern(filter, pattern);
  78 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(native), filter);
157 79
158 - fl.enabled = TRUE;  
159 - while(fl.enabled) {  
160 - g_main_context_iteration(NULL,TRUE);  
161 } 80 }
  81 + va_end(args);
162 82
163 - g_thread_unref(thd);  
164 -  
165 - if(fl.ok) {  
166 - rc = g_strdup(fl.szName); 83 + // Run dialog
  84 + if(gtk_native_dialog_run(GTK_NATIVE_DIALOG (native)) == GTK_RESPONSE_ACCEPT) {
  85 + rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(native));
167 } 86 }
168 87
169 - g_free( ((char *) fl.ofn.lpstrFilter) );  
170 - gtk_widget_set_sensitive(GTK_WIDGET(dialog),TRUE);  
171 - 88 + g_object_unref(native);
172 89
173 #else 90 #else
174 91
@@ -185,6 +102,27 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar * @@ -185,6 +102,27 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *
185 if(filename && *filename) 102 if(filename && *filename)
186 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename); 103 gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename);
187 104
  105 + // Setup filters
  106 + va_list args;
  107 + va_start (args, filter);
  108 + while(filter)
  109 + {
  110 + const gchar * name = va_arg(args, const gchar *);
  111 + if(!name)
  112 + break;
  113 +
  114 + const gchar * pattern = va_arg(args, const gchar *);
  115 + if(!pattern)
  116 + break;
  117 +
  118 + GtkFileFilter *filter = gtk_file_filter_new();
  119 + gtk_file_filter_set_name(filter,name);
  120 + gtk_file_filter_add_pattern(filter, pattern);
  121 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(native), filter);
  122 +
  123 + }
  124 + va_end(args);
  125 +
188 if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) { 126 if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) {
189 rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser)); 127 rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));
190 } 128 }
@@ -192,9 +130,9 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar * @@ -192,9 +130,9 @@ gchar * v3270ft_select_file(GtkWidget *dialog, const gchar *title, const gchar *
192 gtk_widget_destroy(chooser); 130 gtk_widget_destroy(chooser);
193 131
194 132
195 -#endif // WIN32 133 +#endif // GTK 3.20
196 134
197 - debug("%s=%p",__FUNCTION__,rc); 135 + debug("%s=%s",__FUNCTION__,rc);
198 136
199 return rc; 137 return rc;
200 138