From 51ce3de0c047fba1f19bc36a87aeea62570d6f2b Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Sat, 30 Apr 2005 04:21:55 +0000 Subject: [PATCH] more bindings and actions SVN revision: 14509 --- src/bin/e_actions.c | 104 ++++++++++++++++++++++++++++++------------- src/bin/e_bindings.c | 42 +++++++++++++++++ src/bin/e_utils.c | 16 +++++++ src/bin/e_utils.h | 3 +- src/bin/e_zone.c | 43 ++++++++++++++++++ src/bin/e_zone.h | 4 ++ 6 files changed, 180 insertions(+), 32 deletions(-) diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index 723ca0579..9a98bd7ba 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -168,43 +168,79 @@ ACT_FN_GO(window_close) /***************************************************************************/ ACT_FN_GO(desk_flip_by) { - E_Container *con; + E_Zone *zone; if (!obj) return; if (obj->type != E_MANAGER_TYPE) return; - con = e_manager_container_current_get((E_Manager *)obj); - /* FIXME: this shoudl really go into desk logic and zone... */ - if (con) + zone = e_util_zone_current_get((E_Manager *)obj); + if (zone) { - E_Zone *zone; - - zone = e_zone_current_get(con); - if (zone) + if (params) { - 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); - } + + if (sscanf(params, "%i %i", &dx, &dy) == 2) + e_zone_desk_flip_by(zone, dx, dy); + } + } +} + +/***************************************************************************/ +ACT_FN_GO(desk_flip_to) +{ + 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) + { + int dx = 0, dy = 0; + + if (sscanf(params, "%i %i", &dx, &dy) == 2) + e_zone_desk_flip_to(zone, dx, dy); + } + } +} + +/***************************************************************************/ +ACT_FN_GO(desk_linear_flip_by) +{ + 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) + { + int dx = 0; + + if (sscanf(params, "%i", &dx) == 1) + e_zone_desk_linear_flip_by(zone, dx); + } + } +} + +/***************************************************************************/ +ACT_FN_GO(desk_linear_flip_to) +{ + 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) + { + int dx = 0; + + if (sscanf(params, "%i", &dx) == 1) + e_zone_desk_linear_flip_to(zone, dx); } } } @@ -238,6 +274,12 @@ e_actions_init(void) ACT_GO(window_close); ACT_GO(desk_flip_by); + + ACT_GO(desk_flip_to); + + ACT_GO(desk_linear_flip_by); + + ACT_GO(desk_linear_flip_to); return 1; } diff --git a/src/bin/e_bindings.c b/src/bin/e_bindings.c index df6d541be..8b2103988 100644 --- a/src/bin/e_bindings.c +++ b/src/bin/e_bindings.c @@ -82,6 +82,48 @@ 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, + "Left", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_by", "-1"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "Right", E_BINDING_MODIFIER_CTRL | E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_by", "1"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F1", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "0"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F2", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "1"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F3", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "2"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F4", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "3"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F5", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "4"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F6", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "5"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F7", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "6"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F8", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "7"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F9", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "8"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F10", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "9"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F11", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "10"); + e_bindings_key_add(E_BINDING_CONTEXT_ANY, + "F12", E_BINDING_MODIFIER_ALT, 0, + "desk_linear_flip_to", "11"); return 1; } diff --git a/src/bin/e_utils.c b/src/bin/e_utils.c index 94ff04a0e..dcb1eafd4 100644 --- a/src/bin/e_utils.c +++ b/src/bin/e_utils.c @@ -76,6 +76,22 @@ e_util_env_set(const char *var, const char *val) } } +E_Zone * +e_util_zone_current_get(E_Manager *man) +{ + E_Container *con; + + con = e_manager_container_current_get(man); + if (con) + { + E_Zone *zone; + + zone = e_zone_current_get(con); + return zone; + } + return NULL; +} + /* local subsystem functions */ static void _e_util_container_fake_mouse_up_cb(void *data) diff --git a/src/bin/e_utils.h b/src/bin/e_utils.h index e28728a01..f72a27ed1 100644 --- a/src/bin/e_utils.h +++ b/src/bin/e_utils.h @@ -10,6 +10,7 @@ EAPI void e_util_container_fake_mouse_up_later(E_Container *con, int button); EAPI void e_util_container_fake_mouse_up_all_later(E_Container *con); EAPI void e_util_wakeup(void); EAPI void e_util_env_set(const char *var, const char *val); - +EAPI E_Zone *e_util_zone_current_get(E_Manager *man); + #endif #endif diff --git a/src/bin/e_zone.c b/src/bin/e_zone.c index ad7a0bbf9..313adf6e9 100644 --- a/src/bin/e_zone.c +++ b/src/bin/e_zone.c @@ -499,6 +499,49 @@ e_zone_update_flip(E_Zone *zone) _e_zone_update_flip(zone); } +void +e_zone_desk_flip_by(E_Zone *zone, int dx, int dy) +{ + dx = zone->desk_x_current + dx; + dy = zone->desk_x_current + dy; + e_zone_desk_flip_to(zone, dx, dy); +} + +void +e_zone_desk_flip_to(E_Zone *zone, int x, int y) +{ + E_Desk *desk; + + if (x < 0) x = 0; + else if (x >= zone->desk_x_count) x = zone->desk_x_count - 1; + if (y < 0) y = 0; + else if (y >= zone->desk_y_count) y = zone->desk_y_count - 1; + desk = e_desk_at_xy_get(zone, x, y); + if (desk) + { + e_desk_show(desk); + _e_zone_update_flip(zone); + } +} + +void +e_zone_desk_linear_flip_by(E_Zone *zone, int dx) +{ + dx = zone->desk_x_current + + (zone->desk_y_current * zone->desk_x_count) + dx; + e_zone_desk_linear_flip_to(zone, dx); +} + +void +e_zone_desk_linear_flip_to(E_Zone *zone, int x) +{ + int y; + + y = x / zone->desk_x_count; + x = x - (y * zone->desk_x_count); + e_zone_desk_flip_to(zone, x, y); +} + static void _e_zone_event_zone_desk_count_set_free(void *data, void *ev) { diff --git a/src/bin/e_zone.h b/src/bin/e_zone.h index c0187797f..7d98188e6 100644 --- a/src/bin/e_zone.h +++ b/src/bin/e_zone.h @@ -58,6 +58,10 @@ 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); +EAPI void e_zone_desk_flip_by(E_Zone *zone, int dx, int dy); +EAPI void e_zone_desk_flip_to(E_Zone *zone, int x, int y); +EAPI void e_zone_desk_linear_flip_by(E_Zone *zone, int dx); +EAPI void e_zone_desk_linear_flip_to(E_Zone *zone, int x); extern EAPI int E_EVENT_ZONE_DESK_COUNT_SET;