summaryrefslogtreecommitdiff
path: root/decorators
diff options
context:
space:
mode:
authorAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-04-28 18:57:39 +0300
committerAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-04-28 18:57:39 +0300
commitca00457291ca49978b6e2b05bbcc043ef14ecb98 (patch)
treef3a2ae5659b3cf36795d29d4e643e47b0dbf6036 /decorators
parentb626c5a0bde6ba3b337cf6d12ef7c2bbf79c590a (diff)
Changes: Dynamically inform compositor of decorator geometry
RevBy: TrustMe
Diffstat (limited to 'decorators')
-rw-r--r--decorators/libdecorator/libdecorator.pro1
-rw-r--r--decorators/libdecorator/mabstractdecorator.cpp45
-rw-r--r--decorators/libdecorator/mabstractdecorator.h19
-rw-r--r--decorators/mdecorator/mdecoratorwindow.cpp24
-rw-r--r--decorators/mdecorator/mdecoratorwindow.h3
5 files changed, 76 insertions, 16 deletions
diff --git a/decorators/libdecorator/libdecorator.pro b/decorators/libdecorator/libdecorator.pro
index 9ff1a87..466e061 100644
--- a/decorators/libdecorator/libdecorator.pro
+++ b/decorators/libdecorator/libdecorator.pro
@@ -5,7 +5,6 @@ INCLUDEPATH += .
CONFIG += dll release
QT += opengl network
TARGET = decorator
-VERSION = 0.3.10
HEADERS += mabstractdecorator.h \
mrmiclient_p.h \
diff --git a/decorators/libdecorator/mabstractdecorator.cpp b/decorators/libdecorator/mabstractdecorator.cpp
index 2c21683..1c9ae93 100644
--- a/decorators/libdecorator/mabstractdecorator.cpp
+++ b/decorators/libdecorator/mabstractdecorator.cpp
@@ -17,23 +17,41 @@
**
****************************************************************************/
-#include "mabstractdecorator.h"
-
#include <QtDebug>
+#include "mabstractdecorator.h"
#include <mrmiserver.h>
+#include <mrmiclient.h>
#include <QX11Info>
+#include <QRect>
+#include <QRegion>
+#include <QDesktopWidget>
+#include <QApplication>
#include <X11/Xutil.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <X11/Xmd.h>
+class MAbstractDecoratorPrivate
+{
+public:
+
+ Qt::HANDLE client;
+ MRmiClient* remote_compositor;
+ QRect clientGeometry;
+ MAbstractDecorator* q_ptr;
+};
+
MAbstractDecorator::MAbstractDecorator(QObject *parent)
- : QObject(parent)
+ : QObject(parent),
+ d(new MAbstractDecoratorPrivate())
{
+ Q_D(MAbstractDecorator);
+
MRmiServer *s = new MRmiServer(".mabstractdecorator", this);
s->exportObject(this);
+ d->remote_compositor = new MRmiClient(".mcompositor", this);
}
MAbstractDecorator::~MAbstractDecorator()
@@ -42,7 +60,9 @@ MAbstractDecorator::~MAbstractDecorator()
Qt::HANDLE MAbstractDecorator::managedWinId()
{
- return client;
+ Q_D(MAbstractDecorator);
+
+ return d->client;
}
void MAbstractDecorator::minimize()
@@ -88,7 +108,9 @@ void MAbstractDecorator::close()
void MAbstractDecorator::RemoteSetManagedWinId(qulonglong window)
{
- client = window;
+ Q_D(MAbstractDecorator);
+
+ d->client = window;
manageEvent(window);
}
@@ -101,3 +123,16 @@ void MAbstractDecorator::RemoteSetAutoRotation(bool mode)
{
setAutoRotation(mode);
}
+
+void MAbstractDecorator::RemoteSetClientGeometry(const QRect& r)
+{
+ Q_D(MAbstractDecorator);
+ d->clientGeometry = r;
+}
+
+void MAbstractDecorator::setAvailableGeometry(const QRect& rect)
+{
+ Q_D(MAbstractDecorator);
+
+ d->remote_compositor->invoke("MCompositeManager", "decoratorRectChanged", rect);
+}
diff --git a/decorators/libdecorator/mabstractdecorator.h b/decorators/libdecorator/mabstractdecorator.h
index e03e954..a29b439 100644
--- a/decorators/libdecorator/mabstractdecorator.h
+++ b/decorators/libdecorator/mabstractdecorator.h
@@ -22,6 +22,10 @@
#include <QObject>
+class MAbstractDecoratorPrivate;
+class MRmiClient;
+class QRect;
+
/*!
* MAbstractDecorator is the base class for window decorators
*/
@@ -39,6 +43,14 @@ public:
* Returns the id of the window decorated by this decorator
*/
Qt::HANDLE managedWinId();
+
+ /*!
+ * Informs the compositor of the available client geometry when client
+ * is managed by the decorator.
+ *
+ * \param rect is the geometry of the decorator area.
+ */
+ void setAvailableGeometry(const QRect& rect);
public slots:
@@ -58,6 +70,7 @@ public slots:
void RemoteSetManagedWinId(qulonglong window);
void RemoteActivateWindow();
void RemoteSetAutoRotation(bool mode);
+ void RemoteSetClientGeometry(const QRect& rect);
protected:
@@ -79,8 +92,10 @@ protected:
virtual void setAutoRotation(bool mode) = 0;
private:
- Qt::HANDLE client;
-
+
+ Q_DECLARE_PRIVATE(MAbstractDecorator)
+
+ MAbstractDecoratorPrivate * const d;
};
#endif //MABSTRACTDECORATOR_H
diff --git a/decorators/mdecorator/mdecoratorwindow.cpp b/decorators/mdecorator/mdecoratorwindow.cpp
index 56ba3ef..49597e6 100644
--- a/decorators/mdecorator/mdecoratorwindow.cpp
+++ b/decorators/mdecorator/mdecoratorwindow.cpp
@@ -22,7 +22,8 @@
#include <MSceneManager>
#include <MScene>
-#include <QCoreApplication>
+#include <QApplication>
+#include <QDesktopWidget>
#include <QX11Info>
#include <QGLFormat>
#include <QGLWidget>
@@ -49,7 +50,7 @@ class MDecorator: public MAbstractDecorator
public:
MDecorator(MDecoratorWindow *p)
: MAbstractDecorator(p),
- window(p)
+ decorwindow(p)
{
connect(this, SIGNAL(windowTitleChanged(const QString&)),
p, SIGNAL(windowTitleChanged(const QString&)));
@@ -73,14 +74,15 @@ protected:
XFree(p.value);
}
}
-
+ setAvailableGeometry(decorwindow->availableClientRect());
+
emit windowTitleChanged(title);
}
virtual void setAutoRotation(bool mode) {
- window->setOrientationAngleLocked(!mode);
+ decorwindow->setOrientationAngleLocked(!mode);
if (!mode)
- window->setOrientationAngle(M::Angle0);
+ decorwindow->setOrientationAngle(M::Angle0);
}
signals:
@@ -89,7 +91,7 @@ signals:
private:
- MDecoratorWindow *window;
+ MDecoratorWindow *decorwindow;
};
#if 0
@@ -200,9 +202,9 @@ void MDecoratorWindow::setInputRegion()
region += navigationBar->boundingRect().toRect();
region += homeButtonPanel->boundingRect().toRect();
region += escapeButtonPanel->boundingRect().toRect();
- QRect b = region.boundingRect();
+ decoratorRect = region.boundingRect();
- XRectangle rect = itemRectToScreenRect(b);
+ XRectangle rect = itemRectToScreenRect(decoratorRect);
Display *dpy = QX11Info::display();
XserverRegion shapeRegion = XFixesCreateRegion(dpy, &rect, 1);
@@ -244,4 +246,10 @@ void MDecoratorWindow::setMDecoratorWindowProperty()
(unsigned char *) &on, 1);
}
+
+const QRect MDecoratorWindow::availableClientRect() const
+{
+ return decoratorRect;
+}
+
#include "mdecoratorwindow.moc"
diff --git a/decorators/mdecorator/mdecoratorwindow.h b/decorators/mdecorator/mdecoratorwindow.h
index cdaeffe..cba9c79 100644
--- a/decorators/mdecorator/mdecoratorwindow.h
+++ b/decorators/mdecorator/mdecoratorwindow.h
@@ -43,6 +43,8 @@ class MDecoratorWindow : public MWindow
public:
explicit MDecoratorWindow(QWidget *parent = 0);
virtual ~MDecoratorWindow();
+
+ const QRect availableClientRect() const;
private slots:
@@ -70,6 +72,7 @@ private:
MEscapeButtonPanel *escapeButtonPanel;
MNavigationBar *navigationBar;
MStatusBar *statusBar;
+ QRect decoratorRect;
Q_DISABLE_COPY(MDecoratorWindow);
};