Commit 983dcc9916d0bc0dec97aaf58ac88ff28cfec4cd

Authored by perry.werneck@gmail.com
1 parent 950f31ce

Modificando tratamento do clipboard para permitir cópia formatada

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)