Commit 8c67970fc273d1133a05bed0e71c21ecc47799a6

Authored by Perry Werneck
Committed by GitHub
2 parents 0aca5542 d5dbe350
Exists in master and in 1 other branch develop

Merge pull request #9 from PerryWerneck/develop

Updating to the last development version; many fixes and improvements.
Makefile.in
... ... @@ -49,7 +49,8 @@ SOURCES= \
49 49 $(wildcard src/dialogs/print/*.c) \
50 50 $(wildcard src/dialogs/save/*.c) \
51 51 $(wildcard src/dialogs/font/*.c) \
52   - $(wildcard src/dialogs/settings/*.c)
  52 + $(wildcard src/dialogs/settings/*.c) \
  53 + $(wildcard src/tools/*.c)
53 54  
54 55 TEST_SOURCES= \
55 56 $(wildcard src/testprogram/*.c)
... ... @@ -70,10 +71,9 @@ WINDRES=@WINDRES@
70 71 AR=@AR@
71 72 VALGRIND=@VALGRIND@
72 73 GENMARSHAL=@GENMARSHAL@
73   -CONVERT=@CONVERT@
74   -OPTIPNG=@OPTIPNG@
75 74 ZIP=@ZIP@
76 75 DLLTOOL=@DLLTOOL@
  76 +STRIP=@STRIP@
77 77  
78 78 #---[ Paths ]----------------------------------------------------------------------------
79 79  
... ... @@ -149,6 +149,11 @@ $(OBJDBG)/%.o: \
149 149  
150 150 @$(CC) \
151 151 $(CFLAGS) \
  152 + -DDEBUG=1 \
  153 + -MM -MT $@ -MF $(patsubst %.o,%.d,$@) $<
  154 +
  155 + @$(CC) \
  156 + $(CFLAGS) \
152 157 -Wall -Wextra -fstack-check \
153 158 -DDEBUG=1 \
154 159 -o $@ -c $<
... ... @@ -177,6 +182,12 @@ $(OBJRLS)/%.o: \
177 182  
178 183 @echo $< ...
179 184 @$(MKDIR) $(dir $@)
  185 +
  186 + @$(CC) \
  187 + $(CFLAGS) \
  188 + -DNDEBUG=1 \
  189 + -MM -MT $@ -MF $(patsubst %.o,%.d,$@) $<
  190 +
180 191 @$(CC) \
181 192 $(CFLAGS) \
182 193 -DNDEBUG=1 \
... ... @@ -311,6 +322,11 @@ $(BINRLS)/$(SONAME): \
311 322 -L$(BINRLS) \
312 323 $(LIBS)
313 324  
  325 +strip: \
  326 + $(BINRLS)/$(SONAME)
  327 +
  328 + @$(STRIP) --discard-all $(BINRLS)/$(SONAME)
  329 +
314 330 $(BINRLS)/static/$(LIBNAME).a: \
315 331 $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).o)
316 332  
... ... @@ -414,7 +430,7 @@ install-linux-dev:
414 430 $(DESTDIR)$(libdir)/$(LIBNAME)@DLLEXT@
415 431  
416 432 install-windows-dev: \
417   - $(BINRLS)/$(SONAME) \
  433 + strip \
418 434 $(BINRLS)/$(LIBNAME).dll.a
419 435  
420 436 @$(MKDIR) \
... ... @@ -564,4 +580,8 @@ clean: \
564 580 cleanDebug \
565 581 cleanRelease
566 582  
  583 +-include $(foreach SRC, $(basename $(SOURCES)), $(OBJDBG)/$(SRC).d)
  584 +-include $(foreach SRC, $(basename $(SOURCES)), $(OBJRLS)/$(SRC).d)
  585 +
  586 +
567 587  
... ...
configure.ac
... ... @@ -138,8 +138,6 @@ dnl Check for other programs
138 138 dnl ---------------------------------------------------------------------------
139 139  
140 140 AC_PATH_TOOL([AR], [ar], [ar])
141   -AC_PATH_TOOL([CONVERT], [convert], [no])
142   -AC_PATH_TOOL([OPTIPNG],[optipng],[no])
143 141 AC_PATH_TOOL([ZIP],[zip],[no])
144 142 AC_PATH_TOOL([DLLTOOL],[dlltool],[no])
145 143 AC_PATH_TOOL([WINDRES], [windres], [no])
... ... @@ -238,6 +236,7 @@ AC_PATH_TOOL([MSGMERGE], [msgmerge], [no])
238 236 AC_PATH_TOOL([MSGFMT], [msgfmt], [no])
239 237 AC_PATH_TOOL([VALGRIND], [valgrind], [no])
240 238 AC_PATH_TOOL([GENMARSHAL], [glib-genmarshal], [glib-genmarshal])
  239 +AC_PATH_TOOL([STRIP], [strip], [true])
241 240  
242 241 AC_CHECK_HEADER(libintl.h, [
243 242 AC_DEFINE(HAVE_LIBINTL, 1)
... ...
locale/pt_BR.po
... ... @@ -5,8 +5,8 @@ msgid &quot;&quot;
5 5 msgstr ""
6 6 "Project-Id-Version: pw3270 5.0\n"
7 7 "Report-Msgid-Bugs-To: \n"
8   -"POT-Creation-Date: 2020-09-12 13:50-0300\n"
9   -"PO-Revision-Date: 2020-08-03 15:26-0300\n"
  8 +"POT-Creation-Date: 2020-10-24 11:11-0300\n"
  9 +"PO-Revision-Date: 2020-10-15 15:37-0300\n"
10 10 "Last-Translator: Perry Werneck <perry.werneck@gmail.com>\n"
11 11 "Language-Team: Português <>\n"
12 12 "Language: pt_BR\n"
... ... @@ -24,7 +24,7 @@ msgstr &quot;&quot;
24 24 msgid "16 colors"
25 25 msgstr "16 cores"
26 26  
27   -#: src/filetransfer/v3270ft.c:353 src/filetransfer/v3270ftprogress.c:386
  27 +#: src/filetransfer/v3270ftprogress.c:386 src/filetransfer/v3270ft.c:353
28 28 #: src/dialogs/print/settingsdialog.c:284
29 29 #: src/dialogs/print/settingsdialog.c:286
30 30 #: src/dialogs/print/settingsdialog.c:288
... ... @@ -47,7 +47,7 @@ msgstr &quot;&quot;
47 47 "<b>Identidade não foi confirmada</b>\n"
48 48 "Desconectado do servidor"
49 49  
50   -#: src/dialogs/print/print.c:150
  50 +#: src/dialogs/print/print.c:148
51 51 msgid "<b>Text options</b>"
52 52 msgstr "<b>Opções de texto</b>"
53 53  
... ... @@ -80,7 +80,7 @@ msgstr &quot;Nome da Ação&quot;
80 80 msgid "Activity already on the queue"
81 81 msgstr "Atividade já está na fila"
82 82  
83   -#: src/terminal/actions/table.c:75
  83 +#: src/terminal/actions/table.c:99
84 84 msgid "Add to copy"
85 85 msgstr "Adicionar à cópia"
86 86  
... ... @@ -88,6 +88,10 @@ msgstr &quot;Adicionar à cópia&quot;
88 88 msgid "Address or name of the host to connect."
89 89 msgstr "Endereço ou nome do host a conectar."
90 90  
  91 +#: src/tools/entry.c:121
  92 +msgid "All files"
  93 +msgstr "Todos os arquivos"
  94 +
91 95 #: src/dialogs/settings/accelerator.c:206
92 96 msgid "Alternative"
93 97 msgstr "Alternativa"
... ... @@ -108,11 +112,11 @@ msgstr &quot;&quot;
108 112 msgid "An invalid SEND or RECEIVE parameter was sent to the host."
109 113 msgstr "Um parametro de ENVIO/RECEBIMENTO inválido foi enviado para o host."
110 114  
111   -#: src/terminal/actions/table.c:77
  115 +#: src/terminal/actions/table.c:101
112 116 msgid "Append selected area to current clipboard contents"
113 117 msgstr "Adiciona a área selecionada no conteúdo da área de transferência"
114 118  
115   -#: src/terminal/actions/table.c:76
  119 +#: src/terminal/actions/table.c:100
116 120 msgid "Append selection to clipboard"
117 121 msgstr "Adiciona seleção na área de transferência"
118 122  
... ... @@ -179,12 +183,12 @@ msgstr &quot;Não é possível adicionar atividade&quot;
179 183 msgid "Can't find a valid font with the name \"%s\""
180 184 msgstr "Não encontrei uma fonte válida com o nome \"%s\""
181 185  
182   -#: src/filetransfer/load.c:271
  186 +#: src/filetransfer/load.c:269
183 187 #, c-format
184 188 msgid "Can't load %s"
185 189 msgstr "Não foi possível carregar %s"
186 190  
187   -#: src/dialogs/load.c:324
  191 +#: src/dialogs/load.c:323
188 192 #, c-format
189 193 msgid "Can't open %s"
190 194 msgstr "Não foi possível abrir %s"
... ... @@ -202,7 +206,7 @@ msgstr &quot;Erro ao converter valor do cgcsid&quot;
202 206 msgid "Can't parse character value"
203 207 msgstr "Erro ao analisar valor de caractere"
204 208  
205   -#: src/selection/windows/paste.c:79 src/selection/windows/paste.c:119
  209 +#: src/selection/linux/paste.c:81 src/selection/linux/paste.c:115
206 210 msgid "Can't paste"
207 211 msgstr "Não é possivel colar"
208 212  
... ... @@ -210,13 +214,13 @@ msgstr &quot;Não é possivel colar&quot;
210 214 msgid "Can't paste text"
211 215 msgstr "Não é possível colar texto"
212 216  
213   -#: src/filetransfer/activitylist.c:436 src/filetransfer/save.c:117
214   -#: src/trace/trace.c:486 src/dialogs/transfer.c:91 src/dialogs/save/save.c:627
  217 +#: src/filetransfer/save.c:117 src/filetransfer/activitylist.c:436
  218 +#: src/trace/trace.c:484 src/dialogs/transfer.c:91 src/dialogs/save/save.c:625
215 219 #, c-format
216 220 msgid "Can't save %s"
217 221 msgstr "Não foi possível salvar arquivo %s"
218 222  
219   -#: src/filetransfer/v3270ftprogress.c:773 src/filetransfer/worker.c:610
  223 +#: src/filetransfer/worker.c:610 src/filetransfer/v3270ftprogress.c:773
220 224 msgid "Can't set callback table"
221 225 msgstr "Não foi possível setar a tabela de retornos"
222 226  
... ... @@ -224,13 +228,13 @@ msgstr &quot;Não foi possível setar a tabela de retornos&quot;
224 228 msgid "Can't set lib3270 I/O controller"
225 229 msgstr "Não foi possível registrar manipuladores de I/O 3270"
226 230  
227   -#: src/filetransfer/v3270ftprogress.c:760 src/filetransfer/worker.c:591
  231 +#: src/filetransfer/worker.c:591 src/filetransfer/v3270ftprogress.c:760
228 232 msgid "Can't start file transfer session"
229 233 msgstr "Não foi possível iniciar transferência de arquivo"
230 234  
231   -#: src/filetransfer/transfer.c:89 src/filetransfer/v3270ftprogress.c:433
  235 +#: src/filetransfer/v3270ftprogress.c:433 src/filetransfer/transfer.c:89
232 236 #: src/dialogs/load.c:111 src/dialogs/save/save.c:117
233   -#: src/dialogs/settings/host.c:401
  237 +#: src/dialogs/settings/host.c:401 src/tools/entry.c:99
234 238 msgid "Cancel"
235 239 msgstr "Cancelar"
236 240  
... ... @@ -298,15 +302,23 @@ msgstr &quot;Comando a executar&quot;
298 302 msgid "Connection"
299 303 msgstr "Conexão"
300 304  
301   -#: src/terminal/actions/table.c:64 src/terminal/actions/table.c:87
  305 +#: src/terminal/actions/table.c:70 src/terminal/actions/table.c:111
302 306 msgid "Copy"
303 307 msgstr "Copiar"
304 308  
  309 +#: src/terminal/actions/table.c:79
  310 +msgid "Copy as HTML"
  311 +msgstr "Copiar como HTML"
  312 +
305 313 #: src/terminal/actions/table.c:88
  314 +msgid "Copy as image"
  315 +msgstr "Copiar como imagem"
  316 +
  317 +#: src/terminal/actions/table.c:112
306 318 msgid "Copy as plain text"
307 319 msgstr "Copiar como texto puro"
308 320  
309   -#: src/terminal/actions/table.c:98 src/terminal/actions/table.c:99
  321 +#: src/terminal/actions/table.c:122 src/terminal/actions/table.c:123
310 322 msgid "Copy as table"
311 323 msgstr "Copiar como tabela"
312 324  
... ... @@ -314,7 +326,15 @@ msgstr &quot;Copiar como tabela&quot;
314 326 msgid "Copy options"
315 327 msgstr "Opções da cópia"
316 328  
317   -#: src/terminal/actions/table.c:65
  329 +#: src/terminal/actions/table.c:80
  330 +msgid "Copy selection in HTML format"
  331 +msgstr "Copia seleção em formato HTML"
  332 +
  333 +#: src/terminal/actions/table.c:89
  334 +msgid "Copy selection in image format"
  335 +msgstr "Copia imagem da seleção"
  336 +
  337 +#: src/terminal/actions/table.c:71
318 338 msgid "Copy selection to clipboard"
319 339 msgstr "Salvar seleção para área de transferência"
320 340  
... ... @@ -356,20 +376,20 @@ msgstr &quot;Atual:&quot;
356 376 msgid "Custom Remap"
357 377 msgstr "Mapeamento personalizado"
358 378  
359   -#: src/terminal/actions/table.c:109 src/terminal/actions/table.c:118
360   -#: src/terminal/actions/table.c:129
  379 +#: src/terminal/actions/table.c:133 src/terminal/actions/table.c:142
  380 +#: src/terminal/actions/table.c:153
361 381 msgid "Cut"
362 382 msgstr "Recortar"
363 383  
364   -#: src/terminal/actions/table.c:119
  384 +#: src/terminal/actions/table.c:143
365 385 msgid "Cut and append to copy"
366 386 msgstr "Recortar e adicionar à cópia"
367 387  
368   -#: src/terminal/actions/table.c:130
  388 +#: src/terminal/actions/table.c:154
369 389 msgid "Cut as plain text"
370 390 msgstr "Recortar como texto puro"
371 391  
372   -#: src/terminal/actions/table.c:140 src/terminal/actions/table.c:141
  392 +#: src/terminal/actions/table.c:164 src/terminal/actions/table.c:165
373 393 msgid "Cut as table"
374 394 msgstr "Recortar como tabela"
375 395  
... ... @@ -397,20 +417,19 @@ msgstr &quot;Turquesa Escuro&quot;
397 417 msgid "Default"
398 418 msgstr "Padrão"
399 419  
400   -#: src/dialogs/popups.c:146
  420 +#: src/dialogs/popups.c:149
401 421 msgid "Don't ask again"
402 422 msgstr "Não perguntar de novo"
403 423  
404 424 #: src/dialogs/font/chooser.c:335
405   -#, fuzzy
406 425 msgid "Dynamic font spacing"
407   -msgstr "Estado do espaçamento dinâmico"
  426 +msgstr "Espaçamento dinâmico"
408 427  
409 428 #: src/filetransfer/tables.c:224
410 429 msgid "ETA:"
411 430 msgstr "ETA:"
412 431  
413   -#: src/terminal/actions/pakey.c:105 src/terminal/actions/pfkey.c:105
  432 +#: src/terminal/actions/pfkey.c:105 src/terminal/actions/pakey.c:105
414 433 msgid "Emit a PA Key action"
415 434 msgstr "Emite uma ação de tecla PA"
416 435  
... ... @@ -422,7 +441,7 @@ msgstr &quot;Emulação&quot;
422 441 msgid "Enabled"
423 442 msgstr "Habilitado"
424 443  
425   -#: src/dialogs/print/print.c:72
  444 +#: src/dialogs/print/print.c:70
426 445 msgid "Error on print operation"
427 446 msgstr "Erro na operação de impressão"
428 447  
... ... @@ -446,7 +465,7 @@ msgstr &quot;_Formato do arquivo&quot;
446 465 msgid "Files to transfer"
447 466 msgstr "Arquivos a transferir"
448 467  
449   -#: src/terminal/actions/table.c:216
  468 +#: src/terminal/actions/table.c:240
450 469 msgid "Fit best"
451 470 msgstr "Melhor tamanho"
452 471  
... ... @@ -569,11 +588,11 @@ msgstr &quot;Ignore the fail and remove the file from queue.&quot;
569 588 msgid "Image copy"
570 589 msgstr "Copiar imagem"
571 590  
572   -#: src/terminal/actions/table.c:196
  591 +#: src/terminal/actions/table.c:220
573 592 msgid "Increase the font size"
574 593 msgstr "Aumenta o tamanho da fonte"
575 594  
576   -#: src/terminal/actions/table.c:153
  595 +#: src/terminal/actions/table.c:177
577 596 msgid "Input current clipboard contents to screen"
578 597 msgstr "Insere conteúdo da área de transferência"
579 598  
... ... @@ -589,7 +608,7 @@ msgstr &quot;Intensificado/Protegido&quot;
589 608 msgid "Intensified/Unprotected"
590 609 msgstr "Intensificado/Desprotegido"
591 610  
592   -#: src/terminal/callbacks.c:477
  611 +#: src/terminal/callbacks.c:440
593 612 #, c-format
594 613 msgid ""
595 614 "Invalid callback table, the release %s of lib%s can't be used (expecting "
... ... @@ -619,11 +638,11 @@ msgstr &quot;Atalhos de teclado&quot;
619 638 msgid "L_U Names"
620 639 msgstr "Nomes de L_U"
621 640  
622   -#: src/filetransfer/activitylist.c:384 src/filetransfer/v3270ft.c:198
  641 +#: src/filetransfer/v3270ft.c:198 src/filetransfer/activitylist.c:384
623 642 msgid "Load"
624 643 msgstr "Load"
625 644  
626   -#: src/filetransfer/activitylist.c:383 src/filetransfer/v3270ft.c:197
  645 +#: src/filetransfer/v3270ft.c:197 src/filetransfer/activitylist.c:383
627 646 msgid "Load queue from file"
628 647 msgstr "Ler a fila de um arquivo"
629 648  
... ... @@ -703,6 +722,10 @@ msgstr &quot;Nenhum (Não exporta cores)&quot;
703 722 msgid "None (Don't export font name)"
704 723 msgstr "Nenhuma (Não exporta fontes)"
705 724  
  725 +#: src/selection/linux/paste.c:117
  726 +msgid "None of the screens in the clipboard match with the current one."
  727 +msgstr "Nenhuma das telas da área de transferência corresponde à atual."
  728 +
706 729 #: src/dialogs/settings/colors.c:174
707 730 msgid "Normal/Protected"
708 731 msgstr "Normal/Protegido"
... ... @@ -711,7 +734,7 @@ msgstr &quot;Normal/Protegido&quot;
711 734 msgid "Normal/Unprotected"
712 735 msgstr "Normal/Desprotegido"
713 736  
714   -#: src/selection/windows/paste.c:75
  737 +#: src/selection/linux/paste.c:77
715 738 msgid "Not the same terminal type"
716 739 msgstr "O tipo de terminal é diferente"
717 740  
... ... @@ -747,7 +770,7 @@ msgstr &quot;Abrir&quot;
747 770 msgid "Operation has failed"
748 771 msgstr "Operação falhou"
749 772  
750   -#: src/dialogs/print/print.c:209
  773 +#: src/dialogs/print/print.c:207
751 774 msgid "Options"
752 775 msgstr "Opções"
753 776  
... ... @@ -771,23 +794,23 @@ msgstr &quot;Oversize&quot;
771 794 msgid "Parameter Type"
772 795 msgstr "Tipo de parâmetro"
773 796  
774   -#: src/terminal/actions/table.c:151 src/terminal/actions/table.c:163
  797 +#: src/terminal/actions/table.c:175 src/terminal/actions/table.c:187
775 798 msgid "Paste"
776 799 msgstr "Colar"
777 800  
778   -#: src/terminal/actions/table.c:164
  801 +#: src/terminal/actions/table.c:188
779 802 msgid "Paste as plain text"
780 803 msgstr "Colar como texto puro"
781 804  
782   -#: src/terminal/actions/table.c:152
  805 +#: src/terminal/actions/table.c:176
783 806 msgid "Paste clipboard contents"
784 807 msgstr "Colar conteúdo da área de transferência"
785 808  
786   -#: src/terminal/actions/table.c:173
  809 +#: src/terminal/actions/table.c:197
787 810 msgid "Paste file"
788 811 msgstr "Colar arquivo"
789 812  
790   -#: src/terminal/actions/table.c:183 src/dialogs/settings/clipboard.c:153
  813 +#: src/terminal/actions/table.c:207 src/dialogs/settings/clipboard.c:153
791 814 msgid "Paste formatted screen"
792 815 msgstr "Colar tela formatada"
793 816  
... ... @@ -795,7 +818,7 @@ msgstr &quot;Colar tela formatada&quot;
795 818 msgid "Paste from file"
796 819 msgstr "Colar de um arquivo"
797 820  
798   -#: src/terminal/actions/table.c:174
  821 +#: src/terminal/actions/table.c:198
799 822 msgid "Paste from text file"
800 823 msgstr "Colar de um arquivo texto"
801 824  
... ... @@ -803,7 +826,7 @@ msgstr &quot;Colar de um arquivo texto&quot;
803 826 msgid "Paste options"
804 827 msgstr "Opções para colar"
805 828  
806   -#: src/terminal/actions/table.c:184
  829 +#: src/terminal/actions/table.c:208
807 830 msgid "Paste similar screen from clipboard"
808 831 msgstr "Colar tela semelhante"
809 832  
... ... @@ -855,11 +878,11 @@ msgstr &quot;&quot;
855 878 msgid "Primary space"
856 879 msgstr "Primary space"
857 880  
858   -#: src/terminal/actions/table.c:277
  881 +#: src/terminal/actions/table.c:301
859 882 msgid "Print"
860 883 msgstr "Imprimir"
861 884  
862   -#: src/terminal/actions/table.c:310
  885 +#: src/terminal/actions/table.c:334
863 886 msgid "Print Copy"
864 887 msgstr "Imprimir cópia"
865 888  
... ... @@ -871,19 +894,19 @@ msgstr &quot;Operação de impressão falhou&quot;
871 894 msgid "Print operation has failed"
872 895 msgstr "Operação de impressão falhou"
873 896  
874   -#: src/terminal/actions/table.c:288
  897 +#: src/terminal/actions/table.c:312
875 898 msgid "Print screen"
876 899 msgstr "Imrpimir tela"
877 900  
878   -#: src/terminal/actions/table.c:278
  901 +#: src/terminal/actions/table.c:302
879 902 msgid "Print screen or selection"
880 903 msgstr "Imrpimir tela ou seleção"
881 904  
882   -#: src/terminal/actions/table.c:299
  905 +#: src/terminal/actions/table.c:323
883 906 msgid "Print selected"
884 907 msgstr "Imprimir seleção"
885 908  
886   -#: src/terminal/actions/table.c:300
  909 +#: src/terminal/actions/table.c:324
887 910 msgid "Print selected area"
888 911 msgstr "Imprimir área selecionada"
889 912  
... ... @@ -891,7 +914,7 @@ msgstr &quot;Imprimir área selecionada&quot;
891 914 msgid "Print selection box"
892 915 msgstr "Imprimir marca de seleção"
893 916  
894   -#: src/terminal/actions/table.c:289
  917 +#: src/terminal/actions/table.c:313
895 918 msgid "Print the entire screen"
896 919 msgstr "Imrpimir toda a tela"
897 920  
... ... @@ -915,7 +938,7 @@ msgstr &quot;Receber arquivo&quot;
915 938 msgid "Receive text file"
916 939 msgstr "Receber arquivo texto"
917 940  
918   -#: src/filetransfer/v3270ftprogress.c:739 src/dialogs/transfer.c:126
  941 +#: src/filetransfer/v3270ftprogress.c:739 src/dialogs/transfer.c:124
919 942 msgid "Receiving file"
920 943 msgstr "Recebendo arquivo"
921 944  
... ... @@ -923,7 +946,7 @@ msgstr &quot;Recebendo arquivo&quot;
923 946 msgid "Record Length"
924 947 msgstr "Comprimento de registro:"
925 948  
926   -#: src/filetransfer/settings.c:519 src/filetransfer/v3270ft.c:340
  949 +#: src/filetransfer/v3270ft.c:340 src/filetransfer/settings.c:519
927 950 msgid "Record format"
928 951 msgstr "Formato de registro"
929 952  
... ... @@ -956,10 +979,24 @@ msgstr &quot;Remoto:&quot;
956 979 msgid "Remove selected file from the transfer queue"
957 980 msgstr "Remove arquivo selecionado da fila de transferência"
958 981  
959   -#: src/terminal/actions/table.c:66
  982 +#: src/terminal/actions/table.c:72
960 983 msgid "Replace current clipboard contents with the selected area"
961 984 msgstr "Substituí conteúdo da área de transferência com a seleção"
962 985  
  986 +#: src/terminal/actions/table.c:81
  987 +msgid ""
  988 +"Replace current clipboard contents with the selected area in HTML format"
  989 +msgstr ""
  990 +"Substituí conteúdo da área de transferência com o conteúdo da área "
  991 +"selecionada em formato HTML"
  992 +
  993 +#: src/terminal/actions/table.c:90
  994 +msgid ""
  995 +"Replace current clipboard contents with the selected area in image format"
  996 +msgstr ""
  997 +"Substituí conteúdo da área de transferência com uma imagem da área "
  998 +"selecionada"
  999 +
963 1000 #: src/filetransfer/transfer.c:83
964 1001 msgid "Retry"
965 1002 msgstr "Repetir"
... ... @@ -984,13 +1021,13 @@ msgstr &quot;SSL/TLS&quot;
984 1021 msgid "Same of the screen"
985 1022 msgstr "Igual ao terminal"
986 1023  
987   -#: src/terminal/actions/table.c:230 src/filetransfer/activitylist.c:453
988   -#: src/filetransfer/v3270ft.c:215 src/trace/trace.c:505
  1024 +#: src/terminal/actions/table.c:254 src/filetransfer/v3270ft.c:215
  1025 +#: src/filetransfer/activitylist.c:451 src/trace/trace.c:499
989 1026 #: src/dialogs/transfer.c:69
990 1027 msgid "Save"
991 1028 msgstr "Salvar"
992 1029  
993   -#: src/terminal/actions/table.c:264
  1030 +#: src/terminal/actions/table.c:288
994 1031 msgid "Save Copy"
995 1032 msgstr "Salvar cópia"
996 1033  
... ... @@ -998,31 +1035,31 @@ msgstr &quot;Salvar cópia&quot;
998 1035 msgid "Save _As"
999 1036 msgstr "Salvar _Como"
1000 1037  
1001   -#: src/terminal/actions/table.c:240
  1038 +#: src/terminal/actions/table.c:264
1002 1039 msgid "Save all"
1003 1040 msgstr "Salvar tela"
1004 1041  
1005   -#: src/terminal/actions/table.c:262 src/dialogs/save/save.c:377
  1042 +#: src/terminal/actions/table.c:286 src/dialogs/save/save.c:377
1006 1043 msgid "Save copy"
1007 1044 msgstr "Salvar cópia"
1008 1045  
1009   -#: src/filetransfer/activitylist.c:452 src/filetransfer/v3270ft.c:214
  1046 +#: src/filetransfer/v3270ft.c:214 src/filetransfer/activitylist.c:450
1010 1047 msgid "Save queue to file"
1011 1048 msgstr "Salvar a fila para um arquivo"
1012 1049  
1013   -#: src/terminal/actions/table.c:242
  1050 +#: src/terminal/actions/table.c:266
1014 1051 msgid "Save screen"
1015 1052 msgstr "Salvar tela"
1016 1053  
1017   -#: src/terminal/actions/table.c:231
  1054 +#: src/terminal/actions/table.c:255
1018 1055 msgid "Save screen or selection"
1019 1056 msgstr "Salvar tela ou seleção"
1020 1057  
1021   -#: src/terminal/actions/table.c:251
  1058 +#: src/terminal/actions/table.c:275
1022 1059 msgid "Save selected"
1023 1060 msgstr "Salvar seleção"
1024 1061  
1025   -#: src/terminal/actions/table.c:253 src/dialogs/save/save.c:376
  1062 +#: src/terminal/actions/table.c:277 src/dialogs/save/save.c:376
1026 1063 msgid "Save selected area"
1027 1064 msgstr "Salvar área selecionada"
1028 1065  
... ... @@ -1030,7 +1067,7 @@ msgstr &quot;Salvar área selecionada&quot;
1030 1067 msgid "Save terminal contents"
1031 1068 msgstr "Salvar conteúdo da tela"
1032 1069  
1033   -#: src/trace/trace.c:504
  1070 +#: src/trace/trace.c:498
1034 1071 msgid "Save trace to file"
1035 1072 msgstr "Salvar trace para arquivo"
1036 1073  
... ... @@ -1038,7 +1075,7 @@ msgstr &quot;Salvar trace para arquivo&quot;
1038 1075 msgid "Save transfer activity to file"
1039 1076 msgstr "Salvar atividade de transferência para arquivo"
1040 1077  
1041   -#: src/dialogs/transfer.c:191
  1078 +#: src/dialogs/transfer.c:189
1042 1079 msgid "Save transfer information to file"
1043 1080 msgstr "Salvar informações da transferência para arquivo"
1044 1081  
... ... @@ -1058,7 +1095,7 @@ msgstr &quot;Salvar fila de transferências para arquivo&quot;
1058 1095 msgid "Screen with terminal attributes"
1059 1096 msgstr "Completa incluindo atributos do terminal"
1060 1097  
1061   -#: src/terminal/actions/table.c:185
  1098 +#: src/terminal/actions/table.c:209
1062 1099 msgid ""
1063 1100 "Search clipboard for a similar screen, if found paste unprotected fields and "
1064 1101 "restore cursor position"
... ... @@ -1078,7 +1115,7 @@ msgstr &quot;&quot;
1078 1115 msgid "Secondary space"
1079 1116 msgstr "Secondary space"
1080 1117  
1081   -#: src/filetransfer/settings.c:209 src/filetransfer/v3270ft.c:303
  1118 +#: src/filetransfer/v3270ft.c:303 src/filetransfer/settings.c:209
1082 1119 #: src/dialogs/save/save.c:98 src/dialogs/save/save.c:118
1083 1120 #: src/dialogs/settings/host.c:402
1084 1121 msgid "Select"
... ... @@ -1096,7 +1133,7 @@ msgstr &quot;Seleciona mapeamento de teclado personalizado&quot;
1096 1133 msgid "Select destination file"
1097 1134 msgstr "Selecionar arquivo destino"
1098 1135  
1099   -#: src/filetransfer/settings.c:467 src/filetransfer/v3270ft.c:591
  1136 +#: src/filetransfer/v3270ft.c:591 src/filetransfer/settings.c:467
1100 1137 #: src/dialogs/load.c:92 src/dialogs/load.c:108 src/dialogs/load.c:171
1101 1138 #: src/dialogs/save/save.c:258
1102 1139 msgid "Select file"
... ... @@ -1110,7 +1147,7 @@ msgstr &quot;Selecionar primeiro arquivo&quot;
1110 1147 msgid "Select last file"
1111 1148 msgstr "Selecionar último arquivo"
1112 1149  
1113   -#: src/filetransfer/settings.c:208 src/filetransfer/v3270ft.c:302
  1150 +#: src/filetransfer/v3270ft.c:302 src/filetransfer/settings.c:208
1114 1151 msgid "Select local file"
1115 1152 msgstr "Selecionar arquivo local"
1116 1153  
... ... @@ -1138,11 +1175,11 @@ msgstr &quot;Enviar arquivo&quot;
1138 1175 msgid "Send text file"
1139 1176 msgstr "Enviar arquivo texto"
1140 1177  
1141   -#: src/filetransfer/v3270ftprogress.c:739 src/dialogs/transfer.c:126
  1178 +#: src/filetransfer/v3270ftprogress.c:739 src/dialogs/transfer.c:124
1142 1179 msgid "Sending file"
1143 1180 msgstr "Enviando arquivo"
1144 1181  
1145   -#: src/terminal/actions/table.c:217
  1182 +#: src/terminal/actions/table.c:241
1146 1183 msgid "Set the font to the best size for window"
1147 1184 msgstr "Ajusta a fonte para o melhor tamanho"
1148 1185  
... ... @@ -1162,7 +1199,7 @@ msgstr &quot;Skip this transfer, keep the file on queue.&quot;
1162 1199 msgid "Smart copy"
1163 1200 msgstr "Cópia inteligente"
1164 1201  
1165   -#: src/filetransfer/settings.c:544 src/filetransfer/v3270ft.c:341
  1202 +#: src/filetransfer/v3270ft.c:341 src/filetransfer/settings.c:544
1166 1203 msgid "Space allocation units"
1167 1204 msgstr "Unidades de alocação de espaço"
1168 1205  
... ... @@ -1222,7 +1259,7 @@ msgstr &quot;Iniciar transferência&quot;
1222 1259 msgid "Starting"
1223 1260 msgstr "Iniciando"
1224 1261  
1225   -#: src/filetransfer/worker.c:314 src/dialogs/transfer.c:144
  1262 +#: src/filetransfer/worker.c:314 src/dialogs/transfer.c:142
1226 1263 msgid "Starting transfer"
1227 1264 msgstr "Iniciando transferência"
1228 1265  
... ... @@ -1345,18 +1382,18 @@ msgstr &quot;Nome do ícone associado à ação&quot;
1345 1382 msgid "The name used to invoke the action"
1346 1383 msgstr "Nome que é usado para invocar a ação"
1347 1384  
1348   -#: src/dialogs/print/print.c:82
  1385 +#: src/dialogs/print/print.c:80
1349 1386 msgid ""
1350 1387 "The print operation has been canceled, the print settings should not be "
1351 1388 "stored."
1352 1389 msgstr ""
1353 1390 "A operação de impressão foi cancelada, configuração não deve ser salva."
1354 1391  
1355   -#: src/dialogs/print/print.c:87
  1392 +#: src/dialogs/print/print.c:85
1356 1393 msgid "The print operation is running"
1357 1394 msgstr "Operação de impressão está em andamento"
1358 1395  
1359   -#: src/dialogs/print/print.c:77
  1396 +#: src/dialogs/print/print.c:75
1360 1397 msgid "The print settings should be stored."
1361 1398 msgstr "Configuração de impressão deve ser armazenada"
1362 1399  
... ... @@ -1425,7 +1462,7 @@ msgstr &quot;Janela de trace&quot;
1425 1462 msgid "Tracks"
1426 1463 msgstr "Trilhas"
1427 1464  
1428   -#: src/filetransfer/v3270ftprogress.c:721 src/filetransfer/worker.c:568
  1465 +#: src/filetransfer/worker.c:568 src/filetransfer/v3270ftprogress.c:721
1429 1466 msgid "Transfer failed"
1430 1467 msgstr "Transferência falhou"
1431 1468  
... ... @@ -1433,7 +1470,7 @@ msgstr &quot;Transferência falhou&quot;
1433 1470 msgid "Transfer operation has timed out"
1434 1471 msgstr "Operação de transferência esgotou o tempo de espera"
1435 1472  
1436   -#: src/filetransfer/settings.c:492 src/filetransfer/v3270ft.c:339
  1473 +#: src/filetransfer/v3270ft.c:339 src/filetransfer/settings.c:492
1437 1474 msgid "Transfer options"
1438 1475 msgstr "Opções de transferência"
1439 1476  
... ... @@ -1467,16 +1504,16 @@ msgstr &quot;Turquesa&quot;
1467 1504 msgid "UTF-8"
1468 1505 msgstr "UTF-8"
1469 1506  
1470   -#: src/selection/windows/paste.c:115
  1507 +#: src/selection/linux/paste.c:116
1471 1508 #, fuzzy
1472   -msgid "Unable to paste formatted data"
  1509 +msgid "Unable to paste formatted data."
1473 1510 msgstr "Incapaz de colar dados formatados."
1474 1511  
1475 1512 #: src/filetransfer/tables.c:92
1476 1513 msgid "Undefined"
1477 1514 msgstr "Indefinido"
1478 1515  
1479   -#: src/terminal/callbacks.c:486
  1516 +#: src/terminal/callbacks.c:449
1480 1517 #, c-format
1481 1518 msgid "Unexpected callback table, the release %s of lib%s is invalid"
1482 1519 msgstr "Tabela de callbacks inesperada, a revisão %s da lib%s é inválida"
... ... @@ -1491,7 +1528,7 @@ msgstr &quot;Formato inesperado %d&quot;
1491 1528 msgid "Unexpected mode %d"
1492 1529 msgstr "Modo inesperado %d"
1493 1530  
1494   -#: src/dialogs/print/print.c:92
  1531 +#: src/dialogs/print/print.c:90
1495 1532 #, c-format
1496 1533 msgid "Unexpected status %d in print operation"
1497 1534 msgstr "Estado inesperado %d na operação de impressão"
... ... @@ -1500,7 +1537,7 @@ msgstr &quot;Estado inesperado %d na operação de impressão&quot;
1500 1537 msgid "Unsecure"
1501 1538 msgstr "Insegura"
1502 1539  
1503   -#: src/dialogs/windows/select.c:169 src/dialogs/save/save.c:130
  1540 +#: src/dialogs/save/save.c:130
1504 1541 msgid "Untitled document"
1505 1542 msgstr "Documento sem título"
1506 1543  
... ... @@ -1690,11 +1727,11 @@ msgstr &quot;&quot;
1690 1727 msgid "You specified an option that is invalid."
1691 1728 msgstr "Você especificou uma opção inválida."
1692 1729  
1693   -#: src/terminal/actions/table.c:195
  1730 +#: src/terminal/actions/table.c:219
1694 1731 msgid "Zoom in"
1695 1732 msgstr "Ampliar"
1696 1733  
1697   -#: src/terminal/actions/table.c:205
  1734 +#: src/terminal/actions/table.c:229
1698 1735 msgid "Zoom out"
1699 1736 msgstr "Reduzir"
1700 1737  
... ... @@ -1706,9 +1743,9 @@ msgstr &quot;Texto _ASCII&quot;
1706 1743 msgid "_Apply"
1707 1744 msgstr "_Aplicar"
1708 1745  
1709   -#: src/selection/windows/paste.c:83 src/selection/windows/paste.c:123
1710   -#: src/dialogs/load.c:205 src/dialogs/load.c:224 src/dialogs/popups.c:170
1711   -#: src/dialogs/windows/select.c:158 src/dialogs/print/settingsdialog.c:410
  1746 +#: src/selection/linux/paste.c:85 src/dialogs/popups.c:173
  1747 +#: src/dialogs/load.c:205 src/dialogs/load.c:224 src/dialogs/linux/select.c:51
  1748 +#: src/dialogs/linux/select.c:77 src/dialogs/print/settingsdialog.c:410
1712 1749 #: src/dialogs/print/settingsdialog.c:429 src/dialogs/save/save.c:342
1713 1750 #: src/dialogs/save/save.c:361 src/dialogs/settings/dialog.c:231
1714 1751 msgid "_Cancel"
... ... @@ -1718,9 +1755,9 @@ msgstr &quot;_Cancelar&quot;
1718 1755 msgid "_Charset"
1719 1756 msgstr "Tabela de _Caracteres"
1720 1757  
1721   -#: src/trace/tracewindow.c:125 src/dialogs/popups.c:101
1722   -#: src/dialogs/security.c:236 src/dialogs/transfer.c:163
1723   -#: src/dialogs/transfer.c:183
  1758 +#: src/trace/tracewindow.c:125 src/dialogs/transfer.c:161
  1759 +#: src/dialogs/transfer.c:181 src/dialogs/security.c:236
  1760 +#: src/dialogs/popups.c:104
1724 1761 msgid "_Close"
1725 1762 msgstr "_Close"
1726 1763  
... ... @@ -1728,6 +1765,10 @@ msgstr &quot;_Close&quot;
1728 1765 msgid "_Color table"
1729 1766 msgstr "_Tabela de cores"
1730 1767  
  1768 +#: src/tools/entry.c:175
  1769 +msgid "_Continue"
  1770 +msgstr "_Continuar"
  1771 +
1731 1772 #: src/trace/tracewindow.c:117
1732 1773 msgid "_File"
1733 1774 msgstr "_Arquivo"
... ... @@ -1756,16 +1797,20 @@ msgstr &quot;Arquivo _local:&quot;
1756 1797 msgid "_Model"
1757 1798 msgstr "_Modelo"
1758 1799  
1759   -#: src/dialogs/popups.c:83 src/dialogs/popups.c:89 src/dialogs/popups.c:95
1760   -#: src/dialogs/popups.c:107
  1800 +#: src/dialogs/popups.c:86 src/dialogs/popups.c:92 src/dialogs/popups.c:98
  1801 +#: src/dialogs/popups.c:110
1761 1802 msgid "_Ok"
1762 1803 msgstr "_Ok"
1763 1804  
  1805 +#: src/tools/entry.c:167
  1806 +msgid "_Open"
  1807 +msgstr "_Abrir"
  1808 +
1764 1809 #: src/filetransfer/v3270ft.c:333
1765 1810 msgid "_Operation"
1766 1811 msgstr "_Operação:"
1767 1812  
1768   -#: src/selection/windows/paste.c:84 src/selection/windows/paste.c:124
  1813 +#: src/selection/linux/paste.c:86 src/selection/linux/paste.c:118
1769 1814 msgid "_Paste as text"
1770 1815 msgstr "_Colar como texto"
1771 1816  
... ... @@ -1774,7 +1819,7 @@ msgid &quot;_Remote file&quot;
1774 1819 msgstr "Arquivo _remoto:"
1775 1820  
1776 1821 #: src/trace/tracewindow.c:123 src/dialogs/save/save.c:347
1777   -#: src/dialogs/save/save.c:362
  1822 +#: src/dialogs/save/save.c:362 src/tools/entry.c:171
1778 1823 msgid "_Save"
1779 1824 msgstr "_Salvar"
1780 1825  
... ... @@ -1790,7 +1835,7 @@ msgstr &quot;_Serviço&quot;
1790 1835 msgid "_Text file"
1791 1836 msgstr "Arquivo _texto"
1792 1837  
1793   -#: src/terminal/actions/table.c:206
  1838 +#: src/terminal/actions/table.c:230
1794 1839 msgid "decrease the font size"
1795 1840 msgstr "Diminui o tamanho da fonte"
1796 1841  
... ... @@ -1977,9 +2022,6 @@ msgstr &quot;Diminui o tamanho da fonte&quot;
1977 2022 #~ msgid "Alert sound"
1978 2023 #~ msgstr "Aviso sonoro"
1979 2024  
1980   -#~ msgid "All files"
1981   -#~ msgstr "Todos os arquivos"
1982   -
1983 2025 #~ msgid ""
1984 2026 #~ "An error occurred trying to allocate memory. This should never happen."
1985 2027 #~ msgstr ""
... ... @@ -2357,15 +2399,9 @@ msgstr &quot;Diminui o tamanho da fonte&quot;
2357 2399 #~ msgid "Connection state"
2358 2400 #~ msgstr "Estado da conexão"
2359 2401  
2360   -#~ msgid "Continue"
2361   -#~ msgstr "Continuar"
2362   -
2363 2402 #~ msgid "Copiar tudo"
2364 2403 #~ msgstr "Copiar tudo"
2365 2404  
2366   -#~ msgid "Copy as HTML"
2367   -#~ msgstr "Copiar como HTML"
2368   -
2369 2405 #~ msgid "Critical Error"
2370 2406 #~ msgstr "Erro crítico"
2371 2407  
... ... @@ -2950,9 +2986,6 @@ msgstr &quot;Diminui o tamanho da fonte&quot;
2950 2986 #~ msgid "Non zero if the host is TSO."
2951 2987 #~ msgstr "Diferente de zero se o host é TSO"
2952 2988  
2953   -#~ msgid "None of the screens in the clipboard match with the current one."
2954   -#~ msgstr "Nenhuma das telas da área de transferência corresponde à atual."
2955   -
2956 2989 #~ msgid "Not available"
2957 2990 #~ msgstr "Não disponível"
2958 2991  
... ...
src/dialogs/load.c
... ... @@ -315,16 +315,13 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_
315 315 GError * error = NULL;
316 316 v3270_load_dialog_apply(widget,&error);
317 317  
318   - if(error)
319   - {
320   - v3270_popup_gerror(
321   - widget,
322   - error,
323   - NULL,
324   - _("Can't open %s"),gtk_entry_get_text(GTK_ENTRY(V3270_LOAD_DIALOG(widget)->filename))
325   - );
326   - g_error_free(error);
327   - }
  318 + // The operation has failed? If yes notify user and free error object.
  319 + v3270_popup_gerror(
  320 + widget,
  321 + &error,
  322 + NULL,
  323 + _("Can't open %s"),gtk_entry_get_text(GTK_ENTRY(V3270_LOAD_DIALOG(widget)->filename))
  324 + );
328 325  
329 326 }
330 327 debug("%s",__FUNCTION__);
... ...
src/dialogs/popups.c
... ... @@ -44,6 +44,9 @@
44 44  
45 45 GtkResponseType v3270_popup_dialog_show(GtkWidget *widget, const LIB3270_POPUP *popup, gboolean wait) {
46 46  
  47 + // https://developer.gnome.org/hig/stable/dialogs.html.en
  48 + // https://developer.gnome.org/hig/stable/visual-layout.html.en
  49 +
47 50 g_return_val_if_fail(GTK_IS_WIDGET(widget),GTK_RESPONSE_NONE);
48 51  
49 52 // Check if the dialog is enabled
... ... @@ -178,6 +181,7 @@
178 181 GTK_RESPONSE_CANCEL
179 182 );
180 183  
  184 + // https://developer.gnome.org/Buttons/
181 185 v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_APPLY,"destructive-action");
182 186 v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_CANCEL,"suggested-action");
183 187 break;
... ... @@ -187,6 +191,8 @@
187 191 GTK_DIALOG(dialog),
188 192 GTK_RESPONSE_CANCEL
189 193 );
  194 +
  195 + // https://developer.gnome.org/Buttons/
190 196 v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_CANCEL,"suggested-action");
191 197 break;
192 198  
... ... @@ -195,6 +201,8 @@
195 201 GTK_DIALOG(dialog),
196 202 GTK_RESPONSE_APPLY
197 203 );
  204 +
  205 + // https://developer.gnome.org/Buttons/
198 206 v3270_dialog_add_class_for_response(dialog,GTK_RESPONSE_APPLY,"suggested-action");
199 207 break;
200 208  
... ... @@ -260,7 +268,10 @@
260 268  
261 269 }
262 270  
263   - void v3270_popup_gerror(GtkWidget *widget, GError *error, const gchar *title, const gchar *fmt, ...) {
  271 + gboolean v3270_popup_gerror(GtkWidget *widget, GError **error, const gchar *title, const gchar *fmt, ...) {
  272 +
  273 + if(!(error && *error))
  274 + return FALSE;
264 275  
265 276 // Format message.
266 277 va_list arg_ptr;
... ... @@ -272,10 +283,15 @@
272 283 .type = LIB3270_NOTIFY_ERROR,
273 284 .title = title,
274 285 .summary = summary,
275   - .body = error->message
  286 + .body = (*error)->message
276 287 };
277 288  
278 289 v3270_popup_dialog_show(widget, &popup, FALSE);
279 290  
  291 + g_error_free(*error);
  292 + *error = NULL;
  293 +
  294 + return TRUE;
  295 +
280 296 }
281 297  
... ...
src/dialogs/print/convenience.c
... ... @@ -96,15 +96,13 @@
96 96  
97 97 if(err)
98 98 {
99   - v3270_error_popup(
  99 + v3270_popup_gerror(
100 100 widget,
101   - NULL,
  101 + &err,
102 102 _("Print operation has failed"),
103 103 err->message
104 104 );
105 105  
106   - g_error_free(err);
107   -
108 106 rc = -1;
109 107 }
110 108 }
... ...
src/dialogs/print/print.c
... ... @@ -52,13 +52,11 @@
52 52  
53 53 v3270_popup_gerror(
54 54 GTK_WIDGET(operation->widget),
55   - err,
  55 + &err,
56 56 NULL,
57 57 "%s",_( "Print operation failed" )
58 58 );
59 59  
60   - g_error_free(err);
61   -
62 60 }
63 61  
64 62 if(operation->widget)
... ...
src/dialogs/save/save.c
... ... @@ -618,17 +618,12 @@ static void icon_press(GtkEntry *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_
618 618 GError * error = NULL;
619 619 v3270_save_dialog_apply(widget,&error);
620 620  
621   - if(error)
622   - {
623   - v3270_popup_gerror(
624   - widget,
625   - error,
626   - NULL,
627   - _("Can't save %s"),gtk_entry_get_text(GTK_ENTRY(V3270_SAVE_DIALOG(widget)->filename))
628   - );
629   -
630   - g_error_free(error);
631   - }
  621 + v3270_popup_gerror(
  622 + widget,
  623 + &error,
  624 + NULL,
  625 + _("Can't save %s"),gtk_entry_get_text(GTK_ENTRY(V3270_SAVE_DIALOG(widget)->filename))
  626 + );
632 627  
633 628 }
634 629  
... ...
src/dialogs/transfer.c
... ... @@ -86,13 +86,11 @@ static void save_activity_clicked(GtkWidget *button, GObject *activity)
86 86  
87 87 v3270_popup_gerror(
88 88 button,
89   - error,
  89 + &error,
90 90 NULL,
91 91 _("Can't save %s"),filename
92 92 );
93 93  
94   - g_error_free(error);
95   -
96 94 }
97 95  
98 96 }
... ...
src/filetransfer/activitylist.c
... ... @@ -431,13 +431,11 @@
431 431  
432 432 v3270_popup_gerror(
433 433 widget,
434   - error,
  434 + &error,
435 435 NULL,
436 436 _("Can't save %s"),list->filename
437 437 );
438 438  
439   - g_error_free(error);
440   -
441 439 }
442 440  
443 441  
... ...
src/filetransfer/load.c
... ... @@ -262,18 +262,13 @@ LIB3270_EXPORT void v3270ft_load(GtkWidget *widget,const gchar *filename) {
262 262 g_list_foreach(GTK_V3270FT(widget)->files,(GFunc) validate_item, error);
263 263 v3270ft_select_last(widget);
264 264  
265   - if(error) {
  265 + v3270_popup_gerror(
  266 + widget,
  267 + &error,
  268 + NULL,
  269 + _("Can't load %s"),filename
  270 + );
266 271  
267   - v3270_popup_gerror(
268   - widget,
269   - error,
270   - NULL,
271   - _("Can't load %s"),filename
272   - );
273   -
274   - g_error_free(error);
275   -
276   - }
277 272  
278 273 }
279 274  
... ...
src/filetransfer/save.c
... ... @@ -112,13 +112,11 @@ static const gchar * getNameByFlag(LIB3270_FT_OPTION opt, LIB3270_FT_OPTION mask
112 112  
113 113 v3270_popup_gerror(
114 114 widget,
115   - error,
  115 + &error,
116 116 NULL,
117 117 _("Can't save %s"),filename
118 118 );
119 119  
120   - g_error_free(error);
121   -
122 120 }
123 121  
124 122 g_free(text);
... ...
src/include/clipboard.h
... ... @@ -104,6 +104,9 @@
104 104 G_GNUC_INTERNAL gchar * v3270_get_copy_as_table(v3270 * terminal, const gchar *delimiter, const gchar *encoding);
105 105 G_GNUC_INTERNAL gchar * v3270_get_copy_as_data_block(v3270 * terminal);
106 106  
  107 + G_GNUC_INTERNAL void v3270_clipboard_clear(GtkClipboard *clipboard, GObject *obj);
  108 + G_GNUC_INTERNAL void v3270_clipboard_get(GtkClipboard *clipboard, GtkSelectionData *selection, guint target, GObject *obj);
  109 +
107 110 /// @brief Set contents.
108 111 G_GNUC_INTERNAL gboolean v3270_set_from_data_block(v3270 * terminal, const struct SelectionHeader *selection);
109 112  
... ...
src/include/v3270.h
... ... @@ -238,13 +238,6 @@
238 238 LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path);
239 239 LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget);
240 240  
241   - // SSL & Security
242   - LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget);
243   - LIB3270_EXPORT const gchar * v3270_get_ssl_state_message(GtkWidget *widget);
244   - LIB3270_EXPORT const gchar * v3270_get_ssl_state_description(GtkWidget *widget);
245   - LIB3270_EXPORT GtkWidget * v3270_security_dialog_new(GtkWidget *widget);
246   - LIB3270_EXPORT void v3270_popup_security_dialog(GtkWidget *widget);
247   -
248 241 // Auxiliary widgets
249 242 LIB3270_EXPORT void v3270_select_host(GtkWidget *widget);
250 243  
... ...
src/include/v3270/dialogs.h
... ... @@ -40,7 +40,7 @@
40 40  
41 41 LIB3270_EXPORT GtkWidget * v3270_dialog_section_new(const gchar * title, const gchar *tooltip, GtkWidget *child);
42 42  
43   - LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body);
  43 + LIB3270_EXPORT void v3270_error_popup(GtkWidget *widget, const gchar *title, const gchar *summary, const gchar *body) G_GNUC_DEPRECATED;
44 44  
45 45 LIB3270_EXPORT GtkWidget * v3270_save_dialog_new(GtkWidget *widget, LIB3270_CONTENT_OPTION mode, const gchar *filename);
46 46 LIB3270_EXPORT void v3270_save_dialog_run(GtkWidget *widget);
... ... @@ -48,7 +48,19 @@
48 48 LIB3270_EXPORT GtkWidget * v3270_load_dialog_new(GtkWidget *widget, const gchar *filename);
49 49 LIB3270_EXPORT void v3270_load_dialog_run(GtkWidget *widget);
50 50  
51   - LIB3270_EXPORT void v3270_popup_gerror(GtkWidget *widget, GError *error, const gchar *title, const gchar *fmt, ...) G_GNUC_PRINTF(4,5);
  51 + /// @brief Popup an error message.
  52 + ///
  53 + /// If the error is set show popup message and "free" the error.
  54 + ///
  55 + /// @param widget The terminal widget.
  56 + /// @param error The GError (it null doesn't show popup).
  57 + /// @param title The window title (can be NULL).
  58 + /// @param fmt Format for the popup message.
  59 + /// @param ... Arguments for fmt.
  60 + ///
  61 + /// @return TRUE if the popup was sent.
  62 + ///
  63 + LIB3270_EXPORT gboolean v3270_popup_gerror(GtkWidget *widget, GError **error, const gchar *title, const gchar *fmt, ...) G_GNUC_PRINTF(4,5);
52 64  
53 65 LIB3270_EXPORT GtkTreeModel * v3270_font_family_model_new(GtkWidget *widget, const gchar *selected, GtkTreeIter * active);
54 66  
... ...
src/include/v3270/selection.h
... ... @@ -59,6 +59,9 @@
59 59 LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) G_GNUC_DEPRECATED;
60 60 LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) G_GNUC_DEPRECATED;
61 61  
  62 + LIB3270_EXPORT void v3270_copy_as_html(GtkWidget *widget);
  63 + LIB3270_EXPORT void v3270_copy_as_pixbuff(GtkWidget *widget);
  64 +
62 65 // Selections
63 66  
64 67 LIB3270_EXPORT gchar * v3270_get_selected(GtkWidget *widget, gboolean cut);
... ...
src/include/v3270/tools.h 0 → 100644
... ... @@ -0,0 +1,46 @@
  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.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como tools.h e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 +#ifndef V3270_TOOLS_H_INCLUDED
  31 +
  32 + #include <gtk/gtk.h>
  33 + #include <lib3270.h>
  34 +
  35 + G_BEGIN_DECLS
  36 +
  37 + /// @brief Bind pointer to widget; release it when widget is destroyed.
  38 + LIB3270_EXPORT void gtk_widget_bind_ptr(GtkWidget *widget, gpointer ptr);
  39 +
  40 + /// @brief Bind file chooser with entry field.
  41 + LIB3270_EXPORT void gtk_entry_bind_to_filechooser(GtkWidget *widget, GtkFileChooserAction action, const gchar *title, const gchar *icon_name, const gchar *pattern, const gchar *name);
  42 +
  43 + G_END_DECLS
  44 +
  45 +#endif // V3270_TOOLS_H_INCLUDED
  46 +
... ...
src/selection/copy.c
... ... @@ -30,7 +30,17 @@
30 30 #include <clipboard.h>
31 31 #include <lib3270/selection.h>
32 32  
33   - static void do_copy(v3270 *terminal, gboolean cut) {
  33 + static void do_copy(v3270 *terminal, V3270_COPY_MODE mode, gboolean cut) {
  34 +
  35 + if(mode == V3270_COPY_SMART) {
  36 + mode = (terminal->append ? V3270_COPY_APPEND : V3270_COPY_FORMATTED);
  37 + }
  38 +
  39 + if(mode != V3270_COPY_APPEND) {
  40 + // It's not append, clear current contents ...
  41 + v3270_clear_selection(terminal);
  42 + terminal->selection.format = mode;
  43 + }
34 44  
35 45 lib3270_selection * selection = lib3270_selection_new(terminal->host,cut,0);
36 46  
... ... @@ -44,32 +54,100 @@
44 54 LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) {
45 55  
46 56 g_return_if_fail(GTK_IS_V3270(widget));
  57 + do_copy(GTK_V3270(widget),mode,cut);
  58 + v3270_update_system_clipboard(widget);
  59 +
  60 + }
  61 +
  62 + LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) {
  63 + v3270_clipboard_set(widget,mode,cut);
  64 + }
  65 +
  66 + LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) {
  67 + v3270_clipboard_set(widget,V3270_COPY_APPEND,cut);
  68 + }
  69 +
  70 + LIB3270_EXPORT void v3270_copy_as_html(GtkWidget *widget) {
47 71  
  72 + g_return_if_fail(GTK_IS_V3270(widget));
48 73 v3270 * terminal = GTK_V3270(widget);
49 74  
50   - if(mode == V3270_COPY_SMART) {
51   - mode = (terminal->append ? V3270_COPY_APPEND : V3270_COPY_FORMATTED);
52   - }
  75 + debug("%s",__FUNCTION__);
53 76  
54   - if(mode != V3270_COPY_APPEND) {
  77 + do_copy(terminal,V3270_COPY_FORMATTED,0);
55 78  
56   - // It's not append, clear current contents ...
57   - v3270_clear_selection(terminal);
  79 + //
  80 + // Export only in HTML format
  81 + //
  82 + GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,terminal->selection.target);
58 83  
59   - terminal->selection.format = mode;
  84 + GtkTargetList * list = gtk_target_list_new(NULL,0);
  85 +
  86 + static const GtkTargetEntry entry = {
  87 + .target = "text/html",
  88 + .flags = 0,
  89 + .info = CLIPBOARD_TYPE_HTML
  90 + };
  91 +
  92 + gtk_target_list_add_table(list, &entry, 1);
60 93  
  94 + int n_targets;
  95 + GtkTargetEntry * targets = gtk_target_table_new_from_list(list, &n_targets);
  96 +
  97 + if(gtk_clipboard_set_with_owner(
  98 + clipboard,
  99 + targets,
  100 + n_targets,
  101 + (GtkClipboardGetFunc) v3270_clipboard_get,
  102 + (GtkClipboardClearFunc) v3270_clipboard_clear,
  103 + G_OBJECT(widget)
  104 + ))
  105 + {
  106 + gtk_clipboard_set_can_store(clipboard,targets,1);
61 107 }
62 108  
63   - do_copy(terminal,cut);
  109 + gtk_target_table_free(targets, n_targets);
  110 + gtk_target_list_unref(list);
64 111  
65   - v3270_update_system_clipboard(widget);
  112 + v3270_emit_copy_state(widget);
66 113 }
67 114  
68   - LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE format, gboolean cut) {
69   - v3270_clipboard_set(widget,format,cut);
70   - }
  115 + LIB3270_EXPORT void v3270_copy_as_pixbuff(GtkWidget *widget) {
71 116  
72   - LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) {
73   - v3270_clipboard_set(widget,V3270_COPY_APPEND,cut);
74   - }
  117 + g_return_if_fail(GTK_IS_V3270(widget));
  118 + v3270 * terminal = GTK_V3270(widget);
  119 +
  120 + debug("%s",__FUNCTION__);
  121 +
  122 + do_copy(terminal,V3270_COPY_FORMATTED,0);
  123 +
  124 + //
  125 + // Export only in HTML format
  126 + //
  127 + GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,terminal->selection.target);
  128 +
  129 + GtkTargetList * list = gtk_target_list_new(NULL,0);
  130 +
  131 + gtk_target_list_add_image_targets(list,CLIPBOARD_TYPE_PIXBUFF,TRUE);
  132 +
  133 + int n_targets;
  134 + GtkTargetEntry * targets = gtk_target_table_new_from_list(list, &n_targets);
  135 +
  136 + if(gtk_clipboard_set_with_owner(
  137 + clipboard,
  138 + targets,
  139 + n_targets,
  140 + (GtkClipboardGetFunc) v3270_clipboard_get,
  141 + (GtkClipboardClearFunc) v3270_clipboard_clear,
  142 + G_OBJECT(widget)
  143 + ))
  144 + {
  145 + gtk_clipboard_set_can_store(clipboard,targets,1);
  146 + }
  147 +
  148 + gtk_target_table_free(targets, n_targets);
  149 + gtk_target_list_unref(list);
  150 +
  151 + v3270_emit_copy_state(widget);
75 152  
  153 + }
... ...
src/selection/linux/copy.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   -static void clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED GObject *obj)
  36 +void v3270_clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED GObject *obj)
37 37 {
38 38 v3270 * terminal = GTK_V3270(obj);
39 39  
... ... @@ -45,7 +45,7 @@ static void clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED
45 45  
46 46 }
47 47  
48   -static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionData *selection, guint target, GObject *obj)
  48 +void v3270_clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionData *selection, guint target, GObject *obj)
49 49 {
50 50 v3270 * terminal = GTK_V3270(obj);
51 51  
... ... @@ -178,8 +178,8 @@ void v3270_update_system_clipboard(GtkWidget *widget)
178 178 clipboard,
179 179 targets,
180 180 n_targets,
181   - (GtkClipboardGetFunc) clipboard_get,
182   - (GtkClipboardClearFunc) clipboard_clear,
  181 + (GtkClipboardGetFunc) v3270_clipboard_get,
  182 + (GtkClipboardClearFunc) v3270_clipboard_clear,
183 183 G_OBJECT(widget)
184 184 ))
185 185 {
... ... @@ -193,3 +193,4 @@ void v3270_update_system_clipboard(GtkWidget *widget)
193 193  
194 194 }
195 195  
  196 +
... ...
src/selection/text.c
... ... @@ -183,8 +183,7 @@ LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const
183 183 V3270_SIGNAL_PASTENEXT,
184 184 FALSE
185 185 );
186   - v3270_popup_gerror(widget,error,NULL,"%s",_("Can't paste text"));
187   - g_error_free(error);
  186 + v3270_popup_gerror(widget,&error,NULL,"%s",_("Can't paste text"));
188 187 return;
189 188 }
190 189  
... ...
src/selection/windows/copy.c
... ... @@ -33,7 +33,7 @@
33 33  
34 34 /*--[ Implement ]------------------------------------------------------------------------------------*/
35 35  
36   -static void clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED GObject *obj)
  36 +void v3270_clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED GObject *obj)
37 37 {
38 38 v3270 * terminal = GTK_V3270(obj);
39 39  
... ... @@ -45,7 +45,7 @@ static void clipboard_clear(G_GNUC_UNUSED GtkClipboard *clipboard, G_GNUC_UNUSED
45 45  
46 46 }
47 47  
48   -static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionData *selection, guint target, GObject *obj)
  48 +void v3270_clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionData *selection, guint target, GObject *obj)
49 49 {
50 50 v3270 * terminal = GTK_V3270(obj);
51 51  
... ... @@ -178,8 +178,8 @@ void v3270_update_system_clipboard(GtkWidget *widget)
178 178 clipboard,
179 179 targets,
180 180 n_targets,
181   - (GtkClipboardGetFunc) clipboard_get,
182   - (GtkClipboardClearFunc) clipboard_clear,
  181 + (GtkClipboardGetFunc) v3270_clipboard_get,
  182 + (GtkClipboardClearFunc) v3270_clipboard_clear,
183 183 G_OBJECT(widget)
184 184 ))
185 185 {
... ... @@ -192,4 +192,3 @@ void v3270_update_system_clipboard(GtkWidget *widget)
192 192 v3270_emit_copy_state(widget);
193 193  
194 194 }
195   -
... ...
src/terminal/actions/table.c
... ... @@ -33,14 +33,19 @@
33 33 #include <v3270/selection.h>
34 34 #include <terminal.h>
35 35  
36   - static int fire_kp_add_action(GtkWidget *widget, const struct _v3270_action * action);
37   - static int fire_kp_sub_action(GtkWidget *widget, const struct _v3270_action * action);
  36 +// static int fire_kp_add_action(GtkWidget *widget, const struct _v3270_action * action);
  37 +// static int fire_kp_sub_action(GtkWidget *widget, const struct _v3270_action * action);
  38 +
  39 + static int fire_copy_as_html(GtkWidget *widget, const struct _v3270_action * action);
  40 + static int fire_copy_as_pixbuff(GtkWidget *widget, const struct _v3270_action * action);
38 41  
39 42 /*--[ Implement ]------------------------------------------------------------------------------------*/
40 43  
41 44 LIB3270_EXPORT const V3270_ACTION * v3270_get_actions() {
42 45  
43 46 static const V3270_ACTION actions[] = {
  47 +
  48 + /*
44 49 {
45 50 .name = "keypad-add",
46 51 .keys = "<Mod2>KP_Add",
... ... @@ -53,6 +58,7 @@
53 58 .group = LIB3270_ACTION_GROUP_ONLINE,
54 59 .activate = fire_kp_sub_action
55 60 },
  61 + */
56 62  
57 63 // Standard Clipboard actions
58 64 {
... ... @@ -68,6 +74,24 @@
68 74 },
69 75  
70 76 {
  77 + .name = "copy-html",
  78 + .group = LIB3270_ACTION_GROUP_SELECTION,
  79 + .label = N_( "Copy as HTML" ),
  80 + .summary = N_("Copy selection in HTML format"),
  81 + .description = N_("Replace current clipboard contents with the selected area in HTML format"),
  82 + .activate = fire_copy_as_html
  83 + },
  84 +
  85 + {
  86 + .name = "copy-pixbuff",
  87 + .group = LIB3270_ACTION_GROUP_SELECTION,
  88 + .label = N_( "Copy as image" ),
  89 + .summary = N_("Copy selection in image format"),
  90 + .description = N_("Replace current clipboard contents with the selected area in image format"),
  91 + .activate = fire_copy_as_pixbuff
  92 + },
  93 +
  94 + {
71 95 .name = "copy-append",
72 96 .keys = "<Alt>c",
73 97 .flags = (V3270_ACTION_FLAGS) V3270_COPY_APPEND,
... ... @@ -321,6 +345,17 @@
321 345  
322 346 }
323 347  
  348 + static int fire_copy_as_html(GtkWidget *widget, const struct _v3270_action G_GNUC_UNUSED(* action)) {
  349 + v3270_copy_as_html(widget);
  350 + return 0;
  351 + }
  352 +
  353 + static int fire_copy_as_pixbuff(GtkWidget *widget, const struct _v3270_action G_GNUC_UNUSED(* action)) {
  354 + v3270_copy_as_pixbuff(widget);
  355 + return 0;
  356 + }
  357 +
  358 + /*
324 359 int fire_kp_add_action(GtkWidget *widget, const struct _v3270_action G_GNUC_UNUSED(* action)) {
325 360  
326 361 if(v3270_get_toggle(widget,LIB3270_TOGGLE_KP_ALTERNATIVE))
... ... @@ -342,3 +377,4 @@
342 377 return 0;
343 378  
344 379 }
  380 +*/
... ...
src/terminal/charset.c
... ... @@ -317,13 +317,11 @@
317 317 {
318 318 v3270_popup_gerror(
319 319 widget,
320   - error,
  320 + &error,
321 321 _( "Remap Failed" ),
322 322 _( "Can't parse %s" ), path
323 323 );
324 324  
325   - g_error_free(error);
326   -
327 325 } else {
328 326  
329 327 unsigned int i;
... ...
src/terminal/drawing/oia.c
... ... @@ -762,6 +762,9 @@ void v3270_update_cursor(H3270 *session, unsigned short row, unsigned short col,
762 762 if(!terminal->surface)
763 763 return;
764 764  
  765 + // Reset input context
  766 + gtk_im_context_reset(terminal->input_method);
  767 +
765 768 // Update cursor rectangle
766 769 saved = terminal->cursor.rect;
767 770  
... ...
src/terminal/keyboard.c
... ... @@ -86,7 +86,7 @@
86 86 #ifdef DEBUG
87 87 {
88 88 g_autofree gchar * keyname = gtk_accelerator_name(event->keyval,event->state);
89   - debug("%s Keyval: %d (%s) State: %04x %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s",
  89 + debug("%s Keyval: %d (%s) State: %04x %s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%",
90 90 __FUNCTION__,
91 91 event->keyval,
92 92 gdk_keyval_name(event->keyval),
... ... @@ -111,13 +111,25 @@
111 111 }
112 112 #endif // DEBUG
113 113  
114   - if(gtk_im_context_filter_keypress(terminal->input_method,event))
115   - return TRUE;
  114 + // Check +/- keyboard redirection
  115 + if(lib3270_get_toggle(terminal->host,LIB3270_TOGGLE_KP_ALTERNATIVE) && !(event->state & (GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK))) {
116 116  
117   - /*
118   - if(!gtk_accelerator_valid(event->keyval,event->state))
119   - return FALSE;
120   - */
  117 + switch(event->keyval) {
  118 + case GDK_KP_Add:
  119 + debug("%s: Calling lib3270_nextfield",__FUNCTION__);
  120 + gtk_im_context_reset(terminal->input_method);
  121 + lib3270_nextfield(terminal->host);
  122 + return TRUE;
  123 +
  124 + case GDK_KP_Subtract:
  125 + debug("%s: Calling lib3270_previousfield",__FUNCTION__);
  126 + gtk_im_context_reset(terminal->input_method);
  127 + lib3270_previousfield(terminal->host);
  128 + return TRUE;
  129 +
  130 + }
  131 +
  132 + }
121 133  
122 134 // Signal to the application.
123 135 gboolean handled = FALSE;
... ... @@ -135,37 +147,23 @@
135 147 debug("Keyboard action \"%s\" was %s",key_name,handled ? "Handled" : "Not handled");
136 148 }
137 149 #endif // DEBUG
138   - if(handled)
139   - return TRUE;
140 150  
  151 + if(handled) {
  152 + gtk_im_context_reset(terminal->input_method);
  153 + return TRUE;
  154 + }
141 155  
142   - // Check for s
  156 + // Check for acelerator
143 157 const V3270Accelerator * accelerator = v3270_accelerator_map_lookup_entry(widget, event->keyval, event->state);
144 158 if(accelerator)
145 159 {
146 160 debug("Found accelerator %s",v3270_accelerator_get_name(accelerator));
  161 + gtk_im_context_reset(terminal->input_method);
147 162 v3270_accelerator_activate(accelerator,widget);
148 163 return TRUE;
149 164 }
150 165  
151   - /*
152   - if(event->keyval >= GDK_F1 && event->keyval <= GDK_F12 && !(event->state & (GDK_CONTROL_MASK|GDK_MOD1_MASK)))
153   - {
154   - // It's a PFKey Action.
155   - int pfcode = (event->keyval - GDK_F1) + ((event->state & GDK_SHIFT_MASK) ? 13 : 1);
156   -
157   - if(pfcode > 0 && pfcode < 25)
158   - {
159   - if(lib3270_pfkey(GTK_V3270(widget)->host,pfcode))
160   - gdk_display_beep(gtk_widget_get_display(widget));
161   -
162   - return TRUE;
163   - }
164   -
165   - }
166   - */
167   -
168   - return FALSE;
  166 + return gtk_im_context_filter_keypress(terminal->input_method,event);
169 167  
170 168 }
171 169  
... ...
src/terminal/mouse.c
... ... @@ -38,6 +38,7 @@
38 38 #include <lib3270/log.h>
39 39 #include <lib3270/trace.h>
40 40 #include <lib3270/ssl.h>
  41 + #include <v3270/security.h>
41 42  
42 43 #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
43 44  
... ...
src/terminal/widget.c
... ... @@ -816,6 +816,11 @@ gboolean v3270_focus_out_event(GtkWidget *widget, GdkEventFocus *event)
816 816  
817 817 gtk_im_context_focus_out(terminal->input_method);
818 818  
  819 +#ifdef KEY_FLAG_ALT
  820 + terminal->keyflags &= ~KEY_FLAG_ALT;
  821 + v3270_draw_alt_status(terminal);
  822 +#endif // KEY_FLAG_ALT
  823 +
819 824 return notify_focus(widget,event);
820 825 }
821 826  
... ...
src/tools/entry.c 0 → 100644
... ... @@ -0,0 +1,190 @@
  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.
  5 + *
  6 + * Copyright (C) <2008> <Banco do Brasil S.A.>
  7 + *
  8 + * Este programa é software livre. Você pode redistribuí-lo e/ou modificá-lo sob
  9 + * os termos da GPL v.2 - Licença Pública Geral GNU, conforme publicado pela
  10 + * Free Software Foundation.
  11 + *
  12 + * Este programa é distribuído na expectativa de ser útil, mas SEM QUALQUER
  13 + * GARANTIA; sem mesmo a garantia implícita de COMERCIALIZAÇÃO ou de ADEQUAÇÃO
  14 + * A QUALQUER PROPÓSITO EM PARTICULAR. Consulte a Licença Pública Geral GNU para
  15 + * obter mais detalhes.
  16 + *
  17 + * Você deve ter recebido uma cópia da Licença Pública Geral GNU junto com este
  18 + * programa; se não, escreva para a Free Software Foundation, Inc., 51 Franklin
  19 + * St, Fifth Floor, Boston, MA 02110-1301 USA
  20 + *
  21 + * Este programa está nomeado como - e possui - linhas de código.
  22 + *
  23 + * Contatos:
  24 + *
  25 + * perry.werneck@gmail.com (Alexandre Perry de Souza Werneck)
  26 + * erico.mendonca@gmail.com (Erico Mascarenhas Mendonça)
  27 + *
  28 + */
  29 +
  30 + /**
  31 + * @brief Usefull extensions for GtkEntry.
  32 + *
  33 + */
  34 +
  35 + #include <internals.h>
  36 + #include <v3270/tools.h>
  37 + #include <string.h>
  38 +
  39 + struct FileEntry {
  40 + GtkFileChooserAction action;
  41 + const gchar * title;
  42 + const gchar * pattern;
  43 + const gchar * name;
  44 + const gchar * accept;
  45 + };
  46 +
  47 + static void icon_response(GtkDialog *dialog, int response_id, GtkEntry *entry) {
  48 +
  49 + if(response_id == GTK_RESPONSE_ACCEPT) {
  50 +
  51 + g_autofree gchar * filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
  52 +
  53 + if(filename) {
  54 +
  55 + // https://github.com/PerryWerneck/pw3270/issues/9#issuecomment-708963229
  56 + //
  57 + // Works here (openSUSE Tumbleweed), BUT: the "open session" dialog comes with a filter
  58 + // set to "TN3270 files" and that's good, but when you save a session pw3270 does NOT add
  59 + // the extension, so how do you know what file extension those "TN3270 files" are supposed to have?
  60 + //
  61 + // I tried .tn3270 but it did not work, so I had to look hard in the internet to find out this page
  62 + // ...
  63 + //
  64 + if(strchr(filename,'.')) {
  65 +
  66 + // Filename has extension, use it.
  67 + gtk_entry_set_text(entry,filename);
  68 +
  69 + } else {
  70 +
  71 + // No extension, add it from the standard.
  72 + const gchar *ext = (const gchar *) g_object_get_data(G_OBJECT(dialog),"default-file-extension");
  73 + if(ext) {
  74 + g_autofree gchar * new_name = g_strconcat(filename,ext,NULL);
  75 + gtk_entry_set_text(entry,new_name);
  76 + } else {
  77 + g_warning("No default file extension set");
  78 + gtk_entry_set_text(entry,filename);
  79 + }
  80 +
  81 + }
  82 +
  83 + } else {
  84 + gtk_entry_set_text(entry,"");
  85 + }
  86 + }
  87 +
  88 + gtk_widget_destroy(GTK_WIDGET(dialog));
  89 +
  90 + }
  91 +
  92 + static void icon_press(GtkWidget *entry, G_GNUC_UNUSED GtkEntryIconPosition icon_pos, G_GNUC_UNUSED GdkEvent *event, const struct FileEntry *descr) {
  93 +
  94 + GtkWidget * dialog =
  95 + gtk_file_chooser_dialog_new(
  96 + gettext(descr->title),
  97 + GTK_WINDOW(gtk_widget_get_toplevel(entry)),
  98 + descr->action,
  99 + _("Cancel"), GTK_RESPONSE_CANCEL,
  100 + descr->accept, GTK_RESPONSE_ACCEPT,
  101 + NULL
  102 + );
  103 +
  104 + {
  105 + GtkFileFilter *filter;
  106 +
  107 + // Standard filter
  108 + filter = gtk_file_filter_new();
  109 + gtk_file_filter_add_pattern (filter, descr->pattern);
  110 + gtk_file_filter_set_name(filter, gettext(descr->name));
  111 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
  112 +
  113 + const gchar *ext = strchr(descr->pattern,'.');
  114 + if(ext) {
  115 + g_object_set_data_full(G_OBJECT(dialog),"default-file-extension",g_strdup(ext),g_free);
  116 + }
  117 +
  118 + // All files
  119 + filter = gtk_file_filter_new();
  120 + gtk_file_filter_add_pattern (filter, "*.*");
  121 + gtk_file_filter_set_name(filter, _("All files"));
  122 + gtk_file_chooser_add_filter(GTK_FILE_CHOOSER(dialog),filter);
  123 +
  124 + }
  125 +
  126 + gtk_window_set_modal(GTK_WINDOW(dialog),TRUE);
  127 + gtk_window_set_deletable(GTK_WINDOW(dialog),FALSE);
  128 +
  129 + const gchar *filename = gtk_entry_get_text(GTK_ENTRY(entry));
  130 +
  131 + if(filename && *filename)
  132 + gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(dialog),filename);
  133 +
  134 + g_signal_connect(dialog,"close",G_CALLBACK(gtk_widget_destroy),NULL);
  135 + g_signal_connect(dialog,"response",G_CALLBACK(icon_response),entry);
  136 +
  137 + gtk_widget_show_all(dialog);
  138 +
  139 +
  140 + }
  141 +
  142 + static void release_ptr(GtkWidget G_GNUC_UNUSED(*object), gpointer ptr) {
  143 + g_free(ptr);
  144 + }
  145 +
  146 + LIB3270_EXPORT void gtk_widget_bind_ptr(GtkWidget *widget, gpointer ptr) {
  147 + g_signal_connect(widget,"destroy",G_CALLBACK(release_ptr),ptr);
  148 + }
  149 +
  150 + LIB3270_EXPORT void gtk_entry_bind_to_filechooser(GtkWidget *widget, GtkFileChooserAction action, const gchar *title, const gchar *icon_name, const gchar *pattern, const gchar *name) {
  151 +
  152 + gtk_entry_set_icon_from_icon_name(
  153 + GTK_ENTRY(widget),
  154 + GTK_ENTRY_ICON_SECONDARY,
  155 + icon_name ? icon_name : "document-open"
  156 + );
  157 +
  158 + // Store data
  159 + gsize szEntry = sizeof(struct FileEntry) + strlen(title) + strlen(pattern) + strlen(name) + 4;
  160 + struct FileEntry * entry = (struct FileEntry *) g_malloc0(szEntry);
  161 + gtk_widget_bind_ptr(widget,entry);
  162 +
  163 + entry->action = action;
  164 +
  165 + switch(action) {
  166 + case GTK_FILE_CHOOSER_ACTION_OPEN:
  167 + entry->accept = _("_Open");
  168 + break;
  169 +
  170 + case GTK_FILE_CHOOSER_ACTION_SAVE:
  171 + entry->accept = _("_Save");
  172 + break;
  173 +
  174 + default:
  175 + entry->accept = _("_Continue");
  176 +
  177 + }
  178 +
  179 + entry->title = (const char *) (entry+1);
  180 + strcpy((char *) entry->title,title);
  181 +
  182 + entry->pattern = entry->title + strlen(entry->title) +1;
  183 + strcpy((char *) entry->pattern,pattern);
  184 +
  185 + entry->name = entry->pattern + strlen(entry->pattern) + 1;
  186 + strcpy((char *) entry->name,name);
  187 +
  188 + g_signal_connect(widget,"icon_press",G_CALLBACK(icon_press),(gpointer) entry);
  189 +
  190 + }
... ...
src/trace/trace.c
... ... @@ -477,18 +477,12 @@
477 477  
478 478 g_free(text);
479 479  
480   - if(error)
481   - {
482   - v3270_popup_gerror(
483   - widget,
484   - error,
485   - NULL,
486   - _( "Can't save %s" ), filename
487   - );
488   -
489   - g_error_free(error);
490   -
491   - }
  480 + v3270_popup_gerror(
  481 + widget,
  482 + &error,
  483 + NULL,
  484 + _( "Can't save %s" ), filename
  485 + );
492 486  
493 487 }
494 488  
... ...
v3270.cbp
... ... @@ -198,6 +198,7 @@
198 198 <Unit filename="src/include/v3270/selection.h" />
199 199 <Unit filename="src/include/v3270/settings.h" />
200 200 <Unit filename="src/include/v3270/toggle.h" />
  201 + <Unit filename="src/include/v3270/tools.h" />
201 202 <Unit filename="src/include/v3270/trace.h" />
202 203 <Unit filename="src/selection/copy.c">
203 204 <Option compilerVar="CC" />
... ... @@ -404,6 +405,9 @@
404 405 <Unit filename="src/testprogram/toolbar.c">
405 406 <Option compilerVar="CC" />
406 407 </Unit>
  408 + <Unit filename="src/tools/entry.c">
  409 + <Option compilerVar="CC" />
  410 + </Unit>
407 411 <Unit filename="src/trace/exec.c">
408 412 <Option compilerVar="CC" />
409 413 </Unit>
... ...