// alt + left/right click begins interactively moving/resizing the window
// when the mouse is moved
if (be->state == Mod1Mask && (be->button == 1 || be->button == 3)) {
- frame.grab_x = be->x_root - frame.x - frame.border_w;
- frame.grab_y = be->y_root - frame.y - frame.border_w;
if (be->button == 3) {
if (screen->getWindowZones() == 4 &&
be->y < (signed) frame.height / 2) {
// when the window is being interactively moved, a button release stops the
// move where it is
if (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);
+ endMove();
// when the window is being interactively resized, a button release stops the
// resizing
} else if (flags.resizing) {
}
-void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
- if (!flags.resizing && (me->state & Button1Mask) && functions.move &&
- (frame.title == me->window || frame.label == me->window ||
- frame.handle == me->window || frame.window == me->window)) {
- if (! flags.moving) {
- XGrabPointer(display, me->window, False, Button1MotionMask |
- ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
- None, openbox.getMoveCursor(), CurrentTime);
+void OpenboxWindow::startMove(int x, int y) {
+ ASSERT(!flags.moving);
- if (windowmenu && windowmenu->isVisible())
- windowmenu->hide();
+ XGrabPointer(display, frame.window, False, Button1MotionMask |
+ ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
+ None, openbox.getMoveCursor(), CurrentTime);
- flags.moving = True;
+ if (windowmenu && windowmenu->isVisible())
+ windowmenu->hide();
- openbox.maskWindowEvents(client.window, this);
+ flags.moving = True;
- if (! screen->opaqueMove()) {
- openbox.grab();
+ openbox.maskWindowEvents(client.window, this);
- frame.move_x = frame.x;
- frame.move_y = frame.y;
- frame.resize_w = frame.width + (frame.border_w * 2);
- frame.resize_h = ((flags.shaded) ? frame.title_h : frame.height) +
- (frame.border_w * 2);
+ if (! screen->opaqueMove()) {
+ openbox.grab();
- screen->showPosition(frame.x, frame.y);
+ frame.move_x = frame.x;
+ frame.move_y = frame.y;
+ frame.resize_w = frame.width + (frame.border_w * 2);
+ frame.resize_h = ((flags.shaded) ? frame.title_h : frame.height) +
+ (frame.border_w * 2);
- XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
- frame.move_x, frame.move_y,
- frame.resize_w - 1, frame.resize_h - 1);
- }
- } else {
- int dx = me->x_root - frame.grab_x, dy = me->y_root - frame.grab_y;
-
- dx -= frame.border_w;
- dy -= frame.border_w;
-
- int snap_distance = screen->edgeSnapThreshold();
- // width/height of the snapping window
- unsigned int snap_w = frame.width + (frame.border_w * 2);
- unsigned int snap_h = area().h() + (frame.border_w * 2);
- if (snap_distance) {
- int drx = screen->size().w() - (dx + snap_w);
-
- if (dx < drx && (dx > 0 && dx < snap_distance) ||
- (dx < 0 && dx > -snap_distance) )
- dx = 0;
- else if ( (drx > 0 && drx < snap_distance) ||
- (drx < 0 && drx > -snap_distance) )
- dx = screen->size().w() - snap_w;
-
- int dtty, dbby, dty, dby;
- switch (screen->getToolbar()->placement()) {
- case Toolbar::TopLeft:
- case Toolbar::TopCenter:
- case Toolbar::TopRight:
- dtty = screen->getToolbar()->getExposedHeight() +
- frame.border_w;
- dbby = screen->size().h();
- break;
-
- default:
- dtty = 0;
- dbby = screen->getToolbar()->area().y();
- break;
- }
+ screen->showPosition(frame.x, frame.y);
- dty = dy - dtty;
- dby = dbby - (dy + snap_h);
+ XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
+ frame.move_x, frame.move_y,
+ frame.resize_w - 1, frame.resize_h - 1);
+ }
+ frame.grab_x = x - frame.x - frame.border_w;
+ frame.grab_y = y - frame.y - frame.border_w;
+}
- 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);
+void OpenboxWindow::doMove(int x, int y) {
+ ASSERT(flags.moving);
- frame.move_x = dx;
- frame.move_y = dy;
+ int dx = x - frame.grab_x, dy = y - frame.grab_y;
- XDrawRectangle(display, screen->getRootWindow(), screen->getOpGC(),
- frame.move_x, frame.move_y, frame.resize_w - 1,
- frame.resize_h - 1);
- }
+ dx -= frame.border_w;
+ dy -= frame.border_w;
+
+ int snap_distance = screen->edgeSnapThreshold();
+ // width/height of the snapping window
+ unsigned int snap_w = frame.width + (frame.border_w * 2);
+ unsigned int snap_h = area().h() + (frame.border_w * 2);
+ if (snap_distance) {
+ int drx = screen->size().w() - (dx + snap_w);
- screen->showPosition(dx, dy);
+ if (dx < drx && (dx > 0 && dx < snap_distance) ||
+ (dx < 0 && dx > -snap_distance) )
+ dx = 0;
+ else if ( (drx > 0 && drx < snap_distance) ||
+ (drx < 0 && drx > -snap_distance) )
+ dx = screen->size().w() - snap_w;
+
+ int dtty, dbby, dty, dby;
+ switch (screen->getToolbar()->placement()) {
+ case Toolbar::TopLeft:
+ case Toolbar::TopCenter:
+ case Toolbar::TopRight:
+ dtty = screen->getToolbar()->getExposedHeight() +
+ frame.border_w;
+ dbby = screen->size().h();
+ break;
+
+ default:
+ dtty = 0;
+ dbby = screen->getToolbar()->area().y();
+ break;
}
+
+ 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.resizing && (me->state & Button1Mask) && functions.move &&
+ (frame.title == me->window || frame.label == me->window ||
+ frame.handle == me->window || frame.window == me->window)) {
+ if (!flags.moving)
+ startMove(me->x_root, me->y_root);
+ else
+ doMove(me->x_root, me->y_root);
} else if (functions.resize &&
(((me->state & Button1Mask) && (me->window == frame.right_grip ||
me->window == frame.left_grip)) ||
} frame;
protected:
- Bool getState(void);
+ Bool getState();
Window createToplevelWindow(int x, int y, unsigned int width,
unsigned int height, unsigned int borderwidth);
Window createChildWindow(Window parent, Cursor = None);
- void getWMName(void);
- void getWMIconName(void);
- void getWMNormalHints(void);
- void getWMProtocols(void);
- void getWMHints(void);
- void getMWMHints(void);
- void getOpenboxHints(void);
- void setNetWMAttributes(void);
- void associateClientWindow(void);
- void decorate(void);
- void decorateLabel(void);
+ void getWMName();
+ void getWMIconName();
+ void getWMNormalHints();
+ void getWMProtocols();
+ void getWMHints();
+ void getMWMHints();
+ void getOpenboxHints();
+ void setNetWMAttributes();
+ void associateClientWindow();
+ void decorate();
+ void decorateLabel();
void positionButtons(Bool redecorate_label = False);
- void positionWindows(void);
- void createCloseButton(void);
- void createIconifyButton(void);
- void createMaximizeButton(void);
- void redrawLabel(void);
- void redrawAllButtons(void);
+ void positionWindows();
+ void createCloseButton();
+ void createIconifyButton();
+ void createMaximizeButton();
+ void redrawLabel();
+ void redrawAllButtons();
void redrawCloseButton(Bool);
void redrawIconifyButton(Bool);
void redrawMaximizeButton(Bool);
- void restoreGravity(void);
- void setGravityOffsets(void);
+ void restoreGravity();
+ void setGravityOffsets();
void setState(unsigned long);
- void upsize(void);
- void downsize(void);
+ void upsize();
+ void downsize();
void right_fixsize(int *gx = 0, int *gy = 0);
void left_fixsize(int *gx = 0, int *gy = 0);
+ void doMove(int x, int y);
public:
OpenboxWindow(Openbox &b, Window w, BScreen *s = (BScreen *) 0);
- virtual ~OpenboxWindow(void);
-
- inline Bool isTransient(void) const { return flags.transient; }
- inline Bool isFocused(void) const { return flags.focused; }
- inline Bool isVisible(void) const { return flags.visible; }
- inline Bool isIconic(void) const { return flags.iconic; }
- inline Bool isShaded(void) const { return flags.shaded; }
- inline Bool isMaximized(void) const { return flags.maximized; }
- inline Bool isMaximizedFull(void) const { return flags.maximized == 1; }
- inline Bool isStuck(void) const { return flags.stuck; }
- inline Bool isIconifiable(void) const { return functions.iconify; }
- inline Bool isMaximizable(void) const { return functions.maximize; }
- inline Bool isResizable(void) const { return functions.resize; }
- inline Bool isClosable(void) const { return functions.close; }
-
- inline Bool hasTitlebar(void) const { return decorations.titlebar; }
- inline Bool hasTransient(void) const
+ virtual ~OpenboxWindow();
+
+ inline Bool isTransient() const { return flags.transient; }
+ inline Bool isFocused() const { return flags.focused; }
+ inline Bool isVisible() const { return flags.visible; }
+ inline Bool isIconic() const { return flags.iconic; }
+ inline Bool isShaded() const { return flags.shaded; }
+ inline Bool isMaximized() const { return flags.maximized; }
+ inline Bool isMaximizedFull() const { return flags.maximized == 1; }
+ inline Bool isStuck() const { return flags.stuck; }
+ inline Bool isIconifiable() const { return functions.iconify; }
+ inline Bool isMaximizable() const { return functions.maximize; }
+ inline Bool isResizable() const { return functions.resize; }
+ inline Bool isClosable() const { return functions.close; }
+
+ inline Bool hasTitlebar() const { return decorations.titlebar; }
+ inline Bool hasTransient() const
{ return ((client.transient) ? True : False); }
- inline OpenboxWindow *getTransient(void) { return client.transient; }
- inline OpenboxWindow *getTransientFor(void) { return client.transient_for; }
+ inline OpenboxWindow *getTransient() { return client.transient; }
+ inline OpenboxWindow *getTransientFor() { return client.transient_for; }
- inline BScreen *getScreen(void) { return screen; }
+ inline BScreen *getScreen() { return screen; }
- inline const Window &getFrameWindow(void) const { return frame.window; }
- inline const Window &getClientWindow(void) const { return client.window; }
+ inline const Window &getFrameWindow() const { return frame.window; }
+ inline const Window &getClientWindow() const { return client.window; }
- inline Windowmenu * getWindowmenu(void) { return windowmenu; }
+ inline Windowmenu * getWindowmenu() { return windowmenu; }
- inline char **getTitle(void) { return &client.title; }
- inline char **getIconTitle(void) { return &client.icon_title; }
- //inline const int &getXFrame(void) const { return frame.x; }
- //inline const int &getYFrame(void) const { return frame.y; }
- //inline const int &getXClient(void) const { return client.x; }
- //inline const int &getYClient(void) const { return client.y; }
- inline const int &getWorkspaceNumber(void) const { return workspace_number; }
- inline const int &getWindowNumber(void) const { return window_number; }
+ inline char **getTitle() { return &client.title; }
+ inline char **getIconTitle() { return &client.icon_title; }
+ //inline const int &getXFrame() const { return frame.x; }
+ //inline const int &getYFrame() const { return frame.y; }
+ //inline const int &getXClient() const { return client.x; }
+ //inline const int &getYClient() const { return client.y; }
+ inline const int &getWorkspaceNumber() const { return workspace_number; }
+ inline const int &getWindowNumber() const { return window_number; }
- //inline const unsigned int &getWidth(void) const { return frame.width; }
- //inline const unsigned int &getHeight(void) const {
+ //inline const unsigned int &getWidth() const { return frame.width; }
+ //inline const unsigned int &getHeight() const {
// if (!flags.shaded)
// return frame.height;
// else
// return frame.title_h;
//}
- //inline const unsigned int &getClientHeight(void) const
+ //inline const unsigned int &getClientHeight() const
//{ return client.height; }
- //inline const unsigned int &getClientWidth(void) const
+ //inline const unsigned int &getClientWidth() const
//{ return client.width; }
- inline const unsigned int &getTitleHeight(void) const
+ inline const unsigned int &getTitleHeight() const
{ return frame.title_h; }
//inline const Point origin() const {
inline void setWindowNumber(int n) { window_number = n; }
- Bool validateClient(void);
- Bool setInputFocus(void);
+ Bool validateClient();
+ Bool setInputFocus();
void setFocusFlag(Bool);
- void iconify(void);
+ void iconify();
void deiconify(Bool reassoc = True, Bool raise = True);
- void close(void);
- void withdraw(void);
+ void close();
+ void withdraw();
void maximize(unsigned int button);
- void shade(void);
- void stick(void);
- void unstick(void);
- void reconfigure(void);
+ void shade();
+ void stick();
+ void unstick();
+ void reconfigure();
void installColormap(Bool);
- void restore(void);
+ void restore();
void configure(int dx, int dy, unsigned int dw, unsigned int dh);
void setWorkspace(int n);
void changeOpenboxHints(OpenboxHints *);
- void restoreAttributes(void);
+ void restoreAttributes();
+ void startMove(int x, int y);
+ void endMove();
+
void buttonPressEvent(XButtonEvent *);
void buttonReleaseEvent(XButtonEvent *);
void motionNotifyEvent(XMotionEvent *);
void shapeEvent(XShapeEvent *);
#endif // SHAPE
- virtual void timeout(void);
+ virtual void timeout();
};