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 | 155 | V3270_SELECT_MAX |
| 156 | 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 | 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 | 165 | LIB3270_EXPORT gchar * v3270_get_text(GtkWidget *widget,int offset, int len); |
| 165 | 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 | 326 | |
| 327 | 327 | void save_selected_action(GtkAction *action, GtkWidget *widget) |
| 328 | 328 | { |
| 329 | + gchar *text = v3270_get_selected(widget,FALSE); | |
| 330 | + | |
| 329 | 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 | 344 | void save_copy_action(GtkAction *action, GtkWidget *widget) |
| 339 | 345 | { |
| 346 | + gchar *text = v3270_get_copy(widget); | |
| 347 | + | |
| 340 | 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 | 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 | 690 | { |
| 691 | 691 | PRINT_INFO * info = NULL; |
| 692 | 692 | GtkPrintOperation * print; |
| 693 | - const gchar * text; | |
| 693 | + gchar * text; | |
| 694 | 694 | GError * err = NULL; |
| 695 | 695 | |
| 696 | 696 | #ifdef X3270_TRACE |
| ... | ... | @@ -735,6 +735,7 @@ static gchar * enum_to_string(GType type, guint enum_value) |
| 735 | 735 | if(sz > info->cols) |
| 736 | 736 | info->cols = sz; |
| 737 | 737 | } |
| 738 | + g_free(text); | |
| 738 | 739 | } |
| 739 | 740 | g_signal_connect(print,"draw_page",G_CALLBACK(draw_text),info); |
| 740 | 741 | break; | ... | ... |
src/pw3270/v3270/selection.c
| ... | ... | @@ -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 | 134 | v3270 * terminal; |
| 135 | 135 | char * text; |
| ... | ... | @@ -232,38 +232,37 @@ const gchar * v3270_get_selected_text(GtkWidget *widget, gboolean cut) |
| 232 | 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 | 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 | 246 | v3270 * terminal; |
| 252 | 247 | char * str; |
| 253 | 248 | gchar * text; |
| 254 | 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 | 253 | terminal = GTK_V3270(widget); |
| 259 | 254 | |
| 260 | 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 | 262 | str = lib3270_get_selected(terminal->host); |
| 264 | 263 | |
| 265 | 264 | if(!str) |
| 266 | - return terminal->clipboard; | |
| 265 | + return; | |
| 267 | 266 | |
| 268 | 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 | 279 | |
| 281 | 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 | 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 | 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 | 295 | if(text) |
| 298 | 296 | { |
| ... | ... | @@ -308,10 +306,9 @@ const gchar * v3270_copy(GtkWidget *widget, V3270_SELECT_FORMAT mode, gboolean c |
| 308 | 306 | } |
| 309 | 307 | |
| 310 | 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 | 314 | void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding) | ... | ... |