summaryrefslogtreecommitdiff
path: root/vcl/inc/unx
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2019-12-17 17:27:30 +0000
committerCaolán McNamara <caolanm@redhat.com>2019-12-19 22:07:19 +0100
commite3a002c53a544de02e5119c5b0a2fd4f972156a8 (patch)
treed6bd55210bb93fdc2aae2e398b63c3dddeb38326 /vcl/inc/unx
parente994b3fc3b2c9b7d39a715fc4d9453e06434d457 (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.hxx2
-rw-r--r--vcl/inc/unx/gtk/gtkinst.hxx1
-rw-r--r--vcl/inc/unx/gtk/gtkobject.hxx62
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: */