include/vcl/weldutils.hxx | 128 ++++++++++++++++++++++++++++++ sw/qa/extras/ooxmlexport/ooxmlexport4.cxx | 2 vcl/inc/unx/gtk/gtkinst.hxx | 99 ++--------------------- vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx | 2 vcl/unx/gtk3/gtk3gtkinst.cxx | 34 +++++++ 5 files changed, 175 insertions(+), 90 deletions(-)
New commits: commit 9869ca098765ed5ec0325492fa2cdce4a5bab795 Author: Caolán McNamara <caol...@redhat.com> AuthorDate: Wed Nov 13 21:28:12 2019 +0000 Commit: Thorsten Behrens <thorsten.behr...@cib.de> CommitDate: Thu Aug 20 13:17:33 2020 +0200 factor out 'weld::Widget as XWindow' Reviewed-on: https://gerrit.libreoffice.org/82641 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caol...@redhat.com> Tested-by: Caolán McNamara <caol...@redhat.com> (cherry picked from commit 20d5f61abfd47fc76da3be8241653fdb7ae10491) Change-Id: I24b52c5b8908fdf1a66fd26b2dc438b9557afa6e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/100423 Tested-by: Thorsten Behrens <thorsten.behr...@cib.de> Reviewed-by: Thorsten Behrens <thorsten.behr...@cib.de> diff --git a/include/vcl/weldutils.hxx b/include/vcl/weldutils.hxx index 4144803e8b3d..764d343902df 100644 --- a/include/vcl/weldutils.hxx +++ b/include/vcl/weldutils.hxx @@ -10,8 +10,11 @@ #ifndef INCLUDED_VCL_WELDUTILS_HXX #define INCLUDED_VCL_WELDUTILS_HXX +#include <com/sun/star/awt/XWindow.hpp> #include <com/sun/star/frame/XFrame.hpp> #include <com/sun/star/uno/Reference.hxx> +#include <comphelper/interfacecontainer2.hxx> +#include <cppuhelper/compbase.hxx> #include <tools/link.hxx> #include <vcl/dllapi.h> @@ -29,6 +32,131 @@ public: // fill in the label and icons for actions and dispatch the action on item click ToolbarUnoDispatcher(Toolbar& rToolbar, const css::uno::Reference<css::frame::XFrame>& rFrame); }; + +typedef cppu::WeakComponentImplHelper<css::awt::XWindow> TransportAsXWindow_Base; + +class VCL_DLLPUBLIC TransportAsXWindow : public TransportAsXWindow_Base +{ +private: + osl::Mutex m_aHelperMtx; + weld::Widget* m_pWeldWidget; + + comphelper::OInterfaceContainerHelper2 m_aWindowListeners; + comphelper::OInterfaceContainerHelper2 m_aKeyListeners; + comphelper::OInterfaceContainerHelper2 m_aFocusListeners; + comphelper::OInterfaceContainerHelper2 m_aMouseListeners; + comphelper::OInterfaceContainerHelper2 m_aMotionListeners; + comphelper::OInterfaceContainerHelper2 m_aPaintListeners; + +public: + TransportAsXWindow(weld::Widget* pWeldWidget) + : TransportAsXWindow_Base(m_aHelperMtx) + , m_pWeldWidget(pWeldWidget) + , m_aWindowListeners(m_aHelperMtx) + , m_aKeyListeners(m_aHelperMtx) + , m_aFocusListeners(m_aHelperMtx) + , m_aMouseListeners(m_aHelperMtx) + , m_aMotionListeners(m_aHelperMtx) + , m_aPaintListeners(m_aHelperMtx) + { + } + + weld::Widget* getWidget() const { return m_pWeldWidget; } + + virtual void clear() { m_pWeldWidget = nullptr; } + + // css::awt::XWindow + void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32, sal_Int32, sal_Int16) override + { + throw css::uno::RuntimeException("not implemented"); + } + + css::awt::Rectangle SAL_CALL getPosSize() override + { + throw css::uno::RuntimeException("not implemented"); + } + + void SAL_CALL setVisible(sal_Bool bVisible) override { m_pWeldWidget->set_visible(bVisible); } + + void SAL_CALL setEnable(sal_Bool bSensitive) override + { + m_pWeldWidget->set_sensitive(bSensitive); + } + + void SAL_CALL setFocus() override { m_pWeldWidget->grab_focus(); } + + void SAL_CALL + addWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override + { + m_aWindowListeners.addInterface(rListener); + } + + void SAL_CALL + removeWindowListener(const css::uno::Reference<css::awt::XWindowListener>& rListener) override + { + m_aWindowListeners.removeInterface(rListener); + } + + void SAL_CALL + addFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override + { + m_aFocusListeners.addInterface(rListener); + } + + void SAL_CALL + removeFocusListener(const css::uno::Reference<css::awt::XFocusListener>& rListener) override + { + m_aFocusListeners.removeInterface(rListener); + } + + void SAL_CALL + addKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override + { + m_aKeyListeners.addInterface(rListener); + } + + void SAL_CALL + removeKeyListener(const css::uno::Reference<css::awt::XKeyListener>& rListener) override + { + m_aKeyListeners.removeInterface(rListener); + } + + void SAL_CALL + addMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override + { + m_aMouseListeners.addInterface(rListener); + } + + void SAL_CALL + removeMouseListener(const css::uno::Reference<css::awt::XMouseListener>& rListener) override + { + m_aMouseListeners.removeInterface(rListener); + } + + void SAL_CALL addMouseMotionListener( + const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override + { + m_aMotionListeners.addInterface(rListener); + } + + void SAL_CALL removeMouseMotionListener( + const css::uno::Reference<css::awt::XMouseMotionListener>& rListener) override + { + m_aMotionListeners.removeInterface(rListener); + } + + void SAL_CALL + addPaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override + { + m_aPaintListeners.addInterface(rListener); + } + + void SAL_CALL + removePaintListener(const css::uno::Reference<css::awt::XPaintListener>& rListener) override + { + m_aPaintListeners.removeInterface(rListener); + } +}; } #endif diff --git a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx index c80c8f6655bb..d77018c57a92 100644 --- a/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx +++ b/sw/qa/extras/ooxmlexport/ooxmlexport4.cxx @@ -773,7 +773,7 @@ DECLARE_OOXMLEXPORT_TEST(testComboBoxControl, "combobox-control.docx") return; assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:dropDownList/w:listItem[1]", "value", "manolo"); assertXPath(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtPr/w:dropDownList/w:listItem[2]", "value", "pepito"); - assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", "Manolo"); + assertXPathContent(pXmlDoc, "/w:document/w:body/w:p/w:sdt/w:sdtContent/w:r/w:t", "manolo"); uno::Reference<drawing::XDrawPageSupplier> xDrawPageSupplier(mxComponent, uno::UNO_QUERY); uno::Reference<drawing::XDrawPage> xDrawPage = xDrawPageSupplier->getDrawPage(); diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index 78dd9bc6e8b9..b68a7a8286d5 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -34,6 +34,8 @@ #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/awt/XWindow.hpp> #include <cppuhelper/compbase.hxx> +#include <vcl/weld.hxx> +#include <vcl/weldutils.hxx> #include <gtk/gtk.h> namespace vcl @@ -250,30 +252,31 @@ private: mutable std::shared_ptr<vcl::unx::GtkPrintWrapper> m_xPrintWrapper; }; -typedef cppu::WeakComponentImplHelper<css::awt::XWindow> SalGtkXWindow_Base; -class SalGtkXWindow : public SalGtkXWindow_Base +//typedef cppu::WeakComponentImplHelper<css::awt::XWindow> SalGtkXWindow_Base; + +class SalGtkXWindow final : public weld::TransportAsXWindow { private: - osl::Mutex m_aHelperMtx; weld::Window* m_pWeldWidget; GtkWidget* m_pWidget; public: SalGtkXWindow(weld::Window* pWeldWidget, GtkWidget* pWidget) - : SalGtkXWindow_Base(m_aHelperMtx) + : TransportAsXWindow(pWeldWidget) , m_pWeldWidget(pWeldWidget) , m_pWidget(pWidget) { } - void clear() + virtual void clear() override { m_pWeldWidget = nullptr; m_pWidget = nullptr; + TransportAsXWindow::clear(); } - GtkWidget* getWidget() const + GtkWidget* getGtkWidget() const { return m_pWidget; } @@ -283,90 +286,10 @@ public: return m_pWeldWidget; } - // css::awt::XWindow - void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32, sal_Int32, sal_Int16) override - { - throw css::uno::RuntimeException("not implemented"); - } - - css::awt::Rectangle SAL_CALL getPosSize() override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL setVisible(sal_Bool) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL setEnable(sal_Bool) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL setFocus() override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL addWindowListener(const css::uno::Reference< css::awt::XWindowListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - void SAL_CALL removeWindowListener(const css::uno::Reference< css::awt::XWindowListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL addFocusListener(const css::uno::Reference< css::awt::XFocusListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL removeFocusListener(const css::uno::Reference< css::awt::XFocusListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL addKeyListener(const css::uno::Reference< css::awt::XKeyListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL removeKeyListener(const css::uno::Reference< css::awt::XKeyListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL addMouseListener(const css::uno::Reference< css::awt::XMouseListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL removeMouseListener(const css::uno::Reference< css::awt::XMouseListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL addMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } - - void SAL_CALL removeMouseMotionListener(const css::uno::Reference< css::awt::XMouseMotionListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } + void SAL_CALL setPosSize(sal_Int32, sal_Int32, sal_Int32 w, sal_Int32 h, sal_Int16 nFlags ) override; - void SAL_CALL addPaintListener(const css::uno::Reference< css::awt::XPaintListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } + css::awt::Rectangle SAL_CALL getPosSize() override; - void SAL_CALL removePaintListener(const css::uno::Reference< css::awt::XPaintListener >& ) override - { - throw css::uno::RuntimeException("not implemented"); - } }; GdkPixbuf* load_icon_by_name(const OUString& rIconName); diff --git a/vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx b/vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx index 75f832cc815a..d8ac53777482 100644 --- a/vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx +++ b/vcl/unx/gtk3/fpicker/SalGtkFilePicker.cxx @@ -1580,7 +1580,7 @@ void SAL_CALL SalGtkFilePicker::initialize( const uno::Sequence<uno::Any>& aArgu if (xParentWindow.is()) { if (SalGtkXWindow* pGtkXWindow = dynamic_cast<SalGtkXWindow*>(xParentWindow.get())) - m_pParentWidget = pGtkXWindow->getWidget(); + m_pParentWidget = pGtkXWindow->getGtkWidget(); else { css::uno::Reference<css::awt::XSystemDependentWindowPeer> xSysDepWin(xParentWindow, css::uno::UNO_QUERY); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 6faad1ddf9c3..490e9c9e9325 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -13180,4 +13180,38 @@ void* GtkInstance::CreateGStreamerSink(const SystemChildWindow *pWindow) #endif } + + +void SAL_CALL SalGtkXWindow::setPosSize(sal_Int32 nX, sal_Int32 nY, sal_Int32 nWidth, sal_Int32 nHeight, sal_Int16 nFlags ) +{ + if(m_pWidget) + { + if( (nFlags & ( SAL_FRAME_POSSIZE_WIDTH | SAL_FRAME_POSSIZE_HEIGHT )) && + (nWidth > 0 && nHeight > 0 ) // sometimes stupid things happen + ) + { + gtk_window_resize(GTK_WINDOW(m_pWidget), nWidth, nHeight); + } + + if( nFlags & ( SAL_FRAME_POSSIZE_X | SAL_FRAME_POSSIZE_Y ) ) + { + gtk_window_move(GTK_WINDOW(m_pWidget), nX, nY); + } + } +} + +css::awt::Rectangle SAL_CALL SalGtkXWindow::getPosSize() +{ + if(m_pWidget) + { + gint w, h, x, y; + gtk_window_get_size(GTK_WINDOW(m_pWidget), &w, &h); + gtk_window_get_position(GTK_WINDOW(m_pWidget), &x, &x); + return css::awt::Rectangle(x, y, w, h); + } + else { + return css::awt::Rectangle(); + } +} + /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits