summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFabien Freling <fabien.freling@nokia.com>2011-02-24 15:36:44 (GMT)
committerFabien Freling <fabien.freling@nokia.com>2011-02-25 10:09:02 (GMT)
commit2b9e7bcede5ca6ba9de2534839244cc621f17e1c (patch)
tree477d5077cc2dcfb0a6ba2a576445f4640ecba837
parentf41e395e9ebc6db33c21ff082b59f2d7b6d2a3b2 (diff)
downloadQt-2b9e7bcede5ca6ba9de2534839244cc621f17e1c.zip
Qt-2b9e7bcede5ca6ba9de2534839244cc621f17e1c.tar.gz
Qt-2b9e7bcede5ca6ba9de2534839244cc621f17e1c.tar.bz2
Add the ability to remove a toolbar from the unified toolbar.
This allows to toggle the unified look of the toolbar. This is useful for apps going fullscreen since we have to turn the unified look off when entering fullscreen mode. Reviewed-by: Samuel Rødal
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac.cpp26
-rw-r--r--src/gui/painting/qunifiedtoolbarsurface_mac_p.h5
-rw-r--r--src/gui/widgets/qmainwindowlayout_mac.mm6
3 files changed, 33 insertions, 4 deletions
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
index 6abcf2c..87206f3 100644
--- a/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac.cpp
@@ -99,6 +99,32 @@ void QUnifiedToolbarSurface::insertToolbar(QWidget *toolbar, const QPoint &offse
recursiveRedirect(toolbar, toolbar, offset);
}
+// We basically undo what we set in recursiveRedirect().
+void QUnifiedToolbarSurface::recursiveRemoval(QObject *object)
+{
+ if (object != 0) {
+ if (object->isWidgetType()) {
+ QWidget *widget = qobject_cast<QWidget *>(object);
+
+ if (!(widget->windowType() & Qt::Window)) {
+ widget->d_func()->unifiedSurface = 0;
+ widget->d_func()->isInUnifiedToolbar = false;
+ widget->d_func()->toolbar_offset = QPoint();
+ widget->d_func()->toolbar_ancestor = 0;
+
+ for (int i = 0; i < object->children().size(); ++i) {
+ recursiveRemoval(object->children().at(i));
+ }
+ }
+ }
+ }
+}
+
+void QUnifiedToolbarSurface::removeToolbar(QToolBar *toolbar)
+{
+ recursiveRemoval(toolbar);
+}
+
void QUnifiedToolbarSurface::setGeometry(const QRect &rect)
{
QWindowSurface::setGeometry(rect);
diff --git a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
index f7ad02e..99839fa 100644
--- a/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
+++ b/src/gui/painting/qunifiedtoolbarsurface_mac_p.h
@@ -55,6 +55,7 @@
#include <private/qwindowsurface_raster_p.h>
#include <QWidget>
+#include <QToolBar>
#include <private/qwidget_p.h>
#include <private/qnativeimage_p.h>
@@ -82,15 +83,17 @@ public:
void setGeometry(const QRect &rect);
void beginPaint(const QRegion &rgn);
void insertToolbar(QWidget *toolbar, const QPoint &offset);
+ void removeToolbar(QToolBar *toolbar);
void updateToolbarOffset(QWidget *widget);
+ void renderToolbar(QWidget *widget, bool forceFlush = false);
QPaintDevice *paintDevice();
CGContextRef imageContext();
- void renderToolbar(QWidget *widget, bool forceFlush = false);
private:
void prepareBuffer(QImage::Format format, QWidget *widget);
void recursiveRedirect(QObject *widget, QWidget *parent_toolbar, const QPoint &offset);
+ void recursiveRemoval(QObject *object);
Q_DECLARE_PRIVATE(QUnifiedToolbarSurface)
QScopedPointer<QUnifiedToolbarSurfacePrivate> d_ptr;
diff --git a/src/gui/widgets/qmainwindowlayout_mac.mm b/src/gui/widgets/qmainwindowlayout_mac.mm
index e428ffc..761a433 100644
--- a/src/gui/widgets/qmainwindowlayout_mac.mm
+++ b/src/gui/widgets/qmainwindowlayout_mac.mm
@@ -356,10 +356,10 @@ void QMainWindowLayout::updateHIToolBarStatus()
while (!qtoolbarsInUnifiedToolbarList.isEmpty()) {
// Should shrink the list by one every time.
QToolBar *toolbar = qtoolbarsInUnifiedToolbarList.first();
- layoutState.mainWindow->addToolBar(Qt::TopToolBarArea, toolbar);
#if defined(QT_MAC_USE_COCOA)
- toolbar->d_func()->isInUnifiedToolbar = false;
+ unifiedSurface->removeToolbar(toolbar);
#endif
+ layoutState.mainWindow->addToolBar(Qt::TopToolBarArea, toolbar);
}
macWindowToolbarSet(qt_mac_window_for(layoutState.mainWindow), 0);
} else {
@@ -393,7 +393,7 @@ void QMainWindowLayout::insertIntoMacToolbar(QToolBar *before, QToolBar *toolbar
return;
#if defined(QT_MAC_USE_COCOA)
- // toolbar will now become native (if not allready) since we need
+ // toolbar will now become native (if not already) since we need
// an nsview for it inside the corresponding NSToolbarItem.
// Setting isInUnifiedToolbar will (among other things) stop alien
// siblings from becoming native when this happends since the toolbar