summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGianluca Pacchiella <pacchiel@studenti.ph.unito.it>2008-02-18 00:19:24 +0100
committerPeter Hutterer <peter@cs.unisa.edu.au>2008-02-20 18:10:24 +1030
commit0199815220ba7d548dceb9b5153edfd55c417ea4 (patch)
tree33a16a0a857862d5ed5adc1f32c161e1719dba09
parentdd268667c5d548dae59fb8af0605b70c966cc343 (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.cpp15
-rw-r--r--src/DockProcess.cpp4
-rw-r--r--src/DockProcess.h5
-rw-r--r--src/Manager.cpp1
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);