diff options
author | Gianluca Pacchiella <pacchiel@studenti.ph.unito.it> | 2008-02-18 00:19:24 +0100 |
---|---|---|
committer | Peter Hutterer <peter@cs.unisa.edu.au> | 2008-02-20 18:10:24 +1030 |
commit | 0199815220ba7d548dceb9b5153edfd55c417ea4 (patch) | |
tree | 33a16a0a857862d5ed5adc1f32c161e1719dba09 | |
parent | dd268667c5d548dae59fb8af0605b70c966cc343 (diff) |
Fixed appendProcess bug.
When the application's window is minimized the pointers are not set
to propagate ButtonPress event in the DockProcess.
Signed-off-by: Peter Hutterer <peter@cs.unisa.edu.au>
-rw-r--r-- | src/Dock.cpp | 15 | ||||
-rw-r--r-- | src/DockProcess.cpp | 4 | ||||
-rw-r--r-- | src/DockProcess.h | 5 | ||||
-rw-r--r-- | src/Manager.cpp | 1 |
4 files changed, 18 insertions, 7 deletions
diff --git a/src/Dock.cpp b/src/Dock.cpp index e7a8dc7..fa73407 100644 --- a/src/Dock.cpp +++ b/src/Dock.cpp @@ -145,7 +145,7 @@ void Dock::appendProcess(WMWindow* win) int dp_x = width - DOCK_BUTTON_WIDTH - DOCK_WIDTH_EXTENDED/2; int dp_y = DOCK_HEIGHT_EXTENDED; - DockProcess* dp = new DockProcess(x11, win); + DockProcess* dp = new DockProcess(x11, win, this); dp->initGUI(dock, dp_x, dp_y, DOCK_BUTTON_WIDTH, DOCK_BUTTON_HEIGHT); dp->setup(); processes.push_back(dp); @@ -191,12 +191,17 @@ void Dock::removeProcess(DockProcess* dp) dp_x = apps.size() * DOCK_BUTTON_WIDTH + DOCK_WIDTH_EXTENDED/2; dp_y = DOCK_HEIGHT_EXTENDED; - vector<DockProcess*>::const_iterator it = processes.begin(); + vector<DockProcess*>::iterator it = processes.begin(); while(it != processes.end()) { - (*it)->move(dp_x, dp_y); - dp_x += DOCK_BUTTON_WIDTH; - it++; + if( dp == (*it) ){ + it = processes.erase(it); + delete dp; + }else{ + (*it)->move(dp_x, dp_y); + dp_x += DOCK_BUTTON_WIDTH; + it++; + } } XFreePixmap(x11->dpy, backbuff); diff --git a/src/DockProcess.cpp b/src/DockProcess.cpp index 510b1c1..ca8c8eb 100644 --- a/src/DockProcess.cpp +++ b/src/DockProcess.cpp @@ -4,10 +4,11 @@ #include <cairo.h> #include <cairo-xlib.h> -DockProcess::DockProcess(XConn* x11, WMWindow* client) +DockProcess::DockProcess(XConn* x11, WMWindow* client, Dock* dock) { this->x11 = x11; this->client = client; + this->dock = dock; } void DockProcess::setup() @@ -39,5 +40,6 @@ void DockProcess::setup() void DockProcess::handleButtonEvent(PointerDevice* ptr, XDeviceButtonEvent* ev) { client->setMinimize(false); + dock->removeProcess(this); } diff --git a/src/DockProcess.h b/src/DockProcess.h index 76f375d..addd97d 100644 --- a/src/DockProcess.h +++ b/src/DockProcess.h @@ -5,20 +5,23 @@ #include <X11/Xlib.h> #include "XConn.h" +#include "Dock.h" #include "DockItem.h" #include "WMWindow.h" class WMWindow; class PointerDevice; +class Dock; /* An app that was minimized into the dock */ class DockProcess : public DockItem { private: WMWindow* client; + Dock* dock; public: - DockProcess(XConn* x11, WMWindow* client); + DockProcess(XConn* x11, WMWindow* client, Dock* dock); void handleButtonEvent(PointerDevice* ptr, XDeviceButtonEvent* ev); void setup(); diff --git a/src/Manager.cpp b/src/Manager.cpp index febb9de..4db53ef 100644 --- a/src/Manager.cpp +++ b/src/Manager.cpp @@ -684,6 +684,7 @@ void Manager::handleButtonPress(XDeviceButtonEvent* bev) { wmwindow->setMinimize(true); dock->appendProcess(wmwindow); + dock->setPointerEvents(&pointers); } XAllowDeviceEvents(x11->dpy, dev->getDevice(), ReplayThisDevice, CurrentTime); |