You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libreoffice/0004-implement-wayland-hand...

105 lines
3.6 KiB

From 89e48e00724b130f14719f737389bd7db28b349f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Caol=C3=A1n=20McNamara?= <caolanm@redhat.com>
Date: Mon, 15 Feb 2016 15:55:40 +0000
Subject: [PATCH 4/5] implement wayland handle passing for gstreamer
Change-Id: I3b0effe35ad7b37ff7ab3de2a3b78b6312779139
(cherry picked from commit c0d4f3ad3307c7a0d0fddd8c413ef0cc91d382ae)
---
vcl/inc/unx/gtk/gtkframe.hxx | 1 +
vcl/unx/gtk3/gtk3gtkframe.cxx | 34 +++++++++++++++++++++++++++++-----
vcl/unx/gtk3/gtk3gtkobject.cxx | 4 +---
3 files changed, 31 insertions(+), 8 deletions(-)
diff --git a/vcl/inc/unx/gtk/gtkframe.hxx b/vcl/inc/unx/gtk/gtkframe.hxx
index f7edd73..20a1e84 100644
--- a/vcl/inc/unx/gtk/gtkframe.hxx
+++ b/vcl/inc/unx/gtk/gtkframe.hxx
@@ -519,6 +519,7 @@ public:
static GtkSalFrame *getFromWindow( GtkWindow *pWindow );
+ sal_uIntPtr GetNativeWindowHandle(GtkWidget *pWidget);
virtual sal_uIntPtr GetNativeWindowHandle() override;
static void KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode,
diff --git a/vcl/unx/gtk3/gtk3gtkframe.cxx b/vcl/unx/gtk3/gtk3gtkframe.cxx
index a88c5d0..925b185 100644
--- a/vcl/unx/gtk3/gtk3gtkframe.cxx
+++ b/vcl/unx/gtk3/gtk3gtkframe.cxx
@@ -48,7 +48,12 @@
#include <gtk/gtk.h>
#include <prex.h>
#include <X11/Xatom.h>
-#include <gdk/gdkx.h>
+#if defined(GDK_WINDOWING_X11)
+# include <gdk/gdkx.h>
+#endif
+#if defined(GDK_WINDOWING_WAYLAND)
+# include <gdk/gdkwayland.h>
+#endif
#include <postx.h>
#include <dlfcn.h>
@@ -1085,9 +1090,7 @@ void GtkSalFrame::InitCommon()
//system data
m_aSystemData.nSize = sizeof( SystemEnvData );
- static int nWindow = 0;
- m_aSystemData.aWindow = nWindow;
- ++nWindow;
+ m_aSystemData.aWindow = GetNativeWindowHandle(m_pWindow);
m_aSystemData.aShellWindow = reinterpret_cast<long>(this);
m_aSystemData.pSalFrame = this;
m_aSystemData.pWidget = m_pWindow;
@@ -3926,9 +3929,30 @@ Size GtkSalDisplay::GetScreenSize( int nDisplayScreen )
return Size( aRect.GetWidth(), aRect.GetHeight() );
}
+sal_uIntPtr GtkSalFrame::GetNativeWindowHandle(GtkWidget *pWidget)
+{
+ (void) this; // Silence loplugin:staticmethods
+ GdkDisplay *pDisplay = getGdkDisplay();
+ GdkWindow *pWindow = gtk_widget_get_window(pWidget);
+
+#if defined(GDK_WINDOWING_X11)
+ if (GDK_IS_X11_DISPLAY(pDisplay))
+ {
+ return GDK_WINDOW_XID(pWindow);
+ }
+#endif
+#if defined(GDK_WINDOWING_WAYLAND)
+ if (GDK_IS_WAYLAND_DISPLAY(pDisplay))
+ {
+ return reinterpret_cast<sal_uIntPtr>(gdk_wayland_window_get_wl_surface(pWindow));
+ }
+#endif
+ return 0;
+}
+
sal_uIntPtr GtkSalFrame::GetNativeWindowHandle()
{
- return widget_get_xid(m_pWindow);
+ return GetNativeWindowHandle(m_pWindow);
}
void GtkDragSource::startDrag(const datatransfer::dnd::DragGestureEvent& rEvent,
diff --git a/vcl/unx/gtk3/gtk3gtkobject.cxx b/vcl/unx/gtk3/gtk3gtkobject.cxx
index 8c06b4e..1154033 100644
--- a/vcl/unx/gtk3/gtk3gtkobject.cxx
+++ b/vcl/unx/gtk3/gtk3gtkobject.cxx
@@ -51,9 +51,7 @@ GtkSalObject::GtkSalObject( GtkSalFrame* pParent, bool bShow )
// system data
m_aSystemData.nSize = sizeof( SystemEnvData );
- static int nWindow = 0;
- m_aSystemData.aWindow = nWindow;
- ++nWindow;
+ m_aSystemData.aWindow = pParent->GetNativeWindowHandle(m_pSocket);
m_aSystemData.aShellWindow = reinterpret_cast<long>(this);
m_aSystemData.pSalFrame = nullptr;
m_aSystemData.pWidget = m_pSocket;
--
2.7.1