include/vcl/weld.hxx | 7 + svx/source/form/datanavi.cxx | 82 ++++++---------- svx/source/form/xfm_addcondition.cxx | 4 svx/source/inc/datanavi.hxx | 30 ++---- svx/uiconfig/ui/addconditiondialog.ui | 169 +++++++++++++++++++--------------- svx/uiconfig/ui/namespacedialog.ui | 1 vcl/source/app/salvtables.cxx | 12 ++ vcl/unx/gtk3/gtk3gtkinst.cxx | 29 +++++ 8 files changed, 195 insertions(+), 139 deletions(-)
New commits: commit eb25b3c94053b4b614d7c8f983158d6519e530c1 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Thu Feb 7 21:19:37 2019 +0000 Commit: Caolán McNamara <caol...@redhat.com> CommitDate: Fri Feb 8 10:59:15 2019 +0100 weld AddConditionDialog Change-Id: Ib685ea89b31c1f000bc2276e3362ba059f997422 Reviewed-on: https://gerrit.libreoffice.org/67521 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx index bcb6a898105a..e4248c61a314 100644 --- a/include/vcl/weld.hxx +++ b/include/vcl/weld.hxx @@ -1231,6 +1231,11 @@ class VCL_DLLPUBLIC TextView : virtual public Container private: OUString m_sSavedValue; +protected: + Link<TextView&, void> m_aChangeHdl; + + void signal_changed() { m_aChangeHdl.Call(*this); } + public: virtual void set_text(const OUString& rText) = 0; virtual OUString get_text() const = 0; @@ -1246,6 +1251,8 @@ public: void save_value() { m_sSavedValue = get_text(); } bool get_value_changed_from_saved() const { return m_sSavedValue != get_text(); } + + void connect_changed(const Link<TextView&, void>& rLink) { m_aChangeHdl = rLink; } }; class VCL_DLLPUBLIC Expander : virtual public Container diff --git a/svx/source/form/datanavi.cxx b/svx/source/form/datanavi.cxx index 6b241324b353..0f064627489c 100644 --- a/svx/source/form/datanavi.cxx +++ b/svx/source/form/datanavi.cxx @@ -2372,7 +2372,7 @@ namespace svxform sPropName = PN_READONLY_EXPR; else if (m_pCalculateBtn == pBtn) sPropName = PN_CALCULATE_EXPR; - ScopedVclPtrInstance< AddConditionDialog > aDlg(this, sPropName, m_xTempBinding); + AddConditionDialog aDlg(GetFrameWeld(), sPropName, m_xTempBinding); bool bIsDefBtn = ( m_pDefaultBtn == pBtn ); OUString sCondition; if ( bIsDefBtn ) @@ -2384,11 +2384,11 @@ namespace svxform sTemp = TRUE_VALUE; sCondition = sTemp; } - aDlg->SetCondition( sCondition ); + aDlg.SetCondition( sCondition ); - if ( aDlg->Execute() == RET_OK ) + if (aDlg.run() == RET_OK) { - OUString sNewCondition = aDlg->GetCondition(); + OUString sNewCondition = aDlg.GetCondition(); if ( bIsDefBtn ) m_pDefaultED->SetText( sNewCondition ); else @@ -2732,28 +2732,27 @@ namespace svxform m_pItemFrame->set_label(sText); } - AddConditionDialog::AddConditionDialog(vcl::Window* pParent, + AddConditionDialog::AddConditionDialog(weld::Window* pParent, const OUString& _rPropertyName, const Reference< XPropertySet >& _rPropSet) - : ModalDialog(pParent, "AddConditionDialog", "svx/ui/addconditiondialog.ui") + : GenericDialogController(pParent, "svx/ui/addconditiondialog.ui", "AddConditionDialog") , m_sPropertyName(_rPropertyName) , m_xBinding(_rPropSet) - + , m_xConditionED(m_xBuilder->weld_text_view("condition")) + , m_xResultWin(m_xBuilder->weld_text_view("result")) + , m_xEditNamespacesBtn(m_xBuilder->weld_button("edit")) + , m_xOKBtn(m_xBuilder->weld_button("ok")) { - get(m_pConditionED, "condition"); - get(m_pResultWin, "result"); - get(m_pEditNamespacesBtn, "edit"); - get(m_pOKBtn, "ok"); DBG_ASSERT( m_xBinding.is(), "AddConditionDialog::Ctor(): no Binding" ); - m_pConditionED->set_height_request(m_pConditionED->GetTextHeight() * 4); - m_pConditionED->set_width_request(m_pConditionED->approximate_char_width() * 62); - m_pResultWin->set_height_request(m_pResultWin->GetTextHeight() * 4); - m_pResultWin->set_width_request(m_pResultWin->approximate_char_width() * 62); + m_xConditionED->set_size_request(m_xConditionED->get_approximate_digit_width() * 52, + m_xConditionED->get_height_rows(4)); + m_xResultWin->set_size_request(m_xResultWin->get_approximate_digit_width() * 52, + m_xResultWin->get_height_rows(4)); - m_pConditionED->SetModifyHdl( LINK( this, AddConditionDialog, ModifyHdl ) ); - m_pEditNamespacesBtn->SetClickHdl( LINK( this, AddConditionDialog, EditHdl ) ); - m_pOKBtn->SetClickHdl( LINK( this, AddConditionDialog, OKHdl ) ); + m_xConditionED->connect_changed( LINK( this, AddConditionDialog, ModifyHdl ) ); + m_xEditNamespacesBtn->connect_clicked( LINK( this, AddConditionDialog, EditHdl ) ); + m_xOKBtn->connect_clicked( LINK( this, AddConditionDialog, OKHdl ) ); m_aResultIdle.SetPriority( TaskPriority::LOWEST ); m_aResultIdle.SetInvokeHandler( LINK( this, AddConditionDialog, ResultHdl ) ); @@ -2765,12 +2764,12 @@ namespace svxform if ( ( m_xBinding->getPropertyValue( m_sPropertyName ) >>= sTemp ) && !sTemp.isEmpty() ) { - m_pConditionED->SetText( sTemp ); + m_xConditionED->set_text( sTemp ); } else { //! m_xBinding->setPropertyValue( m_sPropertyName, makeAny( TRUE_VALUE ) ); - m_pConditionED->SetText( TRUE_VALUE ); + m_xConditionED->set_text( TRUE_VALUE ); } Reference< css::xforms::XModel > xModel; @@ -2789,19 +2788,9 @@ namespace svxform AddConditionDialog::~AddConditionDialog() { - disposeOnce(); - } - - void AddConditionDialog::dispose() - { - m_pConditionED.clear(); - m_pResultWin.clear(); - m_pEditNamespacesBtn.clear(); - m_pOKBtn.clear(); - ModalDialog::dispose(); } - IMPL_LINK_NOARG(AddConditionDialog, EditHdl, Button*, void) + IMPL_LINK_NOARG(AddConditionDialog, EditHdl, weld::Button&, void) { Reference< XNameContainer > xNameContnr; try @@ -2824,8 +2813,7 @@ namespace svxform } } - - IMPL_LINK_NOARG(AddConditionDialog, OKHdl, Button*, void) + IMPL_LINK_NOARG(AddConditionDialog, OKHdl, weld::Button&, void) { /*!!! try @@ -2838,19 +2826,17 @@ namespace svxform SAL_WARN( "svx.form", "AddConditionDialog, OKHdl: caught an exception!" ); } */ - EndDialog( RET_OK ); + m_xDialog->response(RET_OK); } - - IMPL_LINK_NOARG(AddConditionDialog, ModifyHdl, Edit&, void) + IMPL_LINK_NOARG(AddConditionDialog, ModifyHdl, weld::TextView&, void) { m_aResultIdle.Start(); } - IMPL_LINK_NOARG(AddConditionDialog, ResultHdl, Timer *, void) { - OUString sCondition = comphelper::string::strip(m_pConditionED->GetText(), ' '); + OUString sCondition = comphelper::string::strip(m_xConditionED->get_text(), ' '); OUString sResult; if ( !sCondition.isEmpty() ) { @@ -2863,11 +2849,11 @@ namespace svxform SAL_WARN( "svx.form", "AddConditionDialog::ResultHdl(): exception caught" ); } } - m_pResultWin->SetText( sResult ); + m_xResultWin->set_text(sResult); } NamespaceItemDialog::NamespaceItemDialog(AddConditionDialog* pCondDlg, Reference<XNameContainer>& rContainer) - : GenericDialogController(pCondDlg->GetFrameWeld(), "svx/ui/namespacedialog.ui", "NamespaceDialog") + : GenericDialogController(pCondDlg->getDialog(), "svx/ui/namespacedialog.ui", "NamespaceDialog") , m_pConditionDlg(pCondDlg) , m_rNamespaces(rContainer) , m_xNamespacesList(m_xBuilder->weld_tree_view("namespaces")) @@ -3009,9 +2995,9 @@ namespace svxform } } - ManageNamespaceDialog::ManageNamespaceDialog(weld::Window* pParent, AddConditionDialog* _pCondDlg, bool bIsEdit) + ManageNamespaceDialog::ManageNamespaceDialog(weld::Window* pParent, AddConditionDialog* pCondDlg, bool bIsEdit) : GenericDialogController(pParent, "svx/ui/addnamespacedialog.ui", "AddNamespaceDialog") - , m_xConditionDlg(_pCondDlg) + , m_pConditionDlg(pCondDlg) , m_xPrefixED(m_xBuilder->weld_entry("prefix")) , m_xUrlED(m_xBuilder->weld_entry("url")) , m_xOKBtn(m_xBuilder->weld_button("ok")) @@ -3033,7 +3019,7 @@ namespace svxform try { - if (!m_xConditionDlg->GetUIHelper()->isValidPrefixName(sPrefix)) + if (!m_pConditionDlg->GetUIHelper()->isValidPrefixName(sPrefix)) { std::unique_ptr<weld::MessageDialog> xErrBox(Application::CreateMessageDialog(m_xDialog.get(), VclMessageType::Warning, VclButtonsType::Ok, @@ -3096,16 +3082,14 @@ namespace svxform ModalDialog::dispose(); } - IMPL_LINK_NOARG(AddSubmissionDialog, RefHdl, Button*, void) { - ScopedVclPtrInstance< AddConditionDialog > aDlg(this, PN_BINDING_EXPR, m_xTempBinding ); - aDlg->SetCondition( m_pRefED->GetText() ); - if ( aDlg->Execute() == RET_OK ) - m_pRefED->SetText( aDlg->GetCondition() ); + AddConditionDialog aDlg(GetFrameWeld(), PN_BINDING_EXPR, m_xTempBinding ); + aDlg.SetCondition( m_pRefED->GetText() ); + if ( aDlg.run() == RET_OK ) + m_pRefED->SetText( aDlg.GetCondition() ); } - IMPL_LINK_NOARG(AddSubmissionDialog, OKHdl, Button*, void) { OUString sName(m_pNameED->GetText()); diff --git a/svx/source/form/xfm_addcondition.cxx b/svx/source/form/xfm_addcondition.cxx index 659327d00fee..a99ae039a363 100644 --- a/svx/source/form/xfm_addcondition.cxx +++ b/svx/source/form/xfm_addcondition.cxx @@ -144,14 +144,14 @@ namespace svxform if ( !m_xBinding.is() || m_sFacetName.isEmpty() ) throw RuntimeException( OUString(), *this ); - return svt::OGenericUnoDialog::Dialog(VclPtr<AddConditionDialog>::Create(VCLUnoHelper::GetWindow(rParent), m_sFacetName, m_xBinding)); + return svt::OGenericUnoDialog::Dialog(std::make_unique<AddConditionDialog>(Application::GetFrameWeld(rParent), m_sFacetName, m_xBinding)); } void OAddConditionDialog::executedDialog( sal_Int16 _nExecutionResult ) { OAddConditionDialogBase::executedDialog( _nExecutionResult ); if ( _nExecutionResult == RET_OK ) - m_sConditionValue = static_cast< AddConditionDialog* >( m_aDialog.m_xVclDialog.get() )->GetCondition(); + m_sConditionValue = static_cast< AddConditionDialog* >( m_aDialog.m_xWeldDialog.get() )->GetCondition(); } } diff --git a/svx/source/inc/datanavi.hxx b/svx/source/inc/datanavi.hxx index facd9fbefe2c..5bfc7e5d6feb 100644 --- a/svx/source/inc/datanavi.hxx +++ b/svx/source/inc/datanavi.hxx @@ -444,15 +444,9 @@ namespace svxform void InitText( DataItemType _eType ); }; - - class AddConditionDialog : public ModalDialog + class AddConditionDialog : public weld::GenericDialogController { private: - VclPtr<VclMultiLineEdit> m_pConditionED; - VclPtr<VclMultiLineEdit> m_pResultWin; - VclPtr<PushButton> m_pEditNamespacesBtn; - VclPtr<OKButton> m_pOKBtn; - Idle m_aResultIdle; OUString const m_sPropertyName; @@ -461,22 +455,26 @@ namespace svxform css::uno::Reference< css::beans::XPropertySet > m_xBinding; - DECL_LINK(ModifyHdl, Edit&, void); + std::unique_ptr<weld::TextView> m_xConditionED; + std::unique_ptr<weld::TextView> m_xResultWin; + std::unique_ptr<weld::Button> m_xEditNamespacesBtn; + std::unique_ptr<weld::Button> m_xOKBtn; + + DECL_LINK(ModifyHdl, weld::TextView&, void); DECL_LINK(ResultHdl, Timer *, void); - DECL_LINK(EditHdl, Button*, void); - DECL_LINK(OKHdl, Button*, void); + DECL_LINK(EditHdl, weld::Button&, void); + DECL_LINK(OKHdl, weld::Button&, void); public: - AddConditionDialog(vcl::Window* pParent, + AddConditionDialog(weld::Window* pParent, const OUString& _rPropertyName, const css::uno::Reference< css::beans::XPropertySet >& _rBinding); virtual ~AddConditionDialog() override; - virtual void dispose() override; const css::uno::Reference< css::xforms::XFormsUIHelper1 >& GetUIHelper() const { return m_xUIHelper; } - OUString GetCondition() const { return m_pConditionED->GetText(); } + OUString GetCondition() const { return m_xConditionED->get_text(); } void SetCondition(const OUString& _rCondition) { - m_pConditionED->SetText(_rCondition); + m_xConditionED->set_text(_rCondition); m_aResultIdle.Start(); } }; @@ -484,7 +482,7 @@ namespace svxform class NamespaceItemDialog : public weld::GenericDialogController { private: - VclPtr<AddConditionDialog> m_pConditionDlg; + AddConditionDialog* m_pConditionDlg; std::vector< OUString > m_aRemovedList; css::uno::Reference< css::container::XNameContainer >& @@ -510,7 +508,7 @@ namespace svxform class ManageNamespaceDialog : public weld::GenericDialogController { private: - VclPtr<AddConditionDialog> m_xConditionDlg; + AddConditionDialog* m_pConditionDlg; std::unique_ptr<weld::Entry> m_xPrefixED; std::unique_ptr<weld::Entry> m_xUrlED; diff --git a/svx/uiconfig/ui/addconditiondialog.ui b/svx/uiconfig/ui/addconditiondialog.ui index 6a2b47abfa15..ab60984fd425 100644 --- a/svx/uiconfig/ui/addconditiondialog.ui +++ b/svx/uiconfig/ui/addconditiondialog.ui @@ -1,5 +1,5 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.18.3 --> +<!-- Generated with glade 3.22.1 --> <interface domain="svx"> <requires lib="gtk+" version="3.18"/> <object class="GtkDialog" id="AddConditionDialog"> @@ -7,12 +7,75 @@ <property name="border_width">6</property> <property name="title" translatable="yes" context="addconditiondialog|AddConditionDialog">Add Condition</property> <property name="resizable">False</property> + <property name="modal">True</property> + <property name="default_width">0</property> + <property name="default_height">0</property> <property name="type_hint">dialog</property> + <child> + <placeholder/> + </child> <child internal-child="vbox"> <object class="GtkBox" id="dialog-vbox1"> <property name="can_focus">False</property> <property name="orientation">vertical</property> <property name="spacing">12</property> + <child internal-child="action_area"> + <object class="GtkButtonBox" id="dialog-action_area1"> + <property name="can_focus">False</property> + <property name="layout_style">end</property> + <child> + <object class="GtkButton" id="ok"> + <property name="label">gtk-ok</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="can_default">True</property> + <property name="has_default">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="cancel"> + <property name="label">gtk-cancel</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="help"> + <property name="label">gtk-help</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <property name="use_stock">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + <property name="secondary">True</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack_type">end</property> + <property name="position">2</property> + </packing> + </child> <child> <object class="GtkGrid" id="grid1"> <property name="visible">True</property> @@ -24,10 +87,10 @@ <object class="GtkLabel" id="label1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="addconditiondialog|label1">_Condition:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">condition:border</property> + <property name="mnemonic_widget">condition</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> @@ -35,12 +98,21 @@ </packing> </child> <child> - <object class="GtkTextView" id="condition:border"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can_focus">True</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="wrap_mode">word</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTextView" id="condition"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="wrap_mode">word</property> + </object> + </child> </object> <packing> <property name="left_attach">0</property> @@ -65,10 +137,10 @@ <object class="GtkLabel" id="label2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="xalign">0</property> <property name="label" translatable="yes" context="addconditiondialog|label2">_Result:</property> <property name="use_underline">True</property> - <property name="mnemonic_widget">result:border</property> + <property name="mnemonic_widget">result</property> + <property name="xalign">0</property> </object> <packing> <property name="left_attach">0</property> @@ -76,20 +148,6 @@ </packing> </child> <child> - <object class="GtkTextView" id="result:border"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hexpand">True</property> - <property name="vexpand">True</property> - <property name="editable">False</property> - <property name="wrap_mode">word</property> - </object> - <packing> - <property name="left_attach">0</property> - <property name="top_attach">1</property> - </packing> - </child> - <child> <object class="GtkButton" id="edit"> <property name="label" translatable="yes" context="addconditiondialog|edit">_Edit Namespaces...</property> <property name="visible">True</property> @@ -103,68 +161,35 @@ <property name="top_attach">2</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child internal-child="action_area"> - <object class="GtkButtonBox" id="dialog-action_area1"> - <property name="can_focus">False</property> - <property name="layout_style">end</property> - <child> - <object class="GtkButton" id="ok"> - <property name="label">gtk-ok</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="can_default">True</property> - <property name="has_default">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="cancel"> - <property name="label">gtk-cancel</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> <child> - <object class="GtkButton" id="help"> - <property name="label">gtk-help</property> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="use_stock">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTextView" id="result"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hexpand">True</property> + <property name="vexpand">True</property> + <property name="editable">False</property> + <property name="wrap_mode">word</property> + <property name="cursor_visible">False</property> + </object> + </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - <property name="secondary">True</property> + <property name="left_attach">0</property> + <property name="top_attach">1</property> </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack_type">end</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> diff --git a/svx/uiconfig/ui/namespacedialog.ui b/svx/uiconfig/ui/namespacedialog.ui index 9542213eb9ae..7c5e445ac830 100644 --- a/svx/uiconfig/ui/namespacedialog.ui +++ b/svx/uiconfig/ui/namespacedialog.ui @@ -17,6 +17,7 @@ <property name="border_width">6</property> <property name="title" translatable="yes" context="namespacedialog|NamespaceDialog">Namespaces for Forms</property> <property name="resizable">False</property> + <property name="modal">True</property> <property name="type_hint">dialog</property> <child> <placeholder/> diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index fd769b95e663..d7d62a85f099 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -2862,11 +2862,13 @@ class SalInstanceTextView : public SalInstanceContainer, public virtual weld::Te private: VclPtr<VclMultiLineEdit> m_xTextView; + DECL_LINK(ChangeHdl, Edit&, void); public: SalInstanceTextView(VclMultiLineEdit* pTextView, bool bTakeOwnership) : SalInstanceContainer(pTextView, bTakeOwnership) , m_xTextView(pTextView) { + m_xTextView->SetModifyHdl(LINK(this, SalInstanceTextView, ChangeHdl)); } virtual void set_text(const OUString& rText) override @@ -2903,8 +2905,18 @@ public: { m_xTextView->SetReadOnly(!bEditable); } + + virtual ~SalInstanceTextView() override + { + m_xTextView->SetModifyHdl(Link<Edit&, void>()); + } }; +IMPL_LINK_NOARG(SalInstanceTextView, ChangeHdl, Edit&, void) +{ + signal_changed(); +} + class SalInstanceExpander : public SalInstanceContainer, public virtual weld::Expander { private: diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index ca35d447fbb1..58ab06ca987f 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -6217,10 +6217,22 @@ class GtkInstanceTextView : public GtkInstanceContainer, public virtual weld::Te { private: GtkTextView* m_pTextView; + GtkTextBuffer* m_pTextBuffer; + gulong m_nChangedSignalId; + + static void signalChanged(GtkTextView*, gpointer widget) + { + GtkInstanceTextView* pThis = static_cast<GtkInstanceTextView*>(widget); + SolarMutexGuard aGuard; + pThis->signal_changed(); + } + public: GtkInstanceTextView(GtkTextView* pTextView, bool bTakeOwnership) : GtkInstanceContainer(GTK_CONTAINER(pTextView), bTakeOwnership) , m_pTextView(pTextView) + , m_pTextBuffer(gtk_text_view_get_buffer(pTextView)) + , m_nChangedSignalId(g_signal_connect(m_pTextBuffer, "changed", G_CALLBACK(signalChanged), this)) { } @@ -6287,6 +6299,23 @@ public: { gtk_text_view_set_editable(m_pTextView, bEditable); } + + virtual void disable_notify_events() override + { + g_signal_handler_block(m_pTextBuffer, m_nChangedSignalId); + GtkInstanceContainer::disable_notify_events(); + } + + virtual void enable_notify_events() override + { + GtkInstanceContainer::enable_notify_events(); + g_signal_handler_unblock(m_pTextBuffer, m_nChangedSignalId); + } + + virtual ~GtkInstanceTextView() override + { + g_signal_handler_disconnect(m_pTextBuffer, m_nChangedSignalId); + } }; static MouseEventModifiers ImplGetMouseButtonMode(sal_uInt16 nButton, sal_uInt16 nCode) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits