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) | ... | ... |