Commit dc7daf835b593165be5a7681285645d4cb0ab597

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

Small fixes in the clipboard management.

src/include/clipboard.h
... ... @@ -45,7 +45,7 @@
45 45 CLIPBOARD_TYPE_TEXT,
46 46 CLIPBOARD_TYPE_CSV,
47 47 CLIPBOARD_TYPE_HTML,
48   - CLIPBOARD_TYPE_V3270_UNPROTECTED
  48 + CLIPBOARD_TYPE_V3270_FORMATTED
49 49 };
50 50  
51 51 /// @brief Column from selection.
... ...
src/include/terminal.h
... ... @@ -120,13 +120,14 @@ 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.
  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.
126 127  
127 128 } V3270SelectionOption;
128 129  
129   - #define V3270_SELECTION_DEFAULT (V3270_SELECTION_FONT_FAMILY|V3270_SELECTION_COLORS)
  130 + #define V3270_SELECTION_DEFAULT (V3270_SELECTION_FONT_FAMILY|V3270_SELECTION_COLORS|V3270_SELECTION_NON_BREAKABLE_SPACE)
130 131  
131 132 /*--[ Globals ]--------------------------------------------------------------------------------------*/
132 133  
... ...
src/selection/html.c
... ... @@ -128,7 +128,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection, gboolean all
128 128 }
129 129 else
130 130 {
131   - g_string_append(string,"&nbsp;");
  131 + g_string_append(string,((options & V3270_SELECTION_NON_BREAKABLE_SPACE) ? "&nbsp;" : " "));
132 132 }
133 133  
134 134 src++;
... ...
src/selection/linux/copy.c
... ... @@ -91,7 +91,7 @@ static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionDa
91 91 }
92 92 break;
93 93  
94   - case CLIPBOARD_TYPE_V3270_UNPROTECTED:
  94 + case CLIPBOARD_TYPE_V3270_FORMATTED:
95 95 {
96 96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal);
97 97 gtk_selection_data_set(
... ... @@ -131,12 +131,12 @@ void v3270_update_system_clipboard(GtkWidget *widget)
131 131  
132 132 gtk_target_list_add_text_targets(list, CLIPBOARD_TYPE_TEXT);
133 133  
134   - if(terminal->selection.options != V3270_SELECTION_PLAIN_TEXT)
  134 + if((terminal->selection.options & V3270_SELECTION_PLAIN_TEXT) == 0)
135 135 {
136 136 static const GtkTargetEntry targets[] = {
137   - { "text/csv", 0, CLIPBOARD_TYPE_CSV },
138   - { "text/html", 0, CLIPBOARD_TYPE_HTML },
139   - { "application/x-v3270-unprotected", 0, CLIPBOARD_TYPE_V3270_UNPROTECTED },
  137 + { "text/csv", 0, CLIPBOARD_TYPE_CSV },
  138 + { "text/html", 0, CLIPBOARD_TYPE_HTML },
  139 + { "application/x-v3270-formatted", 0, CLIPBOARD_TYPE_V3270_FORMATTED },
140 140 };
141 141  
142 142 gtk_target_list_add_table(list, targets, G_N_ELEMENTS(targets));
... ...
src/selection/windows/copy.c
... ... @@ -91,7 +91,7 @@ static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionDa
91 91 }
92 92 break;
93 93  
94   - case CLIPBOARD_TYPE_V3270_UNPROTECTED:
  94 + case CLIPBOARD_TYPE_V3270_FORMATTED:
95 95 {
96 96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal);
97 97 gtk_selection_data_set(
... ... @@ -127,19 +127,24 @@ void v3270_update_system_clipboard(GtkWidget *widget)
127 127 //
128 128 // Reference: https://cpp.hotexamples.com/examples/-/-/g_list_insert_sorted/cpp-g_list_insert_sorted-function-examples.html
129 129 //
130   - static const GtkTargetEntry internal_targets[] = {
131   - { "text/csv", 0, CLIPBOARD_TYPE_CSV },
132   - { "text/html", 0, CLIPBOARD_TYPE_HTML },
133   - { "application/x-v3270-unprotected", 0, CLIPBOARD_TYPE_V3270_UNPROTECTED },
134   - };
135   -
136   - GtkTargetList * list = gtk_target_list_new(internal_targets, G_N_ELEMENTS(internal_targets));
137   - GtkTargetEntry * targets;
138   - int n_targets;
  130 + GtkTargetList * list = gtk_target_list_new(NULL,0);
139 131  
140 132 gtk_target_list_add_text_targets(list, CLIPBOARD_TYPE_TEXT);
141 133  
142   - targets = gtk_target_table_new_from_list(list, &n_targets);
  134 + if((terminal->selection.options & V3270_SELECTION_PLAIN_TEXT) == 0)
  135 + {
  136 + static const GtkTargetEntry targets[] = {
  137 + { "text/csv", 0, CLIPBOARD_TYPE_CSV },
  138 + { "text/html", 0, CLIPBOARD_TYPE_HTML },
  139 + { "application/x-v3270-formatted", 0, CLIPBOARD_TYPE_V3270_FORMATTED },
  140 + };
  141 +
  142 + gtk_target_list_add_table(list, targets, G_N_ELEMENTS(targets));
  143 +
  144 + }
  145 +
  146 + int n_targets;
  147 + GtkTargetEntry * targets = gtk_target_table_new_from_list(list, &n_targets);
143 148  
144 149 #ifdef DEBUG
145 150 {
... ...
src/terminal/widget.c
... ... @@ -202,7 +202,7 @@ static void v3270_class_init(v3270Class *klass)
202 202 gobject_class->finalize = finalize;
203 203  
204 204 // Atoms
205   - klass->clipboard_formatted = gdk_atom_intern_static_string("application/x-v3270-unprotected");
  205 + klass->clipboard_formatted = gdk_atom_intern_static_string("application/x-v3270-formatted");
206 206  
207 207 // Widget methods
208 208 widget_class->realize = v3270_realize;
... ...