Commit d9e7e822ee18f0b15acc0fe5e33a1371f665afa7

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

Windows native file dialog is hanging sometimes, replacing it.

@@ -35,6 +35,7 @@ SOURCES= \ @@ -35,6 +35,7 @@ SOURCES= \
35 $(wildcard src/filetransfer/*.c) \ 35 $(wildcard src/filetransfer/*.c) \
36 $(wildcard src/trace/*.c) \ 36 $(wildcard src/trace/*.c) \
37 $(wildcard src/dialogs/*.c) \ 37 $(wildcard src/dialogs/*.c) \
  38 + $(wildcard src/dialogs/@OSNAME@/*.c) \
38 $(wildcard src/dialogs/print/*.c) 39 $(wildcard src/dialogs/print/*.c)
39 40
40 TEST_SOURCES= \ 41 TEST_SOURCES= \
@@ -58,6 +59,7 @@ VALGRIND=@VALGRIND@ @@ -58,6 +59,7 @@ VALGRIND=@VALGRIND@
58 GENMARSHAL=@GENMARSHAL@ 59 GENMARSHAL=@GENMARSHAL@
59 CONVERT=@CONVERT@ 60 CONVERT=@CONVERT@
60 OPTIPNG=@OPTIPNG@ 61 OPTIPNG=@OPTIPNG@
  62 +ZIP=@ZIP@
61 63
62 #---[ Paths ]---------------------------------------------------------------------------- 64 #---[ Paths ]----------------------------------------------------------------------------
63 65
@@ -455,6 +457,16 @@ $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \ @@ -455,6 +457,16 @@ $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@: \
455 $(OBJDIR)/marshal/v3270ft.o \ 457 $(OBJDIR)/marshal/v3270ft.o \
456 $(LIBS) 458 $(LIBS)
457 459
  460 +zip-debug: \
  461 + $(LIBNAME)-debug-@PACKAGE_VERSION@-@host_cpu@.zip
  462 +
  463 +$(LIBNAME)-debug-@PACKAGE_VERSION@-@host_cpu@.zip: \
  464 + $(BINDBG)/$(LIBNAME)@EXEEXT@ \
  465 + $(BINDBG)/$(LIBNAME)@DLLEXT@.@PACKAGE_MAJOR_VERSION@.@PACKAGE_MINOR_VERSION@
  466 +
  467 + @$(ZIP) -9 -j $@ $^
  468 +
  469 +
458 #---[ Clean Targets ]-------------------------------------------------------------------- 470 #---[ Clean Targets ]--------------------------------------------------------------------
459 471
460 clean: \ 472 clean: \
@@ -58,6 +58,7 @@ AC_PROG_LN_S @@ -58,6 +58,7 @@ AC_PROG_LN_S
58 AC_PATH_TOOL([AR], [ar], [ar]) 58 AC_PATH_TOOL([AR], [ar], [ar])
59 AC_PATH_TOOL([CONVERT], [convert], [no]) 59 AC_PATH_TOOL([CONVERT], [convert], [no])
60 AC_PATH_TOOL([OPTIPNG],[optipng],[no]) 60 AC_PATH_TOOL([OPTIPNG],[optipng],[no])
  61 +AC_PATH_TOOL([ZIP],[zip],[no])
61 62
62 AC_LANG([C]) 63 AC_LANG([C])
63 64
src/dialogs/linux/select.c 0 → 100644
@@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob
  5 + * o nome G3270.
  6 + *
  7 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  8 + *
  9 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  10 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  11 + * Free Software Foundation.
  12 + *
  13 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  14 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  15 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  16 + * obter mais detalhes.
  17 + *
  18 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  19 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  21 + *
  22 + * Este programa está nomeado como - possui - linhas de código.
  23 + *
  24 + * Contatos:
  25 + *
  26 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  27 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  28 + *
  29 + */
  30 +
  31 +#include "../private.h"
  32 +#include <stdarg.h>
  33 +
  34 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  35 +
  36 +gchar * v3270_select_file(GtkWidget *widget, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ...)
  37 +{
  38 + gchar *rc = NULL;
  39 +
  40 +#if GTK_CHECK_VERSION(3,20,0)
  41 +
  42 + GtkFileChooserNative *native =
  43 + gtk_file_chooser_native_new
  44 + (
  45 + title,
  46 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  47 + action,
  48 + button,
  49 + _( "_Cancel" )
  50 + );
  51 +
  52 +
  53 + // Setup filename
  54 + if(filename && *filename)
  55 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(native),filename);
  56 +
  57 + // Setup filters
  58 + va_list args;
  59 + va_start (args, filter);
  60 + while(filter)
  61 + {
  62 + const gchar * name = va_arg(args, const gchar *);
  63 + if(!name)
  64 + break;
  65 +
  66 + const gchar * pattern = va_arg(args, const gchar *);
  67 + if(!pattern)
  68 + break;
  69 +
  70 + GtkFileFilter *filter = gtk_file_filter_new();
  71 + gtk_file_filter_set_name(filter,name);
  72 + gtk_file_filter_add_pattern(filter, pattern);
  73 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(native), filter);
  74 +
  75 + }
  76 + va_end(args);
  77 +
  78 + // Run dialog
  79 + if(gtk_native_dialog_run(GTK_NATIVE_DIALOG (native)) == GTK_RESPONSE_ACCEPT) {
  80 + rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(native));
  81 + }
  82 +
  83 + g_object_unref(native);
  84 +
  85 +#else
  86 +
  87 + GtkWidget * chooser =
  88 + gtk_file_chooser_dialog_new
  89 + (
  90 + title,
  91 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  92 + action,
  93 + _("_Cancel" ), GTK_RESPONSE_CANCEL,
  94 + button, GTK_RESPONSE_ACCEPT,
  95 + NULL
  96 + );
  97 +
  98 + if(filename && *filename)
  99 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename);
  100 +
  101 + // Setup filters
  102 + va_list args;
  103 + va_start (args, filter);
  104 + while(filter)
  105 + {
  106 + const gchar * name = va_arg(args, const gchar *);
  107 + if(!name)
  108 + break;
  109 +
  110 + const gchar * pattern = va_arg(args, const gchar *);
  111 + if(!pattern)
  112 + break;
  113 +
  114 + GtkFileFilter *filter = gtk_file_filter_new();
  115 + gtk_file_filter_set_name(filter,name);
  116 + gtk_file_filter_add_pattern(filter, pattern);
  117 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
  118 +
  119 + }
  120 + va_end(args);
  121 +
  122 + if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) {
  123 + rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));
  124 + }
  125 +
  126 + gtk_widget_destroy(chooser);
  127 +
  128 +
  129 +#endif // GTK 3.20
  130 +
  131 + return rc;
  132 +
  133 +}
  134 +
src/dialogs/select.c
@@ -1,134 +0,0 @@ @@ -1,134 +0,0 @@
1 -/*  
2 - * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270  
3 - * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a  
4 - * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob  
5 - * o nome G3270.  
6 - *  
7 - * Copyright (C) <2008> <Banco do Brasil S.A.>  
8 - *  
9 - * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob  
10 - * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela  
11 - * Free Software Foundation.  
12 - *  
13 - * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER  
14 - * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO  
15 - * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para  
16 - * obter mais detalhes.  
17 - *  
18 - * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este  
19 - * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin  
20 - * St, Fifth Floor, Boston, MA 02110-1301 USA  
21 - *  
22 - * Este programa está nomeado como - possui - linhas de código.  
23 - *  
24 - * Contatos:  
25 - *  
26 - * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)  
27 - * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)  
28 - *  
29 - */  
30 -  
31 -#include "private.h"  
32 -#include <stdarg.h>  
33 -  
34 -/*--[ Implement ]------------------------------------------------------------------------------------*/  
35 -  
36 -gchar * v3270_select_file(GtkWidget *widget, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ...)  
37 -{  
38 - gchar *rc = NULL;  
39 -  
40 -#if GTK_CHECK_VERSION(3,20,0)  
41 -  
42 - GtkFileChooserNative *native =  
43 - gtk_file_chooser_native_new  
44 - (  
45 - title,  
46 - GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
47 - action,  
48 - button,  
49 - _( "_Cancel" )  
50 - );  
51 -  
52 -  
53 - // Setup filename  
54 - if(filename && *filename)  
55 - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(native),filename);  
56 -  
57 - // Setup filters  
58 - va_list args;  
59 - va_start (args, filter);  
60 - while(filter)  
61 - {  
62 - const gchar * name = va_arg(args, const gchar *);  
63 - if(!name)  
64 - break;  
65 -  
66 - const gchar * pattern = va_arg(args, const gchar *);  
67 - if(!pattern)  
68 - break;  
69 -  
70 - GtkFileFilter *filter = gtk_file_filter_new();  
71 - gtk_file_filter_set_name(filter,name);  
72 - gtk_file_filter_add_pattern(filter, pattern);  
73 - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(native), filter);  
74 -  
75 - }  
76 - va_end(args);  
77 -  
78 - // Run dialog  
79 - if(gtk_native_dialog_run(GTK_NATIVE_DIALOG (native)) == GTK_RESPONSE_ACCEPT) {  
80 - rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(native));  
81 - }  
82 -  
83 - g_object_unref(native);  
84 -  
85 -#else  
86 -  
87 - GtkWidget * chooser =  
88 - gtk_file_chooser_dialog_new  
89 - (  
90 - title,  
91 - GTK_WINDOW(gtk_widget_get_toplevel(widget)),  
92 - action,  
93 - _("_Cancel" ), GTK_RESPONSE_CANCEL,  
94 - button, GTK_RESPONSE_ACCEPT,  
95 - NULL  
96 - );  
97 -  
98 - if(filename && *filename)  
99 - gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename);  
100 -  
101 - // Setup filters  
102 - va_list args;  
103 - va_start (args, filter);  
104 - while(filter)  
105 - {  
106 - const gchar * name = va_arg(args, const gchar *);  
107 - if(!name)  
108 - break;  
109 -  
110 - const gchar * pattern = va_arg(args, const gchar *);  
111 - if(!pattern)  
112 - break;  
113 -  
114 - GtkFileFilter *filter = gtk_file_filter_new();  
115 - gtk_file_filter_set_name(filter,name);  
116 - gtk_file_filter_add_pattern(filter, pattern);  
117 - gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);  
118 -  
119 - }  
120 - va_end(args);  
121 -  
122 - if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) {  
123 - rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));  
124 - }  
125 -  
126 - gtk_widget_destroy(chooser);  
127 -  
128 -  
129 -#endif // GTK 3.20  
130 -  
131 - return rc;  
132 -  
133 -}  
134 -  
src/dialogs/windows/select.c 0 → 100644
@@ -0,0 +1,197 @@ @@ -0,0 +1,197 @@
  1 +/*
  2 + * "Software pw3270, desenvolvido com base nos códigos fontes do WC3270 e X3270
  3 + * (Paul Mattes Paul.Mattes@usa.net), de emulação de terminal 3270 para acesso a
  4 + * aplicativos mainframe. Registro no INPI sob o nome G3270. Registro no INPI sob
  5 + * o nome G3270.
  6 + *
  7 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  8 + *
  9 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  10 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  11 + * Free Software Foundation.
  12 + *
  13 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  14 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  15 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  16 + * obter mais detalhes.
  17 + *
  18 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  19 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  20 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  21 + *
  22 + * Este programa está nomeado como - possui - linhas de código.
  23 + *
  24 + * Contatos:
  25 + *
  26 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  27 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  28 + *
  29 + */
  30 +
  31 +#include "../private.h"
  32 +#include <stdarg.h>
  33 +#include <gdk/gdkwin32.h>
  34 +#include <lib3270/log.h>
  35 +
  36 +/*--[ Globals ]--------------------------------------------------------------------------------------*/
  37 +
  38 +struct FileSelector
  39 +{
  40 + OPENFILENAME ofn;
  41 + char szName[260]; ///< @brief buffer for file name.
  42 + int mode;
  43 + BOOL ok;
  44 +};
  45 +
  46 +/*--[ Implement ]------------------------------------------------------------------------------------*/
  47 +
  48 +/*
  49 +static gpointer win32_select_file(struct FileSelector *fl)
  50 +{
  51 + debug("%s: start",__FUNCTION__);
  52 + if(fl->mode == 1)
  53 + {
  54 + fl->ok = GetSaveFileName(&fl->ofn);
  55 + }
  56 + else
  57 + {
  58 + fl->ok = GetOpenFileName(&fl->ofn);
  59 + }
  60 + debug("%s: end",__FUNCTION__);
  61 +
  62 + fl->mode = 3;
  63 +
  64 + return 0;
  65 +}
  66 +
  67 +
  68 +gchar * v3270_select_file(GtkWidget *widget, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ...)
  69 +{
  70 + gchar *rc = NULL;
  71 +
  72 + // Get parent windows
  73 + GdkWindow * win = gtk_widget_get_window(gtk_widget_get_toplevel(widget));
  74 +
  75 + // Setup win32 file selection parameters
  76 + struct FileSelector fl;
  77 +
  78 + memset(&fl, 0, sizeof(fl));
  79 + fl.ofn.lStructSize = sizeof(fl.ofn);
  80 + fl.ofn.hwndOwner = GDK_WINDOW_HWND(win);
  81 + fl.ofn.lpstrFile = fl.szName;
  82 +
  83 + // Set lpstrFile[0] to '\0' so that GetOpenFileName does not
  84 + // use the contents of szFile to initialize itself.
  85 + fl.ofn.lpstrFile[0] = '\0';
  86 +
  87 + fl.ofn.lpstrFilter = "All\0*.*\0Text\0*.TXT\0";
  88 + fl.ofn.nFilterIndex = 1;
  89 + fl.ofn.lpstrInitialDir = NULL;
  90 +
  91 + fl.ofn.nMaxFileTitle = strlen(title);
  92 + fl.ofn.lpstrFileTitle = (char *) title;
  93 +
  94 + // Guarda o valor atual
  95 + fl.ofn.nMaxFile = sizeof(fl.szName);
  96 + strncpy(fl.szName, filename, fl.ofn.nMaxFile-1);
  97 +
  98 + // Obtêm o tipo de diálogo.
  99 + switch(action) {
  100 + case GTK_FILE_CHOOSER_ACTION_OPEN: // Indicates open mode. The file chooser will only let the user pick an existing file.
  101 + // Enviar arquivo
  102 + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646928(v=vs.85).aspx
  103 + fl.ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST;
  104 +
  105 + fl.mode = 0;
  106 + break;
  107 +
  108 + case GTK_FILE_CHOOSER_ACTION_SAVE: // Indicates save mode. The file chooser will let the user pick an existing file, or type in a new filename.
  109 + // Receber arquivo
  110 + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646839(v=vs.85).aspx
  111 + // https://msdn.microsoft.com/en-us/library/windows/desktop/ms646829(v=vs.85).aspx#open_file
  112 + fl.ofn.Flags = OFN_OVERWRITEPROMPT;
  113 +
  114 + fl.mode = 1;
  115 + break;
  116 +
  117 + case GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: // Indicates an Open mode for selecting folders. The file chooser will let the user pick an existing folder.
  118 + fl.mode = 3;
  119 + break;
  120 +
  121 + case GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: //Indicates a mode for creating a new folder. The file chooser will let the user name an existing or new folder.
  122 + fl.mode = 3;
  123 + break;
  124 +
  125 + default:
  126 + return NULL;
  127 +
  128 + }
  129 +
  130 + GThread * thd = g_thread_new("SelectFileDialog",(GThreadFunc) win32_select_file, &fl);
  131 +
  132 + gtk_widget_set_sensitive(GTK_WIDGET(widget),FALSE);
  133 + debug("%s: Keeping main loop alive",__FUNCTION__);
  134 + while(fl.mode != 3) {
  135 + gtk_main_iteration();
  136 + }
  137 + gtk_widget_set_sensitive(GTK_WIDGET(widget),TRUE);
  138 +
  139 + debug("%s: Waiting for service thread", __FUNCTION__);
  140 + g_thread_join(thd);
  141 + debug("%s: Service thread ends", __FUNCTION__);
  142 +
  143 + return rc;
  144 +}
  145 +*/
  146 +
  147 +gchar * v3270_select_file(GtkWidget *widget, const gchar *title, const gchar *button, GtkFileChooserAction action, const gchar *filename, const gchar *filter, ...)
  148 +{
  149 + gchar *rc = NULL;
  150 +
  151 + GtkWidget * chooser =
  152 + gtk_file_chooser_dialog_new
  153 + (
  154 + title,
  155 + GTK_WINDOW(gtk_widget_get_toplevel(widget)),
  156 + action,
  157 + _("_Cancel" ), GTK_RESPONSE_CANCEL,
  158 + button, GTK_RESPONSE_ACCEPT,
  159 + NULL
  160 + );
  161 +
  162 + if(filename && *filename)
  163 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(chooser),filename);
  164 +
  165 + // Setup filters
  166 + /*
  167 + va_list args;
  168 + va_start (args, filter);
  169 + while(filter)
  170 + {
  171 + const gchar * name = va_arg(args, const gchar *);
  172 + if(!name)
  173 + break;
  174 +
  175 + const gchar * pattern = va_arg(args, const gchar *);
  176 + if(!pattern)
  177 + break;
  178 +
  179 + GtkFileFilter *filter = gtk_file_filter_new();
  180 + gtk_file_filter_set_name(filter,name);
  181 + gtk_file_filter_add_pattern(filter, pattern);
  182 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(chooser), filter);
  183 +
  184 + }
  185 + va_end(args);
  186 + */
  187 +
  188 + if(gtk_dialog_run(GTK_DIALOG(chooser)) == GTK_RESPONSE_ACCEPT) {
  189 + rc = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(chooser));
  190 + }
  191 +
  192 + gtk_widget_destroy(chooser);
  193 +
  194 + return rc;
  195 +
  196 +}
  197 +
src/filetransfer/v3270ft.c
@@ -299,6 +299,8 @@ static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog) @@ -299,6 +299,8 @@ static void select_local_file(GtkButton G_GNUC_UNUSED(*button), v3270ft *dialog)
299 static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) { 299 static void icon_press(G_GNUC_UNUSED GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, v3270ft *dialog) {
300 #endif // WIN32 300 #endif // WIN32
301 301
  302 + debug("%s",__FUNCTION__);
  303 +
302 gchar *filename = v3270_select_file( 304 gchar *filename = v3270_select_file(
303 GTK_WIDGET(dialog), 305 GTK_WIDGET(dialog),
304 _("Select local file"), 306 _("Select local file"),
@@ -706,7 +708,11 @@ static void v3270ft_init(v3270ft *dialog) { @@ -706,7 +708,11 @@ static void v3270ft_init(v3270ft *dialog) {
706 * 708 *
707 * Returns: a new #v3270ft. 709 * Returns: a new #v3270ft.
708 */ 710 */
709 -LIB3270_EXPORT GtkWidget * v3270ft_new(void) {  
710 - return GTK_WIDGET(g_object_new(GTK_TYPE_V3270FT, "use-header-bar", (gint) 1, NULL)); 711 +LIB3270_EXPORT GtkWidget * v3270ft_new(GtkWidget *parent) {
  712 +
  713 + GtkWidget * dialog = GTK_WIDGET(g_object_new(GTK_TYPE_V3270FT, "use-header-bar", (gint) 1, NULL));
  714 + gtk_window_set_transient_for(GTK_WINDOW(dialog),GTK_WINDOW(gtk_widget_get_toplevel(parent)));
  715 +
  716 + return dialog;
711 } 717 }
712 718
src/include/v3270/filetransfer.h
@@ -52,7 +52,7 @@ @@ -52,7 +52,7 @@
52 typedef struct _v3270ftClass v3270ftClass; 52 typedef struct _v3270ftClass v3270ftClass;
53 53
54 54
55 - GtkWidget * v3270ft_new(void); 55 + GtkWidget * v3270ft_new(GtkWidget *dialog);
56 GType v3270ft_get_type(void); 56 GType v3270ft_get_type(void);
57 void v3270ft_set_options(GtkWidget *widget, LIB3270_FT_OPTION opt); 57 void v3270ft_set_options(GtkWidget *widget, LIB3270_FT_OPTION opt);
58 LIB3270_FT_OPTION v3270ft_get_options(GtkWidget *widget); 58 LIB3270_FT_OPTION v3270ft_get_options(GtkWidget *widget);
src/testprogram/testprogram.c
@@ -148,7 +148,7 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term @@ -148,7 +148,7 @@ static void disconnect_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *term
148 lib3270_disconnect(v3270_get_session(terminal)); 148 lib3270_disconnect(v3270_get_session(terminal));
149 } 149 }
150 150
151 -static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) 151 +static void ft_clicked(GtkButton *button, GtkWidget *terminal)
152 { 152 {
153 /* 153 /*
154 GtkWidget * dialog = v3270_dialog_new(terminal, _("test"), _("test")); 154 GtkWidget * dialog = v3270_dialog_new(terminal, _("test"), _("test"));
@@ -194,7 +194,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) @@ -194,7 +194,7 @@ static void ft_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal)
194 // 194 //
195 // V5.1 dialog 195 // V5.1 dialog
196 // 196 //
197 - GtkWidget *dialog = v3270ft_new(); 197 + GtkWidget *dialog = v3270ft_new(button);
198 198
199 /* 199 /*
200 // 200 //
@@ -382,6 +382,9 @@ int main (int argc, char **argv) { @@ -382,6 +382,9 @@ int main (int argc, char **argv) {
382 g_object_unref (app); 382 g_object_unref (app);
383 383
384 g_message("rc=%d",status); 384 g_message("rc=%d",status);
385 - return status; 385 +
  386 + return 0;
  387 +
386 } 388 }
387 389
  390 +
@@ -58,6 +58,9 @@ @@ -58,6 +58,9 @@
58 <Unit filename="src/dialogs/hostselect.c"> 58 <Unit filename="src/dialogs/hostselect.c">
59 <Option compilerVar="CC" /> 59 <Option compilerVar="CC" />
60 </Unit> 60 </Unit>
  61 + <Unit filename="src/dialogs/linux/select.c">
  62 + <Option compilerVar="CC" />
  63 + </Unit>
61 <Unit filename="src/dialogs/print/begin.c"> 64 <Unit filename="src/dialogs/print/begin.c">
62 <Option compilerVar="CC" /> 65 <Option compilerVar="CC" />
63 </Unit> 66 </Unit>
@@ -72,9 +75,6 @@ @@ -72,9 +75,6 @@
72 <Unit filename="src/dialogs/security.c"> 75 <Unit filename="src/dialogs/security.c">
73 <Option compilerVar="CC" /> 76 <Option compilerVar="CC" />
74 </Unit> 77 </Unit>
75 - <Unit filename="src/dialogs/select.c">  
76 - <Option compilerVar="CC" />  
77 - </Unit>  
78 <Unit filename="src/dialogs/settingsdialog.c"> 78 <Unit filename="src/dialogs/settingsdialog.c">
79 <Option compilerVar="CC" /> 79 <Option compilerVar="CC" />
80 </Unit> 80 </Unit>
@@ -84,6 +84,9 @@ @@ -84,6 +84,9 @@
84 <Unit filename="src/dialogs/transfer.c"> 84 <Unit filename="src/dialogs/transfer.c">
85 <Option compilerVar="CC" /> 85 <Option compilerVar="CC" />
86 </Unit> 86 </Unit>
  87 + <Unit filename="src/dialogs/windows/select.c">
  88 + <Option compilerVar="CC" />
  89 + </Unit>
87 <Unit filename="src/filetransfer/activity.c"> 90 <Unit filename="src/filetransfer/activity.c">
88 <Option compilerVar="CC" /> 91 <Option compilerVar="CC" />
89 </Unit> 92 </Unit>