Commit 1ae4cd71e10761e19c7e35b66f7d808815a4bad2
1 parent
bccf6df4
Exists in
master
and in
5 other branches
Implementando movimentação da caixa de seleção
Showing
4 changed files
with
59 additions
and
10 deletions
Show diff stats
src/gtk/actions.c
| @@ -177,9 +177,56 @@ void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, | @@ -177,9 +177,56 @@ void ui_connect_toggle(GtkAction *action, GtkWidget *widget, const gchar *name, | ||
| 177 | gtk_action_set_sensitive(action,FALSE); | 177 | gtk_action_set_sensitive(action,FALSE); |
| 178 | } | 178 | } |
| 179 | 179 | ||
| 180 | +static void selection_move_action(GtkAction *action, GtkWidget *widget) | ||
| 181 | +{ | ||
| 182 | + trace("Action %s activated on widget %p dir=%d",gtk_action_get_name(action),widget,g_object_get_data(G_OBJECT(action),"direction")); | ||
| 183 | + lib3270_move_selection(GTK_V3270(widget)->host,(LIB3270_DIRECTION) g_object_get_data(G_OBJECT(action),"direction")); | ||
| 184 | +} | ||
| 185 | + | ||
| 180 | void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar *target, const gchar *direction, GError **error) | 186 | void ui_connect_target_action(GtkAction *action, GtkWidget *widget, const gchar *target, const gchar *direction, GError **error) |
| 181 | { | 187 | { |
| 182 | - #warning TODO: Implementar | 188 | + static const gchar *dirname[] = { "up", "down", "left", "right" }; |
| 189 | + | ||
| 190 | + LIB3270_DIRECTION dir = (LIB3270_DIRECTION) -1; | ||
| 191 | + int f; | ||
| 192 | + | ||
| 193 | + if(!(direction && target)) | ||
| 194 | + { | ||
| 195 | + gtk_action_set_sensitive(action,FALSE); | ||
| 196 | + return; | ||
| 197 | + } | ||
| 198 | + | ||
| 199 | + for(f=0;f<G_N_ELEMENTS(dirname) && dir == -1;f++) | ||
| 200 | + { | ||
| 201 | + if(!g_strcasecmp(direction,dirname[f])) | ||
| 202 | + { | ||
| 203 | + dir = f; | ||
| 204 | + break; | ||
| 205 | + } | ||
| 206 | + } | ||
| 207 | + | ||
| 208 | + if(dir == -1) | ||
| 209 | + { | ||
| 210 | + *error = g_error_new( g_quark_from_static_string(PACKAGE_NAME), | ||
| 211 | + ENOENT, | ||
| 212 | + _( "Unexpected direction \"%s\""), | ||
| 213 | + direction); | ||
| 214 | + } | ||
| 215 | + | ||
| 216 | + if(!g_strcasecmp(target,"selection")) | ||
| 217 | + { | ||
| 218 | + g_object_set_data(G_OBJECT(action),"direction",(gpointer) dir); | ||
| 219 | + g_signal_connect(action,"activate",G_CALLBACK(selection_move_action),widget); | ||
| 220 | + | ||
| 221 | + } | ||
| 222 | + else | ||
| 223 | + { | ||
| 224 | + *error = g_error_new( g_quark_from_static_string(PACKAGE_NAME), | ||
| 225 | + ENOENT, | ||
| 226 | + _( "Unexpected target \"%s\""), | ||
| 227 | + target); | ||
| 228 | + } | ||
| 229 | + | ||
| 183 | } | 230 | } |
| 184 | 231 | ||
| 185 | static void action_pfkey(GtkAction *action, GtkWidget *widget) | 232 | static void action_pfkey(GtkAction *action, GtkWidget *widget) |
src/gtk/uiparser/parsefile.c
| @@ -155,8 +155,8 @@ | @@ -155,8 +155,8 @@ | ||
| 155 | } | 155 | } |
| 156 | else if(!g_strcasecmp(name,"move")) | 156 | else if(!g_strcasecmp(name,"move")) |
| 157 | { | 157 | { |
| 158 | - const gchar *target = ui_get_attribute("target",names,values); | ||
| 159 | - const gchar *direction = ui_get_attribute("direction",names,values); | 158 | + target = ui_get_attribute("target",names,values); |
| 159 | + direction = ui_get_attribute("direction",names,values); | ||
| 160 | 160 | ||
| 161 | if(!(target && direction)) | 161 | if(!(target && direction)) |
| 162 | { | 162 | { |
| @@ -214,10 +214,10 @@ | @@ -214,10 +214,10 @@ | ||
| 214 | 214 | ||
| 215 | if(ix >= 0) | 215 | if(ix >= 0) |
| 216 | ui_connect_index_action(info->action[ix] = action,info->center_widget,ix,info->action); | 216 | ui_connect_index_action(info->action[ix] = action,info->center_widget,ix,info->action); |
| 217 | - else if(g_strcasecmp(name,"quit")) | ||
| 218 | - connect(action,info->center_widget,name,id); | ||
| 219 | else if(target) | 217 | else if(target) |
| 220 | ui_connect_target_action(action,info->center_widget,target,direction,error); | 218 | ui_connect_target_action(action,info->center_widget,target,direction,error); |
| 219 | + else if(g_strcasecmp(name,"quit")) | ||
| 220 | + connect(action,info->center_widget,name,id); | ||
| 221 | else | 221 | else |
| 222 | g_signal_connect(action,"activate",G_CALLBACK(gtk_main_quit), NULL); | 222 | g_signal_connect(action,"activate",G_CALLBACK(gtk_main_quit), NULL); |
| 223 | 223 |
src/lib3270/selection.c
| @@ -376,7 +376,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | @@ -376,7 +376,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | ||
| 376 | break; | 376 | break; |
| 377 | 377 | ||
| 378 | case LIB3270_DIR_RIGHT: | 378 | case LIB3270_DIR_RIGHT: |
| 379 | - if( (hSession->select.end % hSession->cols) >= hSession->cols) | 379 | + if( (hSession->select.end % hSession->cols) >= (hSession->cols-1)) |
| 380 | return EINVAL; | 380 | return EINVAL; |
| 381 | hSession->select.begin++; | 381 | hSession->select.begin++; |
| 382 | hSession->select.end++; | 382 | hSession->select.end++; |
| @@ -387,5 +387,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | @@ -387,5 +387,7 @@ LIB3270_EXPORT int lib3270_move_selection(H3270 *hSession, LIB3270_DIRECTION dir | ||
| 387 | } | 387 | } |
| 388 | 388 | ||
| 389 | update_selection(hSession); | 389 | update_selection(hSession); |
| 390 | + lib3270_set_cursor_address(hSession,hSession->select.end); | ||
| 391 | + | ||
| 390 | return 0; | 392 | return 0; |
| 391 | } | 393 | } |
ui/00default.xml
| @@ -194,10 +194,10 @@ | @@ -194,10 +194,10 @@ | ||
| 194 | <accelerator action='SelectUp' key='<Shift>Up' group='online' /> | 194 | <accelerator action='SelectUp' key='<Shift>Up' group='online' /> |
| 195 | <accelerator action='SelectDown' key='<Shift>Down' group='online' /> | 195 | <accelerator action='SelectDown' key='<Shift>Down' group='online' /> |
| 196 | 196 | ||
| 197 | - <accelerator action='SelectionRight' key='<alt>Right' /> | ||
| 198 | - <accelerator action='SelectionLeft' key='<alt>Left' /> | ||
| 199 | - <accelerator action='SelectionUp' key='<alt>Up' /> | ||
| 200 | - <accelerator action='SelectionDown' key='<alt>Down' /> | 197 | + <accelerator action='move' target='selection' direction='right' key='<alt>Right' /> |
| 198 | + <accelerator action='move' target='selection' direction='left' key='<alt>Left' /> | ||
| 199 | + <accelerator action='move' target='selection' direction='up' key='<alt>Up' /> | ||
| 200 | + <accelerator action='move' target='selection' direction='down' key='<alt>Down' /> | ||
| 201 | 201 | ||
| 202 | <accelerator action='CursorRight' key='Right' group='online' /> | 202 | <accelerator action='CursorRight' key='Right' group='online' /> |
| 203 | <accelerator action='CursorLeft' key='Left' group='online' /> | 203 | <accelerator action='CursorLeft' key='Left' group='online' /> |