summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-05-18 20:06:59 +0300
committerKimmo Hämäläinen <kimmo.hamalainen@nokia.com>2010-05-19 12:52:34 +0300
commit6c0c0004c476435b5d78e5fbb568e456230e2ca2 (patch)
treec1097180c2314ba8c5079f33f6843a94626385e5
parent8992f656cc847591b5a419e2718da202390c6e86 (diff)
Changes: Fix issue where WM_STATE is changed even if previous value is the same. This is causing
multiple WM_STATE property events to be sent to the window RevBy: TrustMe
-rw-r--r--src/mcompositemanager.cpp4
-rw-r--r--src/mcompositewindow.cpp22
-rw-r--r--src/mcompositewindow.h6
3 files changed, 30 insertions, 2 deletions
diff --git a/src/mcompositemanager.cpp b/src/mcompositemanager.cpp
index da0beb4..bff12a9 100644
--- a/src/mcompositemanager.cpp
+++ b/src/mcompositemanager.cpp
@@ -1919,6 +1919,10 @@ void MCompositeManagerPrivate::callOngoing(bool ongoing_call)
void MCompositeManagerPrivate::setWindowState(Window w, int state)
{
+ MCompositeWindow* i = COMPOSITE_WINDOW(w);
+ if(i && i->windowState() == state)
+ return;
+
CARD32 d[2];
d[0] = state;
d[1] = None;
diff --git a/src/mcompositewindow.cpp b/src/mcompositewindow.cpp
index 7fefe78..b83ceb9 100644
--- a/src/mcompositewindow.cpp
+++ b/src/mcompositewindow.cpp
@@ -51,7 +51,8 @@ MCompositeWindow::MCompositeWindow(Qt::HANDLE window, QGraphicsItem *p)
wm_protocols_valid(false),
window_obscured(false),
wmhints(0),
- win_id(window)
+ win_id(window),
+ window_state(NormalState)
{
memset(&req_geom, 0, sizeof(req_geom));
anim = new MCompWindowAnimator(this);
@@ -322,8 +323,25 @@ bool MCompositeWindow::propertyEvent(XPropertyEvent *e)
wmhints = 0;
}
return true;
- } else if (e->atom == ATOM(WM_PROTOCOLS))
+ } else if (e->atom == ATOM(WM_PROTOCOLS)) {
wm_protocols_valid = false;
+ } else if (e->atom == ATOM(WM_STATE)) {
+ Atom type;
+ int format;
+ unsigned long length, after;
+ uchar *data = 0;
+ int r = XGetWindowProperty(QX11Info::display(),window(),
+ ATOM(WM_STATE), 0, 2,
+ False, AnyPropertyType, &type, &format,
+ &length, &after, &data);
+ int w_state = 0;
+ if (r == Success && data && format == 32) {
+ unsigned long *wstate = (unsigned long *) data;
+ window_state = *wstate;
+ XFree((char *)data);
+ return true;
+ }
+ }
return false;
}
diff --git a/src/mcompositewindow.h b/src/mcompositewindow.h
index 426fc30..bb16b85 100644
--- a/src/mcompositewindow.h
+++ b/src/mcompositewindow.h
@@ -261,6 +261,11 @@ public:
void setOriginalGeometry(const QRect geometry) {
origGeometry = geometry;
}
+
+ /*!
+ * Returns the WM_STATE of this window
+ */
+ int windowState() const { return window_state; }
QRect originalGeometry() const { return origGeometry; }
@@ -423,6 +428,7 @@ private:
// Main ping timer
QTimer *t_ping;
Qt::HANDLE win_id;
+ int window_state;
friend class MTexturePixmapPrivate;
};