- if (e->xkey.keycode == ob_keycode(OB_KEY_RIGHT))
- dx = 4;
- else if (e->xkey.keycode == ob_keycode(OB_KEY_LEFT))
- dx = -4;
- else if (e->xkey.keycode == ob_keycode(OB_KEY_DOWN))
- dy = 4;
- else if (e->xkey.keycode == ob_keycode(OB_KEY_UP))
- dy = -4;
- else
- return;
+ used = TRUE;
+ } else if (corner == prop_atoms.net_wm_moveresize_move_keyboard) {
+ gint dx = 0, dy = 0, ox = cur_x, oy = cur_y;
+ gint opx, px, opy, py;
+ gint dist = KEY_DIST;
+
+ /* shift means jump to edge */
+ if (e->xkey.state & modkeys_key_to_mask(OB_MODKEY_KEY_SHIFT)) {
+ gint x, y;
+ ObDirection dir;
+
+ if (e->xkey.keycode == ob_keycode(OB_KEY_RIGHT))
+ dir = OB_DIRECTION_EAST;
+ else if (e->xkey.keycode == ob_keycode(OB_KEY_LEFT))
+ dir = OB_DIRECTION_WEST;
+ else if (e->xkey.keycode == ob_keycode(OB_KEY_DOWN))
+ dir = OB_DIRECTION_SOUTH;
+ else /* if (e->xkey.keycode == ob_keycode(OB_KEY_UP)) */
+ dir = OB_DIRECTION_NORTH;
+
+ client_find_move_directional(moveresize_client, dir,
+ &x, &y);
+ dx = x - moveresize_client->area.x;
+ dy = y - moveresize_client->area.y;
+ } else {
+ /* control means fine grained */
+ if (e->xkey.state &
+ modkeys_key_to_mask(OB_MODKEY_KEY_CONTROL))
+ dist = 1;
+
+ if (e->xkey.keycode == ob_keycode(OB_KEY_RIGHT))
+ dx = dist;
+ else if (e->xkey.keycode == ob_keycode(OB_KEY_LEFT))
+ dx = -dist;
+ else if (e->xkey.keycode == ob_keycode(OB_KEY_DOWN))
+ dy = dist;
+ else /* if (e->xkey.keycode == ob_keycode(OB_KEY_UP)) */
+ dy = -dist;
+ }