Martin Geisler wrote:
Carsten Haitzler (The Rasterman) <[EMAIL PROTECTED]> writes:
indeed - very useful :) patch added in to cvs :)
I've tried to track the function calls made by e_border_move() but I
haven't found anything that fiddles with the focused window.
possibly make separate function - something like `e_focus_update' ?
we may use it in any case, when focus may change by actions
(moving/closing windows, etc).
hm... on my system whole e17 is freezed. seems to bug in focus code.
and more: get patch, that modifies pointer wrapping (relativity saved)
--
Boldin Pavel aka davinchi. mail-to: ldavinchi /at\ inbox _dot_ ru
ZU - Zagovor Unixoidov. SSAU 303.
--- /home/davinchi/downloaded/e17/apps/e/src/bin/e_actions.c 2005-07-08 00:25:59 +0500
+++ e_actions.c 2005-07-08 04:01:42 +0500
@@ -300,18 +300,32 @@ ACT_FN_GO(move_relative)
if (params)
{
int dx, dy;
+ int rx, ry;
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_xy_get(bd->zone->container->win,
+ &rx, &ry);
+
+ rx -= bd->x;
+ ry -= bd->y;
+
+ if (rx < 0 || rx > bd->w || ry < 0 || ry > bd->h)
+ rx = ry = 0;
+ }
+
+ e_border_move(bd, bd->x + dx, bd->y + dy);
+
+ if (e_config->focus_policy != E_FOCUS_CLICK && (rx || ry))
ecore_x_pointer_warp(bd->zone->container->win,
- bd->x + (bd->w / 2),
- bd->y + (bd->h / 2));
+ bd->x + rx,
+ bd->y + ry);
}
}
}
@@ -330,6 +344,7 @@ ACT_FN_GO(move_absolute)
{
E_Border *bd;
int x, y;
+ int rx, ry;
char cx, cy;
bd = (E_Border *)obj;
@@ -354,12 +369,26 @@ ACT_FN_GO(move_absolute)
if (x != bd->x || y != bd->y)
{
- e_border_move(bd, x, y);
+
if (e_config->focus_policy != E_FOCUS_CLICK)
+ {
+ ecore_x_pointer_xy_get(bd->zone->container->win,
+ &rx, &ry);
+
+ rx -= bd->x;
+ ry -= bd->y;
+
+ if (rx < 0 || rx > bd->w || ry < 0 || ry > bd->h)
+ rx = ry = 0;
+ }
+
+ e_border_move(bd, x, y);
+
+ if (e_config->focus_policy != E_FOCUS_CLICK && (rx || ry))
ecore_x_pointer_warp(bd->zone->container->win,
- bd->x + (bd->w / 2),
- bd->y + (bd->h / 2));
+ bd->x + rx,
+ bd->y + ry);
}
}
}
@@ -378,17 +407,38 @@ ACT_FN_GO(resize)
if (params)
{
int dw, dh;
+ int rx, ry;
if (sscanf(params, "%i %i", &dw, &dh) == 2) {
E_Border *bd;
bd = (E_Border *)obj;
+ if (e_config->focus_policy != E_FOCUS_CLICK)
+ {
+ ecore_x_pointer_xy_get(bd->zone->container->win,
+ &rx, &ry);
+
+ rx -= bd->x;
+ ry -= bd->y;
+
+ if (rx < 0 || rx > bd->w || ry < 0 || ry > bd->h)
+ {
+ rx = 500;
+ ry = 500;
+ }
+ else
+ {
+ rx = rx*1000/bd->w;
+ ry = ry*1000/bd->h;
+ }
+ }
+
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));
+ bd->x + rx*bd->w/1000,
+ bd->y + ry*bd->h/1000 );
}
}
}