Commit 9dff8391aded485a947b251f2d15f8dbda933206
1 parent
5de05634
Exists in
master
and in
1 other branch
Refactoring clipboard methods.
Showing
8 changed files
with
48 additions
and
39 deletions
Show diff stats
src/include/terminal.h
| @@ -131,7 +131,7 @@ G_BEGIN_DECLS | @@ -131,7 +131,7 @@ G_BEGIN_DECLS | ||
| 131 | 131 | ||
| 132 | int baddr; ///< @brief Selection address. | 132 | int baddr; ///< @brief Selection address. |
| 133 | GdkAtom target; ///< @brief A GdkAtom which identifies the clipboard to use. GDK_SELECTION_CLIPBOARD gives the default clipboard. | 133 | GdkAtom target; ///< @brief A GdkAtom which identifies the clipboard to use. GDK_SELECTION_CLIPBOARD gives the default clipboard. |
| 134 | - V3270_SELECT_FORMAT format; ///< @brief Copy format. | 134 | + V3270_COPY_MODE format; ///< @brief Copy mode. |
| 135 | GList * blocks; ///< @brief Selection blocks. | 135 | GList * blocks; ///< @brief Selection blocks. |
| 136 | 136 | ||
| 137 | } selection; | 137 | } selection; |
src/include/v3270.h
| @@ -197,42 +197,41 @@ | @@ -197,42 +197,41 @@ | ||
| 197 | LIB3270_EXPORT gchar * v3270_get_lunames(GtkWidget *widget); | 197 | LIB3270_EXPORT gchar * v3270_get_lunames(GtkWidget *widget); |
| 198 | 198 | ||
| 199 | // Clipboard | 199 | // Clipboard |
| 200 | - typedef enum _v3270_select_format | 200 | + typedef enum _v3270_copy_mode |
| 201 | { | 201 | { |
| 202 | - V3270_SELECT_NONE, ///< @brief No selected format, use default. | ||
| 203 | - V3270_SELECT_TEXT, ///< @brief Single text format, don't process. | ||
| 204 | - V3270_SELECT_TABLE, ///< @brief Parse contents as table (only for text formats). | 202 | + V3270_COPY_FORMATTED, ///< @brief Copy formatted data; keep attributes. |
| 203 | + V3270_COPY_TEXT, ///< @brief Single text format, ignore attributes. | ||
| 204 | + V3270_COPY_TABLE, ///< @brief Copy as table. | ||
| 205 | 205 | ||
| 206 | - V3270_SELECT_MAX | ||
| 207 | - } V3270_SELECT_FORMAT; | 206 | + } V3270_COPY_MODE; |
| 207 | + | ||
| 208 | + LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut); | ||
| 209 | + LIB3270_EXPORT void v3270_clipboard_append(GtkWidget *widget, gboolean cut); | ||
| 210 | + | ||
| 211 | + LIB3270_EXPORT void v3270_clipboard_get_from_url(GtkWidget *widget, const gchar *url); | ||
| 212 | + | ||
| 213 | + LIB3270_EXPORT void v3270_paste(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 214 | + LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 215 | + LIB3270_EXPORT void v3270_paste_from_file(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 216 | + LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) G_GNUC_DEPRECATED; | ||
| 217 | + LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) G_GNUC_DEPRECATED; | ||
| 218 | + | ||
| 219 | + | ||
| 220 | + // Selections | ||
| 208 | 221 | ||
| 209 | LIB3270_EXPORT gchar * v3270_get_selected(GtkWidget *widget, gboolean cut); | 222 | LIB3270_EXPORT gchar * v3270_get_selected(GtkWidget *widget, gboolean cut); |
| 210 | LIB3270_EXPORT gchar * v3270_get_copy(GtkWidget *widget); | 223 | LIB3270_EXPORT gchar * v3270_get_copy(GtkWidget *widget); |
| 211 | -// LIB3270_EXPORT void v3270_set_copy(GtkWidget *widget, const gchar *text); | ||
| 212 | 224 | ||
| 213 | LIB3270_EXPORT gchar * v3270_get_text(GtkWidget *widget,int offset, int len); | 225 | LIB3270_EXPORT gchar * v3270_get_text(GtkWidget *widget,int offset, int len); |
| 214 | LIB3270_EXPORT gchar * v3270_get_region(GtkWidget *widget, gint start_pos, gint end_pos, gboolean all); | 226 | LIB3270_EXPORT gchar * v3270_get_region(GtkWidget *widget, gint start_pos, gint end_pos, gboolean all); |
| 215 | 227 | ||
| 216 | LIB3270_EXPORT void v3270_set_string(GtkWidget *widget, const gchar *str); | 228 | LIB3270_EXPORT void v3270_set_string(GtkWidget *widget, const gchar *str); |
| 217 | - LIB3270_EXPORT void v3270_tab(GtkWidget *widget); | ||
| 218 | - LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); | ||
| 219 | 229 | ||
| 220 | - // Selections | ||
| 221 | LIB3270_EXPORT gboolean v3270_get_selection_bounds(GtkWidget *widget, gint *start, gint *end); | 230 | LIB3270_EXPORT gboolean v3270_get_selection_bounds(GtkWidget *widget, gint *start, gint *end); |
| 222 | LIB3270_EXPORT void v3270_unselect(GtkWidget *widget); | 231 | LIB3270_EXPORT void v3270_unselect(GtkWidget *widget); |
| 223 | LIB3270_EXPORT void v3270_select_all(GtkWidget *widget); | 232 | LIB3270_EXPORT void v3270_select_all(GtkWidget *widget); |
| 224 | LIB3270_EXPORT void v3270_select_region(GtkWidget *widget, gint start, gint end); | 233 | LIB3270_EXPORT void v3270_select_region(GtkWidget *widget, gint start, gint end); |
| 225 | 234 | ||
| 226 | - LIB3270_EXPORT void v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); | ||
| 227 | - LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); | ||
| 228 | - LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut); | ||
| 229 | - | ||
| 230 | - LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url); | ||
| 231 | - | ||
| 232 | - LIB3270_EXPORT void v3270_paste(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 233 | - LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 234 | - LIB3270_EXPORT void v3270_paste_from_file(GtkWidget *widget) G_GNUC_DEPRECATED; | ||
| 235 | - | ||
| 236 | LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const gchar *encoding); | 235 | LIB3270_EXPORT void v3270_input_text(GtkWidget *widget, const gchar *text, const gchar *encoding); |
| 237 | 236 | ||
| 238 | // Colors | 237 | // Colors |
| @@ -273,8 +272,10 @@ | @@ -273,8 +272,10 @@ | ||
| 273 | LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path); | 272 | LIB3270_EXPORT void v3270_set_remap_filename(GtkWidget *widget, const gchar *path); |
| 274 | LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget); | 273 | LIB3270_EXPORT const gchar * v3270_get_remap_filename(GtkWidget *widget); |
| 275 | 274 | ||
| 276 | - // Keyboard & Mouse special actions | 275 | + // Actions |
| 277 | LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action); | 276 | LIB3270_EXPORT void v3270_set_scroll_action(GtkWidget *widget, GdkScrollDirection direction, GtkAction *action); |
| 277 | + LIB3270_EXPORT void v3270_tab(GtkWidget *widget); | ||
| 278 | + LIB3270_EXPORT void v3270_backtab(GtkWidget *widget); | ||
| 278 | 279 | ||
| 279 | // SSL & Security | 280 | // SSL & Security |
| 280 | LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget); | 281 | LIB3270_EXPORT const gchar * v3270_get_ssl_state_icon_name(GtkWidget *widget); |
src/selection/copy.c
| @@ -41,7 +41,7 @@ | @@ -41,7 +41,7 @@ | ||
| 41 | 41 | ||
| 42 | } | 42 | } |
| 43 | 43 | ||
| 44 | - LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_SELECT_FORMAT format, gboolean cut) | 44 | + LIB3270_EXPORT void v3270_clipboard_set(GtkWidget *widget, V3270_COPY_MODE mode, gboolean cut) |
| 45 | { | 45 | { |
| 46 | g_return_if_fail(GTK_IS_V3270(widget)); | 46 | g_return_if_fail(GTK_IS_V3270(widget)); |
| 47 | 47 | ||
| @@ -50,14 +50,13 @@ | @@ -50,14 +50,13 @@ | ||
| 50 | // Have data? Clear it? | 50 | // Have data? Clear it? |
| 51 | v3270_clear_selection(terminal); | 51 | v3270_clear_selection(terminal); |
| 52 | 52 | ||
| 53 | - terminal->selection.format = format; | 53 | + terminal->selection.format = mode; |
| 54 | do_copy(terminal,cut); | 54 | do_copy(terminal,cut); |
| 55 | 55 | ||
| 56 | v3270_update_system_clipboard(widget); | 56 | v3270_update_system_clipboard(widget); |
| 57 | - | ||
| 58 | } | 57 | } |
| 59 | 58 | ||
| 60 | - LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) | 59 | + LIB3270_EXPORT void v3270_clipboard_append(GtkWidget *widget, gboolean cut) |
| 61 | { | 60 | { |
| 62 | g_return_if_fail(GTK_IS_V3270(widget)); | 61 | g_return_if_fail(GTK_IS_V3270(widget)); |
| 63 | 62 | ||
| @@ -66,6 +65,16 @@ | @@ -66,6 +65,16 @@ | ||
| 66 | do_copy(terminal,cut); | 65 | do_copy(terminal,cut); |
| 67 | 66 | ||
| 68 | v3270_update_system_clipboard(widget); | 67 | v3270_update_system_clipboard(widget); |
| 68 | + } | ||
| 69 | 69 | ||
| 70 | + | ||
| 71 | + LIB3270_EXPORT void v3270_copy_selection(GtkWidget *widget, V3270_COPY_MODE format, gboolean cut) | ||
| 72 | + { | ||
| 73 | + v3270_clipboard_set(widget,format,cut); | ||
| 74 | + } | ||
| 75 | + | ||
| 76 | + LIB3270_EXPORT void v3270_append_selection(GtkWidget *widget, gboolean cut) | ||
| 77 | + { | ||
| 78 | + v3270_clipboard_append(widget,cut); | ||
| 70 | } | 79 | } |
| 71 | 80 |
src/selection/html.c
| @@ -229,7 +229,7 @@ gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selecti | @@ -229,7 +229,7 @@ gchar * v3270_get_selection_as_html_table(v3270 * terminal, const GList *selecti | ||
| 229 | gchar * v3270_get_copy_as_html(v3270 * terminal, const gchar *encoding) | 229 | gchar * v3270_get_copy_as_html(v3270 * terminal, const gchar *encoding) |
| 230 | { | 230 | { |
| 231 | 231 | ||
| 232 | - if(terminal->selection.format == V3270_SELECT_TABLE) | 232 | + if(terminal->selection.format == V3270_COPY_TABLE) |
| 233 | return v3270_get_selection_as_html_table(terminal, terminal->selection.blocks, encoding, FALSE); | 233 | return v3270_get_selection_as_html_table(terminal, terminal->selection.blocks, encoding, FALSE); |
| 234 | 234 | ||
| 235 | return v3270_get_selection_as_html_div(terminal, terminal->selection.blocks, encoding, FALSE); | 235 | return v3270_get_selection_as_html_div(terminal, terminal->selection.blocks, encoding, FALSE); |
src/selection/linux/paste.c
| @@ -146,7 +146,6 @@ static void formatted_received(GtkClipboard *clipboard, GtkSelectionData *select | @@ -146,7 +146,6 @@ static void formatted_received(GtkClipboard *clipboard, GtkSelectionData *select | ||
| 146 | 146 | ||
| 147 | } | 147 | } |
| 148 | 148 | ||
| 149 | - | ||
| 150 | } | 149 | } |
| 151 | 150 | ||
| 152 | static void targets_received(GtkClipboard *clipboard, GdkAtom *atoms, gint n_atoms, GtkWidget *widget) | 151 | static void targets_received(GtkClipboard *clipboard, GdkAtom *atoms, gint n_atoms, GtkWidget *widget) |
| @@ -177,13 +176,13 @@ static void targets_received(GtkClipboard *clipboard, GdkAtom *atoms, gint n_ato | @@ -177,13 +176,13 @@ static void targets_received(GtkClipboard *clipboard, GdkAtom *atoms, gint n_ato | ||
| 177 | 176 | ||
| 178 | } | 177 | } |
| 179 | 178 | ||
| 180 | -LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url) | 179 | +LIB3270_EXPORT void v3270_clipboard_get_from_url(GtkWidget *widget, const gchar *url) |
| 181 | { | 180 | { |
| 182 | g_return_if_fail(GTK_IS_V3270(widget)); | 181 | g_return_if_fail(GTK_IS_V3270(widget)); |
| 183 | 182 | ||
| 184 | GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GTK_V3270(widget)->selection.target); | 183 | GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GTK_V3270(widget)->selection.target); |
| 185 | 184 | ||
| 186 | - if(!url || g_str_has_prefix(url,"clipboard://")) | 185 | + if(!url || !*url || g_str_has_prefix(url,"clipboard://") || g_str_has_prefix(url,"tn3270://")) |
| 187 | { | 186 | { |
| 188 | gtk_clipboard_request_targets( | 187 | gtk_clipboard_request_targets( |
| 189 | clipboard, | 188 | clipboard, |
| @@ -213,11 +212,11 @@ LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url) | @@ -213,11 +212,11 @@ LIB3270_EXPORT void v3270_paste_from_url(GtkWidget *widget, const gchar *url) | ||
| 213 | 212 | ||
| 214 | LIB3270_EXPORT void v3270_paste(GtkWidget *widget) | 213 | LIB3270_EXPORT void v3270_paste(GtkWidget *widget) |
| 215 | { | 214 | { |
| 216 | - v3270_paste_from_url(widget,NULL); | 215 | + v3270_clipboard_get_from_url(widget,NULL); |
| 217 | } | 216 | } |
| 218 | 217 | ||
| 219 | LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) | 218 | LIB3270_EXPORT void v3270_paste_text(GtkWidget *widget) |
| 220 | { | 219 | { |
| 221 | - v3270_paste_from_url(widget,"text://"); | 220 | + v3270_clipboard_get_from_url(widget,"text://"); |
| 222 | } | 221 | } |
| 223 | 222 |
src/selection/text.c
| @@ -67,7 +67,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co | @@ -67,7 +67,7 @@ gchar * v3270_get_selection_as_text(v3270 * terminal, const GList *selection, co | ||
| 67 | 67 | ||
| 68 | gchar * v3270_get_copy_as_text(v3270 * terminal, const gchar *encoding) | 68 | gchar * v3270_get_copy_as_text(v3270 * terminal, const gchar *encoding) |
| 69 | { | 69 | { |
| 70 | - if(terminal->selection.format == V3270_SELECT_TABLE) | 70 | + if(terminal->selection.format == V3270_COPY_TABLE) |
| 71 | return v3270_get_copy_as_table(terminal,"\t",encoding); | 71 | return v3270_get_copy_as_table(terminal,"\t",encoding); |
| 72 | return v3270_get_selection_as_text(terminal, terminal->selection.blocks, encoding, FALSE); | 72 | return v3270_get_selection_as_text(terminal, terminal->selection.blocks, encoding, FALSE); |
| 73 | } | 73 | } |
src/testprogram/toolbar.c
| @@ -157,12 +157,12 @@ | @@ -157,12 +157,12 @@ | ||
| 157 | 157 | ||
| 158 | static void paste_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | 158 | static void paste_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) |
| 159 | { | 159 | { |
| 160 | - v3270_paste_from_url(terminal,NULL); | 160 | + v3270_clipboard_get_from_url(terminal,NULL); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | static void copy_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | 163 | static void copy_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) |
| 164 | { | 164 | { |
| 165 | - v3270_copy_selection(terminal,V3270_SELECT_TEXT,FALSE); | 165 | + v3270_copy_selection(terminal,V3270_COPY_TEXT,FALSE); |
| 166 | } | 166 | } |
| 167 | 167 | ||
| 168 | static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) | 168 | static void color_clicked(GtkButton G_GNUC_UNUSED(*button), GtkWidget *terminal) |
src/trace/exec.c
| @@ -184,15 +184,15 @@ | @@ -184,15 +184,15 @@ | ||
| 184 | if(!(*arg && g_ascii_strcasecmp(arg,"text"))) | 184 | if(!(*arg && g_ascii_strcasecmp(arg,"text"))) |
| 185 | { | 185 | { |
| 186 | // No argument or "text" copy text. | 186 | // No argument or "text" copy text. |
| 187 | - v3270_copy_selection(trace->terminal, V3270_SELECT_TEXT, FALSE); | 187 | + v3270_clipboard_set(trace->terminal, V3270_COPY_TEXT, FALSE); |
| 188 | } | 188 | } |
| 189 | else if(!g_ascii_strcasecmp(arg,"table")) | 189 | else if(!g_ascii_strcasecmp(arg,"table")) |
| 190 | { | 190 | { |
| 191 | - v3270_copy_selection(trace->terminal, V3270_SELECT_TABLE, FALSE); | 191 | + v3270_clipboard_set(trace->terminal, V3270_COPY_TABLE, FALSE); |
| 192 | } | 192 | } |
| 193 | else if(!g_ascii_strcasecmp(arg,"append")) | 193 | else if(!g_ascii_strcasecmp(arg,"append")) |
| 194 | { | 194 | { |
| 195 | - v3270_append_selection(trace->terminal,FALSE); | 195 | + v3270_clipboard_append(trace->terminal,FALSE); |
| 196 | } | 196 | } |
| 197 | else | 197 | else |
| 198 | { | 198 | { |
| @@ -237,7 +237,7 @@ | @@ -237,7 +237,7 @@ | ||
| 237 | gchar * arg = cmdline+5; | 237 | gchar * arg = cmdline+5; |
| 238 | g_strstrip(arg); | 238 | g_strstrip(arg); |
| 239 | 239 | ||
| 240 | - v3270_paste_from_url(trace->terminal,arg); | 240 | + v3270_clipboard_get_from_url(trace->terminal,arg); |
| 241 | 241 | ||
| 242 | return 0; | 242 | return 0; |
| 243 | } | 243 | } |