diff --git a/ui/formwidgets.h b/ui/formwidgets.h --- a/ui/formwidgets.h +++ b/ui/formwidgets.h @@ -160,6 +160,8 @@ virtual void setFormWidgetsController( FormWidgetsController *controller ); protected: + virtual void slotRefresh( Okular::FormField *form ); + FormWidgetsController * m_controller; Okular::FormField * m_ff; @@ -224,7 +226,9 @@ int anchorPos ); private Q_SLOTS: void slotChanged(); - void slotRefresh(Okular::FormField* form); + + protected: + void slotRefresh( Okular::FormField* form ) override; private: int m_prevCursorPos; @@ -251,7 +255,9 @@ private Q_SLOTS: void slotChanged(); - void slotRefresh(Okular::FormField* form); + + protected: + void slotRefresh( Okular::FormField* form ) override; private: int m_prevCursorPos; diff --git a/ui/formwidgets.cpp b/ui/formwidgets.cpp --- a/ui/formwidgets.cpp +++ b/ui/formwidgets.cpp @@ -333,6 +333,22 @@ void FormWidgetIface::setFormWidgetsController( FormWidgetsController *controller ) { m_controller = controller; + QObject *obj = dynamic_cast< QObject * > ( this ); + QObject::connect( m_controller, &FormWidgetsController::refreshFormWidget, obj, + [this] ( Okular::FormField *form ) { + slotRefresh ( form ); + }); +} + +void FormWidgetIface::slotRefresh( Okular::FormField * form ) +{ + if ( m_ff != form ) + { + return; + } + setVisibility( form->isVisible() && !form->isReadOnly() ); + + m_widget->setEnabled( !form->isReadOnly() ); } @@ -422,8 +438,6 @@ FormWidgetIface::setFormWidgetsController(controller); connect( m_controller, &FormWidgetsController::formTextChangedByUndoRedo, this, &FormLineEdit::slotHandleTextChangedByUndoRedo ); - connect( m_controller, &FormWidgetsController::refreshFormWidget, - this, &FormLineEdit::slotRefresh ); } bool FormLineEdit::event( QEvent* e ) @@ -526,8 +540,9 @@ { return; } - Okular::FormFieldText *text = static_cast ( form ); + FormWidgetIface::slotRefresh( form ); + Okular::FormFieldText *text = static_cast ( form ); setText( text->text() ); } @@ -598,8 +613,6 @@ FormWidgetIface::setFormWidgetsController( controller ); connect( m_controller, &FormWidgetsController::formTextChangedByUndoRedo, this, &TextAreaEdit::slotHandleTextChangedByUndoRedo ); - connect( m_controller, &FormWidgetsController::refreshFormWidget, - this, &TextAreaEdit::slotRefresh ); } void TextAreaEdit::slotHandleTextChangedByUndoRedo( int pageNumber, @@ -647,8 +660,9 @@ { return; } - Okular::FormFieldText *text = static_cast ( form ); + FormWidgetIface::slotRefresh( form ); + Okular::FormFieldText *text = static_cast ( form ); setPlainText( text->text() ); }