Commit 3df72efb7b34846673d5e3ce0d75a81ac53607e6
1 parent
efed03ba
Exists in
master
and in
5 other branches
Melhorando definição de actions
Showing
2 changed files
with
83 additions
and
20 deletions
Show diff stats
src/gtk/actions.c
| ... | ... | @@ -76,12 +76,23 @@ static void copy_action(GtkAction *action, GtkWidget *widget) |
| 76 | 76 | v3270_copy_clipboard(GTK_V3270(widget)); |
| 77 | 77 | } |
| 78 | 78 | |
| 79 | -static void paste_action(GtkAction *action, GtkWidget *widget) | |
| 79 | +static void paste_clipboard_action(GtkAction *action, GtkWidget *widget) | |
| 80 | 80 | { |
| 81 | 81 | trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); |
| 82 | 82 | v3270_paste_clipboard(GTK_V3270(widget)); |
| 83 | 83 | } |
| 84 | 84 | |
| 85 | +static void paste_next_action(GtkAction *action, GtkWidget *widget) | |
| 86 | +{ | |
| 87 | + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 88 | + lib3270_pastenext(GTK_V3270(widget)->host); | |
| 89 | +} | |
| 90 | + | |
| 91 | +static void paste_file_action(GtkAction *action, GtkWidget *widget) | |
| 92 | +{ | |
| 93 | + trace("Action %s activated on widget %p",gtk_action_get_name(action),widget); | |
| 94 | +} | |
| 95 | + | |
| 85 | 96 | static void connect_standard_action(GtkAction *action, GtkWidget *widget, const gchar *name) |
| 86 | 97 | { |
| 87 | 98 | #undef DECLARE_LIB3270_ACTION |
| ... | ... | @@ -117,7 +128,6 @@ static void connect_standard_action(GtkAction *action, GtkWidget *widget, const |
| 117 | 128 | { "connect", connect_action }, |
| 118 | 129 | { "copy", copy_action }, |
| 119 | 130 | { "disconnect", disconnect_action }, |
| 120 | - { "paste", paste_action }, | |
| 121 | 131 | }; |
| 122 | 132 | |
| 123 | 133 | int f; |
| ... | ... | @@ -229,6 +239,21 @@ static void action_reset_toggle(GtkAction *action, GtkWidget *widget) |
| 229 | 239 | lib3270_set_toggle(GTK_V3270(widget)->host,id,0); |
| 230 | 240 | } |
| 231 | 241 | |
| 242 | +static int id_from_array(const gchar *key, const gchar **array, GError **error) | |
| 243 | +{ | |
| 244 | + int f; | |
| 245 | + | |
| 246 | + for(f = 0;array[f];f++) | |
| 247 | + { | |
| 248 | + if(!g_strcasecmp(key,array[f])) | |
| 249 | + return f; | |
| 250 | + } | |
| 251 | + | |
| 252 | + *error = g_error_new(ERROR_DOMAIN,EINVAL, _("Unexpected or invalid attribute value \"%s\""), key ); | |
| 253 | + | |
| 254 | + return -1; | |
| 255 | +} | |
| 256 | + | |
| 232 | 257 | GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash, const gchar **names, const gchar **values, GError **error) |
| 233 | 258 | { |
| 234 | 259 | static const gchar *actionname[ACTION_COUNT] = { "pastenext", |
| ... | ... | @@ -240,6 +265,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 240 | 265 | GtkAction **toggle_action = (GtkAction **) g_object_get_data(G_OBJECT(widget),"toggle_actions"); |
| 241 | 266 | const gchar * direction = ui_get_attribute("direction",names,values); |
| 242 | 267 | unsigned short flags = 0; |
| 268 | + const GCallback * callback = NULL; | |
| 243 | 269 | const gchar * attr; |
| 244 | 270 | int id = 0; |
| 245 | 271 | gchar * nm = NULL; |
| ... | ... | @@ -254,6 +280,7 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 254 | 280 | ACTION_TYPE_PAKEY, |
| 255 | 281 | ACTION_TYPE_SET, |
| 256 | 282 | ACTION_TYPE_RESET, |
| 283 | + ACTION_TYPE_TABLE, | |
| 257 | 284 | |
| 258 | 285 | } action_type = ACTION_TYPE_DEFAULT; |
| 259 | 286 | |
| ... | ... | @@ -302,6 +329,37 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 302 | 329 | nm = g_strconcat((flags & 0x80) ? "select" : "move",attr,direction, NULL); |
| 303 | 330 | |
| 304 | 331 | } |
| 332 | + else if(!g_strcasecmp(name,"paste")) | |
| 333 | + { | |
| 334 | + action_type = ACTION_TYPE_TABLE; | |
| 335 | + attr = ui_get_attribute("src",names,values); | |
| 336 | + | |
| 337 | + if(!attr) | |
| 338 | + { | |
| 339 | + *error = g_error_new(ERROR_DOMAIN,EINVAL,"%s",_("Paste action needs src attribute" )); | |
| 340 | + return NULL; | |
| 341 | + } | |
| 342 | + else | |
| 343 | + { | |
| 344 | + static const GCallback cbk[] = { G_CALLBACK(paste_clipboard_action), | |
| 345 | + G_CALLBACK(paste_next_action), | |
| 346 | + G_CALLBACK(paste_file_action) | |
| 347 | + }; | |
| 348 | + static const gchar * src[] = { "clipboard", | |
| 349 | + "next", | |
| 350 | + "file", | |
| 351 | + NULL | |
| 352 | + }; | |
| 353 | + id = id_from_array(attr,src,error); | |
| 354 | + if(id < 0) | |
| 355 | + return NULL; | |
| 356 | + | |
| 357 | + callback = cbk; | |
| 358 | + } | |
| 359 | + | |
| 360 | + nm = g_strconcat(name,attr, NULL); | |
| 361 | + | |
| 362 | + } | |
| 305 | 363 | else if(!g_strcasecmp(name,"set")) |
| 306 | 364 | { |
| 307 | 365 | action_type = ACTION_TYPE_SET; |
| ... | ... | @@ -407,6 +465,11 @@ GtkAction * ui_get_action(GtkWidget *widget, const gchar *name, GHashTable *hash |
| 407 | 465 | g_object_set_data(G_OBJECT(action),"toggle_id",(gpointer) id); |
| 408 | 466 | g_signal_connect(action,"activate",G_CALLBACK(action_reset_toggle),widget); |
| 409 | 467 | break; |
| 468 | + | |
| 469 | + case ACTION_TYPE_TABLE: | |
| 470 | + action = gtk_action_new(nm,NULL,NULL,NULL); | |
| 471 | + g_signal_connect(action,"activate",callback[id],widget); | |
| 472 | + break; | |
| 410 | 473 | } |
| 411 | 474 | |
| 412 | 475 | for(f=0;f<ACTION_COUNT;f++) | ... | ... |
ui/00default.xml
| ... | ... | @@ -33,13 +33,13 @@ |
| 33 | 33 | <menubar name='topmenu' topmenu='yes'> |
| 34 | 34 | |
| 35 | 35 | <menu name='FileMenu' label='_File' > |
| 36 | - <menuitem action='SaveScreen' group='online' label='Save screen' /> | |
| 37 | - <menuitem action='SaveSelected' group='selection' label='Save selected' /> | |
| 38 | - <menuitem action='SaveClipboard' group='clipboard' label='Save copy' /> | |
| 36 | + <menuitem action='save' src='all' group='online' label='Save screen' /> | |
| 37 | + <menuitem action='save' src='selected' group='selection' label='Save selected' /> | |
| 38 | + <menuitem action='save' src='copy' group='clipboard' label='Save copy' /> | |
| 39 | 39 | <separator/> |
| 40 | - <menuitem action='PrintScreen' key='Print' icon='print' group='online' label='Print' /> | |
| 41 | - <menuitem action='PrintSelected' group='selection' label='Print selected' /> | |
| 42 | - <menuitem action='PrintClipboard' group='clipboard' label='Print copy' /> | |
| 40 | + <menuitem action='print' src='all' key='Print' icon='print' group='online' label='Print' /> | |
| 41 | + <menuitem action='print' src='selected' group='selection' label='Print selected' /> | |
| 42 | + <menuitem action='print' src='copy' group='clipboard' label='Print copy' /> | |
| 43 | 43 | <separator/> |
| 44 | 44 | <menu name='FTMenu' group='filetransfer' label='Send/Receive' > |
| 45 | 45 | <menuitem action='Download' key='<alt>d' group='filetransfer' label='Receive file' /> |
| ... | ... | @@ -53,9 +53,9 @@ |
| 53 | 53 | <menuitem action='CopyAsTable' key='<ctrl><alt>c' group='selection' label='Copy as table' /> |
| 54 | 54 | <menuitem action='CopyAsImage' group='selection' label='Copy as image' /> |
| 55 | 55 | <menuitem action='Append' key='<shift><ctrl>c' group='selection' label='Add to copy' /> |
| 56 | - <menuitem action='Paste' key='<ctrl>v' icon='paste' group='paste' label='Paste' /> | |
| 57 | - <menuitem action='PasteNext' key='<shift><ctrl>v' label='Paste next' /> | |
| 58 | - <menuitem action='PasteTextFile' group='online' label='Paste text file' /> | |
| 56 | + <menuitem action='paste' src='clipboard' key='<ctrl>v' icon='paste' group='paste' label='Paste' /> | |
| 57 | + <menuitem action='paste' src='next' key='<shift><ctrl>v' label='Paste next' /> | |
| 58 | + <menuitem action='paste' src='file' group='online' label='Paste text file' /> | |
| 59 | 59 | |
| 60 | 60 | <separator/> |
| 61 | 61 | <menuitem action='selectall' key='<ctrl>a' icon='select-all' group='online' label='Select all' /> |
| ... | ... | @@ -125,7 +125,7 @@ |
| 125 | 125 | <toolbar name='toolbar.default' label='Toolbar' key='<alt>t' > |
| 126 | 126 | <toolitem action='selectall' /> |
| 127 | 127 | <toolitem action='Copy' /> |
| 128 | - <toolitem action='Paste' /> | |
| 128 | + <toolitem action='paste' src='clipboard' /> | |
| 129 | 129 | <toolitem action='EraseInput' /> |
| 130 | 130 | |
| 131 | 131 | <separator/> |
| ... | ... | @@ -136,7 +136,7 @@ |
| 136 | 136 | <toolitem action='set' toggle='fullscreen' icon='fullscreen' label='Full Screen' /> |
| 137 | 137 | <toolitem action='reset' toggle='fullscreen' icon='leave-fullscreen' label='Window' /> |
| 138 | 138 | <toolitem action='SelectColors' /> |
| 139 | - <toolitem action='PrintScreen' /> | |
| 139 | + <toolitem action='print' src='all' /> | |
| 140 | 140 | <toolitem action='Quit' /> |
| 141 | 141 | </toolbar> |
| 142 | 142 | |
| ... | ... | @@ -147,20 +147,20 @@ |
| 147 | 147 | <menuitem action='selectall'/> |
| 148 | 148 | |
| 149 | 149 | <separator /> |
| 150 | - <menuitem action='PrintScreen'/> | |
| 151 | - <menuitem action='PrintSelected'/> | |
| 152 | - <menuitem action='PrintClipboard'/> | |
| 150 | + <menuitem action='print' src='all'/> | |
| 151 | + <menuitem action='print' src='selected'/> | |
| 152 | + <menuitem action='print' src='copy'/> | |
| 153 | 153 | |
| 154 | 154 | <separator /> |
| 155 | 155 | <menuitem action='Quit'/> |
| 156 | 156 | </popup> |
| 157 | 157 | |
| 158 | 158 | <popup name='defaultpopup' type='default'> |
| 159 | - <menuitem action='Paste'/> | |
| 160 | - <menuitem action='PasteNext'/> | |
| 159 | + <menuitem action='paste' src='clipboard'/> | |
| 160 | + <menuitem action='paste' src='next'/> | |
| 161 | 161 | <menuitem action='selectall'/> |
| 162 | - <menuitem action='PrintScreen'/> | |
| 163 | - <menuitem action='PrintClipboard'/> | |
| 162 | + <menuitem action='print' src='all'/> | |
| 163 | + <menuitem action='print' src='copy'/> | |
| 164 | 164 | |
| 165 | 165 | <separator /> |
| 166 | 166 | <menuitem action='backtab' label='Previous field' /> | ... | ... |