aboutsummaryrefslogtreecommitdiff
path: root/src/SystemTray.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/SystemTray.cc')
-rw-r--r--src/SystemTray.cc13
1 files changed, 13 insertions, 0 deletions
diff --git a/src/SystemTray.cc b/src/SystemTray.cc
index e45669e..4fa9da3 100644
--- a/src/SystemTray.cc
+++ b/src/SystemTray.cc
@@ -77,6 +77,8 @@ void getScreenCoordinates(Window win, int x, int y, int &screen_x, int &screen_y
77 77
78}; 78};
79 79
80static SystemTray *s_theoneandonly = 0;
81
80/// helper class for tray windows, so we dont call XDestroyWindow 82/// helper class for tray windows, so we dont call XDestroyWindow
81class SystemTray::TrayWindow : public FbTk::FbWindow { 83class SystemTray::TrayWindow : public FbTk::FbWindow {
82public: 84public:
@@ -220,6 +222,8 @@ SystemTray::SystemTray(const FbTk::FbWindow& parent,
220 // set owner 222 // set owner
221 XSetSelectionOwner(disp, tray_atom, m_selection_owner.window(), CurrentTime); 223 XSetSelectionOwner(disp, tray_atom, m_selection_owner.window(), CurrentTime);
222 224
225 s_theoneandonly = this;
226
223 m_handler.reset(new SystemTrayHandler(*this)); 227 m_handler.reset(new SystemTrayHandler(*this));
224 228
225 m_handler.get()->setName(atom_name); 229 m_handler.get()->setName(atom_name);
@@ -247,6 +251,8 @@ SystemTray::SystemTray(const FbTk::FbWindow& parent,
247 251
248SystemTray::~SystemTray() { 252SystemTray::~SystemTray() {
249 // remove us, else fluxbox might delete the memory too 253 // remove us, else fluxbox might delete the memory too
254 if (s_theoneandonly == this)
255 s_theoneandonly = 0;
250 Fluxbox* fluxbox = Fluxbox::instance(); 256 Fluxbox* fluxbox = Fluxbox::instance();
251 fluxbox->removeAtomHandler(m_handler.get()); 257 fluxbox->removeAtomHandler(m_handler.get());
252 Display *disp = fluxbox->display(); 258 Display *disp = fluxbox->display();
@@ -589,3 +595,10 @@ string SystemTray::getNetSystemTrayAtom(int screen_nr) {
589 595
590 return atom_name; 596 return atom_name;
591} 597}
598
599bool SystemTray::doesControl(Window win) {
600 if (win == None || !s_theoneandonly)
601 return false;
602 return win == s_theoneandonly->window().window() ||
603 s_theoneandonly->findClient(win) != s_theoneandonly->m_clients.end();
604}