[Libreoffice-commits] core.git: include/sfx2 include/svtools officecfg/registry sc/source sd/source sfx2/source sfx2/util svtools/source sw/source

Caolán McNamara (via logerrit) logerrit at kemper.freedesktop.org
Tue Jan 14 10:51:37 UTC 2020


 include/sfx2/charmapcontrol.hxx                                 |    8 +-
 include/sfx2/charmappopup.hxx                                   |   19 +++-
 include/svtools/popupwindowcontroller.hxx                       |   10 ++
 officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu |   11 ++
 sc/source/ui/app/scdll.cxx                                      |    1 
 sd/source/ui/app/sddll.cxx                                      |    1 
 sfx2/source/control/charmapcontrol.cxx                          |   12 +--
 sfx2/source/dialog/charmappopup.cxx                             |   39 ++++++----
 sfx2/util/sfx.component                                         |    4 +
 svtools/source/uno/popupwindowcontroller.cxx                    |    2 
 sw/source/uibase/app/swmodule.cxx                               |    2 
 11 files changed, 72 insertions(+), 37 deletions(-)

New commits:
commit 94c1f5cfb96a826220b64608cf0ada76d3bdde31
Author:     Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Jan 13 09:14:39 2020 +0000
Commit:     Caolán McNamara <caolanm at redhat.com>
CommitDate: Tue Jan 14 11:51:06 2020 +0100

    rework SfxCharmapCtrl to be a PopupWindowController
    
    With MSVC, the changes to include/sfx2/charmappopup.hxx would cause spurious
    
    > isvt.lib(svtlo.dll) : error LNK2005: "public: virtual class com::sun::star::uno::Any __cdecl cppu::ImplInheritanceHelper<class svt::ToolboxController,class com::sun::star::lang::XServiceInfo>::queryInterface(class com::sun::star::uno::Type const &)" (?queryInterface@?$ImplInheritanceHelper at VToolboxController@svt@@VXServiceInfo at lang@star at sun@com@@@cppu@@UAA?AVAny at uno@star at sun@com@@ABVType at 4567@@Z) already defined in classificationcontroller.o
    > isvt.lib(svtlo.dll) : error LNK2005: "public: virtual void __cdecl cppu::ImplInheritanceHelper<class svt::ToolboxController,class com::sun::star::lang::XServiceInfo>::acquire(void)" (?acquire@?$ImplInheritanceHelper at VToolboxController@svt@@VXServiceInfo at lang@star at sun@com@@@cppu@@UAAXXZ) already defined in classificationcontroller.o
    > isvt.lib(svtlo.dll) : error LNK2005: "public: virtual void __cdecl cppu::ImplInheritanceHelper<class svt::ToolboxController,class com::sun::star::lang::XServiceInfo>::release(void)" (?release@?$ImplInheritanceHelper at VToolboxController@svt@@VXServiceInfo at lang@star at sun@com@@@cppu@@UAAXXZ) already defined in classificationcontroller.o
    
    when linking Library_sfx (and which appears to be unrelated to the (implicit)
    /INCREMENTAL since 9739c37d8ad7c6fca269709674a6975fa7ebd191 "enable incremental
    linking on windows"), which requires the HACK in
    include/svtools/popupwindowcontroller.hxx.
    
    Change-Id: I74c4318e6216001f18d0cf5ed63e78ba2ab13cd3
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/86664
    Reviewed-by: Caolán McNamara <caolanm at redhat.com>
    Tested-by: Caolán McNamara <caolanm at redhat.com>

diff --git a/include/sfx2/charmapcontrol.hxx b/include/sfx2/charmapcontrol.hxx
index 4c0501c0abfd..e6a8f672eef8 100644
--- a/include/sfx2/charmapcontrol.hxx
+++ b/include/sfx2/charmapcontrol.hxx
@@ -24,16 +24,18 @@
 #include <sfx2/dllapi.h>
 #include <sfx2/tbxctrl.hxx>
 #include <sfx2/charwin.hxx>
+#include <svtools/toolbarmenu.hxx>
 #include <vcl/button.hxx>
 #include <deque>
 
+class CharmapPopup;
+
 namespace com::sun::star::frame { class XFrame; }
 
-class SfxCharmapCtrl final : public SfxPopupWindow
+class SfxCharmapCtrl final : public svtools::ToolbarPopup
 {
 public:
-    explicit SfxCharmapCtrl(sal_uInt16 nId, vcl::Window* pParent,
-                            const css::uno::Reference< css::frame::XFrame >& rFrame);
+    explicit SfxCharmapCtrl(CharmapPopup* pControl, vcl::Window* pParent);
 
     virtual ~SfxCharmapCtrl() override;
 
diff --git a/include/sfx2/charmappopup.hxx b/include/sfx2/charmappopup.hxx
index d896acd45e45..a691327104b6 100644
--- a/include/sfx2/charmappopup.hxx
+++ b/include/sfx2/charmappopup.hxx
@@ -20,19 +20,24 @@
 #ifndef INCLUDED_SFX2_INC_CHARMAPPOPUP_HXX
 #define INCLUDED_SFX2_INC_CHARMAPPOPUP_HXX
 
-#include <sfx2/tbxctrl.hxx>
+#include <svtools/popupwindowcontroller.hxx>
 #include <sfx2/dllapi.h>
 
-class SFX2_DLLPUBLIC CharmapPopup final : public SfxToolBoxControl
+class SFX2_DLLPUBLIC CharmapPopup final : public svt::PopupWindowController
 {
 public:
-    SFX_DECL_TOOLBOX_CONTROL();
-
-    CharmapPopup(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx);
+    CharmapPopup(const css::uno::Reference<css::uno::XComponentContext>& rContext);
     virtual ~CharmapPopup() override;
 
-    virtual VclPtr<SfxPopupWindow> CreatePopupWindow() override;
-    virtual void SAL_CALL execute( sal_Int16 /*KeyModifier*/ ) override;
+    using svt::ToolboxController::createPopupWindow;
+    virtual VclPtr<vcl::Window> createPopupWindow( vcl::Window* pParent ) override;
+
+    // XServiceInfo
+    virtual OUString SAL_CALL getImplementationName() override;
+    virtual css::uno::Sequence<OUString> SAL_CALL getSupportedServiceNames() override;
+
+    // XInitialization
+    virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& rArguments ) override;
 };
 
 #endif
diff --git a/include/svtools/popupwindowcontroller.hxx b/include/svtools/popupwindowcontroller.hxx
index f1df441a4979..88317cb9de3d 100644
--- a/include/svtools/popupwindowcontroller.hxx
+++ b/include/svtools/popupwindowcontroller.hxx
@@ -40,8 +40,14 @@ namespace svt
 {
 class PopupWindowControllerImpl;
 
-class SVT_DLLPUBLIC PopupWindowController : public cppu::ImplInheritanceHelper< svt::ToolboxController,
-                                                                                css::lang::XServiceInfo >
+//HACK to avoid duplicate ImplInheritanceHelper symbols with MSVC:
+class SAL_DLLPUBLIC_TEMPLATE PopupWindowController_Base:
+    public cppu::ImplInheritanceHelper<svt::ToolboxController, css::lang::XServiceInfo>
+{
+    using ImplInheritanceHelper::ImplInheritanceHelper;
+};
+
+class SVT_DLLPUBLIC PopupWindowController : public PopupWindowController_Base
 {
 public:
     PopupWindowController( const css::uno::Reference< css::uno::XComponentContext >& rxContext,
diff --git a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
index a0bd1450d0e0..829f9f17c4e8 100644
--- a/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
+++ b/officecfg/registry/data/org/openoffice/Office/UI/Controller.xcu
@@ -1294,6 +1294,17 @@
           <value>com.sun.star.comp.svx.CharacterSpacingToolBoxControl</value>
         </prop>
       </node>
+      <node oor:name="InsertSymbolToolBoxControl" oor:op="replace">
+        <prop oor:name="Command">
+          <value>.uno:CharmapControl</value>
+        </prop>
+        <prop oor:name="Module">
+          <value/>
+        </prop>
+        <prop oor:name="Controller">
+          <value>com.sun.star.comp.sfx2.InsertSymbolToolBoxControl</value>
+        </prop>
+      </node>
       <node oor:name="BorderStyleToolBoxControl" oor:op="replace">
         <prop oor:name="Command">
           <value>.uno:SetBorderStyle</value>
diff --git a/sc/source/ui/app/scdll.cxx b/sc/source/ui/app/scdll.cxx
index df8a4319ea01..fd23b78cf7e3 100644
--- a/sc/source/ui/app/scdll.cxx
+++ b/sc/source/ui/app/scdll.cxx
@@ -173,7 +173,6 @@ void ScDLL::Init()
     SvxCTLTextTbxCtrl::RegisterControl(SID_ATTR_PARA_RIGHT_TO_LEFT, pMod);
 
     EmojiPopup::RegisterControl(SID_EMOJI_CONTROL, pMod );
-    CharmapPopup::RegisterControl(SID_CHARMAP_CONTROL, pMod );
 
     // Media Controller
 #if HAVE_FEATURE_AVMEDIA
diff --git a/sd/source/ui/app/sddll.cxx b/sd/source/ui/app/sddll.cxx
index b83882bd764b..0e63a002a6f6 100644
--- a/sd/source/ui/app/sddll.cxx
+++ b/sd/source/ui/app/sddll.cxx
@@ -224,7 +224,6 @@ void SdDLL::RegisterControllers(SdModule* pMod)
     SvxTbxCtlDraw::RegisterControl(SID_INSERT_DRAW, pMod );
 
     EmojiPopup::RegisterControl(SID_EMOJI_CONTROL, pMod );
-    CharmapPopup::RegisterControl(SID_CHARMAP_CONTROL, pMod );
 }
 
 void SdDLL::Init()
diff --git a/sfx2/source/control/charmapcontrol.cxx b/sfx2/source/control/charmapcontrol.cxx
index 25c9548bb5d7..fe44619b2f3a 100644
--- a/sfx2/source/control/charmapcontrol.cxx
+++ b/sfx2/source/control/charmapcontrol.cxx
@@ -20,13 +20,14 @@
 #include <comphelper/dispatchcommand.hxx>
 #include <officecfg/Office/Common.hxx>
 #include <sfx2/charmapcontrol.hxx>
+#include <sfx2/charmappopup.hxx>
 #include <sfx2/viewfrm.hxx>
 #include <vcl/event.hxx>
 
 using namespace css;
 
-SfxCharmapCtrl::SfxCharmapCtrl(sal_uInt16 nId, vcl::Window* pParent, const css::uno::Reference< css::frame::XFrame >& rFrame)
-    : SfxPopupWindow(nId, pParent, "charmapctrl", "sfx/ui/charmapcontrol.ui", rFrame)
+SfxCharmapCtrl::SfxCharmapCtrl(CharmapPopup* pControl, vcl::Window* pParent)
+    : ToolbarPopup(pControl->getFrameInterface(), pParent, "charmapctrl", "sfx/ui/charmapcontrol.ui")
 {
     get( m_pRecentCharView[0], "viewchar1" );
     get( m_pRecentCharView[1], "viewchar2" );
@@ -89,7 +90,6 @@ SfxCharmapCtrl::~SfxCharmapCtrl()
     disposeOnce();
 }
 
-
 void SfxCharmapCtrl::dispose()
 {
     for(int i = 0; i < 16; i++)
@@ -99,10 +99,9 @@ void SfxCharmapCtrl::dispose()
     maRecentCharFontList.clear();
     maDlgBtn.clear();
 
-    SfxPopupWindow::dispose();
+    ToolbarPopup::dispose();
 }
 
-
 void SfxCharmapCtrl::getFavCharacterList()
 {
     //retrieve recent character list
@@ -114,7 +113,6 @@ void SfxCharmapCtrl::getFavCharacterList()
     std::copy(rFavCharFontList.begin(), rFavCharFontList.end(), std::back_inserter(maFavCharFontList));
 }
 
-
 void SfxCharmapCtrl::updateFavCharControl()
 {
     int i = 0;
@@ -191,7 +189,7 @@ bool SfxCharmapCtrl::EventNotify( NotifyEvent& rNEvt )
             mbNeedsInit = false;
         }
     }
-    return SfxPopupWindow::EventNotify( rNEvt );
+    return ToolbarPopup::EventNotify( rNEvt );
 }
 
 
diff --git a/sfx2/source/dialog/charmappopup.cxx b/sfx2/source/dialog/charmappopup.cxx
index bbe3ae77b413..330012c176b9 100644
--- a/sfx2/source/dialog/charmappopup.cxx
+++ b/sfx2/source/dialog/charmappopup.cxx
@@ -20,33 +20,46 @@
 #include <sfx2/charmapcontrol.hxx>
 #include <vcl/toolbox.hxx>
 
-SFX_IMPL_TOOLBOX_CONTROL(CharmapPopup, SfxVoidItem);
-
-CharmapPopup::CharmapPopup(sal_uInt16 nSlotId, sal_uInt16 nId, ToolBox& rTbx)
-    : SfxToolBoxControl(nSlotId, nId, rTbx)
+CharmapPopup::CharmapPopup(const css::uno::Reference<css::uno::XComponentContext>& rContext)
+    : PopupWindowController(rContext, nullptr, OUString())
 {
-    rTbx.SetItemBits(nId, ToolBoxItemBits::DROPDOWNONLY | rTbx.GetItemBits(nId));
 }
 
 CharmapPopup::~CharmapPopup()
 {
 }
 
-VclPtr<SfxPopupWindow> CharmapPopup::CreatePopupWindow()
+void CharmapPopup::initialize( const css::uno::Sequence< css::uno::Any >& rArguments )
 {
-    VclPtr<SfxCharmapCtrl> pControl = VclPtr<SfxCharmapCtrl>::Create(GetSlotId(), &GetToolBox(), m_xFrame);
+    PopupWindowController::initialize(rArguments);
+
+    ToolBox* pToolBox = nullptr;
+    sal_uInt16 nId = 0;
+    if (getToolboxId(nId, &pToolBox) && pToolBox->GetItemCommand(nId) == m_aCommandURL)
+        pToolBox->SetItemBits(nId, ToolBoxItemBits::DROPDOWNONLY | pToolBox->GetItemBits(nId));
+}
 
-    pControl->StartPopupMode(&GetToolBox(), FloatWinPopupFlags::GrabFocus);
+VclPtr<vcl::Window> CharmapPopup::createPopupWindow(vcl::Window* pParent)
+{
+    return VclPtr<SfxCharmapCtrl>::Create(this, pParent);
+}
 
-    SetPopupWindow(pControl);
+OUString CharmapPopup::getImplementationName()
+{
+    return "com.sun.star.comp.sfx2.InsertSymbolToolBoxControl";
+}
 
-    return pControl;
+css::uno::Sequence<OUString> CharmapPopup::getSupportedServiceNames()
+{
+    return { "com.sun.star.frame.ToolbarController" };
 }
 
-void SAL_CALL CharmapPopup::execute( sal_Int16 /*KeyModifier*/ )
+extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface *
+com_sun_star_comp_sfx2_InsertSymbolToolBoxControl_get_implementation(
+    css::uno::XComponentContext* rContext,
+    css::uno::Sequence<css::uno::Any> const & )
 {
-    com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue > aArgs;
-    Dispatch(".uno:InsertSymbol", aArgs);
+    return cppu::acquire( new CharmapPopup( rContext ) );
 }
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/util/sfx.component b/sfx2/util/sfx.component
index ed9a449baca1..0e1b2521c1f6 100644
--- a/sfx2/util/sfx.component
+++ b/sfx2/util/sfx.component
@@ -86,4 +86,8 @@
       constructor="com_sun_star_sfx2_ClassificationCategoriesController_get_implementation">
     <service name="com.sun.star.frame.ToolbarController"/>
   </implementation>
+  <implementation name="com.sun.star.comp.sfx2.InsertSymbolToolBoxControl"
+      constructor="com_sun_star_comp_sfx2_InsertSymbolToolBoxControl_get_implementation">
+    <service name="com.sun.star.frame.ToolbarController"/>
+  </implementation>
 </component>
diff --git a/svtools/source/uno/popupwindowcontroller.cxx b/svtools/source/uno/popupwindowcontroller.cxx
index 50135adbe453..a2eb9efc7cfb 100644
--- a/svtools/source/uno/popupwindowcontroller.cxx
+++ b/svtools/source/uno/popupwindowcontroller.cxx
@@ -158,7 +158,7 @@ IMPL_LINK( PopupWindowControllerImpl, WindowEventListener, VclWindowEvent&, rWin
 PopupWindowController::PopupWindowController( const Reference< uno::XComponentContext >& rxContext,
                                               const Reference< frame::XFrame >& xFrame,
                                               const OUString& aCommandURL )
-: ImplInheritanceHelper( rxContext, xFrame, aCommandURL )
+: PopupWindowController_Base( rxContext, xFrame, aCommandURL )
 , mxImpl( new PopupWindowControllerImpl() )
 {
 }
diff --git a/sw/source/uibase/app/swmodule.cxx b/sw/source/uibase/app/swmodule.cxx
index 2bb64eff605c..dd596895786e 100644
--- a/sw/source/uibase/app/swmodule.cxx
+++ b/sw/source/uibase/app/swmodule.cxx
@@ -336,8 +336,6 @@ void SwDLL::RegisterControls()
         false, pMod, comphelper::LibreOfficeKit::isActive() ? SfxChildWindowFlags::NEVERCLONE
                                                             : SfxChildWindowFlags::NONE);
 
-    CharmapPopup::RegisterControl(SID_CHARMAP_CONTROL, pMod );
-
     SvxGrafRedToolBoxControl::RegisterControl( SID_ATTR_GRAF_RED, pMod );
     SvxGrafGreenToolBoxControl::RegisterControl( SID_ATTR_GRAF_GREEN, pMod );
     SvxGrafBlueToolBoxControl::RegisterControl( SID_ATTR_GRAF_BLUE, pMod );


More information about the Libreoffice-commits mailing list