Commit dc7daf835b593165be5a7681285645d4cb0ab597
1 parent
57a0af32
Exists in
master
and in
1 other branch
Small fixes in the clipboard management.
Showing
6 changed files
with
29 additions
and
23 deletions
Show diff stats
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," "); | 131 | + g_string_append(string,((options & V3270_SELECTION_NON_BREAKABLE_SPACE) ? " " : " ")); |
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; |