diff --git a/interfaces/viewerinterface.h b/interfaces/viewerinterface.h index 4a4d978c5..e1ea70e62 100644 --- a/interfaces/viewerinterface.h +++ b/interfaces/viewerinterface.h @@ -50,6 +50,12 @@ class OKULAR_EXPORT ViewerInterface * reference in the currently displayed document. */ void openSourceReference(const QString& absFileName, int line, int column); + + /** + * The signal 'viewerMenuStateChange' is emitted whenever the state of the menu + * 'menu_okular_part_viewer' defined in 'part-viewermode.rc' has changed. + */ + void viewerMenuStateChange(bool enabled); }; } diff --git a/part.cpp b/part.cpp index 9325fffb0..8be2b92df 100644 --- a/part.cpp +++ b/part.cpp @@ -488,11 +488,8 @@ m_cliPresentation(false), m_embedMode(detectEmbedMode(parentWidget, parent, args // ensure history actions are in the correct state updateViewActions(); - if( m_embedMode == ViewerWidgetMode ) { - m_bottomBar->setVisible(false); - Okular::Settings::setViewMode(Okular::Settings::EnumViewMode::Single); - Okular::Settings::setViewContinuous(true); - } + // also update the state of the actions in the page view + m_pageView->updateActionState( false, false, false ); if ( m_embedMode == NativeShellMode ) m_sidebar->setAutoFillBackground( false ); @@ -1530,6 +1527,17 @@ void Part::updateViewActions() if (m_copy) m_copy->setEnabled( false ); if (m_selectAll) m_selectAll->setEnabled( false ); } + + if ( factory() ) + { + QWidget *menu = factory()->container("menu_okular_part_viewer", this); + if( menu ) + { + menu->setEnabled( opened ); + } + } + emit(viewerMenuStateChange( opened )); + updateBookmarksActions(); } diff --git a/part.h b/part.h index 42c7eef21..fb4b61ac1 100644 --- a/part.h +++ b/part.h @@ -128,6 +128,7 @@ class Part : public KParts::ReadOnlyPart, public Okular::DocumentObserver, publi signals: void enablePrintAction(bool enable); void openSourceReference(const QString& absFileName, int line, int column); + void viewerMenuStateChange(bool enabled); protected: // reimplemented from KParts::ReadOnlyPart diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 0417b9a10..bf7d5f300 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -873,6 +873,16 @@ void PageView::notifySetup( const QVector< Okular::Page * > & pageSet, int setup QString(), PageViewMessage::Info, 4000 ); + updateActionState( haspages, documentChanged, hasformwidgets ); + + qDeleteAll( d->m_annowindows ); + d->m_annowindows.clear(); + + selectionClear(); +} + +void PageView::updateActionState( bool haspages, bool documentChanged, bool hasformwidgets ) +{ if ( d->aPageSizes ) { // may be null if dummy mode is on bool pageSizes = d->document->supportsPageSizes(); @@ -888,6 +898,36 @@ void PageView::notifySetup( const QVector< Okular::Page * > & pageSet, int setup d->aPageSizes->setItems( items ); } } + + if ( d->aTrimMargins ) + d->aTrimMargins->setEnabled( haspages ); + + if ( d->aViewMode ) + d->aViewMode->setEnabled( haspages ); + + if ( d->aViewContinuous ) + d->aViewContinuous->setEnabled( haspages ); + + if ( d->aZoomFitWidth ) + d->aZoomFitWidth->setEnabled( haspages ); + if ( d->aZoomFitPage ) + d->aZoomFitPage->setEnabled( haspages ); + if ( d->aZoomFitText ) + d->aZoomFitText->setEnabled( haspages ); + + if ( d->aZoom ) + { + d->aZoom->selectableActionGroup()->setEnabled( haspages ); + d->aZoom->setEnabled( haspages ); + } + if ( d->aZoomIn ) + d->aZoomIn->setEnabled( haspages ); + if ( d->aZoomOut ) + d->aZoomOut->setEnabled( haspages ); + + if ( d->mouseModeActionGroup ) + d->mouseModeActionGroup->setEnabled( haspages ); + if ( d->aRotateClockwise ) d->aRotateClockwise->setEnabled( haspages ); if ( d->aRotateCounterClockwise ) @@ -919,10 +959,6 @@ void PageView::notifySetup( const QVector< Okular::Page * > & pageSet, int setup d->aSpeakDoc->setEnabled( enablettsactions ); d->aSpeakPage->setEnabled( enablettsactions ); } - qDeleteAll( d->m_annowindows ); - d->m_annowindows.clear(); - - selectionClear(); } void PageView::notifyViewportChanged( bool smoothMove ) @@ -3240,6 +3276,8 @@ void PageView::updateZoomText() else if ( d->zoomMode == ZoomFitText ) selIdx = 2; d->aZoom->setCurrentItem( selIdx ); + d->aZoom->setEnabled(d->items.size() > 0); + d->aZoom->selectableActionGroup()->setEnabled( d->items.size() > 0 ); } void PageView::updateCursor( const QPoint &p ) @@ -3843,6 +3881,9 @@ void PageView::slotConfigureWebShortcuts() void PageView::slotZoom() { + if ( !d->aZoom->selectableActionGroup()->isEnabled() ) + return; + setFocus(); updateZoom( ZoomFixed ); } diff --git a/ui/pageview.h b/ui/pageview.h index 2c9ad9562..461566d7e 100644 --- a/ui/pageview.h +++ b/ui/pageview.h @@ -64,6 +64,7 @@ Q_OBJECT void setupBaseActions( KActionCollection * collection ); void setupViewerActions( KActionCollection * collection ); void setupActions( KActionCollection * collection ); + void updateActionState( bool docHasPages, bool docChanged, bool docHasFormWidgets ); // misc methods (from RMB menu/children) bool canFitPageWidth() const;