Skip to content

Commit 2037c34

Browse files
committed
Call QgsComposer::restoreComposerMapStates in QgsComposer:changeEvent,
not in showEvent (latter does not work reliably with some window managers, such as openbox) (fix #6085) Cherry-picked from cc9f2a6
1 parent 6075254 commit 2037c34

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

src/app/composer/qgscomposer.cpp

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -805,24 +805,38 @@ void QgsComposer::activate()
805805
}
806806
}
807807

808-
#ifdef Q_OS_MAC
809808
void QgsComposer::changeEvent( QEvent* event )
810809
{
811810
QMainWindow::changeEvent( event );
812811
switch ( event->type() )
813812
{
813+
#ifdef Q_OS_MAC
814814
case QEvent::ActivationChange:
815+
{
815816
if ( QApplication::activeWindow() == this )
816817
{
817818
mWindowAction->setChecked( true );
818819
}
819820
break;
820-
821+
}
822+
#endif
823+
case QEvent::WindowStateChange:
824+
{
825+
/* Listen out for window un-minimisation and restore composer map states.
826+
* We can't use showEvent to detect this due to QT Bug 36675 (see #6085).
827+
*/
828+
QWindowStateChangeEvent* changeEv = static_cast< QWindowStateChangeEvent* >( event );
829+
if ( changeEv->oldState() & Qt::WindowMinimized )
830+
{
831+
// Window restored, restore composers
832+
restoreComposerMapStates();
833+
}
834+
break;
835+
}
821836
default:
822837
break;
823838
}
824839
}
825-
#endif
826840

827841
void QgsComposer::setTitle( const QString& title )
828842
{
@@ -3005,21 +3019,16 @@ void QgsComposer::resizeEvent( QResizeEvent *e )
30053019
saveWindowState();
30063020
}
30073021

3022+
#ifdef Q_OS_MAC
30083023
void QgsComposer::showEvent( QShowEvent* event )
30093024
{
3010-
if ( event->spontaneous() ) //event from the window system
3011-
{
3012-
restoreComposerMapStates();
3013-
}
3014-
3015-
#ifdef Q_OS_MAC
30163025
// add to menu if (re)opening window (event not due to unminimize)
30173026
if ( !event->spontaneous() )
30183027
{
30193028
mQgis->addWindow( mWindowAction );
30203029
}
3021-
#endif
30223030
}
3031+
#endif
30233032

30243033
void QgsComposer::saveWindowState()
30253034
{
@@ -3564,15 +3573,18 @@ void QgsComposer::on_mActionPageSetup_triggered()
35643573

35653574
void QgsComposer::restoreComposerMapStates()
35663575
{
3567-
//go through maps and restore original preview modes (show on demand after loading from project file)
3568-
QMap< QgsComposerMap*, int >::iterator mapIt = mMapsToRestore.begin();
3569-
for ( ; mapIt != mMapsToRestore.end(); ++mapIt )
3576+
if ( !mMapsToRestore.isEmpty() )
35703577
{
3571-
mapIt.key()->setPreviewMode(( QgsComposerMap::PreviewMode )( mapIt.value() ) );
3572-
mapIt.key()->cache();
3573-
mapIt.key()->update();
3578+
//go through maps and restore original preview modes (show on demand after loading from project file)
3579+
QMap< QgsComposerMap*, int >::iterator mapIt = mMapsToRestore.begin();
3580+
for ( ; mapIt != mMapsToRestore.end(); ++mapIt )
3581+
{
3582+
mapIt.key()->setPreviewMode(( QgsComposerMap::PreviewMode )( mapIt.value() ) );
3583+
mapIt.key()->cache();
3584+
mapIt.key()->update();
3585+
}
3586+
mMapsToRestore.clear();
35743587
}
3575-
mMapsToRestore.clear();
35763588
}
35773589

35783590
void QgsComposer::populatePrintComposersMenu()

src/app/composer/qgscomposer.h

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,13 +111,12 @@ class QgsComposer: public QMainWindow, private Ui::QgsComposerBase
111111
//! Resize event
112112
virtual void resizeEvent( QResizeEvent * ) override;
113113

114-
virtual void showEvent( QShowEvent* event ) override;
115-
116114
#ifdef Q_OS_MAC
117-
//! Change event (update window menu on ActivationChange)
118-
virtual void changeEvent( QEvent * );
115+
virtual void showEvent( QShowEvent* event ) override;
119116
#endif
120117

118+
virtual void changeEvent( QEvent *ev ) override;
119+
121120
signals:
122121
//! Is emitted every time the view zoom has changed
123122
void zoomLevelChanged();

0 commit comments

Comments
 (0)