static void client_dest(ObClient *client, gpointer data)
{
if (moveresize_client == client)
- moveresize_end(TRUE);
+ moveresize_end(TRUE);
}
void moveresize_startup(gboolean reconfig)
moveresize_client = c;
start_cx = c->area.x;
start_cy = c->area.y;
+ start_cw = c->area.width;
+ start_ch = c->area.height;
/* these adjustments for the size_inc make resizing a terminal more
friendly. you essentially start the resize in the middle of the
increment instead of at 0, so you have to move half an increment
either way instead of a full increment one and 1 px the other. */
- start_cw = c->area.width + c->size_inc.width / 2;
- start_ch = c->area.height + c->size_inc.height / 2;
- start_x = x;
- start_y = y;
+ start_x = x - (mv ? 0 : c->size_inc.width / 2);
+ start_y = y - (mv ? 0 : c->size_inc.height / 2);
corner = cnr;
button = b;
key_resize_edge = -1;
moveresize_in_progress = TRUE;
#ifdef SYNC
- if (config_resize_redraw && !moving && extensions_shape &&
+ if (config_resize_redraw && !moving && extensions_sync &&
moveresize_client->sync_request && moveresize_client->sync_counter)
{
/* Initialize values for the resize syncing, and create an alarm for
waiting_for_sync = TRUE;
ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func);
- ob_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC / 2,
+ ob_main_loop_timeout_add(ob_main_loop, G_USEC_PER_SEC * 2,
sync_timeout_func,
NULL, NULL, NULL);
}
static void calc_resize(gboolean keyboard, gint keydist, gint *dw, gint *dh,
ObCorner cor)
{
- gint resist, ow, oh, nw, nh;
+ gint resist, x, y, lw, lh, ow, oh, nw, nh;
+ ow = cur_w;
+ oh = cur_h;
/* resist_size_* needs the frame size */
- ow = cur_w +
+ nw = ow + *dw +
moveresize_client->frame->size.left +
moveresize_client->frame->size.right;
- oh = cur_h +
+ nh = oh + *dh +
moveresize_client->frame->size.top +
moveresize_client->frame->size.bottom;
- nw = ow + *dw;
- nh = oh + *dh;
if (keyboard) resist = keydist - 1; /* resist for one key press */
else resist = config_resist_win;
if (!keyboard) resist = config_resist_edge;
resist_size_monitors(moveresize_client, resist, &nw, &nh, cor);
+ nw -= moveresize_client->frame->size.left +
+ moveresize_client->frame->size.right;
+ nh -= moveresize_client->frame->size.top +
+ moveresize_client->frame->size.bottom;
+
+ /* see its actual size */
+ x = 0;
+ y = 0;
+ client_try_configure(moveresize_client, &x, &y, &nw, &nh, &lw, &lh, TRUE);
+
+
*dw = nw - ow;
*dh = nh - oh;
}
pdy = -dh;
else if (key_resize_edge == OB_DIRECTION_SOUTH)
pdy = dh;
-
+
screen_pointer_pos(&opx, &opy);
XWarpPointer(ob_display, None, None, 0, 0, 0, 0, pdx, pdy);
/* steal the motion events this causes */
lockcorner = OB_CORNER_BOTTOMRIGHT;
} else if (corner == prop_atoms.net_wm_moveresize_size_top) {
dw = 0;
- dh = (e->xmotion.y_root - start_y);
+ dh = -(e->xmotion.y_root - start_y);
lockcorner = OB_CORNER_BOTTOMRIGHT;
} else if (corner == prop_atoms.net_wm_moveresize_size_topright) {
dw = (e->xmotion.x_root - start_x);
dh = -(e->xmotion.y_root - start_y);
lockcorner = OB_CORNER_BOTTOMLEFT;
- } else if (corner == prop_atoms.net_wm_moveresize_size_right) {
+ } else if (corner == prop_atoms.net_wm_moveresize_size_right) {
dw = (e->xmotion.x_root - start_x);
dh = 0;
lockcorner = OB_CORNER_BOTTOMLEFT;