summaryrefslogtreecommitdiff
path: root/src/window_wayland.c
diff options
context:
space:
mode:
authorAndrew Opalach <andrew@akon.city> 2026-08-25 19:48:15 -0400
committerAndrew Opalach <andrew@akon.city> 2026-08-25 19:48:15 -0400
commitf48520c10ba822e13ef119f626b85fc081f96124 (patch)
tree8672a171b616b82feb74478d29f4205cf06488e9 /src/window_wayland.c
parenta35c47d401335e81f25c2c78611dcb7785f703da (diff)
downloadstela-f48520c10ba822e13ef119f626b85fc081f96124.tar.gz
stela-f48520c10ba822e13ef119f626b85fc081f96124.tar.bz2
stela-f48520c10ba822e13ef119f626b85fc081f96124.zip
Raw input + drag and drop on Windows, cleanup
Signed-off-by: Andrew Opalach <andrew@akon.city>
Diffstat (limited to 'src/window_wayland.c')
-rw-r--r--src/window_wayland.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/src/window_wayland.c b/src/window_wayland.c
index 2517003..e019002 100644
--- a/src/window_wayland.c
+++ b/src/window_wayland.c
@@ -118,6 +118,7 @@ static void global_add(void *data, struct wl_registry *registry, u32 name,
(void)data;
if (al_strscmp(interface, "wl_output") == 0) {
struct stl_monitor_wayland *monitor = al_alloc_object(struct stl_monitor_wayland);
+ monitor->wln = name;
al_array_push(global.monitors, (struct stl_monitor *)monitor);
monitor->output = (struct wl_output *)wl_registry_bind(registry, name, &wl_output_interface, ASSERT_MIN(4u, version));
wl_output_add_listener(monitor->output, &output_listener, monitor);
@@ -128,7 +129,16 @@ static void global_remove(void *data, struct wl_registry *registry, u32 name)
{
(void)data;
(void)registry;
- (void)name;
+ // @TODO: Untested.
+ for (u32 i = 0; i < global.monitors.count; i++) {
+ struct stl_monitor_wayland *monitor = (struct stl_monitor_wayland *)al_array_at(global.monitors, i);
+ if (monitor->wln == name) {
+ if (monitor->output) wl_output_destroy(monitor->output);
+ al_free(monitor);
+ al_array_remove_at_iter(global.monitors, i);
+ break;
+ }
+ }
}
static const struct wl_registry_listener registry_listener = {
@@ -302,7 +312,7 @@ bool stl_global_init(bool skip_graphics)
if (!skip_graphics) {
#if defined STELA_API_VULKAN
- global.vk_extensions = (const char **)al_calloc(2, sizeof(const char *const *));
+ global.vk_extensions = (const char **)al_calloc(2, sizeof(const char *));
global.vk_extensions[0] = "VK_KHR_surface";
global.vk_extensions[1] = "VK_KHR_wayland_surface";
#elif defined STELA_API_OPENGL
@@ -499,7 +509,7 @@ static void pointer_frame(void *data, struct wl_pointer *pointer)
struct stl_window_wayland *wl = (struct stl_window_wayland *)data;
(void)pointer;
if (wl->frame.pointer_x != FRAME_NO_VALUE && wl->frame.pointer_y != FRAME_NO_VALUE) {
- stl_window_send_pointer_pos_event(&wl->w, wl->frame.pointer_x, wl->frame.pointer_y);
+ stl_window_send_pointer_event(&wl->w, STELA_POINTER_POS, wl->frame.pointer_x, wl->frame.pointer_y);
wl->frame.pointer_x = FRAME_NO_VALUE;
wl->frame.pointer_y = FRAME_NO_VALUE;
}
@@ -708,6 +718,7 @@ static void context_global_add(void *data, struct wl_registry *registry, u32 nam
static void context_global_remove(void *data, struct wl_registry *registry, u32 name)
{
+ // @TODO: Probably need to handle seat here.
(void)data;
(void)registry;
(void)name;
@@ -1299,10 +1310,10 @@ static VkResult window_wayland_vk_destroy_surface(VkInstance inst, VkSurfaceKHR
return stl_vk_destroy_surface(inst, surface);
}
-static const char *const *window_wayland_vk_get_extensions(u32 *num)
+static const char * const *window_wayland_vk_get_extensions(u32 *num)
{
*num = 2;
- return global.vk_extensions;
+ return (const char * const *)global.vk_extensions;
}
#elif defined STELA_API_OPENGL
static bool window_wayland_gl_loader_load(void *window)