summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-10-13 01:10:35 +0300
committerAbdiel Janulgue <abdiel.janulgue@nokia.com>2010-10-13 01:10:35 +0300
commitd12b53c820fc6ed17211a4ef6af059143e57c7de (patch)
treeb3b5d0dec4cfe08fd91a806d873653e7b72c6332
parent8f2155bec7a225087ea45da9da60fbd82df423a5 (diff)
Changes: Add interface for custom window animation handler
RevBy: TrustMe
-rw-r--r--src/mcompositemanagerextension.cpp32
-rw-r--r--src/mcompositemanagerextension.h6
-rw-r--r--src/mcompositewindow.cpp44
3 files changed, 79 insertions, 3 deletions
diff --git a/src/mcompositemanagerextension.cpp b/src/mcompositemanagerextension.cpp
index 3fb99d4..efac380 100644
--- a/src/mcompositemanagerextension.cpp
+++ b/src/mcompositemanagerextension.cpp
@@ -54,3 +54,35 @@ Qt::HANDLE MCompositeManagerExtension::currentAppWindow()
MCompositeManager *p = (MCompositeManager *) qApp;
return p->d->current_app;
}
+
+bool MCompositeManagerExtension::windowIconified(MCompositeWindow* window,
+ bool deferred)
+{
+ Q_UNUSED(window)
+ Q_UNUSED(deferred)
+
+ return false;
+}
+
+bool MCompositeManagerExtension::windowRestored(MCompositeWindow* window,
+ bool deferred)
+{
+ Q_UNUSED(window)
+ Q_UNUSED(deferred)
+
+ return false;
+}
+
+bool MCompositeManagerExtension::windowShown(MCompositeWindow* window)
+{
+ Q_UNUSED(window)
+
+ return false;
+}
+
+bool MCompositeManagerExtension::windowClosed(MCompositeWindow* window)
+{
+ Q_UNUSED(window)
+
+ return false;
+}
diff --git a/src/mcompositemanagerextension.h b/src/mcompositemanagerextension.h
index fcc89d9..41fdb2b 100644
--- a/src/mcompositemanagerextension.h
+++ b/src/mcompositemanagerextension.h
@@ -83,12 +83,18 @@ class MCompositeManagerExtension: public QObject
* Called for each event after MCompositeManager's event handling.
*/
virtual void afterX11Event(XEvent *event) = 0;
+
+ virtual bool windowIconified(MCompositeWindow* window, bool deferred);
+ virtual bool windowRestored(MCompositeWindow* window, bool deferred);
+ virtual bool windowShown(MCompositeWindow* window);
+ virtual bool windowClosed(MCompositeWindow* window);
private slots:
void q_currentAppChanged(Window window);
private:
friend class MCompositeManagerPrivate;
+ friend class MCompositeWindow;
};
#endif
diff --git a/src/mcompositewindow.cpp b/src/mcompositewindow.cpp
index 33c1375..33c733c 100644
--- a/src/mcompositewindow.cpp
+++ b/src/mcompositewindow.cpp
@@ -23,6 +23,7 @@
#include "mcompositemanager_p.h"
#include "mtexturepixmapitem.h"
#include "mdecoratorframe.h"
+#include "mcompositemanagerextension.h"
#include <QX11Info>
#include <QGraphicsScene>
@@ -183,7 +184,17 @@ void MCompositeWindow::iconify(const QRectF &icongeometry, bool defer)
if (window_status != MCompositeWindow::Closing)
window_status = MCompositeWindow::Minimizing;
-
+
+ // Custom iconify handler
+ MCompositeManager *p = (MCompositeManager *) qApp;
+ QList<MCompositeManagerExtension*> evlist = p->d->m_extensions.values(MapNotify);
+ for (int i = 0; i < evlist.size(); ++i) {
+ if (evlist[i]->windowIconified(this, defer)) {
+ iconified = true;
+ return;
+ }
+ }
+
this->iconGeometry = icongeometry;
if (!iconified)
origPosition = pos();
@@ -191,7 +202,7 @@ void MCompositeWindow::iconify(const QRectF &icongeometry, bool defer)
// horizontal and vert. scaling factors
qreal sx = iconGeometry.width() / boundingRect().width();
qreal sy = iconGeometry.height() / boundingRect().height();
-
+
anim->deferAnimation(defer);
anim->translateScale(qreal(1.0), qreal(1.0), sx, sy,
iconGeometry.topLeft());
@@ -296,6 +307,16 @@ void MCompositeWindow::updateIconGeometry()
// TODO: have an option of disabling the animation
void MCompositeWindow::restore(const QRectF &icongeometry, bool defer)
{
+ // Custom restore handler
+ MCompositeManager *p = (MCompositeManager *) qApp;
+ QList<MCompositeManagerExtension*> evlist = p->d->m_extensions.values(MapNotify);
+ for (int i = 0; i < evlist.size(); ++i) {
+ if (evlist[i]->windowRestored(this, defer)) {
+ iconified = false;
+ return;
+ }
+ }
+
if (icongeometry.isEmpty())
this->iconGeometry = fadeRect;
else
@@ -359,9 +380,18 @@ void MCompositeWindow::q_fadeIn()
setOpacity(0.0);
updateWindowPixmap();
origPosition = pos();
+ newly_mapped = true;
+
+ // Custom fade-in handler
+ MCompositeManager *p = (MCompositeManager *) qApp;
+ QList<MCompositeManagerExtension*> evlist = p->d->m_extensions.values(MapNotify);
+ for (int i = 0; i < evlist.size(); ++i) {
+ if (evlist[i]->windowShown(this))
+ return;
+ }
+
setPos(fadeRect.topLeft());
restore(fadeRect, false);
- newly_mapped = true;
}
void MCompositeWindow::closeWindow()
@@ -388,6 +418,14 @@ void MCompositeWindow::closeWindow()
updateWindowPixmap();
origPosition = pos();
+
+ // Custom close window animation handler
+ QList<MCompositeManagerExtension*> evlist = p->d->m_extensions.values(MapNotify);
+ for (int i = 0; i < evlist.size(); ++i) {
+ if (evlist[i]->windowClosed(this)) {
+ return;
+ }
+ }
iconify(fadeRect, defer);
}