diff options
Diffstat (limited to 'src/SystemTray.cc')
-rw-r--r-- | src/SystemTray.cc | 13 |
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 | ||
80 | static 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 |
81 | class SystemTray::TrayWindow : public FbTk::FbWindow { | 83 | class SystemTray::TrayWindow : public FbTk::FbWindow { |
82 | public: | 84 | public: |
@@ -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 | ||
248 | SystemTray::~SystemTray() { | 252 | SystemTray::~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 | |||
599 | bool 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 | } | ||