forked from enlightenment/enlightenment
key bindings... um.. kinda... work...
SVN revision: 14505
This commit is contained in:
parent
67bc506c7a
commit
9f7013f03e
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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"));
|
||||
|
|
|
@ -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;}
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
{
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue