Kaydet (Commit) c0d4f3ad authored tarafından Caolán McNamara's avatar Caolán McNamara

implement wayland handle passing for gstreamer

Change-Id: I3b0effe35ad7b37ff7ab3de2a3b78b6312779139
üst e35e762d
...@@ -521,6 +521,7 @@ public: ...@@ -521,6 +521,7 @@ public:
static GtkSalFrame *getFromWindow( GtkWindow *pWindow ); static GtkSalFrame *getFromWindow( GtkWindow *pWindow );
sal_uIntPtr GetNativeWindowHandle(GtkWidget *pWidget);
virtual sal_uIntPtr GetNativeWindowHandle() override; virtual sal_uIntPtr GetNativeWindowHandle() override;
static void KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode, static void KeyCodeToGdkKey(const vcl::KeyCode& rKeyCode,
......
...@@ -48,7 +48,12 @@ ...@@ -48,7 +48,12 @@
#include <gtk/gtk.h> #include <gtk/gtk.h>
#include <prex.h> #include <prex.h>
#include <X11/Xatom.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 <postx.h>
#include <dlfcn.h> #include <dlfcn.h>
...@@ -1084,9 +1089,7 @@ void GtkSalFrame::InitCommon() ...@@ -1084,9 +1089,7 @@ void GtkSalFrame::InitCommon()
//system data //system data
m_aSystemData.nSize = sizeof( SystemEnvData ); m_aSystemData.nSize = sizeof( SystemEnvData );
static int nWindow = 0; m_aSystemData.aWindow = GetNativeWindowHandle(m_pWindow);
m_aSystemData.aWindow = nWindow;
++nWindow;
m_aSystemData.aShellWindow = reinterpret_cast<long>(this); m_aSystemData.aShellWindow = reinterpret_cast<long>(this);
m_aSystemData.pSalFrame = this; m_aSystemData.pSalFrame = this;
m_aSystemData.pWidget = m_pWindow; m_aSystemData.pWidget = m_pWindow;
...@@ -3904,9 +3907,30 @@ Size GtkSalDisplay::GetScreenSize( int nDisplayScreen ) ...@@ -3904,9 +3907,30 @@ Size GtkSalDisplay::GetScreenSize( int nDisplayScreen )
return Size( aRect.GetWidth(), aRect.GetHeight() ); return Size( aRect.GetWidth(), aRect.GetHeight() );
} }
sal_uIntPtr GtkSalFrame::GetNativeWindowHandle(GtkWidget *pWidget)
{
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);
}
else
#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() sal_uIntPtr GtkSalFrame::GetNativeWindowHandle()
{ {
return widget_get_xid(m_pWindow); return GetNativeWindowHandle(m_pWindow);
} }
void GtkDragSource::startDrag(const datatransfer::dnd::DragGestureEvent& rEvent, void GtkDragSource::startDrag(const datatransfer::dnd::DragGestureEvent& rEvent,
......
...@@ -51,9 +51,7 @@ GtkSalObject::GtkSalObject( GtkSalFrame* pParent, bool bShow ) ...@@ -51,9 +51,7 @@ GtkSalObject::GtkSalObject( GtkSalFrame* pParent, bool bShow )
// system data // system data
m_aSystemData.nSize = sizeof( SystemEnvData ); m_aSystemData.nSize = sizeof( SystemEnvData );
static int nWindow = 0; m_aSystemData.aWindow = pParent->GetNativeWindowHandle(m_pSocket);
m_aSystemData.aWindow = nWindow;
++nWindow;
m_aSystemData.aShellWindow = reinterpret_cast<long>(this); m_aSystemData.aShellWindow = reinterpret_cast<long>(this);
m_aSystemData.pSalFrame = nullptr; m_aSystemData.pSalFrame = nullptr;
m_aSystemData.pWidget = m_pSocket; m_aSystemData.pWidget = m_pSocket;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment