Commit 537f5dd00a1d81da9e36458f9e42a0446b99c9ce

Authored by perry.werneck@gmail.com
1 parent 04a2ace8

Implementando "append to copy"

src/gtk/actions.c
... ... @@ -97,13 +97,19 @@ static void reload_action(GtkAction *action, GtkWidget *widget)
97 97 static void copy_action(GtkAction *action, GtkWidget *widget)
98 98 {
99 99 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
100   - v3270_copy_clipboard(widget);
  100 + v3270_copy(widget);
  101 +}
  102 +
  103 +static void append_action(GtkAction *action, GtkWidget *widget)
  104 +{
  105 + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
  106 + v3270_copy_append(widget);
101 107 }
102 108  
103 109 static void paste_clipboard_action(GtkAction *action, GtkWidget *widget)
104 110 {
105 111 trace("Action %s activated on widget %p",gtk_action_get_name(action),widget);
106   - v3270_paste_clipboard(widget);
  112 + v3270_paste(widget);
107 113 }
108 114  
109 115 static void paste_next_action(GtkAction *action, GtkWidget *widget)
... ... @@ -145,7 +151,6 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const
145 151 { "activate", activate_action },
146 152 { "reload", reload_action },
147 153 { "connect", connect_action },
148   - { "copy", copy_action },
149 154 { "disconnect", disconnect_action },
150 155 { "hostname", hostname_action }
151 156 };
... ... @@ -409,6 +414,33 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash
409 414 nm = g_strconcat(name,attr, NULL);
410 415  
411 416 }
  417 + else if(!g_strcasecmp(name,"copy"))
  418 + {
  419 + static const gchar * src[] = { "begin",
  420 + "table",
  421 + "image",
  422 + "append",
  423 + NULL
  424 + };
  425 +
  426 + static const GCallback cbk[] = { G_CALLBACK(copy_action),
  427 + G_CALLBACK(nop_action),
  428 + G_CALLBACK(nop_action),
  429 + G_CALLBACK(append_action)
  430 + };
  431 + callback = cbk;
  432 + action_type = ACTION_TYPE_TABLE;
  433 + attr = ui_get_attribute("mode",names,values);
  434 +
  435 + id = id_from_array(attr,src,error);
  436 + if(id < 0)
  437 + {
  438 + *error = g_error_new(ERROR_DOMAIN,EINVAL,_("Unexpected or invalid mode attribute: \"%s\"" ), attr);
  439 + return NULL;
  440 + }
  441 +
  442 + nm = g_strconcat(name,attr,NULL);
  443 + }
412 444 else if(!g_strcasecmp(name,"save"))
413 445 {
414 446 static const GCallback cbk[] = { G_CALLBACK(save_all_action),
... ...
src/gtk/v3270/clipboard.c
... ... @@ -127,26 +127,66 @@ const gchar * v3270_get_selected_text(GtkWidget *widget)
127 127 return terminal->clipboard;
128 128 }
129 129  
130   -void v3270_copy_clipboard(GtkWidget *widget)
  130 +const gchar * v3270_copy_append(GtkWidget *widget)
  131 +{
  132 + v3270 * terminal;
  133 + char * str;
  134 + gchar * text;
  135 + gchar * clip;
  136 +
  137 + g_return_val_if_fail(GTK_IS_V3270(widget),NULL);
  138 +
  139 + terminal = GTK_V3270(widget);
  140 +
  141 + if(!terminal->clipboard)
  142 + return v3270_get_selected_text(widget);
  143 +
  144 + str = lib3270_get_selected(terminal->host);
  145 +
  146 + if(!str)
  147 + return terminal->clipboard;
  148 +
  149 + text = g_convert(str, -1, "UTF-8", lib3270_get_charset(terminal->host), NULL, NULL, NULL);
  150 +
  151 + free(str);
  152 +
  153 + clip = g_strconcat(terminal->clipboard,"\n",text,NULL);
  154 +
  155 + g_free(text);
  156 + g_free(terminal->clipboard);
  157 +
  158 + terminal->clipboard = clip;
  159 +
  160 + gtk_clipboard_set_text(gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD),terminal->clipboard,-1);
  161 +
  162 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE);
  163 +
  164 +
  165 + return terminal->clipboard;
  166 +}
  167 +
  168 +const gchar * v3270_copy(GtkWidget *widget)
131 169 {
132 170 const gchar * text = v3270_get_selected_text(widget);
133 171 GtkClipboard * clipboard = gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD);
134 172  
135   - if(!text)
136   - return;
137   -
138   - if(gtk_clipboard_set_with_owner( clipboard,
139   - targets,
140   - G_N_ELEMENTS(targets),
141   - (GtkClipboardGetFunc) clipboard_get,
142   - (GtkClipboardClearFunc) clipboard_clear,
143   - G_OBJECT(widget)
144   - ))
  173 + if(text)
145 174 {
146   - gtk_clipboard_set_can_store(clipboard,targets,1);
  175 + if(gtk_clipboard_set_with_owner( clipboard,
  176 + targets,
  177 + G_N_ELEMENTS(targets),
  178 + (GtkClipboardGetFunc) clipboard_get,
  179 + (GtkClipboardClearFunc) clipboard_clear,
  180 + G_OBJECT(widget)
  181 + ))
  182 + {
  183 + gtk_clipboard_set_can_store(clipboard,targets,1);
  184 + }
  185 +
  186 + g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE);
147 187 }
148 188  
149   - g_signal_emit(widget,v3270_widget_signal[SIGNAL_CLIPBOARD], 0, TRUE);
  189 + return text;
150 190  
151 191 }
152 192  
... ... @@ -281,7 +321,7 @@ static void text_received(GtkClipboard *clipboard, const gchar *text, GtkWidget
281 321 v3270_paste_string(widget,text,"UTF-8");
282 322 }
283 323  
284   -void v3270_paste_clipboard(GtkWidget *widget)
  324 +void v3270_paste(GtkWidget *widget)
285 325 {
286 326 gtk_clipboard_request_text(gtk_widget_get_clipboard(widget,GDK_SELECTION_CLIPBOARD),(GtkClipboardTextReceivedFunc) text_received,(gpointer) widget);
287 327 }
... ...
src/gtk/v3270/v3270.h
... ... @@ -203,9 +203,11 @@
203 203 // Clipboard
204 204 const gchar * v3270_get_selected_text(GtkWidget *widget);
205 205 gchar * v3270_get_text(GtkWidget *widget);
206   - void v3270_copy_clipboard(GtkWidget *widget);
  206 + const gchar * v3270_copy(GtkWidget *widget);
  207 + const gchar * v3270_copy_append(GtkWidget *widget);
  208 +
  209 + void v3270_paste(GtkWidget *widget);
207 210 void v3270_paste_string(GtkWidget *widget, const gchar *text, const gchar *encoding);
208   - void v3270_paste_clipboard(GtkWidget *widget);
209 211  
210 212 G_END_DECLS
211 213  
... ...
ui/00default.xml
... ... @@ -49,10 +49,10 @@
49 49 </menu>
50 50  
51 51 <menu name='EditMenu' label='_Edit' >
52   - <menuitem action='Copy' key='<ctrl>c' icon='copy' group='selection' label='Copy' />
53   - <menuitem action='CopyAsTable' key='<ctrl><alt>c' group='selection' label='Copy as table' />
54   - <menuitem action='CopyAsImage' group='selection' label='Copy as image' />
55   - <menuitem action='Append' key='<shift><ctrl>c' group='selection' label='Add to copy' />
  52 + <menuitem action='copy' mode='begin' key='<ctrl>c' icon='copy' group='selection' label='Copy' />
  53 + <menuitem action='copy' mode='table' key='<ctrl><alt>c' group='selection' label='Copy as table' />
  54 + <menuitem action='copy' mode='image' group='selection' label='Copy as image' />
  55 + <menuitem action='copy' mode='append' key='<shift><ctrl>c' group='selection' label='Add to copy' />
56 56 <menuitem action='paste' src='clipboard' key='<ctrl>v' icon='paste' group='paste' label='Paste' />
57 57 <menuitem action='paste' src='next' key='<shift><ctrl>v' label='Paste next' />
58 58 <menuitem action='paste' src='file' group='online' label='Paste text file' />
... ... @@ -135,7 +135,7 @@
135 135  
136 136 <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' >
137 137 <toolitem action='selectall' />
138   - <toolitem action='Copy' />
  138 + <toolitem action='copy' mode='begin' />
139 139 <toolitem action='paste' src='clipboard' />
140 140 <toolitem action='EraseInput' />
141 141  
... ...