diff --git a/part.cpp b/part.cpp index 69519477a..ec283db6e 100644 --- a/part.cpp +++ b/part.cpp @@ -1307,9 +1307,7 @@ bool Part::openFile() // if the 'OpenTOC' flag is set, open the TOC if ( m_document->metaData( "OpenTOC" ).toBool() && m_sidebar->isItemEnabled( 0 ) && !m_sidebar->isCollapsed() ) { - const bool sidebarVisible = m_sidebar->isSidebarVisible(); - m_sidebar->setCurrentIndex( 0 ); - m_sidebar->setSidebarVisibility( sidebarVisible ); + m_sidebar->setCurrentIndex( 0, Sidebar::DoNotUncollapseIfCollapsed ); } // if the 'StartFullScreen' flag is set, or the command line flag was // specified, start presentation @@ -1779,7 +1777,7 @@ void Part::enableTOC(bool enable) // If present, show the TOC when a document is opened if ( enable ) { - m_sidebar->setCurrentIndex( 0 ); + m_sidebar->setCurrentIndex( 0, Sidebar::DoNotUncollapseIfCollapsed ); } } diff --git a/ui/sidebar.cpp b/ui/sidebar.cpp index f6589c292..2474db8c3 100644 --- a/ui/sidebar.cpp +++ b/ui/sidebar.cpp @@ -592,12 +592,12 @@ bool Sidebar::isItemEnabled( int index ) const return ( f & Qt::ItemIsEnabled ) == Qt::ItemIsEnabled; } -void Sidebar::setCurrentIndex( int index ) +void Sidebar::setCurrentIndex( int index, SetCurrentIndexBehaviour b ) { if ( index < 0 || index >= d->pages.count() || !isItemEnabled( index ) ) return; - itemClicked( d->pages.at( index ) ); + itemClicked( d->pages.at( index ), b ); QModelIndex modelindex = d->list->model()->index( index, 0 ); d->list->setCurrentIndex( modelindex ); d->list->selectionModel()->select( modelindex, QItemSelectionModel::ClearAndSelect ); @@ -644,6 +644,11 @@ bool Sidebar::isCollapsed() const } void Sidebar::itemClicked( QListWidgetItem *item ) +{ + itemClicked( item, UncollapseIfCollapsed ); +} + +void Sidebar::itemClicked( QListWidgetItem *item, SetCurrentIndexBehaviour b ) { if ( !item ) return; @@ -661,13 +666,16 @@ void Sidebar::itemClicked( QListWidgetItem *item ) } else { - setCollapsed( false ); - d->list->show(); + if ( b == UncollapseIfCollapsed ) + { + setCollapsed( false ); + d->list->show(); + } } } else { - if ( isCollapsed() ) + if ( isCollapsed() && b == UncollapseIfCollapsed ) { setCollapsed( false ); d->list->show(); diff --git a/ui/sidebar.h b/ui/sidebar.h index f69b60eb9..036d77880 100644 --- a/ui/sidebar.h +++ b/ui/sidebar.h @@ -30,7 +30,9 @@ class Sidebar : public QWidget void setItemEnabled( int index, bool enabled ); bool isItemEnabled( int index ) const; - void setCurrentIndex( int index ); + enum SetCurrentIndexBehaviour { UncollapseIfCollapsed, DoNotUncollapseIfCollapsed }; + + void setCurrentIndex( int index, SetCurrentIndexBehaviour b = UncollapseIfCollapsed ); int currentIndex() const; void setSidebarVisibility( bool visible ); @@ -48,6 +50,7 @@ class Sidebar : public QWidget void appearanceChanged(); private: + void itemClicked( QListWidgetItem *item, SetCurrentIndexBehaviour b ); void saveSplitterSize() const; // private storage