Enlightenment CVS committal Author : raster Project : e17 Module : apps/e
Dir : e17/apps/e/src/bin Modified Files: e_actions.c e_actions.h e_bindings.c e_bindings.h e_border.c e_border.h e_font.c e_main.c e_manager.c e_manager.h e_zone.c e_zone.h Log Message: key bindings... um.. kinda... work... =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.c,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_actions.c 29 Apr 2005 16:04:42 -0000 1.2 +++ e_actions.c 29 Apr 2005 19:42:14 -0000 1.3 @@ -18,6 +18,13 @@ } #define ACT_FN_GO_MOUSE(act) \ static void _e_actions_act_##act##_go_mouse(E_Object *obj, char *params, Ecore_X_Event_Mouse_Button_Down *ev) +#define ACT_GO_KEY(name) \ + { \ + act = e_action_set(#name); \ + if (act) act->func.go_key = _e_actions_act_##name##_go_key; \ + } +#define ACT_FN_GO_KEY(act) \ + static void _e_actions_act_##act##_go_key(E_Object *obj, char *params, Ecore_X_Event_Key_Down *ev) #define ACT_END(name) \ { \ act = e_action_set(#name); \ @@ -32,6 +39,13 @@ } #define ACT_FN_END_MOUSE(act) \ static void _e_actions_act_##act##_end_mouse(E_Object *obj, char *params, Ecore_X_Event_Mouse_Button_Up *ev) +#define ACT_END_KEY(name) \ + { \ + act = e_action_set(#name); \ + if (act) act->func.end_key = _e_actions_act_##name##_end_key; \ + } +#define ACT_FN_END_KEY(act) \ + static void _e_actions_act_##act##_end_key(E_Object *obj, char *params, Ecore_X_Event_Key_Up *ev) /* local subsystem functions */ @@ -40,24 +54,28 @@ ACT_FN_GO(window_move) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_move_begin((E_Border *)obj, NULL); } ACT_FN_GO_MOUSE(window_move) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_move_begin((E_Border *)obj, ev); } ACT_FN_END(window_move) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_move_end((E_Border *)obj, NULL); } ACT_FN_END_MOUSE(window_move) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_move_end((E_Border *)obj, ev); } @@ -66,24 +84,28 @@ ACT_FN_GO(window_resize) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_resize_begin((E_Border *)obj, NULL); } ACT_FN_GO_MOUSE(window_resize) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_resize_begin((E_Border *)obj, ev); } ACT_FN_END(window_resize) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_resize_end((E_Border *)obj, NULL); } ACT_FN_END_MOUSE(window_resize) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_resize_end((E_Border *)obj, ev); } @@ -92,16 +114,100 @@ ACT_FN_GO(window_menu) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_menu_begin((E_Border *)obj, NULL); } ACT_FN_GO_MOUSE(window_menu) { if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; if (obj->type != E_BORDER_TYPE) return; e_border_act_menu_begin((E_Border *)obj, ev); } +/***************************************************************************/ +ACT_FN_GO(window_raise) +{ + if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + if (obj->type != E_BORDER_TYPE) + { + obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + } + e_border_raise((E_Border *)obj); +} + +/***************************************************************************/ +ACT_FN_GO(window_lower) +{ + if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + if (obj->type != E_BORDER_TYPE) + { + obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + } + e_border_lower((E_Border *)obj); +} + +/***************************************************************************/ +ACT_FN_GO(window_close) +{ + if (!obj) obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + if (obj->type != E_BORDER_TYPE) + { + obj = E_OBJECT(e_border_focused_get()); + if (!obj) return; + } + e_border_act_close_begin((E_Border *)obj); +} + +/***************************************************************************/ +ACT_FN_GO(desk_flip_by) +{ + E_Container *con; + + if (!obj) return; + if (obj->type != E_MANAGER_TYPE) return; + con = e_manager_container_current_get((E_Manager *)obj); + if (con) + { + E_Zone *zone; + + zone = e_zone_current_get(con); + if (zone) + { + E_Desk *desk; + int dx = 0, dy = 0; + + if (params) + { + if (sscanf(params, "%i %i", &dx, &dy) != 2) + { + dx = 0; + dy = 0; + } + } + dx = zone->desk_x_current + dx; + if (dx < 0) dx = 0; + else if (dx >= zone->desk_x_count) dx = zone->desk_x_count - 1; + dy = zone->desk_x_current + dy; + if (dy < 0) dy = 0; + else if (dy >= zone->desk_y_count) dy = zone->desk_y_count - 1; + desk = e_desk_at_xy_get(zone, dx, dy); + if (desk) + { + ecore_x_window_focus(con->manager->root); + e_desk_show(desk); + e_zone_update_flip(zone); + } + } + } +} + /* local subsystem globals */ static Evas_Hash *actions = NULL; @@ -125,6 +231,13 @@ ACT_GO(window_menu); ACT_GO_MOUSE(window_menu); + ACT_GO(window_raise); + + ACT_GO(window_lower); + ACT_GO(window_close); + + ACT_GO(desk_flip_by); + return 1; } =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_actions.h,v retrieving revision 1.2 retrieving revision 1.3 diff -u -3 -r1.2 -r1.3 --- e_actions.h 29 Apr 2005 16:04:42 -0000 1.2 +++ e_actions.h 29 Apr 2005 19:42:18 -0000 1.3 @@ -9,10 +9,12 @@ { char *name; struct { - void (*go) (E_Object *obj, char *params); - void (*go_mouse) (E_Object *obj, char *params, Ecore_X_Event_Mouse_Button_Down *ev); - void (*end) (E_Object *obj, char *params); + void (*go) (E_Object *obj, char *params); + void (*go_mouse) (E_Object *obj, char *params, Ecore_X_Event_Mouse_Button_Down *ev); + void (*go_key) (E_Object *obj, char *params, Ecore_X_Event_Key_Down *ev); + void (*end) (E_Object *obj, char *params); void (*end_mouse) (E_Object *obj, char *params, Ecore_X_Event_Mouse_Button_Up *ev); + void (*end_key) (E_Object *obj, char *params, Ecore_X_Event_Key_Up *ev); } func; }; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_bindings.c,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- e_bindings.c 29 Apr 2005 16:04:42 -0000 1.5 +++ e_bindings.c 29 Apr 2005 19:42:18 -0000 1.6 @@ -38,6 +38,7 @@ }; static void _e_bindings_mouse_free(E_Binding_Mouse *bind); +static void _e_bindings_key_free(E_Binding_Key *bind); static int _e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt); /* local subsystem globals */ @@ -60,12 +61,34 @@ e_bindings_mouse_add(E_BINDING_CONTEXT_BORDER, 3, E_BINDING_MODIFIER_ALT, 0, "window_menu", ""); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Left", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0, + "desk_flip_by", "-1 0"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Right", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0, + "desk_flip_by", "1 0"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Up", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0, + "desk_flip_by", "0 -1"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Down", E_BINDING_MODIFIER_SHIFT | E_BINDING_MODIFIER_ALT, 0, + "desk_flip_by", "0 -1"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Up", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, + "window_raise", ""); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Down", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, + "window_lower", ""); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "x", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, + "window_close", ""); return 1; } int e_bindings_shutdown(void) { + /* FIXME: free bindings */ return 1; } @@ -118,7 +141,7 @@ E_Binding_Mouse *bind; bind = l->data; - if (bind->ctxt == ctxt) + if (_e_bindings_context_match(bind->ctxt, ctxt)) { int mod; @@ -146,7 +169,7 @@ E_Binding_Mouse *bind; bind = l->data; - if (bind->ctxt == ctxt) + if (_e_bindings_context_match(bind->ctxt, ctxt)) { int mod; @@ -238,17 +261,170 @@ } /* FIXME: finish off key bindings */ +void +e_bindings_key_add(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, int any_mod, char *action, char *params) +{ + E_Binding_Key *bind; + + bind = calloc(1, sizeof(E_Binding_Key)); + bind->ctxt = ctxt; + bind->key = strdup(key); + bind->mod = mod; + bind->any_mod = any_mod; + bind->action = strdup(action); + bind->params = strdup(params); + key_bindings = evas_list_append(key_bindings, bind); +} + +void +e_bindings_key_del(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, int any_mod, char *action, char *params) +{ + Evas_List *l; + + for (l = key_bindings; l; l = l->next) + { + E_Binding_Key *bind; + + bind = l->data; + if ((bind->ctxt == ctxt) && + (!strcmp(bind->key, key)) && + (bind->mod == mod) && + (bind->any_mod == any_mod) && + (!strcmp(bind->action, action)) && + (!strcmp(bind->params, params))) + { + _e_bindings_key_free(bind); + key_bindings = evas_list_remove_list(key_bindings, l); + break; + } + } +} + +void +e_bindings_key_grab(E_Binding_Context ctxt, Ecore_X_Window win) +{ + Evas_List *l; + + printf("GRAB KEYS %p\n", key_bindings); + for (l = key_bindings; l; l = l->next) + { + E_Binding_Key *bind; + + bind = l->data; + if (_e_bindings_context_match(bind->ctxt, ctxt)) + { + int mod; + + mod = 0; + if (bind->mod & E_BINDING_MODIFIER_SHIFT) mod |= ECORE_X_MODIFIER_SHIFT; + if (bind->mod & E_BINDING_MODIFIER_CTRL) mod |= ECORE_X_MODIFIER_CTRL; + if (bind->mod & E_BINDING_MODIFIER_ALT) mod |= ECORE_X_MODIFIER_ALT; + if (bind->mod & E_BINDING_MODIFIER_WIN) mod |= ECORE_X_MODIFIER_WIN; + printf("BIND %x %s %x %i\n", win, bind->key, mod, bind->any_mod); + ecore_x_window_key_grab(win, bind->key, + mod, bind->any_mod); + } + } +} + +void +e_bindings_key_ungrab(E_Binding_Context ctxt, Ecore_X_Window win) +{ + Evas_List *l; + + for (l = key_bindings; l; l = l->next) + { + E_Binding_Key *bind; + + bind = l->data; + if (_e_bindings_context_match(bind->ctxt, ctxt)) + { + int mod; + + mod = 0; + if (bind->mod & E_BINDING_MODIFIER_SHIFT) mod |= ECORE_X_MODIFIER_SHIFT; + if (bind->mod & E_BINDING_MODIFIER_CTRL) mod |= ECORE_X_MODIFIER_CTRL; + if (bind->mod & E_BINDING_MODIFIER_ALT) mod |= ECORE_X_MODIFIER_ALT; + if (bind->mod & E_BINDING_MODIFIER_WIN) mod |= ECORE_X_MODIFIER_WIN; + ecore_x_window_key_ungrab(win, bind->key, + mod, bind->any_mod); + } + } +} + int e_bindings_key_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Key_Down *ev) { E_Binding_Modifier mod = 0; Evas_List *l; - + if (ev->modifiers & ECORE_X_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT; if (ev->modifiers & ECORE_X_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL; if (ev->modifiers & ECORE_X_MODIFIER_ALT) mod |= E_BINDING_MODIFIER_ALT; if (ev->modifiers & ECORE_X_MODIFIER_WIN) mod |= E_BINDING_MODIFIER_WIN; + for (l = key_bindings; l; l = l->next) + { + E_Binding_Key *bind; + + bind = l->data; + if ((!strcmp(bind->key, ev->keyname)) && + ((bind->any_mod) || (bind->mod == mod))) + { + if (_e_bindings_context_match(bind->ctxt, ctxt)) + { + E_Action *act; + + act = e_action_find(bind->action); + if (act) + { + if (act->func.go_key) + act->func.go_key(obj, bind->params, ev); + else if (act->func.go) + act->func.go(obj, bind->params); + return 1; + } + return 0; + } + } + } + return 0; +} + +int +e_bindings_key_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Key_Up *ev) +{ + E_Binding_Modifier mod = 0; + Evas_List *l; + if (ev->modifiers & ECORE_X_MODIFIER_SHIFT) mod |= E_BINDING_MODIFIER_SHIFT; + if (ev->modifiers & ECORE_X_MODIFIER_CTRL) mod |= E_BINDING_MODIFIER_CTRL; + if (ev->modifiers & ECORE_X_MODIFIER_ALT) mod |= E_BINDING_MODIFIER_ALT; + if (ev->modifiers & ECORE_X_MODIFIER_WIN) mod |= E_BINDING_MODIFIER_WIN; + for (l = key_bindings; l; l = l->next) + { + E_Binding_Key *bind; + + bind = l->data; + if ((!strcmp(bind->key, ev->keyname)) && + ((bind->any_mod) || (bind->mod == mod))) + { + if (_e_bindings_context_match(bind->ctxt, ctxt)) + { + E_Action *act; + + act = e_action_find(bind->action); + if (act) + { + if (act->func.end_key) + act->func.end_key(obj, bind->params, ev); + else if (act->func.end) + act->func.end(obj, bind->params); + return 1; + } + return 0; + } + } + } return 0; } @@ -271,10 +447,19 @@ free(bind); } +static void +_e_bindings_key_free(E_Binding_Key *bind) +{ + E_FREE(bind->key); + E_FREE(bind->action); + E_FREE(bind->params); + free(bind); +} + static int _e_bindings_context_match(E_Binding_Context bctxt, E_Binding_Context ctxt) { - if (bctxt) return 1; + if (bctxt == E_BINDING_CONTEXT_ANY) return 1; if (ctxt == E_BINDING_CONTEXT_UNKNOWN) return 0; if (bctxt == ctxt) return 1; return 0; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_bindings.h,v retrieving revision 1.5 retrieving revision 1.6 diff -u -3 -r1.5 -r1.6 --- e_bindings.h 29 Apr 2005 16:04:42 -0000 1.5 +++ e_bindings.h 29 Apr 2005 19:42:18 -0000 1.6 @@ -9,6 +9,7 @@ E_BINDING_CONTEXT_UNKNOWN, E_BINDING_CONTEXT_BORDER, E_BINDING_CONTEXT_ZONE, + E_BINDING_CONTEXT_MANAGER, E_BINDING_CONTEXT_ANY } E_Binding_Context; @@ -38,7 +39,12 @@ EAPI int e_bindings_mouse_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Mouse_Button_Down *ev); EAPI int e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Mouse_Button_Up *ev); +EAPI void e_bindings_key_add(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, int any_mod, char *action, char *params); +EAPI void e_bindings_key_del(E_Binding_Context ctxt, char *key, E_Binding_Modifier mod, int any_mod, char *action, char *params); +EAPI void e_bindings_key_grab(E_Binding_Context ctxt, Ecore_X_Window win); +EAPI void e_bindings_key_ungrab(E_Binding_Context ctxt, Ecore_X_Window win); EAPI int e_bindings_key_down_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Key_Down *ev); +EAPI int e_bindings_key_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_Event_Key_Up *ev); EAPI int e_bindings_signal_handle(E_Binding_Context ctxt, E_Object *obj, char *sig, char *src); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.c,v retrieving revision 1.168 retrieving revision 1.169 diff -u -3 -r1.168 -r1.169 --- e_border.c 29 Apr 2005 16:04:42 -0000 1.168 +++ e_border.c 29 Apr 2005 19:42:18 -0000 1.169 @@ -108,6 +108,8 @@ static void _e_border_reorder_after(E_Border *bd, E_Border *after); static void _e_border_reorder_before(E_Border *bd, E_Border *before); +static int _e_border_cb_focus_fix(void *data); + /* local subsystem globals */ static Evas_List *handlers = NULL; static Evas_List *borders = NULL; @@ -116,6 +118,8 @@ static E_Border *resize = NULL; static E_Border *move = NULL; +static Ecore_Timer *focus_fix_timer = NULL; + int E_EVENT_BORDER_ADD = 0; int E_EVENT_BORDER_REMOVE = 0; int E_EVENT_BORDER_ZONE_SET = 0; @@ -177,6 +181,8 @@ E_EVENT_BORDER_LOWER = ecore_event_type_new(); E_EVENT_BORDER_ICON_CHANGE = ecore_event_type_new(); + focus_fix_timer = ecore_timer_add(0.5, _e_border_cb_focus_fix, NULL); + return 1; } @@ -191,6 +197,8 @@ handlers = evas_list_remove_list(handlers, handlers); ecore_event_handler_del(h); } + ecore_timer_del(focus_fix_timer); + focus_fix_timer = NULL; return 1; } @@ -235,6 +243,7 @@ e_canvas_del(bd->bg_ecore_evas); ecore_evas_free(bd->bg_ecore_evas); ecore_x_window_del(bd->client.shell_win); + e_bindings_mouse_ungrab(E_BINDING_CONTEXT_BORDER, bd->win); ecore_x_window_del(bd->win); free(bd); return NULL; @@ -703,7 +712,7 @@ else { // printf("remove focus\n"); - ecore_x_window_focus(bd->container->manager->win); + ecore_x_window_focus(bd->container->manager->root); // e_hints_active_window_set(bd->container->manager, NULL); } } @@ -1197,7 +1206,7 @@ } void -e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev) +e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev) { if (bd->moving) { @@ -1251,7 +1260,7 @@ } void -e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev) +e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev) { if (bd->resize_mode != RESIZE_NONE) { @@ -1276,6 +1285,21 @@ } } +void +e_border_act_close_begin(E_Border *bd) +{ + if (bd->client.icccm.delete_request) + ecore_x_window_delete_request_send(bd->client.win); + else + { + ecore_x_kill(bd->client.win); + ecore_x_sync(); +// ecore_x_window_del(bd->client.win); + e_border_hide(bd, 0); + e_object_del(E_OBJECT(bd)); + } +} + /* local subsystem functions */ static void _e_border_free(E_Border *bd) @@ -1320,6 +1344,7 @@ e_canvas_del(bd->bg_ecore_evas); ecore_evas_free(bd->bg_ecore_evas); ecore_x_window_del(bd->client.shell_win); + e_bindings_mouse_ungrab(E_BINDING_CONTEXT_BORDER, bd->win); ecore_x_window_del(bd->win); bd->container->clients = evas_list_remove(bd->container->clients, bd); @@ -1818,6 +1843,7 @@ if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR) return 1; else if (e->detail == ECORE_X_EVENT_DETAIL_INFERIOR) return 1; else if (e->detail == ECORE_X_EVENT_DETAIL_NON_LINEAR_VIRTUAL) return 1; + else if (e->detail == ECORE_X_EVENT_DETAIL_ANCESTOR) return 1; } else if (e->mode == ECORE_X_EVENT_MODE_UNGRAB) { @@ -2109,16 +2135,7 @@ printf("action %s\n", source); if (!strcmp(source, "close")) { - if (bd->client.icccm.delete_request) - ecore_x_window_delete_request_send(bd->client.win); - else - { - ecore_x_kill(bd->client.win); - ecore_x_sync(); -// ecore_x_window_del(bd->client.win); - e_border_hide(bd, 0); - e_object_del(E_OBJECT(bd)); - } + e_border_act_close_begin(bd); } else if (!strcmp(source, "shade_up") || !strcmp(source, "shade")) { @@ -4127,3 +4144,31 @@ borders = evas_list_prepend(borders, bd); } } + +static int +_e_border_cb_focus_fix(void *data) +{ + if (!focused) + { +/* + Evas_List *managers; + E_Manager *man; + + managers = e_manager_list(); + if (managers) + { + E_Container *con; + + man = managers->data; + con = e_manager_container_current_get(man); + if (con) + { + printf("set foc to %x [%x]\n", + man->focus_win, ecore_x_window_focus_get()); + ecore_x_window_focus(man->root); + } + } + */ + } + return 1; +} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_border.h,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- e_border.h 29 Apr 2005 16:04:42 -0000 1.38 +++ e_border.h 29 Apr 2005 19:42:18 -0000 1.39 @@ -348,11 +348,12 @@ EAPI Evas_List *e_border_clients_get(); EAPI void e_border_act_move_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev); -EAPI void e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev); +EAPI void e_border_act_move_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev); EAPI void e_border_act_resize_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev); -EAPI void e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev); +EAPI void e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev); EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev); - +EAPI void e_border_act_close_begin(E_Border *bd); + extern EAPI int E_EVENT_BORDER_RESIZE; extern EAPI int E_EVENT_BORDER_MOVE; extern EAPI int E_EVENT_BORDER_ADD; =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_font.c,v retrieving revision 1.7 retrieving revision 1.8 diff -u -3 -r1.7 -r1.8 --- e_font.c 29 Apr 2005 10:48:07 -0000 1.7 +++ e_font.c 29 Apr 2005 19:42:18 -0000 1.8 @@ -37,6 +37,7 @@ /* setup edje fallback list */ blen = sizeof(buf) - 1; + buf[0] = 0; buf[blen] = 0; next = e_config->font_fallbacks; if (next) @@ -49,33 +50,27 @@ blen -= len; } next = evas_list_next(next); - } - else - { - edje_fontset_append_set(NULL); - } - - while (next) - { - eff = evas_list_data(next); - len = 1; - if (len < blen) - { - strcat(buf, ","); - blen -= len; - } - len = strlen(eff->name); - if (len < blen) + while (next) { - strcat(buf, eff->name); - blen -= len; + eff = evas_list_data(next); + len = 1; + if (len < blen) + { + strcat(buf, ","); + blen -= len; + } + len = strlen(eff->name); + if (len < blen) + { + strcat(buf, eff->name); + blen -= len; + } + next = evas_list_next(next); } - next = evas_list_next(next); - } - if (buf[0] != 0) - { edje_fontset_append_set(buf); } + else + edje_fontset_append_set(NULL); /* setup edje text classes */ for (next = e_config->font_defaults; next; next = next->next) =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_main.c,v retrieving revision 1.70 retrieving revision 1.71 diff -u -3 -r1.70 -r1.71 --- e_main.c 29 Apr 2005 16:04:43 -0000 1.70 +++ e_main.c 29 Apr 2005 19:42:18 -0000 1.71 @@ -375,6 +375,8 @@ /* an idle enterer to be called after all others */ _e_main_idle_enterer_after = ecore_idle_enterer_add(_e_main_cb_idler_after, NULL); + e_managers_keys_grab(); + ecore_x_ungrab(); e_init_title_set(_("Enlightenment")); =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.c,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- e_manager.c 13 Apr 2005 06:03:50 -0000 1.19 +++ e_manager.c 29 Apr 2005 19:42:18 -0000 1.20 @@ -8,6 +8,7 @@ static int _e_manager_cb_window_show_request(void *data, int ev_type, void *ev); static int _e_manager_cb_window_configure(void *data, int ev_type, void *ev); +static int _e_manager_cb_key_down(void *data, int ev_type, void *ev); #if 0 /* use later - maybe */ static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev); static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev); @@ -85,10 +86,14 @@ { man->win = man->root; } + man->focus_win = ecore_x_window_override_new(man->root, -1, -1, 1, 1); + ecore_x_window_show(man->focus_win); h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_SHOW_REQUEST, _e_manager_cb_window_show_request, man); if (h) man->handlers = evas_list_append(man->handlers, h); h = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_CONFIGURE, _e_manager_cb_window_configure, man); if (h) man->handlers = evas_list_append(man->handlers, h); + h = ecore_event_handler_add(ECORE_X_EVENT_KEY_DOWN, _e_manager_cb_key_down, man); + if (h) man->handlers = evas_list_append(man->handlers, h); return man; } @@ -361,6 +366,34 @@ return NULL; } +void +e_managers_keys_grab(void) +{ + Evas_List *l; + + for (l = managers; l; l = l->next) + { + E_Manager *man; + + man = l->data; + e_bindings_key_grab(E_BINDING_CONTEXT_ANY, man->root); + } +} + +void +e_managers_keys_ungrab(void) +{ + Evas_List *l; + + for (l = managers; l; l = l->next) + { + E_Manager *man; + + man = l->data; + e_bindings_key_ungrab(E_BINDING_CONTEXT_ANY, man->root); + } +} + /* local subsystem functions */ static void _e_manager_free(E_Manager *man) @@ -381,6 +414,7 @@ l = l->next; e_object_del(E_OBJECT(tmp->data)); } + ecore_x_window_del(man->focus_win); if (man->root != man->win) { ecore_x_window_del(man->win); @@ -390,7 +424,7 @@ } static int -_e_manager_cb_window_show_request(void *data __UNUSED__, int ev_type __UNUSED__, void *ev) +_e_manager_cb_window_show_request(void *data, int ev_type __UNUSED__, void *ev) { E_Manager *man; Ecore_X_Event_Window_Show_Request *e; @@ -419,7 +453,7 @@ } static int -_e_manager_cb_window_configure(void *data __UNUSED__, int ev_type __UNUSED__, void *ev) +_e_manager_cb_window_configure(void *data, int ev_type __UNUSED__, void *ev) { E_Manager *man; Ecore_X_Event_Window_Configure *e; @@ -431,6 +465,23 @@ return 1; } +static int +_e_manager_cb_key_down(void *data, int ev_type __UNUSED__, void *ev) +{ + E_Manager *man; + Ecore_X_Event_Key_Down *e; + + man = data; + e = ev; + printf("KEY %s [%x %x]\n", + e->keyname, e->win, e->event_win); + if ((e->event_win != man->root) && + (e->event_win != man->focus_win)) return 1; + if (e_bindings_key_down_event_handle(E_BINDING_CONTEXT_MANAGER, E_OBJECT(man), ev)) + return 0; + return 1; +} + #if 0 /* use later - maybe */ static int _e_manager_cb_window_destroy(void *data, int ev_type, void *ev){return 1;} static int _e_manager_cb_window_hide(void *data, int ev_type, void *ev){return 1;} =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_manager.h,v retrieving revision 1.8 retrieving revision 1.9 diff -u -3 -r1.8 -r1.9 --- e_manager.h 13 Feb 2005 12:31:31 -0000 1.8 +++ e_manager.h 29 Apr 2005 19:42:18 -0000 1.9 @@ -19,6 +19,7 @@ int x, y, w, h; char visible : 1; Ecore_X_Window root; + Ecore_X_Window focus_win; Evas_List *handlers; Evas_List *containers; }; @@ -40,5 +41,8 @@ EAPI E_Container *e_manager_container_current_get(E_Manager *man); EAPI E_Container *e_manager_container_number_get(E_Manager *man, int num); +EAPI void e_managers_keys_grab(void); +EAPI void e_managers_keys_ungrab(void); + #endif #endif =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.c,v retrieving revision 1.38 retrieving revision 1.39 diff -u -3 -r1.38 -r1.39 --- e_zone.c 27 Apr 2005 07:30:37 -0000 1.38 +++ e_zone.c 29 Apr 2005 19:42:18 -0000 1.39 @@ -493,6 +493,12 @@ *y_count = zone->desk_y_count; } +void +e_zone_update_flip(E_Zone *zone) +{ + _e_zone_update_flip(zone); +} + static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev) { =================================================================== RCS file: /cvsroot/enlightenment/e17/apps/e/src/bin/e_zone.h,v retrieving revision 1.19 retrieving revision 1.20 diff -u -3 -r1.19 -r1.20 --- e_zone.h 22 Apr 2005 14:33:34 -0000 1.19 +++ e_zone.h 29 Apr 2005 19:42:19 -0000 1.20 @@ -57,7 +57,8 @@ EAPI void e_zone_flip_coords_handle(E_Zone *zone, int x, int y); EAPI void e_zone_desk_count_set(E_Zone *zone, int x_count, int y_count); EAPI void e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count); - +EAPI void e_zone_update_flip(E_Zone *zone); + extern EAPI int E_EVENT_ZONE_DESK_COUNT_SET; #endif ------------------------------------------------------- This SF.Net email is sponsored by: NEC IT Guy Games. Get your fingers limbered up and give it your best shot. 4 great events, 4 opportunities to win big! Highest score wins.NEC IT Guy Games. Play to win an NEC 61 plasma display. Visit http://www.necitguy.com/?r=20 _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs