void CMD_WarpToWindow(F_CMD_ARGS) { int val1_unit, val2_unit, n; int val1, val2; n = GetTwoArguments(action, &val1, &val2, &val1_unit, &val2_unit); if (context != C_UNMANAGED) { if (DeferExecution(eventp,&w,&tmp_win,&context,CRS_SELECT,ButtonRelease)) return; if (n == 2) warp_to_fvwm_window(eventp, tmp_win, val1, val1_unit, val2, val2_unit); else warp_to_fvwm_window(eventp, tmp_win, 0, 0, 0, 0); } else { int x = 0; int y = 0; if (n == 2) { int wx; int wy; unsigned int ww; unsigned int wh; if (!XGetGeometry( dpy, w, &JunkRoot, &wx, &wy, &ww, &wh, &JunkBW, &JunkDepth)) { return; } if (val1_unit != Scr.MyDisplayWidth) x = val1; else x = (ww - 1) * val1 / 100; if (val2_unit != Scr.MyDisplayHeight) y = val2; else y = (wh - 1) * val2 / 100; if (x < 0) x += ww; if (y < 0) y += wh; } XWarpPointer(dpy, None, w, 0, 0, 0, 0, x, y); } }
void CMD_WarpToWindow(F_CMD_ARGS) { int val1_unit, val2_unit, n; int val1, val2; int do_raise; char *next; char *token; next = GetNextToken(action, &token); if (StrEquals(token, "!raise")) { do_raise = 0; action = next; } else if (StrEquals(token, "raise")) { do_raise = 1; action = next; } else { do_raise = 1; } n = GetTwoArguments(action, &val1, &val2, &val1_unit, &val2_unit); if (exc->w.wcontext != C_UNMANAGED) { if (n == 2) { warp_to_fvwm_window( exc, val1, val1_unit, val2, val2_unit, do_raise); } else { warp_to_fvwm_window(exc, 0, 0, 0, 0, do_raise); } } else { int x = 0; int y = 0; if (n == 2) { int wx; int wy; int ww; int wh; if (!XGetGeometry( dpy, exc->w.w, &JunkRoot, &wx, &wy, (unsigned int*)&ww, (unsigned int*)&wh, (unsigned int*)&JunkBW, (unsigned int*)&JunkDepth)) { return; } if (val1_unit != Scr.MyDisplayWidth) { x = val1; } else { x = (ww - 1) * val1 / 100; } if (val2_unit != Scr.MyDisplayHeight) { y = val2; } else { y = (wh - 1) * val2 / 100; } if (x < 0) { x += ww; } if (y < 0) { y += wh; } } FWarpPointerUpdateEvpos( exc->x.elast, dpy, None, exc->w.w, 0, 0, 0, 0, x, y); } return; }