#include "prop.h"
#include "client.h"
#include "frame.h"
-#include "dispatch.h"
#include "openbox.h"
#include "resist.h"
#include "popup.h"
+#include "moveresize.h"
#include "config.h"
#include "render/render.h"
#include "render/theme.h"
#define POPUP_X (10)
#define POPUP_Y (10)
+static void client_dest(ObClient *c)
+{
+ if (moveresize_client == c)
+ moveresize_end(TRUE);
+}
+
void moveresize_startup()
{
XSetWindowAttributes attrib;
popup_size_to_string(popup, "W: 0000 W: 0000");
attrib.save_under = True;
+
+ client_add_destructor(client_dest);
}
void moveresize_shutdown()
{
+ client_remove_destructor(client_dest);
+
popup_free(popup);
popup = NULL;
}
moveresize_client = c;
start_cx = c->frame->area.x;
start_cy = c->frame->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. and this
+ is one large mother fucking comment. */
+ start_cw = c->area.width + (c->size_inc.width + 1) / 2;
+ start_ch = c->area.height + (c->size_inc.height + 1) / 2;
start_x = x;
start_y = y;
corner = cnr;
popup_hide(popup);
if (moving) {
- client_configure(moveresize_client, OB_CORNER_TOPLEFT,
- (cancel ? start_cx : cur_x),
- (cancel ? start_cy : cur_y),
- start_cw, start_ch, TRUE, TRUE);
+ client_move(moveresize_client,
+ (cancel ? start_cx : cur_x),
+ (cancel ? start_cy : cur_y));
} else {
client_configure(moveresize_client, lockcorner,
moveresize_client->area.x,
Rect *a;
if (resist)
- resist_move(moveresize_client, &cur_x, &cur_y);
-
- dispatch_move(moveresize_client, &cur_x, &cur_y);
+ resist_move_windows(moveresize_client, &cur_x, &cur_y);
+ resist_move_monitors(moveresize_client, &cur_x, &cur_y);
/* get where the client should be */
frame_frame_gravity(moveresize_client->frame, &cur_x, &cur_y);
static void do_resize(gboolean resist)
{
- /* dispatch_resize needs the frame size */
+ /* resist_size_* needs the frame size */
cur_x += moveresize_client->frame->size.left +
moveresize_client->frame->size.right;
cur_y += moveresize_client->frame->size.top +
moveresize_client->frame->size.bottom;
if (resist)
- resist_size(moveresize_client, &cur_x, &cur_y, lockcorner);
-
- dispatch_resize(moveresize_client, &cur_x, &cur_y, lockcorner);
+ resist_size_windows(moveresize_client, &cur_x, &cur_y, lockcorner);
+ resist_size_monitors(moveresize_client, &cur_x, &cur_y, lockcorner);
cur_x -= moveresize_client->frame->size.left +
moveresize_client->frame->size.right;