From 9f519ec0fcb7cd0dec61a4c31d246800f9a73cb3 Mon Sep 17 00:00:00 2001 From: Henrik Kinnunen <fluxgen@fluxbox.org> Date: Sun, 14 Sep 2008 20:06:28 +0200 Subject: some minor code cleaning. --- src/FbWinFrame.cc | 7 +++++++ src/FbWinFrame.hh | 3 +++ src/RectangleUtil.hh | 30 +++++++++++++++++++++++++++++ src/Window.cc | 54 +++++++++++++++++++++------------------------------- 4 files changed, 62 insertions(+), 32 deletions(-) create mode 100644 src/RectangleUtil.hh diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index 5b91218..fc35ae1 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc @@ -1717,3 +1717,10 @@ void FbWinFrame::displaySize(unsigned int width, unsigned int height) const { width, height - titlebarHeight() - handleHeight()); m_screen.showGeometry(i, j); } + +bool FbWinFrame::insideTitlebar(Window win) const { + return + gripLeft().window() != win && + gripRight().window() != win && + window().window() != win; +} diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh index fcbe11e..ff9c19e 100644 --- a/src/FbWinFrame.hh +++ b/src/FbWinFrame.hh @@ -236,6 +236,9 @@ public: const FbTk::Subject &frameExtentSig() const { return m_frame_extent_sig; } FbTk::Subject &frameExtentSig() { return m_frame_extent_sig; } + /// @returns true if the window is inside titlebar, + /// assuming window is an event window that was generated for this frame. + bool insideTitlebar(Window win) const; //@} diff --git a/src/RectangleUtil.hh b/src/RectangleUtil.hh new file mode 100644 index 0000000..88c3a33 --- /dev/null +++ b/src/RectangleUtil.hh @@ -0,0 +1,30 @@ +#ifndef RECTANGLEUTIL_HH +#define RECTANGLEUTIL_HH + +namespace RectangleUtil { + + +/* + * Determines if a point is inside a rectangle-like objects border. + * @param rect A rectangle-like object that has accessors for x, y, width, and + * height. + * @param x + * @param y + * @param border_width The size of the border. + * @returns true if point is inside the rectangle-like object. +*/ +template <typename RectangleLike> +bool insideBorder(const RectangleLike& rect, + int x, int y, + int border_width) { + return + x >= rect.x() + border_width && + x < rect.x() + (int)rect.width() + border_width && + y >= rect.y() + border_width && + y < rect.y() + (int)rect.height() + border_width; +} + +} // namespace RectangleUtil + + +#endif // RECTANGLEUTIL_HH diff --git a/src/Window.cc b/src/Window.cc index 16334c6..5d50fcf 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -41,6 +41,7 @@ #include "FocusControl.hh" #include "IconButton.hh" #include "ScreenPlacement.hh" +#include "RectangleUtil.hh" #include "FbTk/StringUtil.hh" #include "FbTk/Compose.hh" @@ -2362,10 +2363,9 @@ void FluxboxWindow::buttonPressEvent(XButtonEvent &be) { m_last_button_x = be.x_root; m_last_button_y = be.y_root; - bool onTitlebar = frame().gripLeft().window() != be.window && - frame().gripRight().window() != be.window && - frame().handle().window() != be.window && - frame().window() != be.window; + bool onTitlebar = + frame().insideTitlebar( be.window ) && + frame().handle().window() != be.window; if (onTitlebar && be.button == 1) raise(); @@ -2422,41 +2422,31 @@ void FluxboxWindow::motionNotifyEvent(XMotionEvent &me) { me.window = frame().window().window(); } - bool inside_titlebar = frame().gripLeft().window() != me.window && - frame().gripRight().window() != me.window && - frame().window() != me.window; + bool inside_titlebar = frame().insideTitlebar( me.window ); if (Fluxbox::instance()->getIgnoreBorder() && m_attaching_tab == 0 && !(isMoving() || isResizing())) { + + using RectangleUtil::insideBorder; + int borderw = frame().window().borderWidth(); //!! TODO(tabs): the below test ought to be in FbWinFrame // if mouse is currently on the window border, ignore it - if ((me.x_root < (frame().x() + borderw) || - me.y_root < (frame().y() + borderw) || - me.x_root >= (frame().x() + (int)frame().width() + borderw) || - me.y_root >= (frame().y() + (int)frame().height() + borderw)) - && (!frame().externalTabMode() || - (me.x_root < (frame().tabcontainer().x() + borderw) || - me.y_root < (frame().tabcontainer().y() + borderw) || - me.x_root >= (frame().tabcontainer().x() + - (int)frame().tabcontainer().width() + borderw) || - me.y_root >= (frame().tabcontainer().y() + - (int)frame().tabcontainer().height() + borderw))) - // or if mouse was on border when it was last clicked - || (m_last_button_x < (frame().x() + borderw) || - m_last_button_y < (frame().y() + borderw) || - m_last_button_x >= (frame().x() + - (int)frame().width() + borderw) || - m_last_button_y >= (frame().y() + - (int)frame().height() + borderw)) - && (!frame().externalTabMode() || - (m_last_button_x < (frame().tabcontainer().x() + borderw) || - m_last_button_y < (frame().tabcontainer().y() + borderw) || - m_last_button_x >= (frame().tabcontainer().x() + - (int)frame().tabcontainer().width() + borderw) || - m_last_button_y >= (frame().tabcontainer().y() + - (int)frame().tabcontainer().height() + borderw)))) + if ( ! insideBorder(frame(), + me.x_root, me.y_root, borderw) && + ( !frame().externalTabMode() || + ! insideBorder(frame().tabcontainer(), + me.x_root, me.y_root, borderw) ) + + || // or if mouse was on border when it was last clicked + + ! insideBorder(frame(), + m_last_button_x, m_last_button_y, borderw) && + ( ! frame().externalTabMode() || + ! insideBorder(frame().tabcontainer(), + m_last_button_x, m_last_button_y, borderw ) ) ) { return; + } } if (moving || ((me.state & Button1Mask) && functions.move && -- cgit v0.11.2