aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfoobar0815 <atalanta.bergamo@gmail.com>2015-03-01 19:04:10 (GMT)
committerMathias Gumz <akira@fluxbox.org>2016-01-09 16:45:23 (GMT)
commit6346368b58e054174075f615a836ff3bd9c9f823 (patch)
tree24036f02a9018e0b930e60d3602f88505d064581
parentfa6a1e5cf129260fd7be7ebf0621ad976538ec64 (diff)
downloadfluxbox-6346368b58e054174075f615a836ff3bd9c9f823.zip
fluxbox-6346368b58e054174075f615a836ff3bd9c9f823.tar.bz2
send ConfigureNotify using root coordinates
-rw-r--r--src/SystemTray.cc28
1 files changed, 27 insertions, 1 deletions
diff --git a/src/SystemTray.cc b/src/SystemTray.cc
index 9811508..c908f3e 100644
--- a/src/SystemTray.cc
+++ b/src/SystemTray.cc
@@ -45,6 +45,30 @@ using std::endl;
45using std::hex; 45using std::hex;
46using std::dec; 46using std::dec;
47 47
48void getScreenCoordinates(Window win, int x, int y, int &screen_x, int &screen_y) {
49 XWindowAttributes attr;
50 if (XGetWindowAttributes(FbTk::App::instance()->display(), win, &attr) == 0) {
51 return;
52 }
53
54 Window child_win; // not used
55 Window parent_win; // not used
56 Window root_win = 0;
57 Window* child_windows; // not used
58 unsigned int num_child_windows; // not used
59 XQueryTree(FbTk::App::instance()->display(), win,
60 &root_win,
61 &parent_win,
62 &child_windows, &num_child_windows);
63 if (child_windows != 0) {
64 XFree(child_windows);
65 }
66 XTranslateCoordinates(FbTk::App::instance()->display(),
67 parent_win, root_win,
68 x, y,
69 &screen_x, &screen_y, &child_win);
70}
71
48/// helper class for tray windows, so we dont call XDestroyWindow 72/// helper class for tray windows, so we dont call XDestroyWindow
49class TrayWindow: public FbTk::FbWindow { 73class TrayWindow: public FbTk::FbWindow {
50public: 74public:
@@ -470,9 +494,11 @@ void SystemTray::rearrangeClients() {
470 next_x += h_rot0+bw; 494 next_x += h_rot0+bw;
471 translateCoords(orientation(), x, y, w_rot0, h_rot0); 495 translateCoords(orientation(), x, y, w_rot0, h_rot0);
472 translatePosition(orientation(), x, y, h_rot0, h_rot0, 0); 496 translatePosition(orientation(), x, y, h_rot0, h_rot0, 0);
497 int screen_x = 0, screen_y = 0;
498 getScreenCoordinates((*client_it)->window(), (*client_it)->x(), (*client_it)->y(), screen_x, screen_y);
473 499
474 (*client_it)->moveResize(x, y, h_rot0, h_rot0); 500 (*client_it)->moveResize(x, y, h_rot0, h_rot0);
475 (*client_it)->sendConfigureNotify(x, y, h_rot0, h_rot0); 501 (*client_it)->sendConfigureNotify(screen_x, screen_y, h_rot0, h_rot0);
476 } 502 }
477} 503}
478 504