Commit e0247aab6186c5f94da8aa4b89c0efe3862e3b26

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

Adding smart copy options.

locale/pt_BR.po
... ... @@ -5,8 +5,8 @@ msgid ""
5 5 msgstr ""
6 6 "Project-Id-Version: pw3270 5.0\n"
7 7 "Report-Msgid-Bugs-To: \n"
8   -"POT-Creation-Date: 2020-01-27 11:29-0300\n"
9   -"PO-Revision-Date: 2020-01-27 11:31-0300\n"
  8 +"POT-Creation-Date: 2020-01-28 08:48-0300\n"
  9 +"PO-Revision-Date: 2020-01-28 10:09-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"
... ... @@ -257,7 +257,7 @@ msgstr &quot;Clique para carregar arquivo&quot;
257 257 msgid "Click to save file"
258 258 msgstr "Clique para salvar arquivo"
259 259  
260   -#: src/dialogs/settings/clipboard.c:385
  260 +#: src/dialogs/settings/clipboard.c:409
261 261 msgid "Clipboard"
262 262 msgstr "Área de transferência"
263 263  
... ... @@ -265,7 +265,7 @@ msgstr &quot;Área de transferência&quot;
265 265 msgid "Clipboard name"
266 266 msgstr "Nome da área de transferência"
267 267  
268   -#: src/dialogs/settings/clipboard.c:384
  268 +#: src/dialogs/settings/clipboard.c:408
269 269 msgid "Clipboard properties"
270 270 msgstr "Configuração da área de transferência"
271 271  
... ... @@ -317,7 +317,7 @@ msgstr &quot;Copiar como texto puro&quot;
317 317 msgid "Copy as table"
318 318 msgstr "Copiar como tabela"
319 319  
320   -#: src/dialogs/settings/clipboard.c:217
  320 +#: src/dialogs/settings/clipboard.c:239
321 321 msgid "Copy options"
322 322 msgstr "Opções da cópia"
323 323  
... ... @@ -523,7 +523,7 @@ msgstr &quot;Cinza&quot;
523 523 msgid "Green"
524 524 msgstr "Verde"
525 525  
526   -#: src/dialogs/settings/clipboard.c:219
  526 +#: src/dialogs/settings/clipboard.c:241
527 527 msgid "HTML options"
528 528 msgstr "Opções HTML"
529 529  
... ... @@ -689,11 +689,11 @@ msgstr &quot;Nenhuma transferência&quot;
689 689 msgid "No transfer in progress"
690 690 msgstr "Nenhuma transferência em andamento"
691 691  
692   -#: src/dialogs/settings/clipboard.c:282
  692 +#: src/dialogs/settings/clipboard.c:306
693 693 msgid "None (Don't export color)"
694 694 msgstr "Nenhum (Não exporta cores)"
695 695  
696   -#: src/dialogs/settings/clipboard.c:402
  696 +#: src/dialogs/settings/clipboard.c:426
697 697 msgid "None (Don't export font name)"
698 698 msgstr "Nenhuma (Não exporta fontes)"
699 699  
... ... @@ -801,7 +801,7 @@ msgstr &quot;Colar de um arquivo&quot;
801 801 msgid "Paste from text file"
802 802 msgstr "Colar de um arquivo texto"
803 803  
804   -#: src/dialogs/settings/clipboard.c:218
  804 +#: src/dialogs/settings/clipboard.c:240
805 805 msgid "Paste options"
806 806 msgstr "Opções para colar"
807 807  
... ... @@ -825,7 +825,7 @@ msgstr &quot;Rosa&quot;
825 825 msgid "Plain text"
826 826 msgstr "Texto puro"
827 827  
828   -#: src/dialogs/settings/clipboard.c:350
  828 +#: src/dialogs/settings/clipboard.c:374
829 829 msgid "Plain text only"
830 830 msgstr "Apenas texto puro"
831 831  
... ... @@ -982,7 +982,7 @@ msgstr &quot;&quot;
982 982 "SPACE can be specified in units of TRACKS, CYLINDERS, or AVBLOCK, and only "
983 983 "one option can be used."
984 984  
985   -#: src/dialogs/settings/clipboard.c:283 src/dialogs/settings/clipboard.c:403
  985 +#: src/dialogs/settings/clipboard.c:307 src/dialogs/settings/clipboard.c:427
986 986 msgid "Same of the screen"
987 987 msgstr "Igual ao terminal"
988 988  
... ... @@ -1056,7 +1056,7 @@ msgstr &quot;Guarda fila de transferência num arquivo XML externo&quot;
1056 1056 msgid "Save transfer queue to file"
1057 1057 msgstr "Salvar fila de transferências para arquivo"
1058 1058  
1059   -#: src/dialogs/settings/clipboard.c:351
  1059 +#: src/dialogs/settings/clipboard.c:375
1060 1060 msgid "Screen with terminal attributes"
1061 1061 msgstr "Completa incluindo atributos do terminal"
1062 1062  
... ... @@ -1156,6 +1156,10 @@ msgstr &quot;Skip&quot;
1156 1156 msgid "Skip this transfer, keep the file on queue."
1157 1157 msgstr "Skip this transfer, keep the file on queue."
1158 1158  
  1159 +#: src/dialogs/settings/clipboard.c:163
  1160 +msgid "Smart copy"
  1161 +msgstr "Cópia inteligente"
  1162 +
1159 1163 #: src/filetransfer/v3270ft.c:341 src/filetransfer/settings.c:544
1160 1164 msgid "Space allocation units"
1161 1165 msgstr "Unidades de alocação de espaço"
... ... @@ -1515,6 +1519,15 @@ msgstr &quot;&quot;
1515 1519 "Quando ativo pesquisa a área de transferência por uma tela similar, se "
1516 1520 "encontrar coloca os campos desprotegidos e restaura a posição do cursor"
1517 1521  
  1522 +#: src/dialogs/settings/clipboard.c:164
  1523 +msgid ""
  1524 +"When set the first copy operation after the selection will set the clipboard "
  1525 +"contents and the next ones will append"
  1526 +msgstr ""
  1527 +"Quando selecionado a primeira operação de cópia após a seleção definirá o "
  1528 +"conteúdo da área de transferência enquanto as operações subsequentes "
  1529 +"acrescentaram conteúdo"
  1530 +
1518 1531 #: src/dialogs/settings/clipboard.c:144
1519 1532 msgid ""
1520 1533 "When set the terminal spaces are exported as non-breaking spaces to prevent "
... ...
src/dialogs/settings/clipboard.c
... ... @@ -157,8 +157,17 @@
157 157 .width = 1,
158 158 .height = 1,
159 159 .grid = PASTE_SETTINGS
160   - }
  160 + },
161 161  
  162 + {
  163 + .label = N_("Smart copy"),
  164 + .tooltip = N_("When set the first copy operation after the selection will set the clipboard contents and the next ones will append"),
  165 + .left = 1,
  166 + .top = 3,
  167 + .width = 1,
  168 + .height = 1,
  169 + .grid = COPY_SETTINGS
  170 + }
162 171 };
163 172  
164 173 /*--[ Globals ]--------------------------------------------------------------------------------------*/
... ... @@ -206,6 +215,19 @@ static void copy_format_changed(GtkComboBox *widget, GtkWidget *grid) {
206 215  
207 216 }
208 217  
  218 +static void keep_selected_toggled(GtkToggleButton *togglebutton, V3270ClipboardSettings *settings) {
  219 +
  220 + debug("%s",__FUNCTION__);
  221 +
  222 + if(!gtk_toggle_button_get_active(togglebutton)) {
  223 + gtk_toggle_button_set_active(settings->input.checkboxes[2],FALSE);
  224 + gtk_widget_set_sensitive(GTK_WIDGET(settings->input.checkboxes[2]),FALSE);
  225 + } else {
  226 + gtk_widget_set_sensitive(GTK_WIDGET(settings->input.checkboxes[2]),TRUE);
  227 + }
  228 +
  229 +}
  230 +
209 231 static void V3270ClipboardSettings_init(V3270ClipboardSettings *widget) {
210 232  
211 233 size_t ix;
... ... @@ -263,6 +285,8 @@ static void V3270ClipboardSettings_init(V3270ClipboardSettings *widget) {
263 285 }
264 286  
265 287 v3270_settings_create_toggle_buttons(toggles, G_N_ELEMENTS(toggles), grids, widget->input.toggles);
  288 + g_signal_connect(G_OBJECT(widget->input.toggles[1]),"toggled",G_CALLBACK(keep_selected_toggled),widget);
  289 +
266 290 v3270_settings_create_combos(combos, G_N_ELEMENTS(combos), grids, widget->input.combos);
267 291 v3270_settings_create_checkboxes(checkboxes, G_N_ELEMENTS(checkboxes), grids, widget->input.checkboxes);
268 292  
... ... @@ -447,6 +471,7 @@ static void load(GtkWidget *w, GtkWidget *t) {
447 471  
448 472 gtk_toggle_button_set_active(widget->input.checkboxes[0],(terminal->selection.options & V3270_SELECTION_NON_BREAKABLE_SPACE) != 0);
449 473 gtk_toggle_button_set_active(widget->input.checkboxes[1],(terminal->selection.options & V3270_SELECTION_SCREEN_PASTE) != 0);
  474 + gtk_toggle_button_set_active(widget->input.checkboxes[2],(terminal->selection.options & V3270_SELECTION_SMART_COPY) != 0);
450 475  
451 476 //
452 477 // Set font combo-box
... ... @@ -520,12 +545,18 @@ static void apply(GtkWidget *w, GtkWidget *t) {
520 545 terminal->selection.options &= ~V3270_SELECTION_NON_BREAKABLE_SPACE;
521 546 }
522 547  
523   - if(gtk_toggle_button_get_active(widget->input.checkboxes[0])) {
  548 + if(gtk_toggle_button_get_active(widget->input.checkboxes[1])) {
524 549 terminal->selection.options |= V3270_SELECTION_SCREEN_PASTE;
525 550 } else {
526 551 terminal->selection.options &= ~V3270_SELECTION_SCREEN_PASTE;
527 552 }
528 553  
  554 + if(gtk_toggle_button_get_active(widget->input.checkboxes[2])) {
  555 + terminal->selection.options |= V3270_SELECTION_SMART_COPY;
  556 + } else {
  557 + terminal->selection.options &= ~V3270_SELECTION_SMART_COPY;
  558 + }
  559 +
529 560 // Get font settings
530 561 switch(get_active_id(widget,0)) {
531 562 case '0':
... ...
src/include/terminal.h
... ... @@ -120,12 +120,13 @@ G_BEGIN_DECLS
120 120  
121 121 typedef enum _V3270SelectionOption {
122 122  
123   - V3270_SELECTION_PLAIN_TEXT = 0x0000, ///< @brief Uses only plain text.
124   - V3270_SELECTION_FONT_FAMILY = 0x0001, ///< @brief Inform font-family.
125   - V3270_SELECTION_COLORS = 0x0002, ///< @brief Inform terminal colors.
126   - V3270_SELECTION_NON_BREAKABLE_SPACE = 0x0004, ///< @brief Use non breakable spaces.
127   - V3270_SELECTION_DIALOG_STATE = 0x0010, ///< @brief Used for settings dialog.
128   - V3270_SELECTION_SCREEN_PASTE = 0x0020, ///< @brief Enable screen paste.
  123 + V3270_SELECTION_PLAIN_TEXT = 0x00, ///< @brief Uses only plain text.
  124 + V3270_SELECTION_FONT_FAMILY = 0x01, ///< @brief Inform font-family.
  125 + V3270_SELECTION_COLORS = 0x02, ///< @brief Inform terminal colors.
  126 + V3270_SELECTION_NON_BREAKABLE_SPACE = 0x04, ///< @brief Use non breakable spaces.
  127 + V3270_SELECTION_SCREEN_PASTE = 0x08, ///< @brief Enable screen paste.
  128 + V3270_SELECTION_SMART_COPY = 0x10, ///< @brief Enable copy/append based on current selection state.
  129 + V3270_SELECTION_DIALOG_STATE = 0x20, ///< @brief Used for settings dialog.
129 130  
130 131 } V3270SelectionOption;
131 132  
... ... @@ -155,6 +156,7 @@ G_BEGIN_DECLS
155 156 int scaled_fonts : 1; /// @brief Use scaled fonts
156 157 int drawing : 1; /// @brief Draw widget?
157 158 int freeze : 1; /// @brief Truee when the "save settings" signal is disabled.
  159 + int append : 1; /// @brief Next smart-copy operation will be append.
158 160  
159 161 /// @brief Action properties.
160 162 GtkResponseType responses[V3270_TOGGLEABLE_DIALOG_CUSTOM];
... ...
src/include/v3270/selection.h
... ... @@ -39,11 +39,11 @@
39 39 typedef enum _v3270_copy_mode
40 40 {
41 41  
42   - V3270_COPY_DEFAULT, ///< @brief Detect format based on lib3270's smart past toggle.
43 42 V3270_COPY_FORMATTED, ///< @brief Copy formatted data; keep attributes.
44 43 V3270_COPY_TEXT, ///< @brief Single text format, ignore attributes.
45 44 V3270_COPY_TABLE, ///< @brief Copy as table.
46   - V3270_COPY_APPEND ///< @brief Append to current contents keeping the stored format.
  45 + V3270_COPY_APPEND, ///< @brief Append to current contents keeping the stored format.
  46 + V3270_COPY_SMART ///< @brief use append/default based on current copy state.
47 47  
48 48 } V3270_COPY_MODE;
49 49  
... ...
src/selection/copy.c
... ... @@ -30,34 +30,32 @@
30 30 #include <clipboard.h>
31 31 #include <lib3270/selection.h>
32 32  
33   - static void do_copy(v3270 *terminal, gboolean cut)
34   - {
  33 + static void do_copy(v3270 *terminal, gboolean cut) {
  34 +
35 35 lib3270_selection * selection = lib3270_selection_new(terminal->host,cut,0);
36 36  
37   - if(selection)
38   - {
  37 + if(selection) {
39 38 terminal->selection.blocks = g_list_append(terminal->selection.blocks,selection);
  39 + terminal->append = ((terminal->selection.options & V3270_SELECTION_SMART_COPY) != 0) ? 1 : 0 ; // Define next smart option.
40 40 }
41 41  
42 42 }
43 43  
44   - LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut)
45   - {
  44 + LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) {
  45 +
46 46 g_return_if_fail(GTK_IS_V3270(widget));
47 47  
48 48 v3270 * terminal = GTK_V3270(widget);
49 49  
  50 + if(mode == V3270_COPY_SMART) {
  51 + mode = (terminal->append ? V3270_COPY_APPEND : V3270_COPY_FORMATTED);
  52 + }
  53 +
50 54 if(mode != V3270_COPY_APPEND) {
51 55  
52 56 // It's not append, clear current contents ...
53 57 v3270_clear_selection(terminal);
54 58  
55   - // ... and set the new mode.
56   - if(mode == V3270_COPY_DEFAULT) {
57   -// mode = (lib3270_get_toggle(v3270_get_session(widget),LIB3270_TOGGLE_SMART_PASTE) ? V3270_COPY_FORMATTED : V3270_COPY_TEXT);
58   - mode = V3270_COPY_FORMATTED;
59   - }
60   -
61 59 terminal->selection.format = mode;
62 60  
63 61 }
... ... @@ -67,13 +65,11 @@
67 65 v3270_update_system_clipboard(widget);
68 66 }
69 67  
70   - LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE format, gboolean cut)
71   - {
  68 + LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE format, gboolean cut) {
72 69 v3270_clipboard_set(widget,format,cut);
73 70 }
74 71  
75   - LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut)
76   - {
  72 + LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) {
77 73 v3270_clipboard_set(widget,V3270_COPY_APPEND,cut);
78 74 }
79 75  
... ...
src/selection/selection.c
... ... @@ -109,6 +109,7 @@ LIB3270_EXPORT void v3270_unselect(GtkWidget *widget)
109 109 {
110 110 v3270_disable_updates(widget);
111 111 lib3270_unselect(v3270_get_session(widget));
  112 + GTK_V3270(widget)->append = 0; // Reset smart-copy.
112 113 v3270_enable_updates(widget);
113 114 }
114 115  
... ... @@ -122,6 +123,7 @@ LIB3270_EXPORT void v3270_select_region(GtkWidget *widget, gint start, gint end
122 123 {
123 124 g_return_if_fail(GTK_IS_V3270(widget));
124 125 lib3270_select_region(GTK_V3270(widget)->host,start,end);
  126 + GTK_V3270(widget)->append = 0; // Reset smart-copy.
125 127 }
126 128  
127 129 LIB3270_EXPORT void v3270_select_all(GtkWidget *widget)
... ... @@ -130,6 +132,7 @@ LIB3270_EXPORT void v3270_select_all(GtkWidget *widget)
130 132 v3270_disable_updates(widget);
131 133 lib3270_select_all(v3270_get_session(widget));
132 134 v3270_enable_updates(widget);
  135 + GTK_V3270(widget)->append = 0; // Reset smart-copy.
133 136 }
134 137  
135 138 void v3270_selection_set_font_family(GtkWidget *widget, const gchar *name) {
... ...
src/terminal/actions/table.c
... ... @@ -63,7 +63,7 @@
63 63  
64 64 // Standard Clipboard actions
65 65 {
66   - .flags = 0,
  66 + .flags = V3270_COPY_SMART,
67 67 .name = "copy",
68 68 .group = LIB3270_ACTION_GROUP_SELECTION,
69 69 .icon = "edit-copy",
... ... @@ -112,7 +112,7 @@
112 112 },
113 113  
114 114 {
115   - .flags = V3270_ACTION_FLAG_CUT|V3270_COPY_DEFAULT,
  115 + .flags = V3270_ACTION_FLAG_CUT|V3270_COPY_SMART,
116 116 .group = LIB3270_ACTION_GROUP_SELECTION,
117 117 .name = "cut",
118 118 .icon = "edit-cut",
... ...