Commit 983dcc9916d0bc0dec97aaf58ac88ff28cfec4cd
1 parent
950f31ce
Exists in
master
and in
5 other branches
Modificando tratamento do clipboard para permitir cópia formatada
Showing
4 changed files
with
46 additions
and
35 deletions
Show diff stats
src/include/pw3270/v3270.h
| @@ -155,12 +155,13 @@ | @@ -155,12 +155,13 @@ | ||
| 155 | V3270_SELECT_MAX | 155 | V3270_SELECT_MAX |
| 156 | } V3270_SELECT_FORMAT; | 156 | } V3270_SELECT_FORMAT; |
| 157 | 157 | ||
| 158 | - LIB3270_EXPORT const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); | ||
| 159 | - LIB3270_EXPORT const gchar * v3270_copy_append(GtkWidget *widget); | 158 | + LIB3270_EXPORT void v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut); |
| 159 | + LIB3270_EXPORT void v3270_copy_append(GtkWidget *widget); | ||
| 160 | + LIB3270_EXPORT gchar * v3270_get_selected(GtkWidget *widget, gboolean cut); | ||
| 161 | + LIB3270_EXPORT gchar * v3270_get_copy(GtkWidget *widget); | ||
| 162 | + | ||
| 160 | LIB3270_EXPORT int v3270_run_script(GtkWidget *widget, const gchar *script); | 163 | LIB3270_EXPORT int v3270_run_script(GtkWidget *widget, const gchar *script); |
| 161 | 164 | ||
| 162 | - LIB3270_EXPORT const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut); | ||
| 163 | - LIB3270_EXPORT const gchar * v3270_get_copy(GtkWidget *widget); | ||
| 164 | LIB3270_EXPORT gchar * v3270_get_text(GtkWidget *widget,int offset, int len); | 165 | LIB3270_EXPORT gchar * v3270_get_text(GtkWidget *widget,int offset, int len); |
| 165 | LIB3270_EXPORT gchar * v3270_get_region(GtkWidget *widget, gint start_pos, gint end_pos, gboolean all); | 166 | LIB3270_EXPORT gchar * v3270_get_region(GtkWidget *widget, gint start_pos, gint end_pos, gboolean all); |
| 166 | 167 |
src/pw3270/dialog.c
| @@ -326,24 +326,36 @@ | @@ -326,24 +326,36 @@ | ||
| 326 | 326 | ||
| 327 | void save_selected_action(GtkAction *action, GtkWidget *widget) | 327 | void save_selected_action(GtkAction *action, GtkWidget *widget) |
| 328 | { | 328 | { |
| 329 | + gchar *text = v3270_get_selected(widget,FALSE); | ||
| 330 | + | ||
| 329 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | 331 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); |
| 330 | 332 | ||
| 331 | - save_dialog( action, | ||
| 332 | - widget, | ||
| 333 | - N_( "Save selection to file" ), | ||
| 334 | - N_( "Can't save selection to file\n%s" ), | ||
| 335 | - v3270_get_selected_text(widget,FALSE)); | 333 | + if(text) |
| 334 | + { | ||
| 335 | + save_dialog( action, | ||
| 336 | + widget, | ||
| 337 | + N_( "Save selection to file" ), | ||
| 338 | + N_( "Can't save selection to file\n%s" ), | ||
| 339 | + text); | ||
| 340 | + g_free(text); | ||
| 341 | + } | ||
| 336 | } | 342 | } |
| 337 | 343 | ||
| 338 | void save_copy_action(GtkAction *action, GtkWidget *widget) | 344 | void save_copy_action(GtkAction *action, GtkWidget *widget) |
| 339 | { | 345 | { |
| 346 | + gchar *text = v3270_get_copy(widget); | ||
| 347 | + | ||
| 340 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | 348 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); |
| 341 | 349 | ||
| 342 | - save_dialog( action, | ||
| 343 | - widget, | ||
| 344 | - N_( "Save copy to file" ), | ||
| 345 | - N_( "Can't save copy to file\n%s" ), | ||
| 346 | - v3270_get_copy(widget)); | 350 | + if(text) |
| 351 | + { | ||
| 352 | + save_dialog( action, | ||
| 353 | + widget, | ||
| 354 | + N_( "Save copy to file" ), | ||
| 355 | + N_( "Can't save copy to file\n%s" ), | ||
| 356 | + text); | ||
| 357 | + g_free(text); | ||
| 358 | + } | ||
| 347 | } | 359 | } |
| 348 | 360 | ||
| 349 | static void paste_filename(GtkWidget *widget, const gchar *filename, const gchar *encoding) | 361 | static void paste_filename(GtkWidget *widget, const gchar *filename, const gchar *encoding) |
src/pw3270/print.c
| @@ -690,7 +690,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -690,7 +690,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 690 | { | 690 | { |
| 691 | PRINT_INFO * info = NULL; | 691 | PRINT_INFO * info = NULL; |
| 692 | GtkPrintOperation * print; | 692 | GtkPrintOperation * print; |
| 693 | - const gchar * text; | 693 | + gchar * text; |
| 694 | GError * err = NULL; | 694 | GError * err = NULL; |
| 695 | 695 | ||
| 696 | #ifdef X3270_TRACE | 696 | #ifdef X3270_TRACE |
| @@ -735,6 +735,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | @@ -735,6 +735,7 @@ static gchar * enum_to_string(GType type, guint enum_value) | ||
| 735 | if(sz > info->cols) | 735 | if(sz > info->cols) |
| 736 | info->cols = sz; | 736 | info->cols = sz; |
| 737 | } | 737 | } |
| 738 | + g_free(text); | ||
| 738 | } | 739 | } |
| 739 | g_signal_connect(print,"draw_page",G_CALLBACK(draw_text),info); | 740 | g_signal_connect(print,"draw_page",G_CALLBACK(draw_text),info); |
| 740 | break; | 741 | break; |
src/pw3270/v3270/selection.c
| @@ -129,7 +129,7 @@ static gchar * v3270_cut_selected(v3270 *widget) | @@ -129,7 +129,7 @@ static gchar * v3270_cut_selected(v3270 *widget) | ||
| 129 | } | 129 | } |
| 130 | */ | 130 | */ |
| 131 | 131 | ||
| 132 | -const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut) | 132 | +gchar * v3270_get_selected(GtkWidget *widget, gboolean cut) |
| 133 | { | 133 | { |
| 134 | v3270 * terminal; | 134 | v3270 * terminal; |
| 135 | char * text; | 135 | char * text; |
| @@ -232,38 +232,37 @@ const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut) | @@ -232,38 +232,37 @@ const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut) | ||
| 232 | lib3270_free(text); | 232 | lib3270_free(text); |
| 233 | 233 | ||
| 234 | 234 | ||
| 235 | - return terminal->clipboard; | 235 | + return g_strdup(terminal->clipboard); |
| 236 | } | 236 | } |
| 237 | 237 | ||
| 238 | -const gchar * v3270_get_copy(GtkWidget *widget) | 238 | +gchar * v3270_get_copy(GtkWidget *widget) |
| 239 | { | 239 | { |
| 240 | - v3270 *terminal; | ||
| 241 | - | ||
| 242 | g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | 240 | g_return_val_if_fail(GTK_IS_V3270(widget),NULL); |
| 243 | - | ||
| 244 | - terminal = GTK_V3270(widget); | ||
| 245 | - | ||
| 246 | - return terminal->clipboard; | 241 | + return g_strdup(GTK_V3270(widget)->clipboard); |
| 247 | } | 242 | } |
| 248 | 243 | ||
| 249 | -const gchar * v3270_copy_append(GtkWidget *widget) | 244 | +void v3270_copy_append(GtkWidget *widget) |
| 250 | { | 245 | { |
| 251 | v3270 * terminal; | 246 | v3270 * terminal; |
| 252 | char * str; | 247 | char * str; |
| 253 | gchar * text; | 248 | gchar * text; |
| 254 | gchar * clip; | 249 | gchar * clip; |
| 255 | 250 | ||
| 256 | - g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | 251 | + g_return_if_fail(GTK_IS_V3270(widget)); |
| 257 | 252 | ||
| 258 | terminal = GTK_V3270(widget); | 253 | terminal = GTK_V3270(widget); |
| 259 | 254 | ||
| 260 | if(!terminal->clipboard) | 255 | if(!terminal->clipboard) |
| 261 | - return v3270_get_selected_text(widget,FALSE); | 256 | + { |
| 257 | + // Clipboard is empty, do a single copy | ||
| 258 | + v3270_copy(widget, V3270_SELECT_TEXT, FALSE); | ||
| 259 | + return; | ||
| 260 | + } | ||
| 262 | 261 | ||
| 263 | str = lib3270_get_selected(terminal->host); | 262 | str = lib3270_get_selected(terminal->host); |
| 264 | 263 | ||
| 265 | if(!str) | 264 | if(!str) |
| 266 | - return terminal->clipboard; | 265 | + return; |
| 267 | 266 | ||
| 268 | text = g_convert(str, -1, "UTF-8", lib3270_get_charset(terminal->host), NULL, NULL, NULL); | 267 | text = g_convert(str, -1, "UTF-8", lib3270_get_charset(terminal->host), NULL, NULL, NULL); |
| 269 | 268 | ||
| @@ -280,19 +279,18 @@ const gchar * v3270_copy_append(GtkWidget *widget) | @@ -280,19 +279,18 @@ const gchar * v3270_copy_append(GtkWidget *widget) | ||
| 280 | 279 | ||
| 281 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE); | 280 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE); |
| 282 | 281 | ||
| 283 | - return terminal->clipboard; | ||
| 284 | } | 282 | } |
| 285 | 283 | ||
| 286 | -const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut) | 284 | +void v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean cut) |
| 287 | { | 285 | { |
| 288 | - const gchar * text; | 286 | + gchar * text; |
| 289 | GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD); | 287 | GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD); |
| 290 | 288 | ||
| 291 | - g_return_val_if_fail(GTK_IS_V3270(widget),NULL); | 289 | + g_return_if_fail(GTK_IS_V3270(widget)); |
| 292 | 290 | ||
| 293 | GTK_V3270(widget)->table = (mode == V3270_SELECT_TABLE ? 1 : 0); | 291 | GTK_V3270(widget)->table = (mode == V3270_SELECT_TABLE ? 1 : 0); |
| 294 | 292 | ||
| 295 | - text = v3270_get_selected_text(widget,cut); | 293 | + text = v3270_get_selected(widget,cut); |
| 296 | 294 | ||
| 297 | if(text) | 295 | if(text) |
| 298 | { | 296 | { |
| @@ -308,10 +306,9 @@ const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean c | @@ -308,10 +306,9 @@ const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean c | ||
| 308 | } | 306 | } |
| 309 | 307 | ||
| 310 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE); | 308 | g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE); |
| 309 | + g_free(text); | ||
| 311 | } | 310 | } |
| 312 | 311 | ||
| 313 | - return text; | ||
| 314 | - | ||
| 315 | } | 312 | } |
| 316 | 313 | ||
| 317 | void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding) | 314 | void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding) |