diff options
-rw-r--r-- | src/Screen.cc | 37 |
1 files changed, 33 insertions, 4 deletions
diff --git a/src/Screen.cc b/src/Screen.cc index e3df8a0..17615fe 100644 --- a/src/Screen.cc +++ b/src/Screen.cc | |||
@@ -175,6 +175,10 @@ int anotherWMRunning(Display *display, XErrorEvent *) { | |||
175 | } | 175 | } |
176 | 176 | ||
177 | 177 | ||
178 | int calcSquareDistance(int x1, int y1, int x2, int y2) { | ||
179 | return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); | ||
180 | } | ||
181 | |||
178 | class TabPlacementMenuItem: public FbTk::RadioMenuItem { | 182 | class TabPlacementMenuItem: public FbTk::RadioMenuItem { |
179 | public: | 183 | public: |
180 | TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen, | 184 | TabPlacementMenuItem(FbTk::FbString & label, BScreen &screen, |
@@ -2022,11 +2026,36 @@ int BScreen::getHead(int x, int y) const { | |||
2022 | return 0; | 2026 | return 0; |
2023 | } | 2027 | } |
2024 | 2028 | ||
2029 | |||
2025 | int BScreen::getHead(const FbTk::FbWindow &win) const { | 2030 | int BScreen::getHead(const FbTk::FbWindow &win) const { |
2026 | if (hasXinerama()) | 2031 | |
2027 | return getHead(win.x() + win.width()/2, win.y() + win.height()/2); | 2032 | int head = 0; // whole screen |
2028 | else | 2033 | |
2029 | return 0; | 2034 | #if XINERAMA |
2035 | if (hasXinerama()) { | ||
2036 | |||
2037 | // cast needed to prevent win.x() become "unsigned int" which is bad | ||
2038 | // since it might become negative | ||
2039 | int cx = win.x() + static_cast<int>(win.width() / 2); | ||
2040 | int cy = win.y() + static_cast<int>(win.height() / 2); | ||
2041 | |||
2042 | long dist = -1; | ||
2043 | |||
2044 | int i; | ||
2045 | for (i = 0; i < m_xinerama_num_heads; ++i) { | ||
2046 | |||
2047 | XineramaHeadInfo& hi = m_xinerama_headinfo[i]; | ||
2048 | int d = calcSquareDistance(cx, cy, hi.x + (hi.width / 2), hi.y + (hi.height / 2)); | ||
2049 | |||
2050 | if (dist == -1 || d < dist) { // found a closer head | ||
2051 | head = i + 1; | ||
2052 | dist = d; | ||
2053 | } | ||
2054 | } | ||
2055 | } | ||
2056 | #endif | ||
2057 | |||
2058 | return head; | ||
2030 | } | 2059 | } |
2031 | 2060 | ||
2032 | 2061 | ||