diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/SystemTray.cc | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/src/SystemTray.cc b/src/SystemTray.cc index e282a76..76bac85 100644 --- a/src/SystemTray.cc +++ b/src/SystemTray.cc | |||
@@ -19,7 +19,7 @@ | |||
19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER | 19 | // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER |
20 | // DEALINGS IN THE SOFTWARE. | 20 | // DEALINGS IN THE SOFTWARE. |
21 | 21 | ||
22 | // $Id: SystemTray.cc,v 1.3 2003/08/27 00:11:24 fluxgen Exp $ | 22 | // $Id: SystemTray.cc,v 1.4 2003/08/28 13:44:58 fluxgen Exp $ |
23 | 23 | ||
24 | #include "SystemTray.hh" | 24 | #include "SystemTray.hh" |
25 | 25 | ||
@@ -30,7 +30,6 @@ | |||
30 | 30 | ||
31 | #include <X11/Xutil.h> | 31 | #include <X11/Xutil.h> |
32 | 32 | ||
33 | #include <iostream> | ||
34 | #include <string> | 33 | #include <string> |
35 | 34 | ||
36 | using namespace std; | 35 | using namespace std; |
@@ -155,7 +154,7 @@ void SystemTray::show() { | |||
155 | } | 154 | } |
156 | 155 | ||
157 | unsigned int SystemTray::width() const { | 156 | unsigned int SystemTray::width() const { |
158 | return m_clients.size()*height(); //*m_tray_width; | 157 | return m_clients.size()*height(); |
159 | } | 158 | } |
160 | 159 | ||
161 | unsigned int SystemTray::height() const { | 160 | unsigned int SystemTray::height() const { |
@@ -214,16 +213,19 @@ void SystemTray::addClient(Window win) { | |||
214 | #ifdef DEBUG | 213 | #ifdef DEBUG |
215 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): 0x"<<hex<<win<<dec<<endl; | 214 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): 0x"<<hex<<win<<dec<<endl; |
216 | #endif // DEBUG | 215 | #endif // DEBUG |
216 | if (m_clients.size() == 0) | ||
217 | show(); | ||
217 | 218 | ||
218 | FbTk::FbWindow *traywin = new TrayWindow(win); | 219 | FbTk::FbWindow *traywin = new TrayWindow(win); |
219 | m_clients.push_back(traywin); | 220 | m_clients.push_back(traywin); |
220 | FbTk::EventManager::instance()->add(*this, win); | 221 | FbTk::EventManager::instance()->add(*this, win); |
222 | FbTk::EventManager::instance()->addParent(*this, window()); | ||
221 | XChangeSaveSet(FbTk::App::instance()->display(), win, SetModeInsert); | 223 | XChangeSaveSet(FbTk::App::instance()->display(), win, SetModeInsert); |
222 | traywin->reparent(m_window, 0, 0); | 224 | traywin->reparent(m_window, 0, 0); |
223 | traywin->show(); | 225 | traywin->show(); |
224 | 226 | ||
225 | resize(width(), m_clients.size()*height()); | 227 | resize(width(), m_clients.size()*height()); |
226 | 228 | ||
227 | rearrangeClients(); | 229 | rearrangeClients(); |
228 | } | 230 | } |
229 | 231 | ||
@@ -235,12 +237,16 @@ void SystemTray::removeClient(Window win) { | |||
235 | #ifdef DEBUG | 237 | #ifdef DEBUG |
236 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): 0x"<<hex<<win<<dec<<endl; | 238 | cerr<<__FILE__<<"("<<__FUNCTION__<<"): 0x"<<hex<<win<<dec<<endl; |
237 | #endif // DEBUG | 239 | #endif // DEBUG |
238 | |||
239 | FbTk::FbWindow *traywin = *tray_it; | 240 | FbTk::FbWindow *traywin = *tray_it; |
240 | m_clients.erase(tray_it); | 241 | m_clients.erase(tray_it); |
241 | delete traywin; | 242 | delete traywin; |
242 | resize(width(), height()); | 243 | resize(width(), height()); |
243 | rearrangeClients(); | 244 | rearrangeClients(); |
245 | if (m_clients.size() == 0) { | ||
246 | // so we send configurenotify signal to parent | ||
247 | m_window.resize(1, 1); | ||
248 | hide(); | ||
249 | } | ||
244 | } | 250 | } |
245 | 251 | ||
246 | void SystemTray::exposeEvent(XExposeEvent &event) { | 252 | void SystemTray::exposeEvent(XExposeEvent &event) { |
@@ -248,9 +254,9 @@ void SystemTray::exposeEvent(XExposeEvent &event) { | |||
248 | } | 254 | } |
249 | 255 | ||
250 | void SystemTray::handleEvent(XEvent &event) { | 256 | void SystemTray::handleEvent(XEvent &event) { |
251 | if (event.type == DestroyNotify) | 257 | if (event.type == DestroyNotify) { |
252 | removeClient(event.xdestroywindow.window); | 258 | removeClient(event.xdestroywindow.window); |
253 | else if (event.type == ConfigureNotify) { | 259 | } else if (event.type == ConfigureNotify) { |
254 | // we got configurenotify from an client | 260 | // we got configurenotify from an client |
255 | // check and see if we need to update it's size | 261 | // check and see if we need to update it's size |
256 | ClientList::iterator it = findClient(event.xconfigure.window); | 262 | ClientList::iterator it = findClient(event.xconfigure.window); |