vcl/source/window/builder.cxx |  116 ++++++++++++++++++++++--------------------
 1 file changed, 63 insertions(+), 53 deletions(-)

New commits:
commit fd67c89e52441387dffab1c788007271e717571b
Author:     Mike Kaganski <mike.kagan...@collabora.com>
AuthorDate: Mon Sep 2 23:14:29 2019 +0300
Commit:     Mike Kaganski <mike.kagan...@collabora.com>
CommitDate: Tue Sep 3 06:42:20 2019 +0200

    Extract code to get GetCustomMakeWidget address into a separate function
    
    ... to simplify the logic
    
    Change-Id: I45a23f17e10d634aeb322ac5797adc175006f5eb
    Reviewed-on: https://gerrit.libreoffice.org/78424
    Tested-by: Jenkins
    Reviewed-by: Mike Kaganski <mike.kagan...@collabora.com>

diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx
index 2c4d6c3119da..1606c18625fb 100644
--- a/vcl/source/window/builder.cxx
+++ b/vcl/source/window/builder.cxx
@@ -1628,6 +1628,59 @@ void VclBuilder::preload()
 extern "C" VclBuilder::customMakeWidget lo_get_custom_widget_func(const char* 
name);
 #endif
 
+namespace
+{
+// Takes a string like "sfxlo-SidebarToolBox"
+VclBuilder::customMakeWidget GetCustomMakeWidget(const OString& name)
+{
+    VclBuilder::customMakeWidget pFunction = nullptr;
+    if (sal_Int32 nDelim = name.indexOf('-'); nDelim != -1)
+    {
+        const OUString sFunction("make"
+                                 + OStringToOUString(name.copy(nDelim + 1), 
RTL_TEXTENCODING_UTF8));
+
+#ifndef DISABLE_DYNLOADING
+        const OUString sModule = SAL_DLLPREFIX
+                                 + OStringToOUString(name.copy(0, nDelim), 
RTL_TEXTENCODING_UTF8)
+                                 + SAL_DLLEXTENSION;
+        ModuleMap::iterator aI = g_aModuleMap.find(sModule);
+        if (aI == g_aModuleMap.end())
+        {
+            std::shared_ptr<NoAutoUnloadModule> pModule;
+#if ENABLE_MERGELIBS
+            if (!g_pMergedLib->is())
+                g_pMergedLib->loadRelative(&thisModule, SVLIBRARY("merged"));
+            if ((pFunction = reinterpret_cast<VclBuilder::customMakeWidget>(
+                     g_pMergedLib->getFunctionSymbol(sFunction))))
+                pModule = g_pMergedLib;
+#endif
+            if (!pFunction)
+            {
+                pModule.reset(new NoAutoUnloadModule);
+                bool ok = pModule->loadRelative(&thisModule, sModule);
+                assert(ok && "bad module name in .ui");
+                (void)ok;
+                pFunction = reinterpret_cast<VclBuilder::customMakeWidget>(
+                    pModule->getFunctionSymbol(sFunction));
+            }
+            g_aModuleMap.insert(std::make_pair(sModule, pModule));
+        }
+        else
+            pFunction = reinterpret_cast<VclBuilder::customMakeWidget>(
+                aI->second->getFunctionSymbol(sFunction));
+#elif !HAVE_FEATURE_DESKTOP
+        pFunction = lo_get_custom_widget_func(sFunction.toUtf8().getStr());
+        SAL_WARN_IF(!pFunction, "vcl.layout", "Could not find " << sFunction);
+        assert(pFunction);
+#else
+        pFunction = reinterpret_cast<customMakeWidget>(
+            osl_getFunctionSymbol((oslModule)RTLD_DEFAULT, sFunction.pData));
+#endif
+    }
+    return pFunction;
+}
+}
+
 VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window *pParent, const OString 
&name, const OString &id,
     stringmap &rMap)
 {
@@ -2275,61 +2328,18 @@ VclPtr<vcl::Window> VclBuilder::makeObject(vcl::Window 
*pParent, const OString &
     }
     else
     {
-        sal_Int32 nDelim = name.indexOf('-');
-        if (nDelim != -1)
+        if (customMakeWidget pFunction = GetCustomMakeWidget(name))
         {
-            OUString sFunction(OStringToOUString(OString("make") + 
name.copy(nDelim+1), RTL_TEXTENCODING_UTF8));
-
-            customMakeWidget pFunction = nullptr;
-#ifndef DISABLE_DYNLOADING
-            OUStringBuffer sModuleBuf;
-            sModuleBuf.append(SAL_DLLPREFIX);
-            sModuleBuf.append(OStringToOUString(name.copy(0, nDelim), 
RTL_TEXTENCODING_UTF8));
-            sModuleBuf.append(SAL_DLLEXTENSION);
-
-            OUString sModule = sModuleBuf.makeStringAndClear();
-            ModuleMap::iterator aI = g_aModuleMap.find(sModule);
-            if (aI == g_aModuleMap.end())
+            VclPtr<vcl::Window> xParent(pParent);
+            pFunction(xWindow, xParent, rMap);
+            if (xWindow->GetType() == WindowType::PUSHBUTTON)
+                setupFromActionName(static_cast<Button*>(xWindow.get()), rMap, 
m_xFrame);
+            else if (xWindow->GetType() == WindowType::MENUBUTTON)
             {
-                std::shared_ptr<NoAutoUnloadModule> pModule;
-#if ENABLE_MERGELIBS
-                if (!g_pMergedLib->is())
-                    g_pMergedLib->loadRelative(&thisModule, 
SVLIBRARY("merged"));
-                if ((pFunction = 
reinterpret_cast<customMakeWidget>(g_pMergedLib->getFunctionSymbol(sFunction))))
-                    pModule = g_pMergedLib;
-#endif
-                if (!pFunction)
-                {
-                    pModule.reset(new NoAutoUnloadModule);
-                    bool ok = pModule->loadRelative(&thisModule, sModule);
-                    assert(ok && "bad module name in .ui");
-                    (void) ok;
-                    pFunction = 
reinterpret_cast<customMakeWidget>(pModule->getFunctionSymbol(sFunction));
-                }
-                g_aModuleMap.insert(std::make_pair(sModule, pModule));
-            }
-            else
-                pFunction = 
reinterpret_cast<customMakeWidget>(aI->second->getFunctionSymbol(sFunction));
-#elif !HAVE_FEATURE_DESKTOP
-            pFunction = lo_get_custom_widget_func(sFunction.toUtf8().getStr());
-            SAL_WARN_IF(!pFunction, "vcl.layout", "Could not find " << 
sFunction);
-            assert(pFunction);
-#else
-            pFunction = 
reinterpret_cast<customMakeWidget>(osl_getFunctionSymbol((oslModule) 
RTLD_DEFAULT, sFunction.pData));
-#endif
-            if (pFunction)
-            {
-                VclPtr<vcl::Window> xParent(pParent);
-                pFunction(xWindow, xParent, rMap);
-                if (xWindow->GetType() == WindowType::PUSHBUTTON)
-                    setupFromActionName(static_cast<Button*>(xWindow.get()), 
rMap, m_xFrame);
-                else if (xWindow->GetType() == WindowType::MENUBUTTON)
-                {
-                    OUString sMenu = BuilderUtils::extractCustomProperty(rMap);
-                    if (!sMenu.isEmpty())
-                        m_pParserState->m_aButtonMenuMaps.emplace_back(id, 
sMenu);
-                    setupFromActionName(static_cast<Button*>(xWindow.get()), 
rMap, m_xFrame);
-                }
+                OUString sMenu = BuilderUtils::extractCustomProperty(rMap);
+                if (!sMenu.isEmpty())
+                    m_pParserState->m_aButtonMenuMaps.emplace_back(id, sMenu);
+                setupFromActionName(static_cast<Button*>(xWindow.get()), rMap, 
m_xFrame);
             }
         }
     }
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to