diff --git a/src/Makefile.am b/src/Makefile.am index 6d714fb..1e079b1 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -176,7 +176,8 @@ wmaker_SOURCES += \ backend/wayland/wl_events.c \ backend/wayland/wl_focus.c \ backend/wayland/wl_screen.c \ - backend/wayland/wl_shm.c + backend/wayland/wl_shm.c \ + backend/wayland/wl_wings.c endif if USE_NESTED_FUNC diff --git a/src/backend/wayland/wl_backend.c b/src/backend/wayland/wl_backend.c index d5a5ce5..2da8768 100644 --- a/src/backend/wayland/wl_backend.c +++ b/src/backend/wayland/wl_backend.c @@ -242,38 +242,6 @@ int level_to_bucket(int level); struct wlr_scene_tree *level_tree_for(int level); struct wl_frame_buf *frame_buf_find(WNativeWindow id); -/* ------------------------------------------------------------------ */ -/* Phase A: WINGs event backend wiring helpers */ -/* ------------------------------------------------------------------ */ - -/* - * Get the WMScreen (W_Screen) for screen 0. Returns NULL if StartUp() - * hasn't initialised the screen yet. - */ -static WMScreen * -wl_get_wmscreen(void) -{ - if (w_global.screen_count == 0) - return NULL; - WScreen *scr = wScreenWithNumber(0); - return scr ? scr->wmscreen : NULL; -} - -/* - * Dispatch callback for W_WL_SetLoopDispatch — ticks the Wayland compositor - * event loop so clients stay responsive during WINGs modal loops. - */ -static void -wl_wings_dispatch(int timeout_ms, void *ud) -{ - (void)ud; - if (!wl_state.display) - return; - struct wl_event_loop *loop = wl_display_get_event_loop(wl_state.display); - wl_display_flush_clients(wl_state.display); - wl_event_loop_dispatch(loop, timeout_ms); -} - /* ------------------------------------------------------------------ */ /* Phase 36 / 37 / 38: XDG surface lifecycle, frame loop, view mgmt */ /* ------------------------------------------------------------------ */ diff --git a/src/backend/wayland/wl_types.h b/src/backend/wayland/wl_types.h index 54c50b8..8b98983 100644 --- a/src/backend/wayland/wl_types.h +++ b/src/backend/wayland/wl_types.h @@ -552,3 +552,5 @@ struct wm_shm_surface *wm_shm_surface_create(int width, int height); void wm_shm_surface_fill(struct wm_shm_surface *s, int x, int y, int w, int h, uint32_t argb); void wm_shm_surface_commit(struct wm_shm_surface *s, struct wlr_scene_tree *parent, int x, int y); void wm_shm_surface_destroy(struct wm_shm_surface *s); +WMScreen *wl_get_wmscreen(void); +void wl_wings_dispatch(int timeout_ms, void *ud); diff --git a/src/backend/wayland/wl_wings.c b/src/backend/wayland/wl_wings.c new file mode 100644 index 0000000..c7fda7d --- /dev/null +++ b/src/backend/wayland/wl_wings.c @@ -0,0 +1,39 @@ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif +#include +#include "../../screen.h" +#include "wl_types.h" + +/* ------------------------------------------------------------------ */ +/* Phase A: WINGs event backend wiring helpers */ +/* ------------------------------------------------------------------ */ + +/* + * Get the WMScreen (W_Screen) for screen 0. Returns NULL if StartUp() + * hasn't initialised the screen yet. + */ +WMScreen * +wl_get_wmscreen(void) +{ + if (w_global.screen_count == 0) + return NULL; + WScreen *scr = wScreenWithNumber(0); + return scr ? scr->wmscreen : NULL; +} + +/* + * Dispatch callback for W_WL_SetLoopDispatch — ticks the Wayland compositor + * event loop so clients stay responsive during WINGs modal loops. + */ +void +wl_wings_dispatch(int timeout_ms, void *ud) +{ + (void)ud; + if (!wl_state.display) + return; + struct wl_event_loop *loop = wl_display_get_event_loop(wl_state.display); + wl_display_flush_clients(wl_state.display); + wl_event_loop_dispatch(loop, timeout_ms); +} +