From 2da808667301d27110497e036b8cbdec6f65023d Mon Sep 17 00:00:00 2001 From: Mathias Gumz <akira at fluxbox dot org> Date: Thu, 23 May 2013 09:18:37 +0200 Subject: Use shared code, minor code simplification --- src/RectangleUtil.hh | 21 ++++++++++++++------- src/Window.cc | 12 +++++------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/RectangleUtil.hh b/src/RectangleUtil.hh index 9725e63..dfb0082 100644 --- a/src/RectangleUtil.hh +++ b/src/RectangleUtil.hh @@ -3,6 +3,14 @@ namespace RectangleUtil { +inline bool insideRectangle(int x, int y, int width, int height, int px, int py) { + + return + px >= x && + px < (x + width) && + py >= y && + py < (y + height); +} /* * Determines if a point is inside a rectangle-like objects border. @@ -10,18 +18,17 @@ namespace RectangleUtil { * height. * @param x * @param y - * @param border_width The size of the border. + * @param border 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; + int border) { + const int w = static_cast<int>(rect.width()) - border; + const int h = static_cast<int>(rect.height()) - border; + return insideRectangle(rect.x() + border, rect.y() + border, w, h, x, y); } diff --git a/src/Window.cc b/src/Window.cc index 1c9c795..9416978 100644 --- a/src/Window.cc +++ b/src/Window.cc @@ -223,11 +223,8 @@ bool isWindowVisibleOnSomeHeadOrScreen(FluxboxWindow const& w) { if (w.screen().hasXinerama()) { // xinerama available => use head info return (0 != w.screen().getHead(real_x, real_y)); // if visible on some head - } else { // no xinerama available => use screen info - return (real_x >= 0 && real_y >= 0 && - real_x <= (signed) w.screen().width() && - real_y <= (signed) w.screen().height()); // if visible on the screen } + return RectangleUtil::insideRectangle(0, 0, w.screen().width(), w.screen().height(), real_x, real_y); } class SetClientCmd:public FbTk::Command<void> { @@ -464,14 +461,15 @@ void FluxboxWindow::init() { setWindowType(m_client->getWindowType()); + bool is_visible = isWindowVisibleOnSomeHeadOrScreen(*this); + if (fluxbox.isStartup()) m_placed = true; else if (m_client->isTransient() || m_client->normal_hint_flags & (PPosition|USPosition)) { - if (isWindowVisibleOnSomeHeadOrScreen(*this)) - m_placed = true; + m_placed = is_visible; } else { - if (!isWindowVisibleOnSomeHeadOrScreen(*this)) { + if (!is_visible) { int cur = screen().getHead(fbWindow()); move(screen().getHeadX(cur), screen().getHeadY(cur)); m_placed = false; // allow placement strategy to fix position -- cgit v0.11.2