key bindings... um.. kinda... work...

SVN revision: 14505
This commit is contained in:
Carsten Haitzler 2005-04-29 19:42:19 +00:00
parent 67bc506c7a
commit 9f7013f03e
12 changed files with 460 additions and 49 deletions

View File

@ -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_END_MOUSE(window_move)
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_END_MOUSE(window_resize)
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 @@ e_actions_init(void)
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;
}

View File

@ -9,10 +9,12 @@ struct _E_Action
{
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;
};

View File

@ -38,6 +38,7 @@ struct _E_Binding_Signal
};
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_init(void)
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_bindings_mouse_grab(E_Binding_Context ctxt, Ecore_X_Window win)
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_bindings_mouse_ungrab(E_Binding_Context ctxt, Ecore_X_Window win)
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 @@ e_bindings_mouse_up_event_handle(E_Binding_Context ctxt, E_Object *obj, Ecore_X_
}
/* 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 @@ _e_bindings_mouse_free(E_Binding_Mouse *bind)
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;

View File

@ -9,6 +9,7 @@ typedef enum _E_Binding_Context
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 void e_bindings_mouse_ungrab(E_Binding_Context ctxt, Ecore_X_Window
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);

View File

@ -108,6 +108,8 @@ static void _e_border_move_update(E_Border *bd);
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 *focused = NULL;
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_border_init(void)
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 @@ e_border_shutdown(void)
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_border_new(E_Container *con, Ecore_X_Window win, int first_map)
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 @@ e_border_focus_set(E_Border *bd, int focus, int set)
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 @@ e_border_act_move_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
}
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 @@ e_border_act_resize_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
}
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 @@ e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
}
}
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_border_free(E_Border *bd)
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 @@ _e_border_cb_window_focus_out(void *data, int ev_type, void *ev)
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 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
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 @@ _e_border_reorder_before(E_Border *bd, E_Border *before)
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;
}

View File

@ -348,11 +348,12 @@ EAPI void e_border_idler_before(void);
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;

View File

@ -37,6 +37,7 @@ e_font_apply(void)
/* 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 @@ e_font_apply(void)
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)
while (next)
{
strcat(buf, ",");
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);
}
len = strlen(eff->name);
if (len < blen)
{
strcat(buf, eff->name);
blen -= len;
}
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)

View File

@ -375,6 +375,8 @@ main(int argc, char **argv)
/* 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"));

View File

@ -8,6 +8,7 @@ static void _e_manager_free(E_Manager *man);
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 @@ e_manager_new(Ecore_X_Window root)
{
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 @@ e_manager_container_number_get(E_Manager *man, int num)
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 @@ _e_manager_free(E_Manager *man)
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 @@ _e_manager_free(E_Manager *man)
}
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 @@ _e_manager_cb_window_show_request(void *data __UNUSED__, int ev_type __UNUSED__,
}
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 @@ _e_manager_cb_window_configure(void *data __UNUSED__, int ev_type __UNUSED__, vo
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;}

View File

@ -19,6 +19,7 @@ struct _E_Manager
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 void e_manager_lower(E_Manager *man);
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

View File

@ -493,6 +493,12 @@ e_zone_desk_count_get(E_Zone *zone, int *x_count, int *y_count)
*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)
{

View File

@ -57,7 +57,8 @@ EAPI void e_zone_bg_reconfigure(E_Zone *zone);
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