如何在Wayland中设置窗口的x,y坐标?

问题描述:

显然,这是后话,这不是核心的Wayland协议的一部分,但我使用韦斯顿和XDG-shell扩展似乎有必要的方法:如何在Wayland中设置窗口的x,y坐标?

xdg_surface_set_window_geometry

于是我就wayland-scanner创建XDG代码和头文件:

wayland-scanner code < ./weston-1.6.0/protocol/xdg-shell.xml > xdg_shell.c

wayland-scanner client-header < ./weston-1.6.0/protocol/xdg-shell.xml > xdg_shell.h

共我使用的大致如下:

surface = wl_compositor_create_surface(compositor); 
if(surface == NULL) { 
    ... 
} 

native_window = wl_egl_window_create(surface, some_width, some_height); 
if(native_window == NULL) { 
    ... 
} 

_xdg_surface = xdg_shell_get_xdg_surface(_xdg_shell, surface); 

xdg_surface_set_window_geometry(_xdg_surface, 0, 0, some_width, some_height); 

该代码无误地运行,但什么都不做。我正在Debian Jessie上运行Wayland和Weston的股票包。

如果除了xdg_shell之外还有其他的方法可能会奏效,我会全神贯注。

+0

您是否找到任何答案?我还希望为我的windows在weston下设置一个默认位置 –

+1

在Wayland/Weston论坛的一些帮助下,我提出了一种解决方法,即将窗口设置为具有透明背景的全屏输出尺寸,然后将我的内容全屏。到目前为止,Wayland API并不适用于这种应用程序级别的控制。 – mpr

不确定它是否符合您的需要,但是在weston_view_set_initial_position(...)的weston/desktop-shell/shell.c中有一个函数,名为set_position。

我设置了默认的xy值,它的工作原理。

+0

您是如何从您的客户端程序获取'weston_view'和'desktop_shell'对象的? – mpr

+0

这是weston来源访问。我不知道它是否可以从客户端程序端访问。 此修改将应用于每个窗口。 –

+0

我看着延伸的韦斯顿,但我现在有点咬牙关了。我现在要解决这个问题,可能Wayland API将在未来提供更多的应用程序级别控制。 – mpr