Date: prev next · Thread: first prev next last
2011 Archives by date, by thread · List index


Hi,

I'm trying to partly implement this bug:

https://bugs.freedesktop.org/show_bug.cgi?id=32413

To reproduce: start writer, type in some text, press F11, right click on
Default->Modify, set for example font size from 12 to 14, and the target
is to get the view updated without closing the dialog.

So far here is what I have:

To have tha Apply button, that's easy:

diff --git a/sfx2/inc/sfx2/styledlg.hxx b/sfx2/inc/sfx2/styledlg.hxx
index 05d05ba..7721bcc 100644
--- a/sfx2/inc/sfx2/styledlg.hxx
+++ b/sfx2/inc/sfx2/styledlg.hxx
@@ -40,6 +40,7 @@ class SFX2_DLLPUBLIC SfxStyleDialog: public SfxTabDialog
 private:
     SfxStyleSheetBase*                 pStyle;
     DECL_DLLPRIVATE_LINK( CancelHdl, Button * );
+    DECL_DLLPRIVATE_LINK( ApplyHdl, void* );
 protected:
     virtual const SfxItemSet*  GetRefreshedSet();
 
diff --git a/sfx2/source/dialog/styledlg.cxx b/sfx2/source/dialog/styledlg.cxx
index bddc0b9..5d54658 100644
--- a/sfx2/source/dialog/styledlg.cxx
+++ b/sfx2/source/dialog/styledlg.cxx
@@ -89,6 +89,8 @@ SfxStyleDialog::SfxStyleDialog
     if ( bFreeRes )
         FreeResource();
     GetCancelButton().SetClickHdl( LINK(this, SfxStyleDialog, CancelHdl) );
+    EnableApplyButton( TRUE );
+    SetApplyHandler( LINK(this, SfxStyleDialog, ApplyHdl ) );
 }
 
 // -----------------------------------------------------------------------
@@ -170,5 +172,13 @@ IMPL_LINK( SfxStyleDialog, CancelHdl, Button *, pButton )
     return 0;
 }
 
+IMPL_LINK( SfxStyleDialog, ApplyHdl, void*, pVoid )
+{
+    (void)pVoid; //unused
+    printf("debug, SfxStyleDialog::ApplyHdl start\n");
+    return 0;
+}
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

The part I'm having problem is to get SfxStyleDialog::ApplyHdl()
actually apply style settings.

So far what I see is that if I partly disable SwTemplateDlg::Ok():

diff --git a/sw/source/ui/fmtui/tmpdlg.cxx b/sw/source/ui/fmtui/tmpdlg.cxx
index 3deeda0..49b43f1 100644
--- a/sw/source/ui/fmtui/tmpdlg.cxx
+++ b/sw/source/ui/fmtui/tmpdlg.cxx
@@ -323,7 +323,9 @@ SwTemplateDlg::~SwTemplateDlg()
 
 short SwTemplateDlg::Ok()
 {
+    printf("debug, SwTemplateDlg::Ok() start\n");
     short nRet = SfxTabDialog::Ok();
+#if 0
     if( RET_OK == nRet )
     {
         const SfxPoolItem *pOutItem, *pExItem;
@@ -344,6 +346,7 @@ short SwTemplateDlg::Ok()
         //JP 09.01.98 Bug #46446#:
         // das ist der Ok - Handler also muss auf OK defaultet werden!
         nRet = RET_OK;
+#endif
     return nRet;
 }

Then the OK button has no effect. So I would guess that the Ok() method
does the update work - however, in case I just add Ok(); to
SfxStyleDialog::ApplyHdl(), then it does not update the model/view based
on the new settings.

So I guess it's not enough to call Ok(), probably there is some other
call after the destructor of the dialog to update model/view.

And that seems to be true:

In case I update SfxTabDialog::OkHdl() and change "EndDialog( Ok() );"
to "Ok();", then the OK button doesn't have any effect, either.

Now what I can't find so far is: where is the code that updates the
model/view once the dialog is closed? I guess I want to call that from
the Apply handler, but I don't yet have an idea where it is.

Thanks!

Attachment: pgpFXhdtD0QP0.pgp
Description: PGP signature


Context


Privacy Policy | Impressum (Legal Info) | Copyright information: Unless otherwise specified, all text and images on this website are licensed under the Creative Commons Attribution-Share Alike 3.0 License. This does not include the source code of LibreOffice, which is licensed under the Mozilla Public License (MPLv2). "LibreOffice" and "The Document Foundation" are registered trademarks of their corresponding registered owners or are in actual use as trademarks in one or more countries. Their respective logos and icons are also subject to international copyright laws. Use thereof is explained in our trademark policy.