diff options
author | Caolán McNamara <caolanm@redhat.com> | 2019-12-17 17:27:30 +0000 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2019-12-19 22:07:19 +0100 |
commit | e3a002c53a544de02e5119c5b0a2fd4f972156a8 (patch) | |
tree | d6bd55210bb93fdc2aae2e398b63c3dddeb38326 /vcl/inc/unx | |
parent | e994b3fc3b2c9b7d39a715fc4d9453e06434d457 (diff) |
get native gtk widgets in sidebars working
Change-Id: If65aef1249f54a87d7854c3fa2db4319a24a5a05
Reviewed-on: https://gerrit.libreoffice.org/85326
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl/inc/unx')
-rw-r--r-- | vcl/inc/unx/gtk/gtkframe.hxx | 2 | ||||
-rw-r--r-- | vcl/inc/unx/gtk/gtkinst.hxx | 1 | ||||
-rw-r--r-- | vcl/inc/unx/gtk/gtkobject.hxx | 62 |
3 files changed, 57 insertions, 8 deletions
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx index 0955a1d92dc9..033ee93efe42 100644 --- a/vcl/inc/unx/gtk/gtkframe.hxx +++ b/vcl/inc/unx/gtk/gtkframe.hxx @@ -162,6 +162,8 @@ class GtkSalFrame final : public SalFrame }; friend struct IMHandler; + friend class GtkSalObjectWidgetClip; + SalX11Screen m_nXScreen; GtkWidget* m_pWindow; GtkHeaderBar* m_pHeaderBar; diff --git a/vcl/inc/unx/gtk/gtkinst.hxx b/vcl/inc/unx/gtk/gtkinst.hxx index 1e0f86cf2cf2..d1d624b9e27e 100644 --- a/vcl/inc/unx/gtk/gtkinst.hxx +++ b/vcl/inc/unx/gtk/gtkinst.hxx @@ -236,6 +236,7 @@ public: virtual css::uno::Reference< css::uno::XInterface > CreateDropTarget() override; virtual OpenGLContext* CreateOpenGLContext() override; virtual weld::Builder* CreateBuilder(weld::Widget* pParent, const OUString& rUIRoot, const OUString& rUIFile) override; + virtual weld::Builder* CreateInterimBuilder(vcl::Window* pParent, const OUString& rUIRoot, const OUString& rUIFile) override; virtual weld::MessageDialog* CreateMessageDialog(weld::Widget* pParent, VclMessageType eMessageType, VclButtonsType eButtonType, const OUString &rPrimaryMessage) override; virtual weld::Window* GetFrameWeld(const css::uno::Reference<css::awt::XWindow>& rWindow) override; diff --git a/vcl/inc/unx/gtk/gtkobject.hxx b/vcl/inc/unx/gtk/gtkobject.hxx index 7ff9e499815b..d1a5226cd9cc 100644 --- a/vcl/inc/unx/gtk/gtkobject.hxx +++ b/vcl/inc/unx/gtk/gtkobject.hxx @@ -25,37 +25,83 @@ #include <salobj.hxx> #include <unx/gtk/gtkframe.hxx> -class GtkSalObject final : public SalObject +class GtkSalObjectBase : public SalObject { - SystemEnvData m_aSystemData; +protected: + SystemEnvData m_aSystemData; GtkWidget* m_pSocket; GtkSalFrame* m_pParent; cairo_region_t* m_pRegion; + void Init(); + +public: + GtkSalObjectBase(GtkSalFrame* pParent); + virtual ~GtkSalObjectBase() override; + + virtual void BeginSetClipRegion( sal_uInt32 nRects ) override; + virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight ) override; + + virtual void SetForwardKey( bool bEnable ) override; + + virtual const SystemEnvData* GetSystemData() const override; + + virtual Size GetOptimalSize() const override; + +private: // signals static gboolean signalButton( GtkWidget*, GdkEventButton*, gpointer ); static gboolean signalFocus( GtkWidget*, GdkEventFocus*, gpointer ); +}; + +// this attempts to clip the hosted native window using gdk_window_shape_combine_region +class GtkSalObject final : public GtkSalObjectBase +{ + // signals static void signalDestroy( GtkWidget*, gpointer ); + public: - GtkSalObject( GtkSalFrame* pParent, bool bShow ); + GtkSalObject(GtkSalFrame* pParent, bool bShow); virtual ~GtkSalObject() override; // override all pure virtual methods virtual void ResetClipRegion() override; - virtual void BeginSetClipRegion( sal_uInt32 nRects ) override; - virtual void UnionClipRegion( long nX, long nY, long nWidth, long nHeight ) override; virtual void EndSetClipRegion() override; virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight ) override; virtual void Show( bool bVisible ) override; + virtual void Reparent(SalFrame* pFrame) override; +}; - virtual void SetForwardKey( bool bEnable ) override; +// this attempts to clip the hosted native GtkWidget by using a GtkScrolledWindow as a viewport +// only a rectangular area is going to work +class GtkSalObjectWidgetClip final : public GtkSalObjectBase +{ + tools::Rectangle m_aRect; + tools::Rectangle m_aClipRect; + GtkWidget* m_pScrolledWindow; - virtual const SystemEnvData* GetSystemData() const override; + // signals + static gboolean signalScroll( GtkWidget*, GdkEvent*, gpointer ); + static void signalDestroy( GtkWidget*, gpointer ); - virtual Size GetOptimalSize() const override; + bool signal_scroll(GtkWidget* pScrolledWindow, GdkEvent* pEvent); + + void ApplyClipRegion(); +public: + GtkSalObjectWidgetClip(GtkSalFrame* pParent, bool bShow); + virtual ~GtkSalObjectWidgetClip() override; + + // override all pure virtual methods + virtual void ResetClipRegion() override; + virtual void EndSetClipRegion() override; + + virtual void SetPosSize( long nX, long nY, long nWidth, long nHeight ) override; + virtual void Show( bool bVisible ) override; + virtual void Reparent(SalFrame* pFrame) override; }; + #endif // INCLUDED_VCL_INC_UNX_GTK_GTKOBJECT_HXX /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |