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.
105 lines
3.6 KiB
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
|
|
|