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