diff options
24 files changed, 150 insertions, 251 deletions
diff --git a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx index 58a744980556..85f263b1c21f 100644 --- a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx +++ b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx @@ -80,14 +80,6 @@ CreationWizard::CreationWizard(weld::Window* pParent, const uno::Reference<frame m_xAssistant->set_current_page(0); } -short CreationWizard::run() -{ - int nRet = vcl::RoadmapWizardMachine::run(); - if (nRet == static_cast<int>(WizardButtonFlags::FINISH)) - return ui::dialogs::ExecutableDialogResults::OK; - return ui::dialogs::ExecutableDialogResults::CANCEL; -} - CreationWizard::~CreationWizard() = default; VclPtr<TabPage> CreationWizard::createPage(WizardState nState) diff --git a/chart2/source/controller/inc/dlg_CreationWizard.hxx b/chart2/source/controller/inc/dlg_CreationWizard.hxx index 8562d6365020..db64d9d1cb9d 100644 --- a/chart2/source/controller/inc/dlg_CreationWizard.hxx +++ b/chart2/source/controller/inc/dlg_CreationWizard.hxx @@ -50,8 +50,6 @@ public: virtual void setInvalidPage(TabPage * pTabPage) override; virtual void setValidPage(TabPage * pTabPage) override; - virtual short run() override; - protected: virtual bool leaveState( WizardState _nState ) override; virtual WizardState determineNextState(WizardState nCurrentState) const override; diff --git a/dbaccess/source/ui/dlg/dbwizsetup.cxx b/dbaccess/source/ui/dlg/dbwizsetup.cxx index bc1bd79c581e..cc901bd84817 100644 --- a/dbaccess/source/ui/dlg/dbwizsetup.cxx +++ b/dbaccess/source/ui/dlg/dbwizsetup.cxx @@ -174,14 +174,6 @@ ODbTypeWizDialogSetup::ODbTypeWizDialogSetup(weld::Window* _pParent m_xAssistant->set_current_page(0); } -short ODbTypeWizDialogSetup::run() -{ - int nRet = vcl::RoadmapWizardMachine::run(); - if (nRet == static_cast<int>(WizardButtonFlags::FINISH)) - return ui::dialogs::ExecutableDialogResults::OK; - return ui::dialogs::ExecutableDialogResults::CANCEL; -} - void ODbTypeWizDialogSetup::declareAuthDepPath( const OUString& _sURL, PathId _nPathId, const vcl::RoadmapWizardTypes::WizardPath& _rPaths) { bool bHasAuthentication = DataSourceMetaData::getAuthentication( _sURL ) != AuthNone; diff --git a/dbaccess/source/ui/inc/dbwizsetup.hxx b/dbaccess/source/ui/inc/dbwizsetup.hxx index 171c58bfbba1..16969b467ee3 100644 --- a/dbaccess/source/ui/inc/dbwizsetup.hxx +++ b/dbaccess/source/ui/inc/dbwizsetup.hxx @@ -118,7 +118,6 @@ public: */ bool IsTableWizardToBeStarted() const; - virtual short run() override; private: /// to override to create new pages virtual VclPtr<TabPage> createPage(WizardState _nState) override; diff --git a/include/vcl/roadmapwizard.hxx b/include/vcl/roadmapwizard.hxx index de70169fdbcc..b94b89f61a38 100644 --- a/include/vcl/roadmapwizard.hxx +++ b/include/vcl/roadmapwizard.hxx @@ -344,11 +344,6 @@ namespace vcl */ virtual OUString getStateDisplayName( WizardState _nState ) const; - /** asks for a new label of the wizard page - - */ - void updateRoadmapItemLabel( WizardState _nState ); - private: DECL_DLLPRIVATE_LINK( OnRoadmapItemSelected, const OString&, bool ); diff --git a/sw/source/ui/dbui/mailmergewizard.cxx b/sw/source/ui/dbui/mailmergewizard.cxx index 6ca8822cbfc3..f7b6362ddbf0 100644 --- a/sw/source/ui/dbui/mailmergewizard.cxx +++ b/sw/source/ui/dbui/mailmergewizard.cxx @@ -38,27 +38,27 @@ using namespace svt; using namespace ::com::sun::star; -SwMailMergeWizard::SwMailMergeWizard(SwView& rView, std::shared_ptr<SwMailMergeConfigItem> const & rItem) : - RoadmapWizard(&rView.GetViewFrame()->GetWindow()), - m_pSwView(&rView), - m_bDocumentLoad( false ), - m_xConfigItem(rItem), - m_sStarting( SwResId( ST_STARTING )), - m_sDocumentType( SwResId( ST_DOCUMENTTYPE )), - m_sAddressBlock( SwResId( ST_ADDRESSBLOCK )), - m_sAddressList( SwResId( ST_ADDRESSLIST )), - m_sGreetingsLine( SwResId( ST_GREETINGSLINE )), - m_sLayout( SwResId( ST_LAYOUT )), - m_nRestartPage( MM_DOCUMENTSELECTPAGE ) +SwMailMergeWizard::SwMailMergeWizard(SwView& rView, std::shared_ptr<SwMailMergeConfigItem> const & rItem) + : RoadmapWizardMachine(rView.GetFrameWeld()) + , m_pSwView(&rView) + , m_bDocumentLoad(false) + , m_xConfigItem(rItem) + , m_sStarting(SwResId(ST_STARTING)) + , m_sDocumentType(SwResId(ST_DOCUMENTTYPE)) + , m_sAddressBlock(SwResId(ST_ADDRESSBLOCK)) + , m_sAddressList(SwResId(ST_ADDRESSLIST)) + , m_sGreetingsLine(SwResId(ST_GREETINGSLINE)) + , m_sLayout(SwResId(ST_LAYOUT)) + , m_nRestartPage(MM_DOCUMENTSELECTPAGE) { defaultButton(WizardButtonFlags::NEXT); enableButtons(WizardButtonFlags::FINISH, false); - setTitleBase(SwResId( ST_MMWTITLE ) ); + setTitleBase(SwResId(ST_MMWTITLE)); - m_pFinish->SetText(SwResId( ST_FINISH )); - m_pNextPage->SetHelpId(HID_MM_NEXT_PAGE); - m_pPrevPage->SetHelpId(HID_MM_PREV_PAGE); + m_xFinish->set_label(SwResId( ST_FINISH )); + m_xNextPage->set_help_id(HID_MM_NEXT_PAGE); + m_xPrevPage->set_help_id(HID_MM_PREV_PAGE); //#i51949# no output type page visible if e-Mail is not supported if (m_xConfigItem->IsMailAvailable()) @@ -80,6 +80,7 @@ SwMailMergeWizard::SwMailMergeWizard(SwView& rView, std::shared_ptr<SwMailMergeC ); ActivatePage(); + m_xAssistant->set_current_page(0); UpdateRoadmap(); } @@ -89,11 +90,16 @@ SwMailMergeWizard::~SwMailMergeWizard() VclPtr<TabPage> SwMailMergeWizard::createPage(WizardState _nState) { + OString sIdent(OString::number(_nState)); + weld::Container* pPageContainer = m_xAssistant->append_page(sIdent); + // TODO eventually pass DialogController as distinct argument instead of bundling into TabPageParent + TabPageParent aParent(pPageContainer, this); + VclPtr<vcl::OWizardPage> pRet; switch(_nState) { case MM_DOCUMENTSELECTPAGE : - pRet = VclPtr<SwMailMergeDocSelectPage>::Create(this, TabPageParent(this)); + pRet = VclPtr<SwMailMergeDocSelectPage>::Create(this, aParent); /* tdf#52986 Set help ID using SetRoadmapHelpId for all pages so that when by default the focus is on the left side pane of @@ -102,29 +108,33 @@ VclPtr<TabPage> SwMailMergeWizard::createPage(WizardState _nState) SetRoadmapHelpId("modules/swriter/ui/mmselectpage/MMSelectPage"); break; case MM_OUTPUTTYPETPAGE : - pRet = VclPtr<SwMailMergeOutputTypePage>::Create(this, TabPageParent(this)); + pRet = VclPtr<SwMailMergeOutputTypePage>::Create(this, aParent); SetRoadmapHelpId("modules/swriter/ui/mmoutputtypepage/MMOutputTypePage"); break; case MM_ADDRESSBLOCKPAGE : - pRet = VclPtr<SwMailMergeAddressBlockPage>::Create(this, TabPageParent(this)); + pRet = VclPtr<SwMailMergeAddressBlockPage>::Create(this, aParent); SetRoadmapHelpId("modules/swriter/ui/mmaddressblockpage/MMAddressBlockPage"); break; case MM_GREETINGSPAGE : - pRet = VclPtr<SwMailMergeGreetingsPage>::Create(this, TabPageParent(this)); + pRet = VclPtr<SwMailMergeGreetingsPage>::Create(this, aParent); SetRoadmapHelpId("modules/swriter/ui/mmsalutationpage/MMSalutationPage"); break; case MM_LAYOUTPAGE : - pRet = VclPtr<SwMailMergeLayoutPage>::Create(this, TabPageParent(this)); + pRet = VclPtr<SwMailMergeLayoutPage>::Create(this, aParent); SetRoadmapHelpId("modules/swriter/ui/mmlayoutpage/MMLayoutPage"); break; } + + m_xAssistant->set_page_title(sIdent, getStateDisplayName(_nState)); + + OSL_ENSURE(pRet, "no page created in ::createPage"); return pRet; } void SwMailMergeWizard::enterState( WizardState _nState ) { - ::vcl::RoadmapWizard::enterState( _nState ); + ::vcl::RoadmapWizardMachine::enterState( _nState ); if (m_xConfigItem->GetTargetView()) { @@ -132,7 +142,7 @@ void SwMailMergeWizard::enterState( WizardState _nState ) m_nRestartPage = _nState; //set ResultSet back to start m_xConfigItem->MoveResultSet(1); - EndDialog(RET_REMOVE_TARGET); + m_xAssistant->response(RET_REMOVE_TARGET); return; } bool bEnablePrev = true; @@ -188,7 +198,7 @@ void SwMailMergeWizard::UpdateRoadmap() */ // enableState( <page id>, false ); - const sal_uInt16 nCurPage = GetCurLevel(); + const sal_uInt16 nCurPage = m_xAssistant->get_current_page(); TabPage* pCurPage = GetPage( nCurPage ); if(!pCurPage) return; @@ -224,6 +234,8 @@ void SwMailMergeWizard::UpdateRoadmap() break; case MM_ADDRESSBLOCKPAGE: bEnable = !m_bDocumentLoad && bEnableOutputTypePage; + // update page title for email vs letter + m_xAssistant->set_page_title(OString::number(MM_ADDRESSBLOCKPAGE), getStateDisplayName(MM_ADDRESSBLOCKPAGE)); break; case MM_GREETINGSPAGE: bEnable = !m_bDocumentLoad && bEnableOutputTypePage && @@ -240,7 +252,7 @@ void SwMailMergeWizard::UpdateRoadmap() } } -short SwMailMergeWizard::Execute() +short SwMailMergeWizard::run() { OSL_FAIL("SwMailMergeWizard cannot be executed via Dialog::Execute!\n" "It creates a thread (MailDispatcher instance) that will call" diff --git a/sw/source/ui/dbui/mmaddressblockpage.cxx b/sw/source/ui/dbui/mmaddressblockpage.cxx index b95d4344a402..51d00b0b53da 100644 --- a/sw/source/ui/dbui/mmaddressblockpage.cxx +++ b/sw/source/ui/dbui/mmaddressblockpage.cxx @@ -73,7 +73,7 @@ SwMailMergeAddressBlockPage::SwMailMergeAddressBlockPage(SwMailMergeWizard* pWiz , m_xDocumentIndexFI(m_xBuilder->weld_label("documentindex")) , m_xPrevSetIB(m_xBuilder->weld_button("prev")) , m_xNextSetIB(m_xBuilder->weld_button("next")) - , m_xDifferentlist(m_xBuilder->weld_label("differentlist")) + , m_xDifferentlist(m_xBuilder->weld_button("differentlist")) , m_xSettings(new SwAddressPreview(m_xBuilder->weld_scrolled_window("settingspreviewwin"))) , m_xPreview(new SwAddressPreview(m_xBuilder->weld_scrolled_window("addresspreviewwin"))) , m_xSettingsWIN(new weld::CustomWeld(*m_xBuilder, "settingspreview", *m_xSettings)) @@ -111,7 +111,6 @@ void SwMailMergeAddressBlockPage::dispose() m_xPreview.reset(); m_xSettings.reset(); - m_pWizard.clear(); vcl::OWizardPage::dispose(); } @@ -210,7 +209,7 @@ IMPL_LINK_NOARG(SwMailMergeAddressBlockPage, AssignHdl_Impl, weld::Button&, void SwMailMergeConfigItem& rConfigItem = m_pWizard->GetConfigItem(); const sal_uInt16 nSel = m_xSettings->GetSelectedAddress(); const uno::Sequence< OUString> aBlocks = rConfigItem.GetAddressBlocks(); - SwAssignFieldsDialog aDlg(m_pWizard->GetFrameWeld(), m_pWizard->GetConfigItem(), aBlocks[nSel], true); + SwAssignFieldsDialog aDlg(m_pWizard->getDialog(), m_pWizard->GetConfigItem(), aBlocks[nSel], true); if(RET_OK == aDlg.run()) { //preview update @@ -263,7 +262,7 @@ void SwMailMergeAddressBlockPage::InsertDataHdl(weld::Button* pButton) { //if no pButton is given, the first set has to be pre-set SwMailMergeConfigItem& rConfig = m_pWizard->GetConfigItem(); - m_pWizard->EnterWait(); + std::unique_ptr<weld::WaitObject> xWaitObj(new weld::WaitObject(m_pWizard->getDialog())); if(!pButton) { rConfig.GetResultSet(); @@ -274,7 +273,7 @@ void SwMailMergeAddressBlockPage::InsertDataHdl(weld::Button* pButton) sal_Int32 nPos = rConfig.GetResultSetPosition(); rConfig.MoveResultSet( bNext ? ++nPos : --nPos); } - m_pWizard->LeaveWait(); + xWaitObj.reset(); sal_Int32 nPos = rConfig.GetResultSetPosition(); bool bEnable = true; if(nPos < 1) diff --git a/sw/source/ui/dbui/mmaddressblockpage.hxx b/sw/source/ui/dbui/mmaddressblockpage.hxx index 4d50cfaa4961..910110814740 100644 --- a/sw/source/ui/dbui/mmaddressblockpage.hxx +++ b/sw/source/ui/dbui/mmaddressblockpage.hxx @@ -38,7 +38,7 @@ class SwMailMergeAddressBlockPage : public vcl::OWizardPage OUString m_sCurrentAddress; OUString m_sChangeAddress; - VclPtr<SwMailMergeWizard> m_pWizard; + SwMailMergeWizard* m_pWizard; std::unique_ptr<weld::Button> m_xAddressListPB; std::unique_ptr<weld::Label> m_xCurrentAddressFI; @@ -58,7 +58,7 @@ class SwMailMergeAddressBlockPage : public vcl::OWizardPage std::unique_ptr<weld::Button> m_xPrevSetIB; std::unique_ptr<weld::Button> m_xNextSetIB; - std::unique_ptr<weld::Label> m_xDifferentlist; + std::unique_ptr<weld::Button> m_xDifferentlist; std::unique_ptr<SwAddressPreview> m_xSettings; std::unique_ptr<SwAddressPreview> m_xPreview; diff --git a/sw/source/ui/dbui/mmdocselectpage.cxx b/sw/source/ui/dbui/mmdocselectpage.cxx index ee22935376e3..d7ef4d37f336 100644 --- a/sw/source/ui/dbui/mmdocselectpage.cxx +++ b/sw/source/ui/dbui/mmdocselectpage.cxx @@ -88,13 +88,6 @@ SwMailMergeDocSelectPage::SwMailMergeDocSelectPage(SwMailMergeWizard* pWizard, T SwMailMergeDocSelectPage::~SwMailMergeDocSelectPage() { - disposeOnce(); -} - -void SwMailMergeDocSelectPage::dispose() -{ - m_pWizard.clear(); - vcl::OWizardPage::dispose(); } IMPL_LINK_NOARG(SwMailMergeDocSelectPage, DocSelectHdl, weld::ToggleButton&, void) @@ -194,7 +187,7 @@ bool SwMailMergeDocSelectPage::commitPage( ::vcl::WizardTypes::CommitPageReason if(!sReloadDocument.isEmpty()) m_pWizard->SetReloadDocument( sReloadDocument ); m_pWizard->SetRestartPage(MM_OUTPUTTYPETPAGE); - m_pWizard->EndDialog(RET_LOAD_DOC); + m_pWizard->response(RET_LOAD_DOC); } } return bReturn; diff --git a/sw/source/ui/dbui/mmdocselectpage.hxx b/sw/source/ui/dbui/mmdocselectpage.hxx index 0a7afb45f240..ef35e5c8f2e4 100644 --- a/sw/source/ui/dbui/mmdocselectpage.hxx +++ b/sw/source/ui/dbui/mmdocselectpage.hxx @@ -29,7 +29,7 @@ class SwMailMergeDocSelectPage : public vcl::OWizardPage OUString m_sLoadFileName; OUString m_sLoadTemplateName; - VclPtr<SwMailMergeWizard> m_pWizard; + SwMailMergeWizard* m_pWizard; std::unique_ptr<weld::RadioButton> m_xCurrentDocRB; std::unique_ptr<weld::RadioButton> m_xNewDocRB; @@ -48,7 +48,6 @@ class SwMailMergeDocSelectPage : public vcl::OWizardPage public: SwMailMergeDocSelectPage(SwMailMergeWizard* pWizard, TabPageParent pParent); virtual ~SwMailMergeDocSelectPage() override; - virtual void dispose() override; }; #endif diff --git a/sw/source/ui/dbui/mmgreetingspage.hxx b/sw/source/ui/dbui/mmgreetingspage.hxx index b3e241a9fa82..e3560986a947 100644 --- a/sw/source/ui/dbui/mmgreetingspage.hxx +++ b/sw/source/ui/dbui/mmgreetingspage.hxx @@ -31,7 +31,7 @@ class SwMailMergeWizard; class SwGreetingsHandler { protected: - VclPtr<SwMailMergeWizard> m_pWizard; + SwMailMergeWizard* m_pWizard; /// The mail merge state, available even when m_pWizard is nullptr. SwMailMergeConfigItem& m_rConfigItem; bool m_bIsTabPage; diff --git a/sw/source/ui/dbui/mmlayoutpage.cxx b/sw/source/ui/dbui/mmlayoutpage.cxx index ef464a8a6648..95a27bf16615 100644 --- a/sw/source/ui/dbui/mmlayoutpage.cxx +++ b/sw/source/ui/dbui/mmlayoutpage.cxx @@ -159,7 +159,6 @@ SwMailMergeLayoutPage::~SwMailMergeLayoutPage() void SwMailMergeLayoutPage::dispose() { File::remove( m_sExampleURL ); - m_pWizard.clear(); vcl::OWizardPage::dispose(); } diff --git a/sw/source/ui/dbui/mmlayoutpage.hxx b/sw/source/ui/dbui/mmlayoutpage.hxx index 6ce46554b993..6e63992f1b65 100644 --- a/sw/source/ui/dbui/mmlayoutpage.hxx +++ b/sw/source/ui/dbui/mmlayoutpage.hxx @@ -40,7 +40,7 @@ class SwMailMergeLayoutPage : public vcl::OWizardPage bool m_bIsGreetingInserted; - VclPtr<SwMailMergeWizard> m_pWizard; + SwMailMergeWizard* m_pWizard; css::uno::Reference< css::beans::XPropertySet > m_xViewProperties; diff --git a/sw/source/ui/dbui/mmoutputtypepage.cxx b/sw/source/ui/dbui/mmoutputtypepage.cxx index c470a9f1a9e0..d74a7a0c85b1 100644 --- a/sw/source/ui/dbui/mmoutputtypepage.cxx +++ b/sw/source/ui/dbui/mmoutputtypepage.cxx @@ -62,13 +62,6 @@ SwMailMergeOutputTypePage::SwMailMergeOutputTypePage(SwMailMergeWizard* pWizard, SwMailMergeOutputTypePage::~SwMailMergeOutputTypePage() { - disposeOnce(); -} - -void SwMailMergeOutputTypePage::dispose() -{ - m_pWizard.clear(); - vcl::OWizardPage::dispose(); } IMPL_LINK_NOARG(SwMailMergeOutputTypePage, TypeHdl_Impl, weld::ToggleButton&, void) @@ -77,7 +70,6 @@ IMPL_LINK_NOARG(SwMailMergeOutputTypePage, TypeHdl_Impl, weld::ToggleButton&, vo m_xLetterHint->set_visible(bLetter); m_xMailHint->set_visible(!bLetter); m_pWizard->GetConfigItem().SetOutputToLetter(bLetter); - m_pWizard->updateRoadmapItemLabel( MM_ADDRESSBLOCKPAGE ); m_pWizard->UpdateRoadmap(); } diff --git a/sw/source/ui/dbui/mmoutputtypepage.hxx b/sw/source/ui/dbui/mmoutputtypepage.hxx index 5b2f2ab1c17c..73346dfe8bde 100644 --- a/sw/source/ui/dbui/mmoutputtypepage.hxx +++ b/sw/source/ui/dbui/mmoutputtypepage.hxx @@ -25,7 +25,7 @@ class SwMailMergeWizard; class SwMailMergeOutputTypePage : public vcl::OWizardPage { - VclPtr<SwMailMergeWizard> m_pWizard; + SwMailMergeWizard* m_pWizard; std::unique_ptr<weld::RadioButton> m_xLetterRB; std::unique_ptr<weld::RadioButton> m_xMailRB; @@ -37,7 +37,6 @@ class SwMailMergeOutputTypePage : public vcl::OWizardPage public: SwMailMergeOutputTypePage(SwMailMergeWizard* pWizard, TabPageParent pParent); virtual ~SwMailMergeOutputTypePage() override; - virtual void dispose() override; }; #endif diff --git a/sw/source/ui/dialog/swdlgfact.cxx b/sw/source/ui/dialog/swdlgfact.cxx index b4da2613af55..dbcc97b426fb 100644 --- a/sw/source/ui/dialog/swdlgfact.cxx +++ b/sw/source/ui/dialog/swdlgfact.cxx @@ -739,13 +739,6 @@ void AbstractSwWordCountFloatDlg_Impl::SetCounts(const SwDocStat &rCurrCnt, cons AbstractMailMergeWizard_Impl::~AbstractMailMergeWizard_Impl() { - disposeOnce(); -} - -void AbstractMailMergeWizard_Impl::dispose() -{ - pDlg.disposeAndClear(); - AbstractMailMergeWizard::dispose(); } bool AbstractMailMergeWizard_Impl::StartExecuteAsync(AsyncContext &rCtx) @@ -753,27 +746,27 @@ bool AbstractMailMergeWizard_Impl::StartExecuteAsync(AsyncContext &rCtx) // SwMailMergeWizardExecutor wants to run the lifecycle of this dialog // so clear mxOwner here and leave it up to SwMailMergeWizardExecutor rCtx.mxOwner.clear(); - return pDlg->StartExecuteAsync(rCtx); + return weld::GenericDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); } short AbstractMailMergeWizard_Impl::Execute() { - return pDlg->Execute(); + return m_xDlg->run(); } OUString AbstractMailMergeWizard_Impl::GetReloadDocument() const { - return pDlg->GetReloadDocument(); + return m_xDlg->GetReloadDocument(); } void AbstractMailMergeWizard_Impl::ShowPage( sal_uInt16 nLevel ) { - pDlg->skipUntil(nLevel); + m_xDlg->skipUntil(nLevel); } sal_uInt16 AbstractMailMergeWizard_Impl::GetRestartPage() const { - return pDlg->GetRestartPage(); + return m_xDlg->GetRestartPage(); } VclPtr<AbstractSwInsertAbstractDlg> SwAbstractDialogFactory_Impl::CreateSwInsertAbstractDlg(weld::Window* pParent) @@ -1149,7 +1142,7 @@ VclPtr<AbstractMailMergeWizard> SwAbstractDialogFactory_Impl::CreateMailMergeWiz SwView& rView, std::shared_ptr<SwMailMergeConfigItem>& rConfigItem) { #if HAVE_FEATURE_DBCONNECTIVITY - return VclPtr<AbstractMailMergeWizard_Impl>::Create( VclPtr<SwMailMergeWizard>::Create(rView, rConfigItem)); + return VclPtr<AbstractMailMergeWizard_Impl>::Create(std::make_unique<SwMailMergeWizard>(rView, rConfigItem)); #else (void) rView; (void) rConfigItem; diff --git a/sw/source/ui/dialog/swdlgfact.hxx b/sw/source/ui/dialog/swdlgfact.hxx index d149f5ce9e5b..656de1e57e3e 100644 --- a/sw/source/ui/dialog/swdlgfact.hxx +++ b/sw/source/ui/dialog/swdlgfact.hxx @@ -637,14 +637,14 @@ public: class SwMailMergeWizard; class AbstractMailMergeWizard_Impl : public AbstractMailMergeWizard { - VclPtr<SwMailMergeWizard> pDlg; + std::shared_ptr<SwMailMergeWizard> m_xDlg; public: - explicit AbstractMailMergeWizard_Impl( SwMailMergeWizard* p ) - : pDlg(p) - {} + explicit AbstractMailMergeWizard_Impl(std::unique_ptr<SwMailMergeWizard> p) + : m_xDlg(std::move(p)) + { + } virtual ~AbstractMailMergeWizard_Impl() override; - virtual void dispose() override; virtual bool StartExecuteAsync(VclAbstractDialog::AsyncContext &rCtx) override; virtual short Execute() override; diff --git a/sw/source/uibase/inc/mailmergewizard.hxx b/sw/source/uibase/inc/mailmergewizard.hxx index c6865a280e96..96407c14d2f2 100644 --- a/sw/source/uibase/inc/mailmergewizard.hxx +++ b/sw/source/uibase/inc/mailmergewizard.hxx @@ -31,7 +31,7 @@ class SwMailMergeConfigItem; #define MM_GREETINGSPAGE 3 #define MM_LAYOUTPAGE 4 -class SwMailMergeWizard : public ::vcl::RoadmapWizard +class SwMailMergeWizard : public ::vcl::RoadmapWizardMachine { SwView* const m_pSwView; OUString sDocumentURL; @@ -48,14 +48,12 @@ class SwMailMergeWizard : public ::vcl::RoadmapWizard sal_uInt16 m_nRestartPage; - using vcl::OWizardMachine::skipUntil; + using vcl::WizardMachine::skipUntil; protected: virtual VclPtr<TabPage> createPage( WizardState _nState ) override; virtual void enterState( WizardState _nState ) override; -// roadmap feature ?? -// virtual sal_Bool prepareLeaveCurrentState( CommitPageReason _eReason ); virtual OUString getStateDisplayName( WizardState _nState ) const override; public: @@ -77,11 +75,9 @@ public: void SetRestartPage(sal_uInt16 nPage) { m_nRestartPage = nPage;} bool skipUntil( sal_uInt16 nPage) - {return ::vcl::RoadmapWizard::skipUntil(WizardState(nPage));} + {return ::vcl::RoadmapWizardMachine::skipUntil(WizardState(nPage));} - using vcl::RoadmapWizard::updateRoadmapItemLabel; - - virtual short Execute() override; + virtual short run() override; }; #endif diff --git a/sw/uiconfig/swriter/ui/mmaddressblockpage.ui b/sw/uiconfig/swriter/ui/mmaddressblockpage.ui index ebecf2aad090..a79532185440 100644 --- a/sw/uiconfig/swriter/ui/mmaddressblockpage.ui +++ b/sw/uiconfig/swriter/ui/mmaddressblockpage.ui @@ -1,18 +1,17 @@ <?xml version="1.0" encoding="UTF-8"?> -<!-- Generated with glade 3.16.1 --> +<!-- Generated with glade 3.22.1 --> <interface domain="sw"> <requires lib="gtk+" version="3.18"/> - <requires lib="LibreOffice" version="1.0"/> <object class="GtkImage" id="image1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="stock">gtk-media-previous</property> + <property name="stock">gtk-go-back</property> <property name="icon_size">1</property> </object> <object class="GtkImage" id="image2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="stock">gtk-media-next</property> + <property name="stock">gtk-go-forward</property> <property name="icon_size">1</property> </object> <object class="GtkBox" id="MMAddressBlockPage"> @@ -68,8 +67,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -83,30 +80,25 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="currentaddress"> <property name="can_focus">False</property> <property name="no_show_all">True</property> - <property name="xalign">1</property> <property name="label" translatable="yes" context="mmaddressblockpage|currentaddress">Current address list: %1</property> + <property name="xalign">1</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> <property name="width">2</property> - <property name="height">1</property> </packing> </child> <child> @@ -120,48 +112,40 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes" context="mmaddressblockpage|label2">Select the address list containing the address data you want to use. This data is needed to create the address block.</property> <property name="wrap">True</property> <property name="max_width_chars">56</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="label3"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="label" translatable="yes" context="mmaddressblockpage|label3">1.</property> <property name="xalign">0</property> <property name="yalign">0</property> - <property name="label" translatable="yes" context="mmaddressblockpage|label3">1.</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -182,8 +166,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -197,48 +179,40 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes" context="mmaddressblockpage|label4">Match the field name used in the mail merge to the column headers in your data source.</property> <property name="wrap">True</property> <property name="max_width_chars">56</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="settingsft1"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="label" translatable="yes" context="mmaddressblockpage|settingsft1">3.</property> <property name="xalign">0</property> <property name="yalign">0</property> - <property name="label" translatable="yes" context="mmaddressblockpage|settingsft1">3.</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">2</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -253,14 +227,13 @@ <object class="GtkLabel" id="settingsft"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="label" translatable="yes" context="mmaddressblockpage|settingsft">2.</property> <property name="xalign">0</property> <property name="yalign">0</property> - <property name="label" translatable="yes" context="mmaddressblockpage|settingsft">2.</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> <property name="height">2</property> </packing> </child> @@ -277,8 +250,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -314,8 +285,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -344,16 +313,12 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -369,8 +334,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -379,16 +342,12 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -438,8 +397,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -458,8 +415,6 @@ <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -473,8 +428,6 @@ <packing> <property name="left_attach">2</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -482,22 +435,18 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> - <property name="xalign">1</property> <property name="label" translatable="yes" context="mmaddressblockpage|documentindex">Document: %1</property> + <property name="xalign">1</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> @@ -506,8 +455,6 @@ <packing> <property name="left_attach">0</property> <property name="top_attach">1</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> @@ -521,48 +468,40 @@ <property name="visible">True</property> <property name="can_focus">False</property> <property name="hexpand">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes" context="mmaddressblockpage|label6">Check if the address data matches correctly.</property> <property name="wrap">True</property> <property name="max_width_chars">56</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="left_attach">1</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> <child> <object class="GtkLabel" id="settingsft2"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="label" translatable="yes" context="mmaddressblockpage|settingsft2">4.</property> <property name="xalign">0</property> <property name="yalign">0</property> - <property name="label" translatable="yes" context="mmaddressblockpage|settingsft2">4.</property> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">0</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> <packing> <property name="left_attach">0</property> <property name="top_attach">3</property> - <property name="width">1</property> - <property name="height">1</property> </packing> </child> </object> diff --git a/sw/uiconfig/swriter/ui/mmoutputtypepage.ui b/sw/uiconfig/swriter/ui/mmoutputtypepage.ui index e5b1a366be91..1b70c6211b58 100644 --- a/sw/uiconfig/swriter/ui/mmoutputtypepage.ui +++ b/sw/uiconfig/swriter/ui/mmoutputtypepage.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="sw"> <requires lib="gtk+" version="3.18"/> <object class="GtkBox" id="MMOutputTypePage"> @@ -40,11 +40,12 @@ <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes" context="mmoutputtypepage|letterft">Send letters to a group of recipients. The letters can contain an address block and a salutation. The letters can be personalized for each recipient.</property> <property name="wrap">True</property> + <property name="width_chars">72</property> <property name="max_width_chars">72</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="left_attach">0</property> @@ -57,11 +58,12 @@ <property name="can_focus">False</property> <property name="hexpand">True</property> <property name="vexpand">True</property> - <property name="xalign">0</property> - <property name="yalign">0</property> <property name="label" translatable="yes" context="mmoutputtypepage|emailft">Send email messages to a group of recipients. The email messages can contain a salutation. The email messages can be personalized for each recipient.</property> <property name="wrap">True</property> + <property name="width_chars">72</property> <property name="max_width_chars">72</property> + <property name="xalign">0</property> + <property name="yalign">0</property> </object> <packing> <property name="left_attach">0</property> diff --git a/sw/uiconfig/swriter/ui/mmsalutationpage.ui b/sw/uiconfig/swriter/ui/mmsalutationpage.ui index d2c33bdfd286..46c6ebd53d8a 100644 --- a/sw/uiconfig/swriter/ui/mmsalutationpage.ui +++ b/sw/uiconfig/swriter/ui/mmsalutationpage.ui @@ -5,13 +5,13 @@ <object class="GtkImage" id="image1"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="stock">gtk-media-previous</property> + <property name="stock">gtk-go-back</property> <property name="icon_size">1</property> </object> <object class="GtkImage" id="image2"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="stock">gtk-media-next</property> + <property name="stock">gtk-go-forward</property> <property name="icon_size">1</property> </object> <object class="GtkBox" id="MMSalutationPage"> diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 547bac4170c1..b13ecb37645f 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -1553,10 +1553,18 @@ public: // take the first shown page as the size for all pages if (m_xWizard->GetPageSizePixel().Width() == 0) { - TabPage* pPage = m_xWizard->GetPage(m_aIds[nPage]); - assert(pPage); - Size aPageSize(pPage->get_preferred_size()); - m_xWizard->SetPageSizePixel(aPageSize); + Size aFinalSize; + for (int i = 0, nPages = get_n_pages(); i < nPages; ++i) + { + TabPage* pPage = m_xWizard->GetPage(m_aIds[i]); + assert(pPage); + Size aPageSize(pPage->get_preferred_size()); + if (aPageSize.Width() > aFinalSize.Width()) + aFinalSize.setWidth(aPageSize.Width()); + if (aPageSize.Height() > aFinalSize.Height()) + aFinalSize.setHeight(aPageSize.Height()); + } + m_xWizard->SetPageSizePixel(aFinalSize); } m_xWizard->ShowPage(m_aIds[nPage]); @@ -2238,15 +2246,15 @@ weld::Button* SalInstanceDialog::weld_widget_for_response(int nResponse) weld::Button* SalInstanceAssistant::weld_widget_for_response(int nResponse) { PushButton* pButton = nullptr; - if (nResponse == static_cast<int>(WizardButtonFlags::NEXT)) + if (nResponse == RET_YES) pButton = m_xWizard->m_pNextPage; - else if (nResponse == static_cast<int>(WizardButtonFlags::PREVIOUS)) + else if (nResponse == RET_NO) pButton = m_xWizard->m_pPrevPage; - else if (nResponse == static_cast<int>(WizardButtonFlags::FINISH)) + else if (nResponse == RET_OK) pButton = m_xWizard->m_pFinish; - else if (nResponse == static_cast<int>(WizardButtonFlags::CANCEL)) + else if (nResponse == RET_CANCEL) pButton = m_xWizard->m_pCancel; - else if (nResponse == static_cast<int>(WizardButtonFlags::HELP)) + else if (nResponse == RET_HELP) pButton = m_xWizard->m_pHelp; if (pButton) return new SalInstanceButton(pButton, nullptr, false); diff --git a/vcl/source/control/wizardmachine.cxx b/vcl/source/control/wizardmachine.cxx index 8f291ce40c38..8082df6ab39a 100644 --- a/vcl/source/control/wizardmachine.cxx +++ b/vcl/source/control/wizardmachine.cxx @@ -688,11 +688,11 @@ namespace vcl : AssistantController(pParent, "vcl/ui/wizard.ui", "Wizard") , m_nCurState(0) , m_pFirstPage(nullptr) - , m_xFinish(m_xAssistant->weld_widget_for_response(static_cast<int>(WizardButtonFlags::FINISH))) - , m_xCancel(m_xAssistant->weld_widget_for_response(static_cast<int>(WizardButtonFlags::CANCEL))) - , m_xNextPage(m_xAssistant->weld_widget_for_response(static_cast<int>(WizardButtonFlags::NEXT))) - , m_xPrevPage(m_xAssistant->weld_widget_for_response(static_cast<int>(WizardButtonFlags::PREVIOUS))) - , m_xHelp(m_xAssistant->weld_widget_for_response(static_cast<int>(WizardButtonFlags::HELP))) + , m_xFinish(m_xAssistant->weld_widget_for_response(RET_OK)) + , m_xCancel(m_xAssistant->weld_widget_for_response(RET_CANCEL)) + , m_xNextPage(m_xAssistant->weld_widget_for_response(RET_YES)) + , m_xPrevPage(m_xAssistant->weld_widget_for_response(RET_NO)) + , m_xHelp(m_xAssistant->weld_widget_for_response(RET_HELP)) , m_pImpl(new WizardMachineImplData) { implConstruct(nButtonFlags); @@ -892,7 +892,7 @@ namespace vcl bool WizardMachine::onFinish() { - return Finish(static_cast<int>(WizardButtonFlags::FINISH)); + return Finish(RET_OK); } IMPL_LINK_NOARG(WizardMachine, OnFinish, weld::Button&, void) @@ -909,7 +909,7 @@ namespace vcl IMPL_LINK_NOARG(WizardMachine, OnCancel, weld::Button&, void) { - m_xAssistant->response(static_cast<int>(WizardButtonFlags::CANCEL)); + m_xAssistant->response(RET_CANCEL); } WizardMachine::WizardState WizardMachine::determineNextState( WizardState _nCurrentState ) const diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index fc0ccc8184fe..1d6216958c71 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3010,7 +3010,7 @@ struct DialogRunner } static void signal_response(GtkDialog*, gint nResponseId, gpointer data); - static void signal_cancel(GtkDialog*, gpointer data); + static void signal_cancel(GtkAssistant*, gpointer data); static gboolean signal_delete(GtkDialog* pDialog, GdkEventAny*, gpointer data) { @@ -3159,6 +3159,7 @@ private: std::function<void(sal_Int32)> m_aFunc; gulong m_nCloseSignalId; gulong m_nResponseSignalId; + gulong m_nCancelSignalId; gulong m_nSignalDeleteId; // for calc ref dialog that shrink to range selection widgets and resize back @@ -3185,12 +3186,25 @@ private: pThis->asyncresponse(ret); } - static gboolean signalAsyncDelete(GtkDialog*, GdkEventAny*, gpointer) + static void signalAsyncCancel(GtkAssistant*, gpointer widget) { + GtkInstanceDialog* pThis = static_cast<GtkInstanceDialog*>(widget); + // make esc in an assistant act as if cancel button was pressed + pThis->close(false); + } + + static gboolean signalAsyncDelete(GtkWidget* pDialog, GdkEventAny*, gpointer widget) + { + GtkInstanceDialog* pThis = static_cast<GtkInstanceDialog*>(widget); + if (GTK_IS_ASSISTANT(pThis->m_pDialog)) + { + // An assistant isn't a dialog, but we want to treat it like one + signalAsyncResponse(pDialog, GTK_RESPONSE_DELETE_EVENT, widget); + } return true; /* Do not destroy */ } - virtual int GtkToVcl(int ret) + static int GtkToVcl(int ret) { if (ret == GTK_RESPONSE_OK) ret = RET_OK; @@ -3204,10 +3218,12 @@ private: ret = RET_YES; else if (ret == GTK_RESPONSE_NO) ret = RET_NO; + else if (ret == GTK_RESPONSE_HELP) + ret = RET_HELP; return ret; } - virtual int VclToGtk(int nResponse) + static int VclToGtk(int nResponse) { if (nResponse == RET_OK) return GTK_RESPONSE_OK; @@ -3233,6 +3249,7 @@ public: , m_aDialogRun(pDialog, this) , m_nCloseSignalId(g_signal_connect(m_pDialog, "close", G_CALLBACK(signalClose), this)) , m_nResponseSignalId(0) + , m_nCancelSignalId(0) , m_nSignalDeleteId(0) , m_pRefEdit(nullptr) , m_nOldEditWidth(0) @@ -3243,7 +3260,7 @@ public: virtual bool runAsync(std::shared_ptr<weld::DialogController> rDialogController, const std::function<void(sal_Int32)>& func) override { - assert(!m_nResponseSignalId); + assert(!m_nResponseSignalId && !m_nCancelSignalId); m_xDialogController = rDialogController; m_aFunc = func; @@ -3252,7 +3269,8 @@ public: m_aDialogRun.inc_modal_count(); show(); - m_nResponseSignalId = g_signal_connect(m_pDialog, "response", G_CALLBACK(signalAsyncResponse), this); + m_nResponseSignalId = GTK_IS_DIALOG(m_pDialog) ? g_signal_connect(m_pDialog, "response", G_CALLBACK(signalAsyncResponse), this) : 0; + m_nCancelSignalId = GTK_IS_ASSISTANT(m_pDialog) ? g_signal_connect(m_pDialog, "cancel", G_CALLBACK(signalAsyncCancel), this) : 0; m_nSignalDeleteId = g_signal_connect(m_pDialog, "delete-event", G_CALLBACK(signalAsyncDelete), this); return true; @@ -3261,7 +3279,7 @@ public: virtual bool runAsync(std::shared_ptr<Dialog> const & rxSelf, const std::function<void(sal_Int32)>& func) override { assert( rxSelf.get() == this ); - assert(!m_nResponseSignalId); + assert(!m_nResponseSignalId && !m_nCancelSignalId); // In order to store a shared_ptr to ourself, we have to have been constructed by make_shared, // which is that rxSelf enforces. @@ -3272,7 +3290,8 @@ public: m_aDialogRun.inc_modal_count(); show(); - m_nResponseSignalId = g_signal_connect(m_pDialog, "response", G_CALLBACK(signalAsyncResponse), this); + m_nResponseSignalId = GTK_IS_DIALOG(m_pDialog) ? g_signal_connect(m_pDialog, "response", G_CALLBACK(signalAsyncResponse), this) : 0; + m_nCancelSignalId = GTK_IS_ASSISTANT(m_pDialog) ? g_signal_connect(m_pDialog, "cancel", G_CALLBACK(signalAsyncCancel), this) : 0; m_nSignalDeleteId = g_signal_connect(m_pDialog, "delete-event", G_CALLBACK(signalAsyncDelete), this); return true; @@ -3442,6 +3461,8 @@ public: g_signal_handler_disconnect(m_pDialog, m_nCloseSignalId); if (m_nResponseSignalId) g_signal_handler_disconnect(m_pDialog, m_nResponseSignalId); + if (m_nCancelSignalId) + g_signal_handler_disconnect(m_pDialog, m_nCancelSignalId); if (m_nSignalDeleteId) g_signal_handler_disconnect(m_pDialog, m_nSignalDeleteId); } @@ -3462,7 +3483,7 @@ void DialogRunner::signal_response(GtkDialog*, gint nResponseId, gpointer data) pThis->loop_quit(); } -void DialogRunner::signal_cancel(GtkDialog*, gpointer data) +void DialogRunner::signal_cancel(GtkAssistant*, gpointer data) { DialogRunner* pThis = static_cast<DialogRunner*>(data); @@ -3630,40 +3651,6 @@ private: return -1; } - virtual int GtkToVcl(int ret) override - { - if (ret == GTK_RESPONSE_OK) - ret = static_cast<int>(WizardButtonFlags::FINISH); - else if (ret == GTK_RESPONSE_CANCEL) - ret = static_cast<int>(WizardButtonFlags::CANCEL); - else if (ret == GTK_RESPONSE_DELETE_EVENT) - ret = static_cast<int>(WizardButtonFlags::CANCEL); - else if (ret == GTK_RESPONSE_CLOSE) - ret = static_cast<int>(WizardButtonFlags::CANCEL); - else if (ret == GTK_RESPONSE_ACCEPT) - ret = static_cast<int>(WizardButtonFlags::NEXT); - else if (ret == GTK_RESPONSE_REJECT) - ret = static_cast<int>(WizardButtonFlags::PREVIOUS); - else if (ret == GTK_RESPONSE_HELP) - ret = static_cast<int>(WizardButtonFlags::HELP); - return ret; - } - - virtual int VclToGtk(int nResponse) override - { - if (nResponse == static_cast<int>(WizardButtonFlags::NEXT)) - return GTK_RESPONSE_ACCEPT; - if (nResponse == static_cast<int>(WizardButtonFlags::PREVIOUS)) - return GTK_RESPONSE_REJECT; - else if (nResponse == static_cast<int>(WizardButtonFlags::FINISH)) - return GTK_RESPONSE_OK; - else if (nResponse == static_cast<int>(WizardButtonFlags::CANCEL)) - return GTK_RESPONSE_CANCEL; - else if (nResponse == static_cast<int>(WizardButtonFlags::HELP)) - return GTK_RESPONSE_HELP; - return nResponse; - } - static void wrap_sidebar_label(GtkWidget *pWidget, gpointer /*user_data*/) { if (GTK_IS_LABEL(pWidget)) @@ -3851,9 +3838,9 @@ public: virtual GtkButton* get_widget_for_response(int nGtkResponse) override { GtkButton* pButton = nullptr; - if (nGtkResponse == GTK_RESPONSE_ACCEPT) + if (nGtkResponse == GTK_RESPONSE_YES) pButton = m_pNext; - else if (nGtkResponse == GTK_RESPONSE_REJECT) + else if (nGtkResponse == GTK_RESPONSE_NO) pButton = m_pBack; else if (nGtkResponse == GTK_RESPONSE_OK) pButton = m_pFinish; @@ -5212,8 +5199,13 @@ void GtkInstanceDialog::response(int nResponse) gtk_dialog_response(GTK_DIALOG(m_pDialog), nGtkResponse); else if (GTK_IS_ASSISTANT(m_pDialog)) { - m_aDialogRun.m_nResponseId = nGtkResponse; - m_aDialogRun.loop_quit(); + if (!m_aDialogRun.loop_is_running()) + asyncresponse(nGtkResponse); + else + { + m_aDialogRun.m_nResponseId = nGtkResponse; + m_aDialogRun.loop_quit(); + } } } |