+
+ dty = dy - dtty;
+ dby = dbby - (dy + snap_h);
+
+ if ( (dy > 0 && dty < snap_distance) ||
+ (dy < 0 && dty > -snap_distance) )
+ dy = dtty;
+ else if ( (dby > 0 && dby < snap_distance) ||
+ (dby < 0 && dby > -snap_distance) )
+ dy = dbby - snap_h;
+ }
+
+ if (screen->opaqueMove()) {
+ configure(dx, dy, frame.width, frame.height);
+ } else {
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+
+ frame.move_x = dx;
+ frame.move_y = dy;
+
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+ }
+
+ screen->showPosition(dx, dy);
+}
+
+
+void OpenboxWindow::endMove() {
+ ASSERT(flags.moving);
+
+ flags.moving = False;
+
+ openbox.maskWindowEvents(0, (OpenboxWindow *) 0);
+ if (!screen->opaqueMove()) {
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y, frame.resize_w - 1,
+ frame.resize_h - 1);
+
+ configure(frame.move_x, frame.move_y, frame.width, frame.height);
+ openbox.ungrab();
+ } else {
+ configure(frame.x, frame.y, frame.width, frame.height);
+ }
+ screen->hideGeometry();
+ XUngrabPointer(display, CurrentTime);
+}
+
+
+void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
+ if (flags.moving)
+ doMove(me->x_root, me->y_root);
+ else if (!flags.resizing && (me->state & Button1Mask) && functions.move &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window))
+ startMove(me->x_root, me->y_root);
+ else if (functions.resize &&