vcl/inc/vcl/builder.hxx | 4 ++-- vcl/source/uipreviewer/previewer.cxx | 2 +- vcl/source/window/builder.cxx | 13 +++++++++++-- vcl/source/window/dialog.cxx | 17 ++++++++++------- vcl/source/window/window2.cxx | 4 +++- 5 files changed, 27 insertions(+), 13 deletions(-)
New commits: commit d9a6a2b3967b47644d3ade05aa82f608b638d2c7 Author: Caolán McNamara <caol...@redhat.com> Date: Thu Aug 16 14:04:00 2012 +0100 Cut Gordian Knot of helpids with .ui format There isn't really an equivalent feature in gtk as help ids (apparently anyway) Rather than munge one in, use the widget id + path as an unique help identifier For the retro-fit where code remains unchanged, don't override the .res loaded id with the .ui generated id Change-Id: I1befe77408cb317e0462dacb26b7d12f9399d372 diff --git a/vcl/inc/vcl/builder.hxx b/vcl/inc/vcl/builder.hxx index 7b9823f..ff346dd 100644 --- a/vcl/inc/vcl/builder.hxx +++ b/vcl/inc/vcl/builder.hxx @@ -43,7 +43,6 @@ class VCL_DLLPUBLIC VclBuilder public: typedef std::map<rtl::OString, rtl::OString> stringmap; private: - //todo merge into Windows UniqueID/HelpID ? struct WinAndId { rtl::OString m_sID; @@ -122,9 +121,10 @@ private: rtl::OString getTranslation(const rtl::OString &rId, const rtl::OString &rProperty) const; rtl::OString m_sID; + rtl::OString m_sHelpRoot; Window *m_pParent; public: - VclBuilder(Window *pParent, rtl::OUString sUIFile, rtl::OString sID = rtl::OString()); + VclBuilder(Window *pParent, rtl::OUString sUIRootDir, rtl::OUString sUIFile, rtl::OString sID = rtl::OString()); ~VclBuilder(); Window *get_widget_root(); Window *get_by_name(rtl::OString sID); diff --git a/vcl/source/uipreviewer/previewer.cxx b/vcl/source/uipreviewer/previewer.cxx index e18730b..42c0353 100644 --- a/vcl/source/uipreviewer/previewer.cxx +++ b/vcl/source/uipreviewer/previewer.cxx @@ -85,7 +85,7 @@ int UIPreviewApp::Main() Dialog *pDialog = new Dialog(NULL, WB_STDDIALOG); { - VclBuilder aBuilder(pDialog, uifiles[0]); + VclBuilder aBuilder(pDialog, rtl::OUString(), uifiles[0]); Dialog *pRealDialog = dynamic_cast<Dialog*>(aBuilder.get_widget_root()); if (!pRealDialog) diff --git a/vcl/source/window/builder.cxx b/vcl/source/window/builder.cxx index 0176bfa..a9e5601 100644 --- a/vcl/source/window/builder.cxx +++ b/vcl/source/window/builder.cxx @@ -39,10 +39,18 @@ #include <vcl/tabpage.hxx> #include <window.h> -VclBuilder::VclBuilder(Window *pParent, rtl::OUString sUri, rtl::OString sID) +VclBuilder::VclBuilder(Window *pParent, rtl::OUString sUIDir, rtl::OUString sUIFile, rtl::OString sID) : m_sID(sID) + , m_sHelpRoot(rtl::OUStringToOString(sUIFile, RTL_TEXTENCODING_UTF8)) , m_pParent(pParent) { + sal_Int32 nIdx = m_sHelpRoot.lastIndexOf('.'); + if (nIdx != -1) + m_sHelpRoot = m_sHelpRoot.copy(0, nIdx); + m_sHelpRoot = m_sHelpRoot + rtl::OString('/'); + + rtl::OUString sUri = sUIDir + sUIFile; + ::com::sun::star::lang::Locale aLocale = Application::GetSettings().GetUILocale(); for (int i = aLocale.Country.isEmpty() ? 1 : 0; i < 2; ++i) { @@ -375,7 +383,8 @@ Window *VclBuilder::makeObject(Window *pParent, const rtl::OString &name, const fprintf(stderr, "TO-DO, implement %s\n", name.getStr()); if (pWindow) { - fprintf(stderr, "for %s, created %p child of %p (%p/%p/%p)\n", name.getStr(), pWindow, pParent, pWindow->mpWindowImpl->mpParent, pWindow->mpWindowImpl->mpRealParent, pWindow->mpWindowImpl->mpBorderWindow); + pWindow->SetHelpId(m_sHelpRoot + id); + fprintf(stderr, "for %s, created %p child of %p (%p/%p/%p) with helpid %s\n", name.getStr(), pWindow, pParent, pWindow->mpWindowImpl->mpParent, pWindow->mpWindowImpl->mpRealParent, pWindow->mpWindowImpl->mpBorderWindow, pWindow->GetHelpId().getStr()); m_aChildren.push_back(WinAndId(id, pWindow)); } return pWindow; diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index 0b97fdc..d4d2d43 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -510,7 +510,7 @@ Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rU { ImplInitDialogData(); ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE); - m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID); + m_pUIBuilder = new VclBuilder(this, getUIRootDir(), rUIXMLDescription, rID); } Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rUIXMLDescription, WindowType nType) @@ -518,7 +518,7 @@ Dialog::Dialog(Window* pParent, const rtl::OString& rID, const rtl::OUString& rU { ImplInitDialogData(); ImplInit(pParent, WB_SIZEMOVE|WB_3DLOOK|WB_CLOSEABLE); - m_pUIBuilder = new VclBuilder(this, getUIRootDir() + rUIXMLDescription, rID); + m_pUIBuilder = new VclBuilder(this, getUIRootDir(), rUIXMLDescription, rID); } @@ -544,19 +544,22 @@ Dialog::Dialog( Window* pParent, const ResId& rResId ) : VclBuilder* VclBuilderContainer::overrideResourceWithUIXML(Window *pWindow, const ResId& rResId) { sal_Int32 nUIid = static_cast<sal_Int32>(rResId.GetId()); - rtl::OUString sPath = rtl::OUStringBuffer(getUIRootDir()). - append(rResId.GetResMgr()->getPrefixName()). + + rtl::OUString sRoot = getUIRootDir(); + rtl::OUString sPath = rtl::OUStringBuffer( + rResId.GetResMgr()->getPrefixName()). append("/ui/"). append(nUIid). appendAscii(".ui"). makeStringAndClear(); - fprintf(stderr, "path %s id %d\n", rtl::OUStringToOString(sPath, RTL_TEXTENCODING_UTF8).getStr(), nUIid); - osl::File aUIFile(sPath); + fprintf(stderr, "path %s id %d\n", rtl::OUStringToOString(sRoot+sPath, RTL_TEXTENCODING_UTF8).getStr(), nUIid); + + osl::File aUIFile(sRoot + sPath); osl::File::RC error = aUIFile.open(osl_File_OpenFlag_Read); //good, use the preferred GtkBuilder xml if (error == osl::File::E_None) - return new VclBuilder(pWindow, sPath, rtl::OString::valueOf(nUIid)); + return new VclBuilder(pWindow, sRoot, sPath, rtl::OString::valueOf(nUIid)); return NULL; } diff --git a/vcl/source/window/window2.cxx b/vcl/source/window/window2.cxx index bf68bbe..4a38819 100644 --- a/vcl/source/window/window2.cxx +++ b/vcl/source/window/window2.cxx @@ -1761,6 +1761,9 @@ void Window::queue_resize() pParent->Resize(); } +//We deliberately do not overwrite our maHelpId here +//so that the .res loaded id is not overwritten +//by the .ui loaded one void Window::take_properties(Window &rOther) { if (!mpWindowImpl) @@ -1791,7 +1794,6 @@ void Window::take_properties(Window &rOther) mpWindowImpl->mnY = pWindowImpl->mnY; mpWindowImpl->mnAbsScreenX = pWindowImpl->mnAbsScreenX; mpWindowImpl->maPos = pWindowImpl->maPos; - mpWindowImpl->maHelpId = pWindowImpl->maHelpId; mpWindowImpl->maUniqId = pWindowImpl->maUniqId; mpWindowImpl->maHelpText = pWindowImpl->maHelpText; mpWindowImpl->maQuickHelpText = pWindowImpl->maQuickHelpText;
_______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits