From 1a489c344e9f1302afd644cfedc1122b58b942da Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 7 Jul 2005 03:55:29 +0000 Subject: [PATCH] martin geisler's patch :) SVN revision: 15656 --- src/bin/e_actions.c | 112 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) diff --git a/src/bin/e_actions.c b/src/bin/e_actions.c index 2490a7c5a..4655d740c 100644 --- a/src/bin/e_actions.c +++ b/src/bin/e_actions.c @@ -287,6 +287,112 @@ ACT_FN_GO(window_shaded_toggle) } } +/***************************************************************************/ +ACT_FN_GO(move_relative) +{ + 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; + } + if (params) + { + int dx, dy; + + if (sscanf(params, "%i %i", &dx, &dy) == 2) { + E_Border *bd; + + bd = (E_Border *)obj; + + e_border_move(bd, bd->x + dx, bd->y + dy); + + if (e_config->focus_policy != E_FOCUS_CLICK) + ecore_x_pointer_warp(bd->zone->container->win, + bd->x + (bd->w / 2), + bd->y + (bd->h / 2)); + } + } +} + +/***************************************************************************/ +ACT_FN_GO(move_absolute) +{ + 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; + } + if (params) + { + E_Border *bd; + int x, y; + char cx, cy; + + bd = (E_Border *)obj; + + if (sscanf(params, "%c%i %c%i", &cx, &x, &cy, &y) == 4) + { + // Nothing, both x and y is updated. + } + else if (sscanf(params, "* %c%i", &cy, &y) == 2) + { + // Updated y, reset x. + x = bd->x; + } + else if (sscanf(params, "%c%i *", &cx, &x) == 2) + { + // Updated x, reset y. + y = bd->y; + } + + if (cx == '-') x = bd->zone->w - bd->w - x; + if (cy == '-') y = bd->zone->h - bd->h - y; + + if (x != bd->x || y != bd->y) + { + e_border_move(bd, x, y); + + if (e_config->focus_policy != E_FOCUS_CLICK) + ecore_x_pointer_warp(bd->zone->container->win, + bd->x + (bd->w / 2), + bd->y + (bd->h / 2)); + } + } +} + +/***************************************************************************/ +ACT_FN_GO(resize) +{ + 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; + } + + if (params) + { + int dw, dh; + + if (sscanf(params, "%i %i", &dw, &dh) == 2) { + E_Border *bd; + bd = (E_Border *)obj; + + e_border_resize(bd, bd->w + dw, bd->h + dh); + + if (e_config->focus_policy != E_FOCUS_CLICK) + ecore_x_pointer_warp(bd->zone->container->win, + bd->x + (bd->w / 2), + bd->y + (bd->h / 2)); + } + } +} + /***************************************************************************/ ACT_FN_GO(desk_flip_by) { @@ -788,6 +894,12 @@ e_actions_init(void) ACT_GO(desk_linear_flip_to); + ACT_GO(move_absolute); + + ACT_GO(move_relative); + + ACT_GO(resize); + ACT_GO(menu_show); ACT_GO_MOUSE(menu_show); ACT_GO_KEY(menu_show);