Commit 7bce141e42c047273e3bcba48867b93c43f016c8
1 parent
3a062041
Exists in
master
and in
5 other branches
Implementando dialogo para obter nome de arquivo no plugin rexx
Showing
5 changed files
with
150 additions
and
149 deletions
Show diff stats
po/pt_BR.po
@@ -5,7 +5,7 @@ msgid "" | @@ -5,7 +5,7 @@ msgid "" | ||
5 | msgstr "" | 5 | msgstr "" |
6 | "Project-Id-Version: pw3270 5.0\n" | 6 | "Project-Id-Version: pw3270 5.0\n" |
7 | "Report-Msgid-Bugs-To: \n" | 7 | "Report-Msgid-Bugs-To: \n" |
8 | -"POT-Creation-Date: 2013-06-17 11:06-0300\n" | 8 | +"POT-Creation-Date: 2013-06-18 07:49-0300\n" |
9 | "PO-Revision-Date: 2013-05-08 14:30-0300\n" | 9 | "PO-Revision-Date: 2013-05-08 14:30-0300\n" |
10 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" | 10 | "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n" |
11 | "Language-Team: Português <>\n" | 11 | "Language-Team: Português <>\n" |
@@ -88,7 +88,7 @@ msgstr "%s: Familia %d é inválida" | @@ -88,7 +88,7 @@ msgstr "%s: Familia %d é inválida" | ||
88 | msgid "%s:%d" | 88 | msgid "%s:%d" |
89 | msgstr "%s:%d" | 89 | msgstr "%s:%d" |
90 | 90 | ||
91 | -#: main.c:339 | 91 | +#: main.c:341 |
92 | msgid "- 3270 Emulator for Gtk" | 92 | msgid "- 3270 Emulator for Gtk" |
93 | msgstr "- Emulador 3270 para GTK" | 93 | msgstr "- Emulador 3270 para GTK" |
94 | 94 | ||
@@ -169,7 +169,7 @@ msgstr "" | @@ -169,7 +169,7 @@ msgstr "" | ||
169 | msgid "<b>SSL state is undefined</b>Unexpected SSL status %ld" | 169 | msgid "<b>SSL state is undefined</b>Unexpected SSL status %ld" |
170 | msgstr "<b>Estado do SSL é indefinido</b>Estado SSL inesperado %ld" | 170 | msgstr "<b>Estado do SSL é indefinido</b>Estado SSL inesperado %ld" |
171 | 171 | ||
172 | -#: main.c:359 | 172 | +#: main.c:361 |
173 | msgid "" | 173 | msgid "" |
174 | "<b>Valid options:</b>\n" | 174 | "<b>Valid options:</b>\n" |
175 | "\n" | 175 | "\n" |
@@ -222,7 +222,7 @@ msgid "An error occurred trying to allocate memory. This should never happen." | @@ -222,7 +222,7 @@ msgid "An error occurred trying to allocate memory. This should never happen." | ||
222 | msgstr "" | 222 | msgstr "" |
223 | "Ocorreu um erro ao tentar alocar memória. Isso nunca deveria acontecer." | 223 | "Ocorreu um erro ao tentar alocar memória. Isso nunca deveria acontecer." |
224 | 224 | ||
225 | -#: main.c:319 main.c:321 | 225 | +#: main.c:321 main.c:323 |
226 | msgid "Application name" | 226 | msgid "Application name" |
227 | msgstr "Nome da aplicação" | 227 | msgstr "Nome da aplicação" |
228 | 228 | ||
@@ -731,7 +731,7 @@ msgstr "Tela cheia" | @@ -731,7 +731,7 @@ msgstr "Tela cheia" | ||
731 | msgid "Function bar" | 731 | msgid "Function bar" |
732 | msgstr "Barra de funções" | 732 | msgstr "Barra de funções" |
733 | 733 | ||
734 | -#: main.c:93 main.c:406 | 734 | +#: main.c:93 main.c:408 |
735 | msgid "GTK Version mismatch" | 735 | msgid "GTK Version mismatch" |
736 | msgstr "Divergência de versão GTK" | 736 | msgstr "Divergência de versão GTK" |
737 | 737 | ||
@@ -800,11 +800,11 @@ msgstr "Servidor rejeitou o tipo de dispositivo ou requisição" | @@ -800,11 +800,11 @@ msgstr "Servidor rejeitou o tipo de dispositivo ou requisição" | ||
800 | msgid "Host rejected resource(s)" | 800 | msgid "Host rejected resource(s)" |
801 | msgstr "Servidor rejeitou recurso(s)" | 801 | msgstr "Servidor rejeitou recurso(s)" |
802 | 802 | ||
803 | -#: main.c:327 | 803 | +#: main.c:329 |
804 | msgid "Host system type" | 804 | msgid "Host system type" |
805 | msgstr "Tipo do sistema no servidor" | 805 | msgstr "Tipo do sistema no servidor" |
806 | 806 | ||
807 | -#: main.c:325 | 807 | +#: main.c:327 |
808 | msgid "Host to connect" | 808 | msgid "Host to connect" |
809 | msgstr "Servidor a conectar" | 809 | msgstr "Servidor a conectar" |
810 | 810 | ||
@@ -900,7 +900,7 @@ msgstr "LRECL:" | @@ -900,7 +900,7 @@ msgstr "LRECL:" | ||
900 | msgid "Lateral keypad" | 900 | msgid "Lateral keypad" |
901 | msgstr "Barra lateral" | 901 | msgstr "Barra lateral" |
902 | 902 | ||
903 | -#: main.c:334 | 903 | +#: main.c:336 |
904 | #, fuzzy | 904 | #, fuzzy |
905 | msgid "Log to file" | 905 | msgid "Log to file" |
906 | msgstr "Salvar cópia para arquivo" | 906 | msgstr "Salvar cópia para arquivo" |
@@ -1139,7 +1139,7 @@ msgstr "PF8" | @@ -1139,7 +1139,7 @@ msgstr "PF8" | ||
1139 | msgid "PF9" | 1139 | msgid "PF9" |
1140 | msgstr "PF9" | 1140 | msgstr "PF9" |
1141 | 1141 | ||
1142 | -#: main.c:357 | 1142 | +#: main.c:359 |
1143 | msgid "Parse error" | 1143 | msgid "Parse error" |
1144 | msgstr "Erro de interpretação" | 1144 | msgstr "Erro de interpretação" |
1145 | 1145 | ||
@@ -1176,7 +1176,7 @@ msgstr "Colar com margem esquerda" | @@ -1176,7 +1176,7 @@ msgstr "Colar com margem esquerda" | ||
1176 | msgid "Path length constraint exceeded" | 1176 | msgid "Path length constraint exceeded" |
1177 | msgstr "Path length constraint exceeded" | 1177 | msgstr "Path length constraint exceeded" |
1178 | 1178 | ||
1179 | -#: main.c:322 | 1179 | +#: main.c:324 |
1180 | msgid "Path to application data files" | 1180 | msgid "Path to application data files" |
1181 | msgstr "Caminho para os arquivos de dados da aplicação" | 1181 | msgstr "Caminho para os arquivos de dados da aplicação" |
1182 | 1182 | ||
@@ -1593,7 +1593,7 @@ msgstr "Enviar arquivo" | @@ -1593,7 +1593,7 @@ msgstr "Enviar arquivo" | ||
1593 | msgid "Send file to host" | 1593 | msgid "Send file to host" |
1594 | msgstr "Enviar arquivo para o servidor" | 1594 | msgstr "Enviar arquivo para o servidor" |
1595 | 1595 | ||
1596 | -#: main.c:332 | 1596 | +#: main.c:334 |
1597 | msgid "Send messages to syslog" | 1597 | msgid "Send messages to syslog" |
1598 | msgstr "Enviar mensagens para o log do sistema" | 1598 | msgstr "Enviar mensagens para o log do sistema" |
1599 | 1599 | ||
@@ -1601,7 +1601,7 @@ msgstr "Enviar mensagens para o log do sistema" | @@ -1601,7 +1601,7 @@ msgstr "Enviar mensagens para o log do sistema" | ||
1601 | msgid "Send/Receive" | 1601 | msgid "Send/Receive" |
1602 | msgstr "Enviar/Receber" | 1602 | msgstr "Enviar/Receber" |
1603 | 1603 | ||
1604 | -#: main.c:324 | 1604 | +#: main.c:326 |
1605 | msgid "Session name" | 1605 | msgid "Session name" |
1606 | msgstr "Nome da sessão" | 1606 | msgstr "Nome da sessão" |
1607 | 1607 | ||
@@ -1609,15 +1609,15 @@ msgstr "Nome da sessão" | @@ -1609,15 +1609,15 @@ msgstr "Nome da sessão" | ||
1609 | msgid "Set hostname" | 1609 | msgid "Set hostname" |
1610 | msgstr "Selecione servidor" | 1610 | msgstr "Selecione servidor" |
1611 | 1611 | ||
1612 | -#: main.c:326 | 1612 | +#: main.c:328 |
1613 | msgid "Set reported colors (8/16)" | 1613 | msgid "Set reported colors (8/16)" |
1614 | msgstr "Define número de cores informadas (8/16)" | 1614 | msgstr "Define número de cores informadas (8/16)" |
1615 | 1615 | ||
1616 | -#: main.c:329 | 1616 | +#: main.c:331 |
1617 | msgid "Set toggles OFF" | 1617 | msgid "Set toggles OFF" |
1618 | msgstr "Desativa toggles" | 1618 | msgstr "Desativa toggles" |
1619 | 1619 | ||
1620 | -#: main.c:328 | 1620 | +#: main.c:330 |
1621 | msgid "Set toggles ON" | 1621 | msgid "Set toggles ON" |
1622 | msgstr "Ativa toggles" | 1622 | msgstr "Ativa toggles" |
1623 | 1623 | ||
@@ -1901,7 +1901,7 @@ msgstr "" | @@ -1901,7 +1901,7 @@ msgstr "" | ||
1901 | "programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple " | 1901 | "programa; se não, escreva para a Free Software Foundation, Inc., 59 Temple " |
1902 | "Place, Suite 330, Boston, MA, 02111-1307, USA" | 1902 | "Place, Suite 330, Boston, MA, 02111-1307, USA" |
1903 | 1903 | ||
1904 | -#: main.c:402 | 1904 | +#: main.c:404 |
1905 | #, c-format | 1905 | #, c-format |
1906 | msgid "This program requires GTK version %d.%d.%d" | 1906 | msgid "This program requires GTK version %d.%d.%d" |
1907 | msgstr "Este programa precisa do GTK versão %d.%d.%d" | 1907 | msgstr "Este programa precisa do GTK versão %d.%d.%d" |
src/include/pw3270.h
@@ -85,6 +85,8 @@ | @@ -85,6 +85,8 @@ | ||
85 | 85 | ||
86 | LIB3270_EXPORT gchar * pw3270_get_datadir(const gchar *first_element, ...); | 86 | LIB3270_EXPORT gchar * pw3270_get_datadir(const gchar *first_element, ...); |
87 | 87 | ||
88 | + LIB3270_EXPORT gchar * pw3270_file_chooser(GtkFileChooserAction action, const gchar *name, const gchar *title, const gchar *file, const gchar *ext); | ||
89 | + | ||
88 | typedef enum pw3270_src | 90 | typedef enum pw3270_src |
89 | { | 91 | { |
90 | PW3270_SRC_ALL, /**< Screen contents */ | 92 | PW3270_SRC_ALL, /**< Screen contents */ |
src/plugins/rx3270/pluginmain.cc
@@ -51,11 +51,13 @@ | @@ -51,11 +51,13 @@ | ||
51 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ | 51 | /*--[ Globals ]--------------------------------------------------------------------------------------*/ |
52 | 52 | ||
53 | #if GTK_CHECK_VERSION(2,32,0) | 53 | #if GTK_CHECK_VERSION(2,32,0) |
54 | - static GMutex mutex; | 54 | + static GMutex mutex; |
55 | #else | 55 | #else |
56 | static GStaticMutex mutex = G_STATIC_MUTEX_INIT; | 56 | static GStaticMutex mutex = G_STATIC_MUTEX_INIT; |
57 | #endif // GTK_CHECK_VERSION | 57 | #endif // GTK_CHECK_VERSION |
58 | 58 | ||
59 | + static gchar * script_name = NULL; | ||
60 | + | ||
59 | /*--[ Rexx application data block ]--------------------------------------------------------------------------*/ | 61 | /*--[ Rexx application data block ]--------------------------------------------------------------------------*/ |
60 | 62 | ||
61 | struct rexx_application_data | 63 | struct rexx_application_data |
@@ -65,6 +67,65 @@ | @@ -65,6 +67,65 @@ | ||
65 | const gchar * filename; | 67 | const gchar * filename; |
66 | }; | 68 | }; |
67 | 69 | ||
70 | +/*--[ Plugin session object ]--------------------------------------------------------------------------------*/ | ||
71 | + | ||
72 | + class plugin : public rx3270 | ||
73 | + { | ||
74 | + public: | ||
75 | + plugin(H3270 *hSession); | ||
76 | + virtual ~plugin(); | ||
77 | + | ||
78 | + void free(void *ptr); | ||
79 | + | ||
80 | + char * get_version(void); | ||
81 | + LIB3270_CSTATE get_cstate(void); | ||
82 | + int disconnect(void); | ||
83 | + int connect(const char *uri, bool wait = true); | ||
84 | + bool is_connected(void); | ||
85 | + bool is_ready(void); | ||
86 | + | ||
87 | + void logva(const char *fmt, va_list args); | ||
88 | + | ||
89 | + int iterate(bool wait); | ||
90 | + int wait(int seconds); | ||
91 | + int wait_for_ready(int seconds); | ||
92 | + | ||
93 | + char * get_text(int baddr, size_t len); | ||
94 | + char * get_text_at(int row, int col, size_t sz); | ||
95 | + int cmp_text_at(int row, int col, const char *text); | ||
96 | + int set_text_at(int row, int col, const char *str); | ||
97 | + | ||
98 | + int set_cursor_position(int row, int col); | ||
99 | + int set_cursor_addr(int addr); | ||
100 | + int get_cursor_addr(void); | ||
101 | + int emulate_input(const char *str); | ||
102 | + | ||
103 | + int set_toggle(LIB3270_TOGGLE ix, bool value); | ||
104 | + | ||
105 | + int enter(void); | ||
106 | + int pfkey(int key); | ||
107 | + int pakey(int key); | ||
108 | + | ||
109 | + int get_field_start(int baddr = -1); | ||
110 | + int get_field_len(int baddr = -1); | ||
111 | + int get_next_unprotected(int baddr = -1); | ||
112 | + | ||
113 | + int set_copy(const char *text); | ||
114 | + char * get_copy(void); | ||
115 | + | ||
116 | + char * get_clipboard(void); | ||
117 | + int set_clipboard(const char *text); | ||
118 | + | ||
119 | + int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | ||
120 | + char * file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename); | ||
121 | + | ||
122 | + protected: | ||
123 | + | ||
124 | + private: | ||
125 | + H3270 * hSession; | ||
126 | + | ||
127 | + }; | ||
128 | + | ||
68 | 129 | ||
69 | /*--[ Running rexx scripts ]---------------------------------------------------------------------------------*/ | 130 | /*--[ Running rexx scripts ]---------------------------------------------------------------------------------*/ |
70 | 131 | ||
@@ -166,7 +227,10 @@ | @@ -166,7 +227,10 @@ | ||
166 | } | 227 | } |
167 | 228 | ||
168 | v3270_set_script(widget,'R',TRUE); | 229 | v3270_set_script(widget,'R',TRUE); |
230 | + script_name = g_path_get_basename(filename); | ||
169 | RexxObjectPtr result = threadContext->CallProgram(filename, rxArgs); | 231 | RexxObjectPtr result = threadContext->CallProgram(filename, rxArgs); |
232 | + g_free(script_name); | ||
233 | + script_name = NULL; | ||
170 | v3270_set_script(widget,'R',FALSE); | 234 | v3270_set_script(widget,'R',FALSE); |
171 | 235 | ||
172 | if (threadContext->CheckCondition()) | 236 | if (threadContext->CheckCondition()) |
@@ -297,64 +361,6 @@ extern "C" | @@ -297,64 +361,6 @@ extern "C" | ||
297 | 361 | ||
298 | } | 362 | } |
299 | 363 | ||
300 | -/*--[ Plugin session object ]--------------------------------------------------------------------------------*/ | ||
301 | - | ||
302 | - class plugin : public rx3270 | ||
303 | - { | ||
304 | - public: | ||
305 | - plugin(H3270 *hSession); | ||
306 | - virtual ~plugin(); | ||
307 | - | ||
308 | - void free(void *ptr); | ||
309 | - | ||
310 | - char * get_version(void); | ||
311 | - LIB3270_CSTATE get_cstate(void); | ||
312 | - int disconnect(void); | ||
313 | - int connect(const char *uri, bool wait = true); | ||
314 | - bool is_connected(void); | ||
315 | - bool is_ready(void); | ||
316 | - | ||
317 | - void logva(const char *fmt, va_list args); | ||
318 | - | ||
319 | - int iterate(bool wait); | ||
320 | - int wait(int seconds); | ||
321 | - int wait_for_ready(int seconds); | ||
322 | - | ||
323 | - char * get_text(int baddr, size_t len); | ||
324 | - char * get_text_at(int row, int col, size_t sz); | ||
325 | - int cmp_text_at(int row, int col, const char *text); | ||
326 | - int set_text_at(int row, int col, const char *str); | ||
327 | - | ||
328 | - int set_cursor_position(int row, int col); | ||
329 | - int set_cursor_addr(int addr); | ||
330 | - int get_cursor_addr(void); | ||
331 | - int emulate_input(const char *str); | ||
332 | - | ||
333 | - int set_toggle(LIB3270_TOGGLE ix, bool value); | ||
334 | - | ||
335 | - int enter(void); | ||
336 | - int pfkey(int key); | ||
337 | - int pakey(int key); | ||
338 | - | ||
339 | - int get_field_start(int baddr = -1); | ||
340 | - int get_field_len(int baddr = -1); | ||
341 | - int get_next_unprotected(int baddr = -1); | ||
342 | - | ||
343 | - int set_copy(const char *text); | ||
344 | - char * get_copy(void); | ||
345 | - | ||
346 | - char * get_clipboard(void); | ||
347 | - int set_clipboard(const char *text); | ||
348 | - | ||
349 | - int popup_dialog(LIB3270_NOTIFY id , const char *title, const char *message, const char *fmt, ...); | ||
350 | - | ||
351 | - protected: | ||
352 | - | ||
353 | - private: | ||
354 | - H3270 * hSession; | ||
355 | - | ||
356 | - }; | ||
357 | - | ||
358 | /*--[ Implement ]------------------------------------------------------------------------------------*/ | 364 | /*--[ Implement ]------------------------------------------------------------------------------------*/ |
359 | 365 | ||
360 | static rx3270 * factory(const char *name) | 366 | static rx3270 * factory(const char *name) |
@@ -560,3 +566,7 @@ int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *mess | @@ -560,3 +566,7 @@ int plugin::popup_dialog(LIB3270_NOTIFY id , const char *title, const char *mess | ||
560 | return 0; | 566 | return 0; |
561 | } | 567 | } |
562 | 568 | ||
569 | +char * plugin::file_chooser_dialog(GtkFileChooserAction action, const char *title, const char *extension, const char *filename) | ||
570 | +{ | ||
571 | + return pw3270_file_chooser(action, script_name ? script_name : "rexx", title, filename, extension); | ||
572 | +} |
src/plugins/rx3270/rexx_methods.cc
@@ -552,6 +552,7 @@ RexxMethod5(RexxStringObject, rx3270_method_get_filename, CSELF, sessionPtr, CST | @@ -552,6 +552,7 @@ RexxMethod5(RexxStringObject, rx3270_method_get_filename, CSELF, sessionPtr, CST | ||
552 | if(!strcasecmp(action_name,action[f].action_name)) | 552 | if(!strcasecmp(action_name,action[f].action_name)) |
553 | { | 553 | { |
554 | id = action[f].id; | 554 | id = action[f].id; |
555 | + break; | ||
555 | } | 556 | } |
556 | } | 557 | } |
557 | 558 |
src/pw3270/dialog.c
@@ -214,9 +214,9 @@ | @@ -214,9 +214,9 @@ | ||
214 | 214 | ||
215 | } | 215 | } |
216 | 216 | ||
217 | - static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GtkAction *action) | 217 | + static GtkFileChooserConfirmation confirm_overwrite(GtkFileChooser *chooser, GObject *action) |
218 | { | 218 | { |
219 | - const gchar * attr = g_object_get_data(G_OBJECT(action),"overwrite"); | 219 | + const gchar * attr = g_object_get_data(action,"overwrite"); |
220 | GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | 220 | GtkFileChooserConfirmation ret = GTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; |
221 | GtkWidget * dialog; | 221 | GtkWidget * dialog; |
222 | 222 | ||
@@ -269,7 +269,7 @@ | @@ -269,7 +269,7 @@ | ||
269 | NULL ); | 269 | NULL ); |
270 | 270 | ||
271 | gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); | 271 | gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); |
272 | - g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), action); | 272 | + g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(action)); |
273 | 273 | ||
274 | add_option_menus(dialog, action, &encattr); | 274 | add_option_menus(dialog, action, &encattr); |
275 | 275 | ||
@@ -520,82 +520,70 @@ | @@ -520,82 +520,70 @@ | ||
520 | g_free(info); | 520 | g_free(info); |
521 | } | 521 | } |
522 | 522 | ||
523 | -/* | ||
524 | - G_GNUC_INTERNAL void run_security_dialog(GtkWidget *widget) | 523 | + LIB3270_EXPORT gchar * pw3270_file_chooser(GtkFileChooserAction action, const gchar *name, const gchar *title, const gchar *file, const gchar *ext) |
525 | { | 524 | { |
526 | - GtkWidget * dialog; | ||
527 | - H3270 * hSession = pw3270_get_session(widget); | ||
528 | - | ||
529 | - trace("%s(%p)",__FUNCTION__,widget); | ||
530 | - | ||
531 | -#ifdef HAVE_LIBSSL | ||
532 | - if(lib3270_get_secure(hSession) == LIB3270_SSL_UNSECURE) | ||
533 | -#endif // HAVE_LIBSSL | ||
534 | - { | ||
535 | - // Connection is insecure, show simple dialog with host and info | ||
536 | - | ||
537 | - dialog = gtk_message_dialog_new( | ||
538 | - GTK_WINDOW(widget), | ||
539 | - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
540 | - GTK_MESSAGE_INFO, | ||
541 | - GTK_BUTTONS_CLOSE, | ||
542 | - pw3270_get_host(widget) | ||
543 | - ); | ||
544 | - | ||
545 | - gtk_message_dialog_format_secondary_markup( | ||
546 | - GTK_MESSAGE_DIALOG(dialog), | ||
547 | - "%s", _( "<b>Identity not verified</b>\nThe connection is insecure" )); | ||
548 | - | ||
549 | - } | ||
550 | -#ifdef HAVE_LIBSSL | ||
551 | - else | ||
552 | - { | ||
553 | - long id = lib3270_get_SSL_verify_result(hSession); | ||
554 | - const gchar * title = N_( "Unexpected SSL error"); | ||
555 | - const gchar * text = NULL; | ||
556 | - const gchar * icon = GTK_STOCK_DIALOG_ERROR; | ||
557 | - int f; | ||
558 | - | ||
559 | - for(f=0;f<G_N_ELEMENTS(sslerror);f++) | ||
560 | - { | ||
561 | - if(sslerror[f].id == id) | ||
562 | - { | ||
563 | - title = sslerror[f].title; | ||
564 | - icon = sslerror[f].icon; | ||
565 | - text = sslerror[f].text; | ||
566 | - break; | ||
567 | - } | ||
568 | - } | ||
569 | - | ||
570 | - dialog = gtk_message_dialog_new( | ||
571 | - GTK_WINDOW(widget), | ||
572 | - GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT, | ||
573 | - GTK_MESSAGE_OTHER, | ||
574 | - GTK_BUTTONS_CLOSE, | ||
575 | - "%s",gettext(title) | ||
576 | - ); | 525 | + static const struct _btn |
526 | + { | ||
527 | + const gchar * button; | ||
528 | + GtkFileChooserAction action; | ||
529 | + } btn[] = | ||
530 | + { | ||
531 | + { GTK_STOCK_OPEN, GTK_FILE_CHOOSER_ACTION_OPEN }, | ||
532 | + { GTK_STOCK_SAVE, GTK_FILE_CHOOSER_ACTION_SAVE }, | ||
533 | + { GTK_STOCK_OK, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER }, | ||
534 | + { GTK_STOCK_OK, GTK_FILE_CHOOSER_ACTION_CREATE_FOLDER } | ||
535 | + }; | ||
536 | + | ||
537 | + GtkWidget * dialog; | ||
538 | + gchar * ptr; | ||
539 | + const gchar * button = GTK_STOCK_OK; | ||
540 | + gchar * filename = NULL; | ||
541 | + int f; | ||
542 | + | ||
543 | + for(f=0;f<G_N_ELEMENTS(btn);f++) | ||
544 | + { | ||
545 | + if(action == btn[f].action) | ||
546 | + { | ||
547 | + button = btn[f].button; | ||
548 | + break; | ||
549 | + } | ||
550 | + } | ||
577 | 551 | ||
578 | - gtk_message_dialog_set_image(GTK_MESSAGE_DIALOG(dialog),gtk_image_new_from_stock(icon,GTK_ICON_SIZE_DIALOG)); | 552 | + dialog = gtk_file_chooser_dialog_new( title, |
553 | + GTK_WINDOW(pw3270_get_toplevel()), | ||
554 | + action, | ||
555 | + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, | ||
556 | + button, GTK_RESPONSE_ACCEPT, | ||
557 | + NULL ); | ||
579 | 558 | ||
580 | - if(text) | ||
581 | - { | ||
582 | - gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),text); | ||
583 | - } | ||
584 | - else | ||
585 | - { | ||
586 | - gchar *str = g_strdup_printf("Unexpected SSL error <b>%ld</b>",id); | ||
587 | - gtk_message_dialog_format_secondary_markup(GTK_MESSAGE_DIALOG(dialog),text); | ||
588 | - g_free(str); | ||
589 | - } | 559 | + if(action == GTK_FILE_CHOOSER_ACTION_SAVE) |
560 | + { | ||
561 | + gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); | ||
562 | + g_signal_connect(GTK_FILE_CHOOSER(dialog), "confirm-overwrite", G_CALLBACK(confirm_overwrite), G_OBJECT(dialog)); | ||
563 | + } | ||
590 | 564 | ||
591 | - } | ||
592 | -#endif // HAVE_LIBSSL | 565 | + if(file) |
566 | + { | ||
567 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),file); | ||
568 | + } | ||
569 | + else | ||
570 | + { | ||
571 | + ptr = get_string_from_config("files",name,""); | ||
572 | + if(*ptr) | ||
573 | + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),ptr); | ||
574 | + else | ||
575 | + gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(dialog),g_get_user_special_dir(G_USER_DIRECTORY_DOCUMENTS)); | ||
576 | + g_free(ptr); | ||
577 | + } | ||
593 | 578 | ||
594 | - gtk_window_set_title(GTK_WINDOW(dialog),_("About security")); | 579 | + if(gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) |
580 | + { | ||
581 | + filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); | ||
582 | + if(filename) | ||
583 | + set_string_to_config("files",name,"%s",filename); | ||
584 | + } | ||
595 | 585 | ||
596 | - gtk_widget_show_all(GTK_WIDGET(dialog)); | ||
597 | - gtk_dialog_run(GTK_DIALOG(dialog)); | ||
598 | - gtk_widget_destroy(GTK_WIDGET(dialog)); | 586 | + gtk_widget_destroy(dialog); |
599 | 587 | ||
588 | + return filename; | ||
600 | } | 589 | } |
601 | -*/ |