aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--util/fbrun/main.cc48
1 files changed, 44 insertions, 4 deletions
diff --git a/util/fbrun/main.cc b/util/fbrun/main.cc
index f032486..c808628 100644
--- a/util/fbrun/main.cc
+++ b/util/fbrun/main.cc
@@ -26,6 +26,12 @@
26#include "StringUtil.hh" 26#include "StringUtil.hh"
27#include "Color.hh" 27#include "Color.hh"
28 28
29#ifdef XINERAMA
30extern "C" {
31#include <X11/extensions/Xinerama.h>
32}
33#endif // XINERAMA
34
29#include <string> 35#include <string>
30#include <iostream> 36#include <iostream>
31 37
@@ -158,10 +164,44 @@ int main(int argc, char **argv) {
158 &ret_win, &child_win, 164 &ret_win, &child_win,
159 &x, &y, &wx, &wy, &mask)) { 165 &x, &y, &wx, &wy, &mask)) {
160 166
161 if ( x - (fbrun.width()/2) > 0 ) 167 int root_x = 0;
162 x-= fbrun.width()/2; 168 int root_y = 0;
163 if ( y - (fbrun.height()/2) > 0 ) 169 unsigned int root_w = WidthOfScreen(DefaultScreenOfDisplay(dpy));
164 y-= fbrun.height()/2; 170 unsigned int root_h = HeightOfScreen(DefaultScreenOfDisplay(dpy));
171#ifdef XINERAMA
172 if(XineramaIsActive(dpy)) {
173 XineramaScreenInfo* screen_info = 0;
174 int number = 0;
175 screen_info = XineramaQueryScreens(dpy, &number);
176 if (screen_info) {
177 for(int i= 0; i < number; i++) {
178 if (x >= screen_info[i].x_org &&
179 x < screen_info[i].x_org + screen_info[i].width &&
180 y >= screen_info[i].y_org &&
181 y < screen_info[i].y_org + screen_info[i].height) {
182 root_x = screen_info[i].x_org;
183 root_y = screen_info[i].y_org;
184 root_w = screen_info[i].width;
185 root_h = screen_info[i].height;
186 break;
187 }
188 }
189
190 XFree(screen_info);
191 }
192 }
193#endif // XINERAMA
194 x-= fbrun.width()/2;
195 y-= fbrun.height()/2;
196
197 if (x < root_x)
198 x = root_x;
199 if (x + fbrun.width() > root_x + root_w)
200 x = root_x + root_w - fbrun.width();
201 if (y < root_y)
202 y = root_y;
203 if (y + fbrun.height() > root_y + root_h)
204 y = root_y + root_h - fbrun.height();
165 } 205 }
166 } 206 }
167 207