moved the 'moving window' logic into separate functions "startMove" "doMove" and "endMove"

This commit is contained in:
Dana Jansens 2002-04-28 11:26:55 +00:00
parent ad7f61121c
commit 830e53f25c
2 changed files with 200 additions and 176 deletions

View file

@ -2483,8 +2483,6 @@ void OpenboxWindow::buttonPressEvent(XButtonEvent *be) {
// alt + left/right click begins interactively moving/resizing the window // alt + left/right click begins interactively moving/resizing the window
// when the mouse is moved // when the mouse is moved
if (be->state == Mod1Mask && (be->button == 1 || be->button == 3)) { 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 (be->button == 3) {
if (screen->getWindowZones() == 4 && if (screen->getWindowZones() == 4 &&
be->y < (signed) frame.height / 2) { be->y < (signed) frame.height / 2) {
@ -2699,21 +2697,7 @@ void OpenboxWindow::buttonReleaseEvent(XButtonEvent *re) {
// when the window is being interactively moved, a button release stops the // when the window is being interactively moved, a button release stops the
// move where it is // move where it is
if (flags.moving) { if (flags.moving) {
flags.moving = False; endMove();
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);
// when the window is being interactively resized, a button release stops the // when the window is being interactively resized, a button release stops the
// resizing // resizing
} else if (flags.resizing) { } else if (flags.resizing) {
@ -2745,12 +2729,10 @@ void OpenboxWindow::buttonReleaseEvent(XButtonEvent *re) {
} }
void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) { void OpenboxWindow::startMove(int x, int y) {
if (!flags.resizing && (me->state & Button1Mask) && functions.move && ASSERT(!flags.moving);
(frame.title == me->window || frame.label == me->window ||
frame.handle == me->window || frame.window == me->window)) { XGrabPointer(display, frame.window, False, Button1MotionMask |
if (! flags.moving) {
XGrabPointer(display, me->window, False, Button1MotionMask |
ButtonReleaseMask, GrabModeAsync, GrabModeAsync, ButtonReleaseMask, GrabModeAsync, GrabModeAsync,
None, openbox.getMoveCursor(), CurrentTime); None, openbox.getMoveCursor(), CurrentTime);
@ -2776,8 +2758,15 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
frame.move_x, frame.move_y, frame.move_x, frame.move_y,
frame.resize_w - 1, frame.resize_h - 1); frame.resize_w - 1, frame.resize_h - 1);
} }
} else { frame.grab_x = x - frame.x - frame.border_w;
int dx = me->x_root - frame.grab_x, dy = me->y_root - frame.grab_y; frame.grab_y = y - frame.y - frame.border_w;
}
void OpenboxWindow::doMove(int x, int y) {
ASSERT(flags.moving);
int dx = x - frame.grab_x, dy = y - frame.grab_y;
dx -= frame.border_w; dx -= frame.border_w;
dy -= frame.border_w; dy -= frame.border_w;
@ -2839,7 +2828,38 @@ void OpenboxWindow::motionNotifyEvent(XMotionEvent *me) {
} }
screen->showPosition(dx, dy); 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 && } else if (functions.resize &&
(((me->state & Button1Mask) && (me->window == frame.right_grip || (((me->state & Button1Mask) && (me->window == frame.right_grip ||
me->window == frame.left_grip)) || me->window == frame.left_grip)) ||

View file

@ -203,93 +203,94 @@ private:
} frame; } frame;
protected: protected:
Bool getState(void); Bool getState();
Window createToplevelWindow(int x, int y, unsigned int width, Window createToplevelWindow(int x, int y, unsigned int width,
unsigned int height, unsigned int borderwidth); unsigned int height, unsigned int borderwidth);
Window createChildWindow(Window parent, Cursor = None); Window createChildWindow(Window parent, Cursor = None);
void getWMName(void); void getWMName();
void getWMIconName(void); void getWMIconName();
void getWMNormalHints(void); void getWMNormalHints();
void getWMProtocols(void); void getWMProtocols();
void getWMHints(void); void getWMHints();
void getMWMHints(void); void getMWMHints();
void getOpenboxHints(void); void getOpenboxHints();
void setNetWMAttributes(void); void setNetWMAttributes();
void associateClientWindow(void); void associateClientWindow();
void decorate(void); void decorate();
void decorateLabel(void); void decorateLabel();
void positionButtons(Bool redecorate_label = False); void positionButtons(Bool redecorate_label = False);
void positionWindows(void); void positionWindows();
void createCloseButton(void); void createCloseButton();
void createIconifyButton(void); void createIconifyButton();
void createMaximizeButton(void); void createMaximizeButton();
void redrawLabel(void); void redrawLabel();
void redrawAllButtons(void); void redrawAllButtons();
void redrawCloseButton(Bool); void redrawCloseButton(Bool);
void redrawIconifyButton(Bool); void redrawIconifyButton(Bool);
void redrawMaximizeButton(Bool); void redrawMaximizeButton(Bool);
void restoreGravity(void); void restoreGravity();
void setGravityOffsets(void); void setGravityOffsets();
void setState(unsigned long); void setState(unsigned long);
void upsize(void); void upsize();
void downsize(void); void downsize();
void right_fixsize(int *gx = 0, int *gy = 0); void right_fixsize(int *gx = 0, int *gy = 0);
void left_fixsize(int *gx = 0, int *gy = 0); void left_fixsize(int *gx = 0, int *gy = 0);
void doMove(int x, int y);
public: public:
OpenboxWindow(Openbox &b, Window w, BScreen *s = (BScreen *) 0); OpenboxWindow(Openbox &b, Window w, BScreen *s = (BScreen *) 0);
virtual ~OpenboxWindow(void); virtual ~OpenboxWindow();
inline Bool isTransient(void) const { return flags.transient; } inline Bool isTransient() const { return flags.transient; }
inline Bool isFocused(void) const { return flags.focused; } inline Bool isFocused() const { return flags.focused; }
inline Bool isVisible(void) const { return flags.visible; } inline Bool isVisible() const { return flags.visible; }
inline Bool isIconic(void) const { return flags.iconic; } inline Bool isIconic() const { return flags.iconic; }
inline Bool isShaded(void) const { return flags.shaded; } inline Bool isShaded() const { return flags.shaded; }
inline Bool isMaximized(void) const { return flags.maximized; } inline Bool isMaximized() const { return flags.maximized; }
inline Bool isMaximizedFull(void) const { return flags.maximized == 1; } inline Bool isMaximizedFull() const { return flags.maximized == 1; }
inline Bool isStuck(void) const { return flags.stuck; } inline Bool isStuck() const { return flags.stuck; }
inline Bool isIconifiable(void) const { return functions.iconify; } inline Bool isIconifiable() const { return functions.iconify; }
inline Bool isMaximizable(void) const { return functions.maximize; } inline Bool isMaximizable() const { return functions.maximize; }
inline Bool isResizable(void) const { return functions.resize; } inline Bool isResizable() const { return functions.resize; }
inline Bool isClosable(void) const { return functions.close; } inline Bool isClosable() const { return functions.close; }
inline Bool hasTitlebar(void) const { return decorations.titlebar; } inline Bool hasTitlebar() const { return decorations.titlebar; }
inline Bool hasTransient(void) const inline Bool hasTransient() const
{ return ((client.transient) ? True : False); } { return ((client.transient) ? True : False); }
inline OpenboxWindow *getTransient(void) { return client.transient; } inline OpenboxWindow *getTransient() { return client.transient; }
inline OpenboxWindow *getTransientFor(void) { return client.transient_for; } 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 &getFrameWindow() const { return frame.window; }
inline const Window &getClientWindow(void) const { return client.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 **getTitle() { return &client.title; }
inline char **getIconTitle(void) { return &client.icon_title; } inline char **getIconTitle() { return &client.icon_title; }
//inline const int &getXFrame(void) const { return frame.x; } //inline const int &getXFrame() const { return frame.x; }
//inline const int &getYFrame(void) const { return frame.y; } //inline const int &getYFrame() const { return frame.y; }
//inline const int &getXClient(void) const { return client.x; } //inline const int &getXClient() const { return client.x; }
//inline const int &getYClient(void) const { return client.y; } //inline const int &getYClient() const { return client.y; }
inline const int &getWorkspaceNumber(void) const { return workspace_number; } inline const int &getWorkspaceNumber() const { return workspace_number; }
inline const int &getWindowNumber(void) const { return window_number; } inline const int &getWindowNumber() const { return window_number; }
//inline const unsigned int &getWidth(void) const { return frame.width; } //inline const unsigned int &getWidth() const { return frame.width; }
//inline const unsigned int &getHeight(void) const { //inline const unsigned int &getHeight() const {
// if (!flags.shaded) // if (!flags.shaded)
// return frame.height; // return frame.height;
// else // else
// return frame.title_h; // return frame.title_h;
//} //}
//inline const unsigned int &getClientHeight(void) const //inline const unsigned int &getClientHeight() const
//{ return client.height; } //{ return client.height; }
//inline const unsigned int &getClientWidth(void) const //inline const unsigned int &getClientWidth() const
//{ return client.width; } //{ return client.width; }
inline const unsigned int &getTitleHeight(void) const inline const unsigned int &getTitleHeight() const
{ return frame.title_h; } { return frame.title_h; }
//inline const Point origin() const { //inline const Point origin() const {
@ -314,25 +315,28 @@ public:
inline void setWindowNumber(int n) { window_number = n; } inline void setWindowNumber(int n) { window_number = n; }
Bool validateClient(void); Bool validateClient();
Bool setInputFocus(void); Bool setInputFocus();
void setFocusFlag(Bool); void setFocusFlag(Bool);
void iconify(void); void iconify();
void deiconify(Bool reassoc = True, Bool raise = True); void deiconify(Bool reassoc = True, Bool raise = True);
void close(void); void close();
void withdraw(void); void withdraw();
void maximize(unsigned int button); void maximize(unsigned int button);
void shade(void); void shade();
void stick(void); void stick();
void unstick(void); void unstick();
void reconfigure(void); void reconfigure();
void installColormap(Bool); void installColormap(Bool);
void restore(void); void restore();
void configure(int dx, int dy, unsigned int dw, unsigned int dh); void configure(int dx, int dy, unsigned int dw, unsigned int dh);
void setWorkspace(int n); void setWorkspace(int n);
void changeOpenboxHints(OpenboxHints *); void changeOpenboxHints(OpenboxHints *);
void restoreAttributes(void); void restoreAttributes();
void startMove(int x, int y);
void endMove();
void buttonPressEvent(XButtonEvent *); void buttonPressEvent(XButtonEvent *);
void buttonReleaseEvent(XButtonEvent *); void buttonReleaseEvent(XButtonEvent *);
@ -349,7 +353,7 @@ public:
void shapeEvent(XShapeEvent *); void shapeEvent(XShapeEvent *);
#endif // SHAPE #endif // SHAPE
virtual void timeout(void); virtual void timeout();
}; };