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,7 +45,7 @@
45 CLIPBOARD_TYPE_TEXT, 45 CLIPBOARD_TYPE_TEXT,
46 CLIPBOARD_TYPE_CSV, 46 CLIPBOARD_TYPE_CSV,
47 CLIPBOARD_TYPE_HTML, 47 CLIPBOARD_TYPE_HTML,
48 - CLIPBOARD_TYPE_V3270_UNPROTECTED 48 + CLIPBOARD_TYPE_V3270_FORMATTED
49 }; 49 };
50 50
51 /// @brief Column from selection. 51 /// @brief Column from selection.
src/include/terminal.h
@@ -120,13 +120,14 @@ G_BEGIN_DECLS @@ -120,13 +120,14 @@ G_BEGIN_DECLS
120 120
121 typedef enum _V3270SelectionOption { 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 } V3270SelectionOption; 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 /*--[ Globals ]--------------------------------------------------------------------------------------*/ 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,7 +128,7 @@ static gchar * get_as_div(v3270 * terminal, const GList *selection, gboolean all
128 } 128 }
129 else 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 src++; 134 src++;
src/selection/linux/copy.c
@@ -91,7 +91,7 @@ static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionDa @@ -91,7 +91,7 @@ static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionDa
91 } 91 }
92 break; 92 break;
93 93
94 - case CLIPBOARD_TYPE_V3270_UNPROTECTED: 94 + case CLIPBOARD_TYPE_V3270_FORMATTED:
95 { 95 {
96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal); 96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal);
97 gtk_selection_data_set( 97 gtk_selection_data_set(
@@ -131,12 +131,12 @@ void v3270_update_system_clipboard(GtkWidget *widget) @@ -131,12 +131,12 @@ void v3270_update_system_clipboard(GtkWidget *widget)
131 131
132 gtk_target_list_add_text_targets(list, CLIPBOARD_TYPE_TEXT); 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 static const GtkTargetEntry targets[] = { 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 gtk_target_list_add_table(list, targets, G_N_ELEMENTS(targets)); 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,7 +91,7 @@ static void clipboard_get(G_GNUC_UNUSED GtkClipboard *clipboard, GtkSelectionDa
91 } 91 }
92 break; 92 break;
93 93
94 - case CLIPBOARD_TYPE_V3270_UNPROTECTED: 94 + case CLIPBOARD_TYPE_V3270_FORMATTED:
95 { 95 {
96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal); 96 g_autofree gchar *data = v3270_get_copy_as_data_block(terminal);
97 gtk_selection_data_set( 97 gtk_selection_data_set(
@@ -127,19 +127,24 @@ void v3270_update_system_clipboard(GtkWidget *widget) @@ -127,19 +127,24 @@ void v3270_update_system_clipboard(GtkWidget *widget)
127 // 127 //
128 // Reference: https://cpp.hotexamples.com/examples/-/-/g_list_insert_sorted/cpp-g_list_insert_sorted-function-examples.html 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 gtk_target_list_add_text_targets(list, CLIPBOARD_TYPE_TEXT); 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 #ifdef DEBUG 149 #ifdef DEBUG
145 { 150 {
src/terminal/widget.c
@@ -202,7 +202,7 @@ static void v3270_class_init(v3270Class *klass) @@ -202,7 +202,7 @@ static void v3270_class_init(v3270Class *klass)
202 gobject_class->finalize = finalize; 202 gobject_class->finalize = finalize;
203 203
204 // Atoms 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 // Widget methods 207 // Widget methods
208 widget_class->realize = v3270_realize; 208 widget_class->realize = v3270_realize;