a whole wad more bindings... i'll stop here. it's now a matter of slow, over

time, expansion of actions and systems to hook in.


SVN revision: 14512
This commit is contained in:
Carsten Haitzler 2005-04-30 07:03:35 +00:00
parent 350fab40ce
commit c5fab74cbf
6 changed files with 359 additions and 23 deletions

View File

@ -115,15 +115,34 @@ 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);
if (obj->type != E_BORDER_TYPE)
{
obj = E_OBJECT(e_border_focused_get());
if (!obj) return;
}
e_border_act_menu_begin((E_Border *)obj, NULL, 0);
}
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);
if (obj->type != E_BORDER_TYPE)
{
obj = E_OBJECT(e_border_focused_get());
if (!obj) return;
}
e_border_act_menu_begin((E_Border *)obj, ev, 0);
}
ACT_FN_GO_KEY(window_menu)
{
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_menu_begin((E_Border *)obj, NULL, 1);
}
/***************************************************************************/
@ -165,6 +184,95 @@ ACT_FN_GO(window_close)
e_border_act_close_begin((E_Border *)obj);
}
/***************************************************************************/
ACT_FN_GO(window_kill)
{
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_kill_begin((E_Border *)obj);
}
/***************************************************************************/
ACT_FN_GO(window_sticky_toggle)
{
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 *bd;
bd = (E_Border *)obj;
if (bd->sticky) e_border_unstick(bd);
else e_border_stick(bd);
}
}
/***************************************************************************/
ACT_FN_GO(window_iconic_toggle)
{
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 *bd;
bd = (E_Border *)obj;
if (bd->iconic) e_border_uniconify(bd);
else e_border_iconify(bd);
}
}
/***************************************************************************/
ACT_FN_GO(window_maximized_toggle)
{
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 *bd;
bd = (E_Border *)obj;
if (bd->maximized) e_border_unmaximize(bd);
else e_border_maximize(bd);
}
}
/***************************************************************************/
ACT_FN_GO(window_shaded_toggle)
{
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 *bd;
bd = (E_Border *)obj;
if (bd->shaded) e_border_unshade(bd, E_DIRECTION_UP);
else e_border_shade(bd, E_DIRECTION_UP);
}
}
/***************************************************************************/
ACT_FN_GO(desk_flip_by)
{
@ -245,6 +353,141 @@ ACT_FN_GO(desk_linear_flip_to)
}
}
/***************************************************************************/
static void
_e_actions_cb_menu_end(void *data, E_Menu *m)
{
e_object_del(E_OBJECT(m));
}
static E_Menu *
_e_actions_menu_find(char *name)
{
if (!strcmp(name, "main")) return e_int_menus_main_new();
else if (!strcmp(name, "favorites")) return e_int_menus_favorite_apps_new();
else if (!strcmp(name, "clients")) return e_int_menus_clients_new();
return NULL;
}
ACT_FN_GO(menu_show)
{
E_Zone *zone;
/* menu is active - abort */
if (e_menu_grab_window_get()) return;
if (!obj) return;
if (obj->type == E_MANAGER_TYPE)
{
zone = e_util_zone_current_get((E_Manager *)obj);
if (zone)
{
if (params)
{
E_Menu *m = NULL;
m = _e_actions_menu_find(params);
if (m)
{
int x, y;
/* FIXME: this is a bit of a hack... setting m->con - bad hack */
m->zone = zone;
ecore_x_pointer_xy_get(zone->container->win, &x, &y);
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
e_menu_activate_mouse(m, zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
}
}
}
}
}
ACT_FN_GO_MOUSE(menu_show)
{
E_Zone *zone;
/* menu is active - abort */
if (e_menu_grab_window_get()) return;
if (!obj) return;
if (obj->type == E_MANAGER_TYPE)
{
zone = e_util_zone_current_get((E_Manager *)obj);
if (zone)
{
if (params)
{
E_Menu *m = NULL;
m = _e_actions_menu_find(params);
if (m)
{
int x, y;
/* FIXME: this is a bit of a hack... setting m->con - bad hack */
m->zone = zone;
x = ev->root.x;
y = ev->root.y;
x -= zone->container->x;
y -= zone->container->y;
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
e_menu_activate_mouse(m, zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
}
}
}
}
}
ACT_FN_GO_KEY(menu_show)
{
E_Zone *zone;
/* menu is active - abort */
if (e_menu_grab_window_get()) return;
if (!obj) return;
if (obj->type == E_MANAGER_TYPE)
{
zone = e_util_zone_current_get((E_Manager *)obj);
if (zone)
{
if (params)
{
E_Menu *m = NULL;
m = _e_actions_menu_find(params);
if (m)
{
int x, y;
/* FIXME: this is a bit of a hack... setting m->con - bad hack */
m->zone = zone;
ecore_x_pointer_xy_get(zone->container->win, &x, &y);
e_menu_post_deactivate_callback_set(m, _e_actions_cb_menu_end, NULL);
e_menu_activate_key(m, zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
}
}
}
}
}
/***************************************************************************/
ACT_FN_GO(exec)
{
E_Zone *zone;
if (!obj) return;
if (obj->type != E_MANAGER_TYPE) return;
zone = e_util_zone_current_get((E_Manager *)obj);
if (zone)
{
if (params)
{
Ecore_Exe *exe;
exe = ecore_exe_run(params, NULL);
if (exe) ecore_exe_free(exe);
}
}
}
/* local subsystem globals */
static Evas_Hash *actions = NULL;
@ -267,12 +510,24 @@ e_actions_init(void)
ACT_GO(window_menu);
ACT_GO_MOUSE(window_menu);
ACT_GO_KEY(window_menu);
ACT_GO(window_raise);
ACT_GO(window_lower);
ACT_GO(window_close);
ACT_GO(window_kill);
ACT_GO(window_sticky_toggle);
ACT_GO(window_iconic_toggle);
ACT_GO(window_maximized_toggle);
ACT_GO(window_shaded_toggle);
ACT_GO(desk_flip_by);
ACT_GO(desk_flip_to);
@ -280,6 +535,12 @@ e_actions_init(void)
ACT_GO(desk_linear_flip_by);
ACT_GO(desk_linear_flip_to);
ACT_GO(menu_show);
ACT_GO_MOUSE(menu_show);
ACT_GO_KEY(menu_show);
ACT_GO(exec);
return 1;
}

View File

@ -61,6 +61,7 @@ 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");
@ -82,6 +83,25 @@ e_bindings_init(void)
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"x", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_close", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"k", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_kill", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"w", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_menu", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"s", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_sticky_toggle", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"i", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_iconic_toggle", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"f", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_maximized_toggle", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"r", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"window_shaded_toggle", "");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"Left", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"desk_linear_flip_by", "-1");
@ -124,6 +144,46 @@ e_bindings_init(void)
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"F12", E_BINDING_MODIFIER_ALT, 0,
"desk_linear_flip_to", "11");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"m", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"menu_show", "main");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"a", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"menu_show", "favorites");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"Menu", 0, 0,
"menu_show", "main");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"Menu", E_BINDING_MODIFIER_CTRL, 0,
"menu_show", "clients");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"Menu", E_BINDING_MODIFIER_ALT, 0,
"menu_show", "favorites");
e_bindings_key_add(E_BINDING_CONTEXT_ANY,
"Insert", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0,
"exec", "Eterm");
/* shoudl do these - can't yet due to other things missing... */
/* need a yes/no dialog for these - to stop accidental logouts. for this
* i'd make a special case that can ask u to log out, restart or shut down
* or even reboot (if you have permissions to do so)
*/
/* CTRL+ALT Delete - logout */
/* CTRL+ALT End - restart */
/* need a way to display all focused windows nicely - subsystem for
* this that also grabs the modifier on activate (if there are any) so
* on release of modifier(s) OR on any new action this list aborts display
*/
/* ALT Tab - next window focus */
/* ALT_SHIFT Tab - prev window focus */
/* need to support fullscreen anyway for this - ie netwm and the border
* system need to handle this as well as possibly using xrandr/xvidmode
*/
/* ALT Return - fullscreen window */
return 1;
}

View File

@ -68,7 +68,7 @@ static void _e_border_resize_handle(E_Border *bd);
static int _e_border_shade_animator(void *data);
static void _e_border_cb_border_menu_end(void *data, E_Menu *m);
static void _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y);
static void _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key);
static void _e_border_menu_cb_close(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi);
static void _e_border_menu_cb_maximize(void *data, E_Menu *m, E_Menu_Item *mi);
@ -1270,18 +1270,20 @@ e_border_act_resize_end(E_Border *bd, Ecore_X_Event_Mouse_Button_Up *ev)
}
void
e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev)
e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev, int key)
{
if (ev)
{
_e_border_menu_show(bd, bd->x + ev->x, bd->y + ev->y);
_e_border_menu_show(bd,
bd->x + ev->x - bd->zone->container->x,
bd->y + ev->y - bd->zone->container->y, key);
}
else
{
int x, y;
ecore_x_pointer_last_xy_get(&x, &y);
_e_border_menu_show(bd, x, y);
ecore_x_pointer_xy_get(bd->zone->container->win, &x, &y);
_e_border_menu_show(bd, x, y, key);
}
}
@ -1300,6 +1302,15 @@ e_border_act_close_begin(E_Border *bd)
}
}
void
e_border_act_kill_begin(E_Border *bd)
{
ecore_x_kill(bd->client.win);
ecore_x_sync();
e_border_hide(bd, 0);
e_object_del(E_OBJECT(bd));
}
/* local subsystem functions */
static void
_e_border_free(E_Border *bd)
@ -2172,7 +2183,7 @@ _e_border_cb_signal_action(void *data, Evas_Object *obj, const char *emission, c
Evas_Coord x, y;
evas_pointer_canvas_xy_get(bd->bg_evas , &x, &y);
_e_border_menu_show(bd, x + bd->x, y + bd->y);
_e_border_menu_show(bd, x + bd->x, y + bd->y, 0);
}
else if (!strcmp(source, "lower"))
{
@ -3632,7 +3643,7 @@ _e_border_cb_border_menu_end(void *data, E_Menu *m)
}
static void
_e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y)
_e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y, int key)
{
E_Menu *m;
E_Menu_Item *mi;
@ -3744,9 +3755,12 @@ _e_border_menu_show(E_Border *bd, Evas_Coord x, Evas_Coord y)
e_menu_item_callback_set(mi, _e_border_menu_cb_icon_edit, buf);
}
e_menu_activate_mouse(m, bd->zone, x, y, 1, 1,
if (key)
e_menu_activate_key(m, bd->zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
else
e_menu_activate_mouse(m, bd->zone, x, y, 1, 1,
E_MENU_POP_DIRECTION_DOWN);
}
static void
@ -3773,7 +3787,7 @@ _e_border_menu_cb_iconify(void *data, E_Menu *m, E_Menu_Item *mi)
E_Border *bd;
bd = data;
if (bd->maximized) e_border_uniconify(bd);
if (bd->iconic) e_border_uniconify(bd);
else e_border_iconify(bd);
}

View File

@ -352,9 +352,10 @@ EAPI void e_border_act_move_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down
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_Up *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev);
EAPI void e_border_act_menu_begin(E_Border *bd, Ecore_X_Event_Mouse_Button_Down *ev, int key);
EAPI void e_border_act_close_begin(E_Border *bd);
EAPI void e_border_act_kill_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

@ -151,8 +151,8 @@ e_menu_activate_key(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int dir
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
_e_menu_activate_time = 0.0;
_e_menu_activate_internal(m, zone);
m->cur.x = 200;
m->cur.y = 200;
m->cur.x = x + w;
m->cur.y = y + h;
_e_menu_activate_first();
}
@ -167,8 +167,8 @@ e_menu_activate_mouse(E_Menu *m, E_Zone *zone, int x, int y, int w, int h, int d
E_OBJECT_TYPE_CHECK(zone, E_ZONE_TYPE);
_e_menu_activate_time = ecore_time_get();
_e_menu_activate_internal(m, zone);
m->cur.x = x;
m->cur.y = y;
m->cur.x = x + w;
m->cur.y = y + h;
pmi = _e_menu_item_active_get();
if (pmi) e_menu_item_active_set(pmi, 0);

View File

@ -202,8 +202,8 @@ e_zone_current_get(E_Container *con)
else
{
int x, y;
ecore_x_pointer_last_xy_get(&x, &y);
ecore_x_pointer_xy_get(con->win, &x, &y);
for (l = con->zones; l; l = l->next)
{
E_Zone *zone;
@ -618,7 +618,7 @@ _e_zone_cb_timer(void *data)
zone = data;
ecore_x_pointer_last_xy_get(&x, &y);
ecore_x_pointer_xy_get(zone->container->win, &x, &y);
switch (zone->flip.direction)
{