--- a/src/container.cpp +++ b/src/container.cpp @@ -496,8 +496,8 @@ // figure out minimum width of our toolbar (this will change due to translations!) int w = width(); - QByteArray geometry = The::settings().containerGeometry(); - if ( geometry.isEmpty() ) + m_geometry = The::settings().containerGeometry(); + if ( m_geometry.isEmpty() ) { w = 0; QList<QAction*> a = ui.toolbar->actions(); @@ -529,14 +529,14 @@ #ifdef Q_WS_MAC // on mac qt returns height without unified toolbar height included :( // so first time we have to do it like this - if ( geometry.isEmpty() ) + if ( m_geometry.isEmpty() ) resize( w, 496 ); else - restoreGeometry( geometry ); + restoreGeometry( m_geometry ); #else - restoreGeometry( The::settings().containerGeometry() ); + restoreGeometry( m_geometry ); - if ( geometry.isEmpty() ) + if ( m_geometry.isEmpty() ) resize( w, height() ); #endif setWindowState( The::settings().containerWindowState() ); @@ -547,6 +547,7 @@ { LOGL( 3, "Saving app state" ); + The::settings().setContainerGeometry( m_geometry ); The::settings().setContainerWindowState( windowState() ); The::settings().setVolume( ui.playcontrols.volume->value() ); The::currentUser().setSidebarEnabled( m_sidebarEnabled ); @@ -702,7 +703,10 @@ // for *every* resize and move event. Yay! if (windowState() != Qt::WindowMaximized) - The::settings().setContainerGeometry( saveGeometry() ); + // Such frequent calls to setContainerGeometry() are very cpu intensive. + // Just dump to a QByteArray and save it in the destructor. + //The::settings().setContainerGeometry( saveGeometry() ); + m_geometry = saveGeometry(); } if ( e->type() == QEvent::Show ) --- a/src/container.h +++ b/src/container.h @@ -112,6 +112,7 @@ bool m_sidebarEnabled; int m_lastVolume; int m_sidebarWidth; + QByteArray m_geometry; #ifndef Q_WS_MAC QStyle* m_styleOverrides;