Ask for server decorations via ZXDG decoration manager
This commit is contained in:
parent
e4111e7e95
commit
55d142e224
3 changed files with 59 additions and 8 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -3,3 +3,5 @@ xdg-shell-client-protocol.h
|
|||
xdg-shell-protocol.c
|
||||
zwp-text-input-unstable-v3-client-protocol.c
|
||||
zwp-text-input-unstable-v3-protocol.h
|
||||
xdg-decoration-unstable-v1.c
|
||||
xdg-decoration-unstable-v1.h
|
||||
|
|
|
|||
10
Makefile
10
Makefile
|
|
@ -1,8 +1,10 @@
|
|||
INTERFACEDIR:=$(shell pkg-config --variable=pkgdatadir wayland-protocols)
|
||||
CFLAGS=-Wall -Wextra -Og -ggdb3 -Wno-unused-but-set-variable -Wno-unused-parameter
|
||||
LIBS=-lwayland-client -lwayland-egl -lEGL -lOpenGL -lxkbcommon
|
||||
wayland: wayland.c xdg-shell-protocol.c xdg-shell-client-protocol.h zwp-text-input-unstable-v3-client-protocol.c zwp-text-input-unstable-v3-protocol.h
|
||||
gcc $(CFLAGS) $(LIBS) wayland.c xdg-shell-protocol.c zwp-text-input-unstable-v3-client-protocol.c -o wayland
|
||||
wayland: wayland.c xdg-shell-protocol.c xdg-shell-client-protocol.h zwp-text-input-unstable-v3-client-protocol.c zwp-text-input-unstable-v3-protocol.h xdg-decoration-unstable-v1.c xdg-decoration-unstable-v1.h
|
||||
gcc $(CFLAGS) $(LIBS) wayland.c xdg-shell-protocol.c xdg-decoration-unstable-v1.c zwp-text-input-unstable-v3-client-protocol.c -o wayland
|
||||
|
||||
# TODO: Normalize these annoying names
|
||||
xdg-shell-protocol.c:
|
||||
wayland-scanner private-code $(INTERFACEDIR)/stable/xdg-shell/xdg-shell.xml xdg-shell-protocol.c
|
||||
xdg-shell-client-protocol.h:
|
||||
|
|
@ -11,3 +13,7 @@ zwp-text-input-unstable-v3-client-protocol.c:
|
|||
wayland-scanner private-code $(INTERFACEDIR)/unstable/text-input/text-input-unstable-v3.xml zwp-text-input-unstable-v3-client-protocol.c
|
||||
zwp-text-input-unstable-v3-protocol.h:
|
||||
wayland-scanner client-header $(INTERFACEDIR)/unstable/text-input/text-input-unstable-v3.xml zwp-text-input-unstable-v3-protocol.h
|
||||
xdg-decoration-unstable-v1.c:
|
||||
wayland-scanner private-code $(INTERFACEDIR)/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml xdg-decoration-unstable-v1.c
|
||||
xdg-decoration-unstable-v1.h:
|
||||
wayland-scanner client-header $(INTERFACEDIR)/unstable/xdg-decoration/xdg-decoration-unstable-v1.xml xdg-decoration-unstable-v1.h
|
||||
|
|
|
|||
55
wayland.c
55
wayland.c
|
|
@ -18,6 +18,7 @@
|
|||
// generated header using wayland-scanner
|
||||
#include "xdg-shell-client-protocol.h"
|
||||
#include "zwp-text-input-unstable-v3-protocol.h"
|
||||
#include "xdg-decoration-unstable-v1.h"
|
||||
// common headers for platform layer and application layer
|
||||
#include "input.h"
|
||||
#include "arena.h"
|
||||
|
|
@ -40,6 +41,9 @@ struct wl_pointer *wl_pointer = NULL;
|
|||
struct zwp_text_input_v3 *zwp_text_input_v3 = NULL;
|
||||
struct zwp_text_input_manager_v3 *zwp_text_input_manager_v3 = NULL;
|
||||
|
||||
/* XDG decoration manager extension */
|
||||
struct zxdg_decoration_manager_v1* zxdg_decoration_manager_v1 = NULL;
|
||||
|
||||
|
||||
/* XKB library */
|
||||
struct xkb_context *xkb_context = NULL;
|
||||
|
|
@ -98,8 +102,29 @@ void registry_handle_global( void *data, struct wl_registry *registry,
|
|||
|
||||
if (!strcmp(interface, zwp_text_input_manager_v3_interface.name))
|
||||
{
|
||||
console_log_ss(MODULE_WAYLAND, "Registering WL input manager v3 interface...\n");
|
||||
zwp_text_input_manager_v3 = wl_registry_bind(registry, name, &zwp_text_input_manager_v3_interface, 1);
|
||||
}
|
||||
|
||||
if (!strcmp(interface, zxdg_decoration_manager_v1_interface.name))
|
||||
{
|
||||
console_log_ss(MODULE_WAYLAND, "Registering WL decoration manager v1 interface...\n");
|
||||
zxdg_decoration_manager_v1 = wl_registry_bind(registry, name, &zxdg_decoration_manager_v1_interface, 1);
|
||||
}
|
||||
}
|
||||
|
||||
void zxdg_toplevel_decoration_configure_callback(void *data, struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1, uint32_t mode)
|
||||
{
|
||||
// TODO: We are supposed to call xdg_surface_ack_configure here
|
||||
console_log_ss(MODULE_WAYLAND, "Setting XDG toplevel to use %s decorations\n",
|
||||
(ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE == mode ? "server" : "client"));
|
||||
}
|
||||
|
||||
void xdg_surface_configure_callback(void *data, struct xdg_surface *xdg_surface, uint32_t serial)
|
||||
{
|
||||
// confirm that you exist to the compositor
|
||||
console_log_ss(MODULE_WAYLAND, "ACKing XDG configuration with serial %d\n", serial);
|
||||
xdg_surface_ack_configure(xdg_surface, serial);
|
||||
}
|
||||
|
||||
void zwp_text_input_v3_enter_callback(void *data, struct zwp_text_input_v3 *text_input, struct wl_surface *surface)
|
||||
|
|
@ -358,22 +383,21 @@ void pointer_axis_relative_direction_callback(void *data, struct wl_pointer *poi
|
|||
|
||||
int main()
|
||||
{
|
||||
fprintf(stdout, "Starting platform layer...\n");
|
||||
console_log("Starting platform layer...\n");
|
||||
main_arena = arena_create(1*GB);
|
||||
if (!main_arena.begin)
|
||||
fprintf(stderr, "Could not reserve memory for main arena!\n");
|
||||
|
||||
console_err("Could not reserve memory for main arena!\n");
|
||||
|
||||
struct wl_display *display = wl_display_connect(NULL);
|
||||
if (!display)
|
||||
{
|
||||
fprintf(stderr, "Cannot retrieve wayland display!\n");
|
||||
console_err_ss(MODULE_WAYLAND, "Cannot retrieve wayland display!\n");
|
||||
}
|
||||
|
||||
registry = wl_display_get_registry(display);
|
||||
if (!registry)
|
||||
{
|
||||
fprintf(stderr, "Cannot retrieve wayland registry!\n");
|
||||
console_err_ss(MODULE_WAYLAND, "Cannot retrieve wayland registry!\n");
|
||||
}
|
||||
|
||||
fprintf(stdout, "Linking registry listener...\n");
|
||||
|
|
@ -385,13 +409,32 @@ int main()
|
|||
surface = wl_compositor_create_surface(compositor);
|
||||
if (!surface)
|
||||
{
|
||||
fprintf(stderr, "Can't create surface!\n");
|
||||
console_err_ss(MODULE_WAYLAND, "Can't create WL surface!\n");
|
||||
}
|
||||
|
||||
xdg_surface = xdg_wm_base_get_xdg_surface(wm_base, surface);
|
||||
xdg_toplevel = xdg_surface_get_toplevel(xdg_surface);
|
||||
xdg_toplevel_set_title(xdg_toplevel, "Hi");
|
||||
|
||||
const struct xdg_surface_listener xdg_surface_listener = {
|
||||
.configure = xdg_surface_configure_callback
|
||||
};
|
||||
|
||||
xdg_surface_add_listener(xdg_surface, &xdg_surface_listener, NULL);
|
||||
|
||||
if (!zxdg_decoration_manager_v1)
|
||||
console_warn_ss(MODULE_WAYLAND, "Could not get XDG decoration manager handle\n");
|
||||
|
||||
struct zxdg_toplevel_decoration_v1 *zxdg_toplevel_decoration_v1 = zxdg_decoration_manager_v1_get_toplevel_decoration(zxdg_decoration_manager_v1, xdg_toplevel);
|
||||
|
||||
struct zxdg_toplevel_decoration_v1_listener zxdg_toplevel_decoration_v1_listener = {
|
||||
.configure = zxdg_toplevel_decoration_configure_callback
|
||||
};
|
||||
|
||||
if (zxdg_toplevel_decoration_v1_add_listener(zxdg_toplevel_decoration_v1, &zxdg_toplevel_decoration_v1_listener, NULL))
|
||||
console_warn_ss(MODULE_WAYLAND, "Could not set ZXDG toplevel decoration listener\n");
|
||||
zxdg_toplevel_decoration_v1_set_mode(zxdg_toplevel_decoration_v1, ZXDG_TOPLEVEL_DECORATION_V1_MODE_SERVER_SIDE);
|
||||
|
||||
/* XKB library initialization */
|
||||
xkb_context = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue