Commit 3cf480d793c97934858e0999f6336d39c9c7af6d
1 parent
6b58b3f6
Exists in
master
and in
1 other branch
Modificando tratamento do clipboard para permitir cópia formatada
Showing
1 changed file
with
17 additions
and
20 deletions
Show diff stats
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) |