diff --git a/ui/formwidgets.cpp b/ui/formwidgets.cpp index 479c01a76..9a6836cf7 100644 --- a/ui/formwidgets.cpp +++ b/ui/formwidgets.cpp @@ -80,12 +80,16 @@ void FormWidgetIface::moveTo( int x, int y ) m_widget->move( x, y ); } -void FormWidgetIface::setVisibility( bool visible ) +bool FormWidgetIface::setVisibility( bool visible ) { if ( !m_ff->isVisible() ) - return; + return false; + bool hadfocus = m_widget->hasFocus(); + if ( hadfocus ) + m_widget->clearFocus(); m_widget->setVisible( visible ); + return hadfocus; } diff --git a/ui/formwidgets.h b/ui/formwidgets.h index f0fd9e8f7..a7264ea2b 100644 --- a/ui/formwidgets.h +++ b/ui/formwidgets.h @@ -44,7 +44,7 @@ class FormWidgetIface Okular::NormalizedRect rect() const; void setWidthHeight( int w, int h ); void moveTo( int x, int y ); - void setVisibility( bool visible ); + bool setVisibility( bool visible ); private: QWidget * m_widget; diff --git a/ui/pageview.cpp b/ui/pageview.cpp index 06f521b7b..6e19ef94e 100644 --- a/ui/pageview.cpp +++ b/ui/pageview.cpp @@ -2392,11 +2392,14 @@ void PageView::center(int cx, int cy) void PageView::toggleFormWidgets( bool on ) { + bool somehadfocus = false; QVector< PageViewItem * >::const_iterator dIt = d->items.begin(), dEnd = d->items.end(); for ( ; dIt != dEnd; ++dIt ) { - (*dIt)->setFormWidgetsVisible( on ); + somehadfocus = somehadfocus || (*dIt)->setFormWidgetsVisible( on ); } + if ( somehadfocus ) + setFocus(); d->m_formsVisible = on; if ( d->m_formsVisible ) { diff --git a/ui/pageviewutils.cpp b/ui/pageviewutils.cpp index 6e66b6492..df8a5d7f5 100644 --- a/ui/pageviewutils.cpp +++ b/ui/pageviewutils.cpp @@ -119,11 +119,13 @@ void PageViewItem::invalidate() m_geometry.setRect( 0, 0, 0, 0 ); } -void PageViewItem::setFormWidgetsVisible( bool visible ) +bool PageViewItem::setFormWidgetsVisible( bool visible ) { + bool somehadfocus = false; QHash::iterator it = m_formWidgets.begin(), itEnd = m_formWidgets.end(); for ( ; it != itEnd; ++it ) - (*it)->setVisibility( visible ); + somehadfocus = somehadfocus || (*it)->setVisibility( visible ); + return somehadfocus; } /*********************/ diff --git a/ui/pageviewutils.h b/ui/pageviewutils.h index c37a2fc5b..791352ab3 100644 --- a/ui/pageviewutils.h +++ b/ui/pageviewutils.h @@ -50,7 +50,7 @@ class PageViewItem void setWHZ( int w, int h, double zoom ); void moveTo( int x, int y ); void invalidate(); - void setFormWidgetsVisible( bool visible ); + bool setFormWidgetsVisible( bool visible ); private: const Okular::Page * m_page;