diff options
-rw-r--r-- | desktop/source/lib/init.cxx | 64 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKit.h | 12 | ||||
-rw-r--r-- | include/LibreOfficeKit/LibreOfficeKit.hxx | 36 | ||||
-rw-r--r-- | include/sfx2/lokhelper.hxx | 4 | ||||
-rw-r--r-- | include/sfx2/viewsh.hxx | 10 | ||||
-rw-r--r-- | include/vcl/IDialogRenderable.hxx | 2 | ||||
-rw-r--r-- | include/vcl/dialog.hxx | 6 | ||||
-rw-r--r-- | libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx | 56 | ||||
-rw-r--r-- | libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx | 2 | ||||
-rw-r--r-- | libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx | 26 | ||||
-rw-r--r-- | sfx2/source/view/lokhelper.cxx | 12 | ||||
-rw-r--r-- | sfx2/source/view/viewsh.cxx | 27 | ||||
-rw-r--r-- | vcl/source/window/dialog.cxx | 13 |
13 files changed, 125 insertions, 145 deletions
diff --git a/desktop/source/lib/init.cxx b/desktop/source/lib/init.cxx index 5d0e39c419cc..b40ff1a609e4 100644 --- a/desktop/source/lib/init.cxx +++ b/desktop/source/lib/init.cxx @@ -544,7 +544,7 @@ static void doc_postKeyEvent(LibreOfficeKitDocument* pThis, int nCharCode, int nKeyCode); static void doc_postDialogKeyEvent(LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nCharCode, int nKeyCode); @@ -556,7 +556,7 @@ static void doc_postMouseEvent (LibreOfficeKitDocument* pThis, int nButtons, int nModifier); static void doc_postDialogMouseEvent (LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nX, int nY, @@ -564,7 +564,7 @@ static void doc_postDialogMouseEvent (LibreOfficeKitDocument* pThis, int nButtons, int nModifier); static void doc_postDialogChildMouseEvent (LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nX, int nY, @@ -611,14 +611,14 @@ static unsigned char* doc_renderFont(LibreOfficeKitDocument* pThis, int* pFontHeight); static char* doc_getPartHash(LibreOfficeKitDocument* pThis, int nPart); -static void doc_paintDialog(LibreOfficeKitDocument* pThis, const char* pDialogId, unsigned char* pBuffer, +static void doc_paintDialog(LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, const int nX, const int nY, const int nWidth, const int nHeight); -static void doc_getDialogInfo(LibreOfficeKitDocument* pThis, const char* pDialogId, +static void doc_getDialogInfo(LibreOfficeKitDocument* pThis, unsigned nDialogId, char** pDialogTitle, int* nWidth, int* nHeight); -static void doc_paintActiveFloatingWindow(LibreOfficeKitDocument* pThis, const char* pDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight); +static void doc_paintActiveFloatingWindow(LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight); LibLODocument_Impl::LibLODocument_Impl(const uno::Reference <css::lang::XComponent> &xComponent) : mxComponent(xComponent) @@ -1029,7 +1029,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) boost::property_tree::ptree aTree; std::stringstream aStream(payload); boost::property_tree::read_json(aStream, aTree); - const std::string aDialogId = aTree.get<std::string>("dialogId", ""); + const unsigned nDialogId = aTree.get<unsigned>("dialogId", 0); if (aTree.get<std::string>("action", "") == "invalidate") { std::string aRectStr = aTree.get<std::string>("rectangle", ""); @@ -1037,15 +1037,15 @@ void CallbackFlushHandler::queue(const int type, const char* data) // remove all previous dialog part invalidations if (aRectStr.empty()) { - removeAll([&aDialogId] (const queue_type::value_type& elem) { + removeAll([&nDialogId] (const queue_type::value_type& elem) { if (elem.first == LOK_CALLBACK_DIALOG) { boost::property_tree::ptree aOldTree; std::stringstream aOldStream(elem.second); boost::property_tree::read_json(aOldStream, aOldTree); - const std::string aOldDialogId = aOldTree.get<std::string>("dialogId", ""); + const unsigned nOldDialogId = aOldTree.get<unsigned>("dialogId", 0); if (aOldTree.get<std::string>("action", "") == "invalidate" && - aDialogId == aOldDialogId) + nDialogId == nOldDialogId) { return true; } @@ -1058,7 +1058,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) // if we have to invalidate all of the dialog, ignore // any part invalidation message const auto& pos = std::find_if(m_queue.rbegin(), m_queue.rend(), - [&aDialogId] (const queue_type::value_type& elem) + [&nDialogId] (const queue_type::value_type& elem) { if (elem.first != LOK_CALLBACK_DIALOG) return false; @@ -1066,9 +1066,9 @@ void CallbackFlushHandler::queue(const int type, const char* data) boost::property_tree::ptree aOldTree; std::stringstream aOldStream(elem.second); boost::property_tree::read_json(aOldStream, aOldTree); - const std::string aOldDialogId = aOldTree.get<std::string>("dialogId", ""); + const unsigned nOldDialogId = aOldTree.get<unsigned>("dialogId", 0); if (aOldTree.get<std::string>("action", "") == "invalidate" && - aDialogId == aOldDialogId && + nDialogId == nOldDialogId && aOldTree.get<std::string>("rectangle", "").empty()) { return true; @@ -1089,7 +1089,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) aRectStream >> nLeft >> nComma >> nTop >> nComma >> nWidth >> nComma >> nHeight; tools::Rectangle aNewRect = tools::Rectangle(nLeft, nTop, nLeft + nWidth, nTop + nHeight); bool currentIsRedundant = false; - removeAll([&aNewRect, &aDialogId, ¤tIsRedundant] (const queue_type::value_type& elem) { + removeAll([&aNewRect, &nDialogId, ¤tIsRedundant] (const queue_type::value_type& elem) { if (elem.first != LOK_CALLBACK_DIALOG) return false; @@ -1098,7 +1098,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) boost::property_tree::read_json(aOldStream, aOldTree); if (aOldTree.get<std::string>("action", "") == "invalidate") { - const std::string aOldDialogId = aOldTree.get<std::string>("dialogId", ""); + const unsigned nOldDialogId = aOldTree.get<unsigned>("dialogId", 0); std::string aOldRectStr = aOldTree.get<std::string>("rectangle", ""); // not possible that we encounter an empty // rectangle here; we already handled this @@ -1109,7 +1109,7 @@ void CallbackFlushHandler::queue(const int type, const char* data) aOldRectStream >> nOldLeft >> nOldComma >> nOldTop >> nOldComma >> nOldWidth >> nOldComma >> nOldHeight; tools::Rectangle aOldRect = tools::Rectangle(nOldLeft, nOldTop, nOldLeft + nOldWidth, nOldTop + nOldHeight); - if (aDialogId == aOldDialogId) + if (nDialogId == nOldDialogId) { // new one engulfs the old one? if (aNewRect.IsInside(aOldRect)) @@ -2257,7 +2257,7 @@ static void doc_postKeyEvent(LibreOfficeKitDocument* pThis, int nType, int nChar pDoc->postKeyEvent(nType, nCharCode, nKeyCode); } -static void doc_postDialogKeyEvent(LibreOfficeKitDocument* pThis, const char* pDialogId, int nType, int nCharCode, int nKeyCode) +static void doc_postDialogKeyEvent(LibreOfficeKitDocument* pThis, unsigned nDialogId, int nType, int nCharCode, int nKeyCode) { SolarMutexGuard aGuard; @@ -2268,8 +2268,7 @@ static void doc_postDialogKeyEvent(LibreOfficeKitDocument* pThis, const char* pD return; } - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); - pDoc->postDialogKeyEvent(aDialogID, nType, nCharCode, nKeyCode); + pDoc->postDialogKeyEvent(nDialogId, nType, nCharCode, nKeyCode); } /** Class to react on finishing of a dispatched command. @@ -2423,7 +2422,7 @@ static void doc_postMouseEvent(LibreOfficeKitDocument* pThis, int nType, int nX, } } -static void doc_postDialogMouseEvent(LibreOfficeKitDocument* pThis, const char* pDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) +static void doc_postDialogMouseEvent(LibreOfficeKitDocument* pThis, unsigned nDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) { SolarMutexGuard aGuard; @@ -2434,11 +2433,10 @@ static void doc_postDialogMouseEvent(LibreOfficeKitDocument* pThis, const char* return; } - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); - pDoc->postDialogMouseEvent(aDialogID, nType, nX, nY, nCount, nButtons, nModifier); + pDoc->postDialogMouseEvent(nDialogId, nType, nX, nY, nCount, nButtons, nModifier); } -static void doc_postDialogChildMouseEvent(LibreOfficeKitDocument* pThis, const char* pDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) +static void doc_postDialogChildMouseEvent(LibreOfficeKitDocument* pThis, unsigned nDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) { SolarMutexGuard aGuard; @@ -2449,8 +2447,7 @@ static void doc_postDialogChildMouseEvent(LibreOfficeKitDocument* pThis, const c return; } - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); - pDoc->postDialogChildMouseEvent(aDialogID, nType, nX, nY, nCount, nButtons, nModifier); + pDoc->postDialogChildMouseEvent(nDialogId, nType, nX, nY, nCount, nButtons, nModifier); } static void doc_setTextSelection(LibreOfficeKitDocument* pThis, int nType, int nX, int nY) @@ -3229,15 +3226,14 @@ unsigned char* doc_renderFont(SAL_UNUSED_PARAMETER LibreOfficeKitDocument* /*pTh return nullptr; } -static void doc_getDialogInfo(LibreOfficeKitDocument* pThis, const char* pDialogId, +static void doc_getDialogInfo(LibreOfficeKitDocument* pThis, unsigned nDialogId, char** pDialogTitle, int* nWidth, int* nHeight) { SolarMutexGuard aGuard; IDialogRenderable* pDialogRenderable = getDialogRenderable(pThis); - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); OUString aDialogTitle; - pDialogRenderable->getDialogInfo(aDialogID, aDialogTitle, *nWidth, *nHeight); + pDialogRenderable->getDialogInfo(nDialogId, aDialogTitle, *nWidth, *nHeight); // copy dialog title if (!aDialogTitle.isEmpty()) @@ -3248,7 +3244,7 @@ static void doc_getDialogInfo(LibreOfficeKitDocument* pThis, const char* pDialog } } -static void doc_paintDialog(LibreOfficeKitDocument* pThis, const char* pDialogId, +static void doc_paintDialog(LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, const int nX, const int nY, const int nWidth, const int nHeight) @@ -3262,18 +3258,16 @@ static void doc_paintDialog(LibreOfficeKitDocument* pThis, const char* pDialogId pDevice->SetOutputSizePixelScaleOffsetAndBuffer(Size(nWidth, nHeight), Fraction(1.0), Point(), pBuffer); - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); - MapMode aMapMode(pDevice->GetMapMode()); aMapMode.SetOrigin(Point(-nX, -nY)); pDevice->SetMapMode(aMapMode); comphelper::LibreOfficeKit::setDialogPainting(true); - pDialogRenderable->paintDialog(aDialogID, *pDevice.get()); + pDialogRenderable->paintDialog(nDialogId, *pDevice.get()); comphelper::LibreOfficeKit::setDialogPainting(false); } -static void doc_paintActiveFloatingWindow(LibreOfficeKitDocument* pThis, const char* pDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight) +static void doc_paintActiveFloatingWindow(LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight) { SolarMutexGuard aGuard; @@ -3284,10 +3278,8 @@ static void doc_paintActiveFloatingWindow(LibreOfficeKitDocument* pThis, const c pDevice->SetOutputSizePixelScaleOffsetAndBuffer(Size(*nWidth, *nHeight), Fraction(1.0), Point(), pBuffer); - vcl::DialogID aDialogID = OUString::createFromAscii(pDialogId); - comphelper::LibreOfficeKit::setDialogPainting(true); - pDialogRenderable->paintActiveFloatingWindow(aDialogID, *pDevice.get(), *nWidth, *nHeight); + pDialogRenderable->paintActiveFloatingWindow(nDialogId, *pDevice.get(), *nWidth, *nHeight); comphelper::LibreOfficeKit::setDialogPainting(false); } diff --git a/include/LibreOfficeKit/LibreOfficeKit.h b/include/LibreOfficeKit/LibreOfficeKit.h index 14824821cfd7..071da712703e 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.h +++ b/include/LibreOfficeKit/LibreOfficeKit.h @@ -268,29 +268,29 @@ struct _LibreOfficeKitDocumentClass /// Paints dialog with given dialog id to the buffer /// @see lok::Document::paintDialog(). - void (*paintDialog) (LibreOfficeKitDocument* pThis, const char* pDialogId, + void (*paintDialog) (LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, const int x, const int y, const int width, const int height); /// Get info about dialog with given dialog id /// @see lok::Document::getDialogInfo(). - void (*getDialogInfo) (LibreOfficeKitDocument* pThis, const char* pDialogId, + void (*getDialogInfo) (LibreOfficeKitDocument* pThis, unsigned nDialogId, char** pDialogTitle, int* pWidth, int* pHeight); /// @see lok::Document::paintActiveFloatingWindow(). - void (*paintActiveFloatingWindow) (LibreOfficeKitDocument* pThis, const char* pDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight); + void (*paintActiveFloatingWindow) (LibreOfficeKitDocument* pThis, unsigned nDialogId, unsigned char* pBuffer, int* nWidth, int* nHeight); /// @see lok::Document::postDialogKeyEvent(). void (*postDialogKeyEvent) (LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nCharCode, int nKeyCode); /// @see lok::Document::postDialogMouseEvent(). void (*postDialogMouseEvent) (LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nX, int nY, @@ -300,7 +300,7 @@ struct _LibreOfficeKitDocumentClass /// @see lok::Document::postDialogChildMouseEvent(). void (*postDialogChildMouseEvent) (LibreOfficeKitDocument* pThis, - const char* pDialogId, + unsigned nDialogId, int nType, int nX, int nY, diff --git a/include/LibreOfficeKit/LibreOfficeKit.hxx b/include/LibreOfficeKit/LibreOfficeKit.hxx index 19e121fe6573..c99b425daff6 100644 --- a/include/LibreOfficeKit/LibreOfficeKit.hxx +++ b/include/LibreOfficeKit/LibreOfficeKit.hxx @@ -160,38 +160,38 @@ public: * * Client must truncate pBuffer according to the nWidth and nHeight returned after the call. * - * @param pDialogId Unique dialog id to be painted + * @param nDialogId Unique dialog id to be painted * @param pBuffer Buffer with enough memory allocated to render any dialog * @param x x-coordinate from where the dialog should start painting * @param y y-coordinate from where the dialog should start painting * @param width The width of the dialog image to be painted * @param height The height of the dialog image to be painted */ - void paintDialog(const char* pDialogId, + void paintDialog(unsigned nDialogId, unsigned char* pBuffer, const int x, const int y, const int width, const int height) { - return mpDoc->pClass->paintDialog(mpDoc, pDialogId, pBuffer, + return mpDoc->pClass->paintDialog(mpDoc, nDialogId, pBuffer, x, y, width, height); } /* Get info about dialog with given dialog id * - * @param pDialogId Unique dialog id for which to get info about + * @param nDialogId Unique dialog id for which to get info about * @param pDialogTitle Pointer to pointer pointing to string containing the * dialog title. Caller should the pointer to allocated string themselves. * @param pWidth The width of the dialog * @param pHeight The height of the dialog */ - void getDialogInfo(const char* pDialogId, + void getDialogInfo(unsigned nDialogId, char** pDialogTitle, int& pWidth, int& pHeight) { - return mpDoc->pClass->getDialogInfo(mpDoc, pDialogId, pDialogTitle, &pWidth, &pHeight); + return mpDoc->pClass->getDialogInfo(mpDoc, nDialogId, pDialogTitle, &pWidth, &pHeight); } @@ -200,17 +200,17 @@ public: * * Client must truncate pBuffer according to the nWidth and nHeight returned after the call. * - * @param pDialogId Unique dialog id + * @param nDialogId Unique dialog id * @param pBuffer Buffer with enough memory allocated to render any dialog * @param nWidth output parameter returning the width of the rendered dialog. * @param nHeight output parameter returning the height of the rendered dialog */ - void paintActiveFloatingWindow(const char* pDialogId, + void paintActiveFloatingWindow(unsigned nDialogId, unsigned char* pBuffer, int& nWidth, int& nHeight) { - return mpDoc->pClass->paintActiveFloatingWindow(mpDoc, pDialogId, pBuffer, + return mpDoc->pClass->paintActiveFloatingWindow(mpDoc, nDialogId, pBuffer, &nWidth, &nHeight); } @@ -282,14 +282,14 @@ public: /** * Posts a keyboard event to the dialog * - * @param pDialogId Dialog id on which key event should be posted + * @param nDialogId Dialog id on which key event should be posted * @param nType Event type, like press or release. * @param nCharCode contains the Unicode character generated by this event or 0 * @param nKeyCode contains the integer code representing the key of the event (non-zero for control keys) */ - void postDialogKeyEvent(const char* pDialogId, int nType, int nCharCode, int nKeyCode) + void postDialogKeyEvent(unsigned nDialogId, int nType, int nCharCode, int nKeyCode) { - mpDoc->pClass->postDialogKeyEvent(mpDoc, pDialogId, nType, nCharCode, nKeyCode); + mpDoc->pClass->postDialogKeyEvent(mpDoc, nDialogId, nType, nCharCode, nKeyCode); } /** @@ -310,7 +310,7 @@ public: /** * Posts a mouse event to the dialog with given id. * - * @param pDialogId Dialog id where mouse event is to be posted + * @param nDialogId Dialog id where mouse event is to be posted * @param nType Event type, like down, move or up. * @param nX horizontal position in document coordinates * @param nY vertical position in document coordinates @@ -318,15 +318,15 @@ public: * @param nButtons: which mouse buttons: 1 for left, 2 for middle, 4 right * @param nModifier: which keyboard modifier: (see include/vcl/vclenum.hxx for possible values) */ - void postDialogMouseEvent(const char* pDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) + void postDialogMouseEvent(unsigned nDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) { - mpDoc->pClass->postDialogMouseEvent(mpDoc, pDialogId, nType, nX, nY, nCount, nButtons, nModifier); + mpDoc->pClass->postDialogMouseEvent(mpDoc, nDialogId, nType, nX, nY, nCount, nButtons, nModifier); } /** * Posts a mouse event to the child of a dialog with given id. * - * @param aDialogId Dialog id + * @param nDialogId Dialog id * @param nType Event type, like down, move or up. * @param nX horizontal position in document coordinates * @param nY vertical position in document coordinates @@ -334,9 +334,9 @@ public: * @param nButtons: which mouse buttons: 1 for left, 2 for middle, 4 right * @param nModifier: which keyboard modifier: (see include/vcl/vclenum.hxx for possible values) */ - void postDialogChildMouseEvent(const char* pDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) + void postDialogChildMouseEvent(unsigned nDialogId, int nType, int nX, int nY, int nCount, int nButtons, int nModifier) { - mpDoc->pClass->postDialogChildMouseEvent(mpDoc, pDialogId, nType, nX, nY, nCount, nButtons, nModifier); + mpDoc->pClass->postDialogChildMouseEvent(mpDoc, nDialogId, nType, nX, nY, nCount, nButtons, nModifier); } diff --git a/include/sfx2/lokhelper.hxx b/include/sfx2/lokhelper.hxx index 93d61fc311fa..24e59d097393 100644 --- a/include/sfx2/lokhelper.hxx +++ b/include/sfx2/lokhelper.hxx @@ -42,11 +42,11 @@ public: /// Same as notifyOtherViews(), but works on a selected "other" view, not on all of them. static void notifyOtherView(SfxViewShell* pThisView, SfxViewShell const* pOtherView, int nType, const OString& rKey, const OString& rPayload); /// Emits a LOK_CALLBACK_DIALOG - static void notifyDialog(const OUString& rDialogId, + static void notifyDialog(vcl::DialogID nDialogId, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload = std::vector<vcl::LOKPayloadItem>()); /// Emits a LOK_CALLBACK_DIALOG_CHILD - static void notifyDialogChild(const OUString& rDialogID, const OUString& rAction, const Point& rPos); + static void notifyDialogChild(vcl::DialogID nDialogId, const OUString& rAction, const Point& rPos); /// Emits a LOK_CALLBACK_INVALIDATE_TILES, but tweaks it according to setOptionalFeatures() if needed. static void notifyInvalidation(SfxViewShell const* pThisView, const OString& rPayload); /// A special value to signify 'infinity'. diff --git a/include/sfx2/viewsh.hxx b/include/sfx2/viewsh.hxx index ed0ea3f3817b..e6687ff7d5a7 100644 --- a/include/sfx2/viewsh.hxx +++ b/include/sfx2/viewsh.hxx @@ -222,13 +222,13 @@ public: virtual SfxShell* GetFormShell() { return nullptr; }; virtual const SfxShell* GetFormShell() const { return nullptr; }; - void RegisterDlg(const vcl::DialogID& rDialogId, VclPtr<Dialog> pDlg); - VclPtr<Dialog> GetOpenedDlg(const vcl::DialogID& rDialogId); - void UnregisterDlg(const vcl::DialogID& rDialogId); + void RegisterDlg(vcl::DialogID nDialogId, VclPtr<Dialog> pDlg); + VclPtr<Dialog> GetOpenedDlg(vcl::DialogID nDialogId); + void UnregisterDlg(vcl::DialogID nDialogId); // IDialogNotifier - virtual void notifyDialog(const vcl::DialogID& rDialogID, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload = std::vector<vcl::LOKPayloadItem>()) override; - virtual void notifyDialogChild(const vcl::DialogID& rDialogID, const OUString& rAction, const Point& rPos) override; + virtual void notifyDialog(const vcl::DialogID& rDialogId, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload = std::vector<vcl::LOKPayloadItem>()) override; + virtual void notifyDialogChild(const vcl::DialogID& rDialogId, const OUString& rAction, const Point& rPos) override; // Focus, KeyInput, Cursor virtual void ShowCursor( bool bOn = true ); diff --git a/include/vcl/IDialogRenderable.hxx b/include/vcl/IDialogRenderable.hxx index 9a63830566f0..f606782692e3 100644 --- a/include/vcl/IDialogRenderable.hxx +++ b/include/vcl/IDialogRenderable.hxx @@ -23,7 +23,7 @@ namespace vcl typedef std::pair<const OString, const OString> LOKPayloadItem; -typedef OUString DialogID; +typedef sal_uInt32 DialogID; class VCL_DLLPUBLIC IDialogRenderable { diff --git a/include/vcl/dialog.hxx b/include/vcl/dialog.hxx index 874828f92a0e..e4d9f88f6d83 100644 --- a/include/vcl/dialog.hxx +++ b/include/vcl/dialog.hxx @@ -59,6 +59,8 @@ private: vcl::IDialogNotifier* mpDialogNotifier; // to emit LOK callbacks + static vcl::DialogID mnLastDialogId; + SAL_DLLPRIVATE void ImplInitDialogData(); SAL_DLLPRIVATE void ImplInitSettings(); SAL_DLLPRIVATE VclPtr<vcl::Window> AddBorderWindow(vcl::Window* pParent, WinBits nBits); @@ -73,8 +75,8 @@ private: protected: using Window::ImplInit; SAL_DLLPRIVATE void ImplInit( vcl::Window* pParent, WinBits nStyle, InitFlag eFlag = InitFlag::Default ); - /// Dialog ID (UNO name) for this dialog - OUString maID; + /// Dialog ID (used for LOK) + vcl::DialogID maID; /// Necessary to register dialog notifier instance to emit LOK callbacks void registerDialogNotifier(vcl::IDialogNotifier* pDialogNotifier); diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx index 176fa91fffaa..b5325cf853c0 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.cxx @@ -48,7 +48,7 @@ struct GtvLokDialogPrivate guint32 m_nChildKeyModifier; guint32 m_nChildLastButtonPressed; - gchar* dialogid; + guint dialogid; }; G_DEFINE_TYPE_WITH_PRIVATE(GtvLokDialog, gtv_lok_dialog, GTK_TYPE_DIALOG); @@ -400,7 +400,7 @@ gtv_lok_dialog_set_property(GObject* object, guint propId, const GValue* value, priv->lokdocview = LOK_DOC_VIEW(g_value_get_object(value)); break; case PROP_DIALOG_ID: - priv->dialogid = g_value_dup_string(value); + priv->dialogid = g_value_get_uint(value); break; case PROP_DIALOG_WIDTH: priv->m_nWidth = g_value_get_uint(value); @@ -425,7 +425,7 @@ gtv_lok_dialog_get_property(GObject* object, guint propId, GValue* value, GParam g_value_set_object(value, priv->lokdocview); break; case PROP_DIALOG_ID: - g_value_set_string(value, priv->dialogid); + g_value_set_uint(value, priv->dialogid); break; case PROP_DIALOG_WIDTH: g_value_set_uint(value, priv->m_nWidth); @@ -439,22 +439,10 @@ gtv_lok_dialog_get_property(GObject* object, guint propId, GValue* value, GParam } static void -gtv_lok_dialog_finalize(GObject* object) -{ - GtvLokDialog* self = GTV_LOK_DIALOG(object); - GtvLokDialogPrivate* priv = getPrivate(self); - - g_free(priv->dialogid); - - G_OBJECT_CLASS(gtv_lok_dialog_parent_class)->finalize(object); -} - -static void gtv_lok_dialog_class_init(GtvLokDialogClass* klass) { G_OBJECT_CLASS(klass)->get_property = gtv_lok_dialog_get_property; G_OBJECT_CLASS(klass)->set_property = gtv_lok_dialog_set_property; - G_OBJECT_CLASS(klass)->finalize = gtv_lok_dialog_finalize; properties[PROP_LOKDOCVIEW_CONTEXT] = g_param_spec_object("lokdocview", "LOKDocView Context", @@ -464,29 +452,29 @@ gtv_lok_dialog_class_init(GtvLokDialogClass* klass) G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); - properties[PROP_DIALOG_ID] = g_param_spec_string("dialogid", - "Dialog identifier", - "Unique dialog identifier; UNO command for now", - nullptr, - static_cast<GParamFlags>(G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); + properties[PROP_DIALOG_ID] = g_param_spec_uint("dialogid", + "Dialog identifier", + "Unique dialog identifier", + 0, G_MAXUINT, 0, + static_cast<GParamFlags>(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); properties[PROP_DIALOG_WIDTH] = g_param_spec_uint("width", - "Dialog width", - "Dialog width", - 0, 1024, 0, - static_cast<GParamFlags>(G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); + "Dialog width", + "Dialog width", + 0, 1024, 0, + static_cast<GParamFlags>(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); properties[PROP_DIALOG_HEIGHT] = g_param_spec_uint("height", "Dialog height", - "Dialog height", - 0, 1024, 0, - static_cast<GParamFlags>(G_PARAM_READWRITE | - G_PARAM_CONSTRUCT_ONLY | - G_PARAM_STATIC_STRINGS)); + "Dialog height", + 0, 1024, 0, + static_cast<GParamFlags>(G_PARAM_READWRITE | + G_PARAM_CONSTRUCT_ONLY | + G_PARAM_STATIC_STRINGS)); g_object_class_install_properties (G_OBJECT_CLASS(klass), PROP_LAST, properties); } @@ -702,7 +690,7 @@ void gtv_lok_dialog_child_close(GtvLokDialog* dialog) GtkWidget* -gtv_lok_dialog_new(LOKDocView* pDocView, const gchar* dialogId, guint width, guint height) +gtv_lok_dialog_new(LOKDocView* pDocView, guint dialogId, guint width, guint height) { GtkWindow* pWindow = GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(pDocView))); return GTK_WIDGET(g_object_new(GTV_TYPE_LOK_DIALOG, diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx index 8f2161ef5f27..0f7002c359d7 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-lok-dialog.hxx @@ -35,7 +35,7 @@ struct GtvLokDialogClass GType gtv_lok_dialog_get_type (void) G_GNUC_CONST; -GtkWidget* gtv_lok_dialog_new(LOKDocView* pDocView, const gchar* dialogId, guint width, guint height); +GtkWidget* gtv_lok_dialog_new(LOKDocView* pDocView, guint dialogId, guint width, guint height); void gtv_lok_dialog_invalidate(GtvLokDialog* dialog, const GdkRectangle& aRectangle); diff --git a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx index 03e54afd1d22..62f639957d2b 100644 --- a/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx +++ b/libreofficekit/qa/gtktiledviewer/gtv-lokdocview-signal-handlers.cxx @@ -308,15 +308,15 @@ void LOKDocViewSigHandlers::dialog(LOKDocView* pDocView, gchar* pPayload, gpoint std::stringstream aStream(pPayload); boost::property_tree::ptree aRoot; boost::property_tree::read_json(aStream, aRoot); - const std::string aDialogId = aRoot.get<std::string>("dialogId"); + const unsigned nDialogId = aRoot.get<unsigned>("dialogId"); const std::string aAction = aRoot.get<std::string>("action"); if (aAction == "created") { const std::string aSize = aRoot.get<std::string>("size"); std::vector<int> aPoints = GtvHelpers::splitIntoIntegers(aSize, ", ", 2); - GtkWidget* pDialog = gtv_lok_dialog_new(pDocView, aDialogId.c_str(), aPoints[0], aPoints[1]); - g_info("created dialog, for dialogid: %s with size: %s", aDialogId.c_str(), aSize.c_str()); + GtkWidget* pDialog = gtv_lok_dialog_new(pDocView, nDialogId, aPoints[0], aPoints[1]); + g_info("created dialog, for dialogid: %d with size: %s", nDialogId, aSize.c_str()); gtv_application_window_register_child_window(window, GTK_WINDOW(pDialog)); g_signal_connect(pDialog, "destroy", G_CALLBACK(destroyLokDialog), window); @@ -333,9 +333,9 @@ void LOKDocViewSigHandlers::dialog(LOKDocView* pDocView, gchar* pPayload, gpoint GList* pIt = nullptr; for (pIt = pChildWins; pIt != nullptr; pIt = pIt->next) { - gchar* pChildDialogId = nullptr; - g_object_get(pIt->data, "dialogid", &pChildDialogId, nullptr); - if (g_strcmp0(pChildDialogId, aDialogId.c_str()) == 0) + guint nChildDialogId = 0; + g_object_get(pIt->data, "dialogid", &nChildDialogId, nullptr); + if (nDialogId == nChildDialogId) { if (aAction == "close") gtk_widget_destroy(GTK_WIDGET(pIt->data)); @@ -355,7 +355,6 @@ void LOKDocViewSigHandlers::dialog(LOKDocView* pDocView, gchar* pPayload, gpoint gtv_lok_dialog_invalidate(GTV_LOK_DIALOG(pIt->data), aGdkRectangle); } } - g_free(pChildDialogId); } } @@ -366,9 +365,9 @@ void LOKDocViewSigHandlers::dialogChild(LOKDocView* pDocView, gchar* pPayload, g std::stringstream aStream(pPayload); boost::property_tree::ptree aRoot; boost::property_tree::read_json(aStream, aRoot); - std::string aDialogId = aRoot.get<std::string>("dialogId"); - std::string aAction = aRoot.get<std::string>("action"); - std::string aPos = aRoot.get<std::string>("position"); + const unsigned nDialogId = aRoot.get<unsigned>("dialogId"); + const std::string aAction = aRoot.get<std::string>("action"); + const std::string aPos = aRoot.get<std::string>("position"); gchar** ppCoordinates = g_strsplit(aPos.c_str(), ", ", 2); gchar** ppCoordinate = ppCoordinates; int nX = 0; @@ -386,16 +385,15 @@ void LOKDocViewSigHandlers::dialogChild(LOKDocView* pDocView, gchar* pPayload, g GList* pIt = nullptr; for (pIt = pChildWins; pIt != nullptr; pIt = pIt->next) { - gchar* pChildDialogId = nullptr; - g_object_get(pIt->data, "dialogid", &pChildDialogId, nullptr); - if (g_strcmp0(pChildDialogId, aDialogId.c_str()) == 0) + guint nChildDialogId = 0; + g_object_get(pIt->data, "dialogid", &nChildDialogId, nullptr); + if (nDialogId == nChildDialogId) { if (aAction == "invalidate") gtv_lok_dialog_child_invalidate(GTV_LOK_DIALOG(pIt->data), nX, nY); else if (aAction == "close") gtv_lok_dialog_child_close(GTV_LOK_DIALOG(pIt->data)); } - g_free(pChildDialogId); } } diff --git a/sfx2/source/view/lokhelper.cxx b/sfx2/source/view/lokhelper.cxx index 33464711852f..9af028916b69 100644 --- a/sfx2/source/view/lokhelper.cxx +++ b/sfx2/source/view/lokhelper.cxx @@ -144,15 +144,15 @@ void SfxLokHelper::notifyOtherViews(SfxViewShell* pThisView, int nType, const OS } } -void SfxLokHelper::notifyDialog(const OUString& rDialogID, +void SfxLokHelper::notifyDialog(vcl::DialogID nDialogID, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload) { - if (SfxLokHelper::getViewsCount() <= 0 || rDialogID.isEmpty()) + if (SfxLokHelper::getViewsCount() <= 0 || nDialogID == 0) return; SfxViewShell* pViewShell = SfxViewShell::GetFirst(); - OString aPayload = OString("{ \"dialogId\": \"") + OUStringToOString(rDialogID, RTL_TEXTENCODING_UTF8).getStr() + OString("\""); + OString aPayload = OString("{ \"dialogId\": \"") + OString::number(nDialogID) + OString("\""); aPayload += OString(", \"action\": \"") + OUStringToOString(rAction, RTL_TEXTENCODING_UTF8).getStr() + OString("\""); for (const auto& rItem: rPayload) @@ -172,13 +172,13 @@ void SfxLokHelper::notifyDialog(const OUString& rDialogID, } } -void SfxLokHelper::notifyDialogChild(const OUString& rDialogID, const OUString& rAction, const Point& rPos) +void SfxLokHelper::notifyDialogChild(vcl::DialogID nDialogID, const OUString& rAction, const Point& rPos) { - if (SfxLokHelper::getViewsCount() <= 0 || rDialogID.isEmpty()) + if (SfxLokHelper::getViewsCount() <= 0 || nDialogID == 0) return; SfxViewShell* pViewShell = SfxViewShell::GetFirst(); - const OString aPayload = OString("{ \"dialogId\": \"") + OUStringToOString(rDialogID, RTL_TEXTENCODING_UTF8).getStr() + + const OString aPayload = OString("{ \"dialogId\": \"") + OString::number(nDialogID) + OString("\", \"action\": \"") + OUStringToOString(rAction, RTL_TEXTENCODING_UTF8).getStr() + OString("\", \"position\": \"") + OString::number(rPos.getX()) + OString(", ") + OString::number(rPos.getY()) + + "\" }"; diff --git a/sfx2/source/view/viewsh.cxx b/sfx2/source/view/viewsh.cxx index 2d4d8af19a70..92dcfa48cdcf 100644 --- a/sfx2/source/view/viewsh.cxx +++ b/sfx2/source/view/viewsh.cxx @@ -1948,31 +1948,28 @@ Reference< view::XRenderable > SfxViewShell::GetRenderable() return xRender; } -void SfxViewShell::notifyDialog(const vcl::DialogID& rDialogID, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload) +void SfxViewShell::notifyDialog(const vcl::DialogID& rDialogId, const OUString& rAction, const std::vector<vcl::LOKPayloadItem>& rPayload) { - SfxLokHelper::notifyDialog(rDialogID, rAction, rPayload); + SfxLokHelper::notifyDialog(rDialogId, rAction, rPayload); } -void SfxViewShell::notifyDialogChild(const vcl::DialogID& rDialogID, const OUString& rAction, const Point& rPos) +void SfxViewShell::notifyDialogChild(const vcl::DialogID& rDialogId, const OUString& rAction, const Point& rPos) { - SfxLokHelper::notifyDialog(rDialogID, rAction); + SfxLokHelper::notifyDialog(rDialogId, rAction); } -void SfxViewShell::RegisterDlg(const vcl::DialogID& rDialogId, VclPtr<Dialog> pDlg) +void SfxViewShell::RegisterDlg(vcl::DialogID nDialogId, VclPtr<Dialog> pDlg) { if (pDlg) - maOpenedDialogs.push_back(std::make_pair(rName, pDlg)); + maOpenedDialogs.push_back(std::make_pair(nDialogId, pDlg)); } -VclPtr<Dialog> SfxViewShell::GetOpenedDlg(const vcl::DialogID& rDialogId) +VclPtr<Dialog> SfxViewShell::GetOpenedDlg(vcl::DialogID nDialogId) { - if (rName.startsWith(".uno:")) - rName = rName.replaceFirst(".uno:", ""); - const auto it = std::find_if(maOpenedDialogs.begin(), maOpenedDialogs.end(), - [&rDialogId](const std::pair<vcl::DialogID, VclPtr<Dialog>> aItem) { - return rDialogId == aItem.first; + [&nDialogId](const std::pair<vcl::DialogID, VclPtr<Dialog>> aItem) { + return nDialogId == aItem.first; }); Dialog* ret = nullptr; @@ -1983,12 +1980,12 @@ VclPtr<Dialog> SfxViewShell::GetOpenedDlg(const vcl::DialogID& rDialogId) return ret; } -void SfxViewShell::UnregisterDlg(const OUString& rName) +void SfxViewShell::UnregisterDlg(vcl::DialogID nDialogId) { maOpenedDialogs.erase(std::remove_if(maOpenedDialogs.begin(), maOpenedDialogs.end(), - [&rDialogId](const std::pair<vcl::DialogID, VclPtr<Dialog>> aItem) { - return aItem.first == rDialogId; + [&nDialogId](const std::pair<vcl::DialogID, VclPtr<Dialog>> aItem) { + return aItem.first == nDialogId; })); } diff --git a/vcl/source/window/dialog.cxx b/vcl/source/window/dialog.cxx index 96ba71ffe888..bbde33d08e16 100644 --- a/vcl/source/window/dialog.cxx +++ b/vcl/source/window/dialog.cxx @@ -346,6 +346,7 @@ struct DialogImpl void Dialog::ImplInitDialogData() { + maID = mnLastDialogId++; mpDialogNotifier = nullptr; mpWindowImpl->mbDialog = true; mpPrevExecuteDlg = nullptr; @@ -490,6 +491,8 @@ void Dialog::ImplInitSettings() SetBackground(GetSettings().GetStyleSettings().GetDialogColor()); } +vcl::DialogID Dialog::mnLastDialogId = 1; + Dialog::Dialog( WindowType nType ) : SystemWindow( nType ) , mbForceBorderWindow(false) @@ -957,7 +960,7 @@ void Dialog::LogicMouseMoveChild(const MouseEvent& rMouseEvent) void Dialog::InvalidateFloatingWindow(const Point& rPos) { - if (comphelper::LibreOfficeKit::isActive() && mpDialogNotifier && !maID.isEmpty()) + if (comphelper::LibreOfficeKit::isActive() && mpDialogNotifier && maID != 0) { mpDialogNotifier->notifyDialogChild(maID, "invalidate", rPos); } @@ -965,7 +968,7 @@ void Dialog::InvalidateFloatingWindow(const Point& rPos) void Dialog::CloseFloatingWindow() { - if (comphelper::LibreOfficeKit::isActive() && mpDialogNotifier && !maID.isEmpty()) + if (comphelper::LibreOfficeKit::isActive() && mpDialogNotifier && maID != 0) { mpDialogNotifier->notifyDialogChild(maID, "close", Point(0, 0)); } @@ -973,7 +976,7 @@ void Dialog::CloseFloatingWindow() void Dialog::LogicInvalidate(const tools::Rectangle* pRectangle) { - if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && !maID.isEmpty()) + if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && maID != 0) { std::vector<vcl::LOKPayloadItem> aPayload; if (pRectangle) @@ -1025,7 +1028,7 @@ void Dialog::LOKCursor(const OUString& rAction, const std::vector<vcl::LOKPayloa { assert(comphelper::LibreOfficeKit::isActive()); - if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && !maID.isEmpty()) + if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && maID != 0) { mpDialogNotifier->notifyDialog(maID, rAction, rPayload); } @@ -1348,7 +1351,7 @@ void Dialog::Resize() SystemWindow::Resize(); // inform LOK clients - if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && !maID.isEmpty()) + if (!comphelper::LibreOfficeKit::isDialogPainting() && mpDialogNotifier && maID != 0) { mpDialogNotifier->notifyDialog(maID, "invalidate"); } |