X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fmoveresize.c;h=59c1b1b81118e1f878b5c72dbb8fce81af27d2e9;hb=8eea9dcdb77e004e67c23061eaecce26e8cd4e68;hp=da4d92f97c0aafa6abfafb20b37cf81c0bc66712;hpb=9577bb9a65c4c94815422f20d24b6093419b04da;p=chaz%2Fopenbox diff --git a/openbox/moveresize.c b/openbox/moveresize.c index da4d92f9..59c1b1b8 100644 --- a/openbox/moveresize.c +++ b/openbox/moveresize.c @@ -65,6 +65,9 @@ static ObPopup *popup = NULL; static void do_edge_warp(gint x, gint y); static void cancel_edge_warp(); +#ifdef SYNC +static gboolean sync_timeout_func(gpointer data); +#endif static void client_dest(ObClient *client, gpointer data) { @@ -192,7 +195,7 @@ void moveresize_start(ObClient *c, gint x, gint y, guint b, guint32 cnr) 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 @@ -251,6 +254,8 @@ void moveresize_end(gboolean cancel) XSyncDestroyAlarm(ob_display, moveresize_alarm); moveresize_alarm = None; } + + ob_main_loop_timeout_remove(ob_main_loop, sync_timeout_func); #endif client_configure(moveresize_client, @@ -286,6 +291,7 @@ static void do_move(gboolean keyboard, gint keydist) moveresize_client->frame->area.y); } + static void do_resize() { gint x, y, w, h, lw, lh; @@ -333,6 +339,11 @@ static void do_resize() NoEventMask, &ce); 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, + sync_timeout_func, + NULL, NULL, NULL); } #endif @@ -350,20 +361,30 @@ static void do_resize() moveresize_client->logical_size.height); } +#ifdef SYNC +static gboolean sync_timeout_func(gpointer data) +{ + waiting_for_sync = FALSE; /* we timed out waiting for our sync... */ + do_resize(); /* ...so let any pending resizes through */ + + return FALSE; /* don't repeat */ +} +#endif + 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; @@ -371,6 +392,17 @@ static void calc_resize(gboolean keyboard, gint keydist, gint *dw, gint *dh, 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; } @@ -684,7 +716,7 @@ gboolean moveresize_event(XEvent *e) 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);