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; |