diff options
author | Abdiel Janulgue <abdiel.janulgue@nokia.com> | 2010-10-13 01:10:35 +0300 |
---|---|---|
committer | Abdiel Janulgue <abdiel.janulgue@nokia.com> | 2010-10-13 01:10:35 +0300 |
commit | d12b53c820fc6ed17211a4ef6af059143e57c7de (patch) | |
tree | b3b5d0dec4cfe08fd91a806d873653e7b72c6332 | |
parent | 8f2155bec7a225087ea45da9da60fbd82df423a5 (diff) |
Changes: Add interface for custom window animation handler
RevBy: TrustMe
-rw-r--r-- | src/mcompositemanagerextension.cpp | 32 | ||||
-rw-r--r-- | src/mcompositemanagerextension.h | 6 | ||||
-rw-r--r-- | src/mcompositewindow.cpp | 44 |
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); } |