Commit 7bce141e42c047273e3bcba48867b93c43f016c8

Authored by perry.werneck@gmail.com
1 parent 3a062041

Implementando dialogo para obter nome de arquivo no plugin rexx

@@ -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 &quot;%s: Familia %d é inválida&quot; @@ -88,7 +88,7 @@ msgstr &quot;%s: Familia %d é inválida&quot;
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 &quot;&quot; @@ -169,7 +169,7 @@ msgstr &quot;&quot;
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 &quot;An error occurred trying to allocate memory. This should never happen.&quot; @@ -222,7 +222,7 @@ msgid &quot;An error occurred trying to allocate memory. This should never happen.&quot;
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 &quot;Tela cheia&quot; @@ -731,7 +731,7 @@ msgstr &quot;Tela cheia&quot;
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 &quot;Servidor rejeitou o tipo de dispositivo ou requisição&quot; @@ -800,11 +800,11 @@ msgstr &quot;Servidor rejeitou o tipo de dispositivo ou requisição&quot;
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 &quot;LRECL:&quot; @@ -900,7 +900,7 @@ msgstr &quot;LRECL:&quot;
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 &quot;PF8&quot; @@ -1139,7 +1139,7 @@ msgstr &quot;PF8&quot;
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 &quot;Colar com margem esquerda&quot; @@ -1176,7 +1176,7 @@ msgstr &quot;Colar com margem esquerda&quot;
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 &quot;Enviar arquivo&quot; @@ -1593,7 +1593,7 @@ msgstr &quot;Enviar arquivo&quot;
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 &quot;Enviar mensagens para o log do sistema&quot; @@ -1601,7 +1601,7 @@ msgstr &quot;Enviar mensagens para o log do sistema&quot;
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 &quot;Nome da sessão&quot; @@ -1609,15 +1609,15 @@ msgstr &quot;Nome da sessão&quot;
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 &quot;&quot; @@ -1901,7 +1901,7 @@ msgstr &quot;&quot;
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 &quot;C&quot; @@ -297,64 +361,6 @@ extern &quot;C&quot;
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 -*/