cleanup: remove stale Phase planning comments from all wayland backend files
This commit is contained in:
parent
3205716ac5
commit
859af074ad
|
|
@ -1,103 +1,6 @@
|
|||
/*
|
||||
* wl_backend.c -- wlroots-based Wayland compositor backend for Window Maker
|
||||
*
|
||||
* Phase 31: complete stub vtable. Every slot compiles and returns a safe
|
||||
* zero/null/false value. Subsequent phases will replace stubs with real
|
||||
* wlroots implementations one functional area at a time.
|
||||
* Phase 32: display_open/close/screen_count implemented with wlroots headless
|
||||
* backend.
|
||||
* Phase 34: Wayland compositor socket created (clients can connect);
|
||||
* wlr_output_layout added; monitors_query returns real head geometry.
|
||||
* Phase 35: Core Wayland protocol globals advertised (wl_compositor,
|
||||
* wl_subcompositor, wl_seat, wl_data_device_manager, xdg_wm_base).
|
||||
* Phase 36: wl_shm and wl_output advertised; XDG toplevel listener wired.
|
||||
* Phase 37: frame callbacks driven by output frame event; XDG configure
|
||||
* sent on new toplevel so clients complete their first frame.
|
||||
* Phase 38: per-toplevel view struct with map/unmap/destroy lifecycle;
|
||||
* synthetic Window IDs; context_save/find/delete implemented.
|
||||
* Phase 39: handle_toplevel_map wires XDG toplevel map to wManageWindow so
|
||||
* Wayland surfaces appear in scr->focused_window list.
|
||||
* Phase 40: handle_toplevel_unmap wires XDG toplevel unmap to wUnmanageWindow.
|
||||
* Phase 41: prop_get_wm_class and window_fetch_name return XDG app_id/title.
|
||||
* Phase 42: window_get_client_attrs returns WCLIENT_VIEWABLE + surface
|
||||
* geometry for mapped XDG toplevels.
|
||||
* Phase 43: focus_set delivers keyboard focus via wlr_seat; headless keyboard
|
||||
* device created and attached to seat; mapped toplevels auto-focused.
|
||||
* Phase 44: client_synth_configure, window_resize send XDG configure events
|
||||
* so clients receive size changes from the WM.
|
||||
* Phase 45: pointer_query returns 1 (always on-screen); wWindowFocus/Unfocus
|
||||
* guarded on frame!=NULL so wSetFocusTo works without a frame window.
|
||||
* Phase 46: client_close vtable slot (wlr_xdg_toplevel_send_close);
|
||||
* title_listener updates wwin->wm_instance/wm_class on set_title signal;
|
||||
* wClientSendProtocol/wClientKill guarded for Wayland.
|
||||
* Phase 47: prop_get_normal_hints returns XDG toplevel min/max/current size.
|
||||
* Phase 53: headless pointer device added to seat; seat advertises both
|
||||
* WL_SEAT_CAPABILITY_KEYBOARD and WL_SEAT_CAPABILITY_POINTER.
|
||||
* Phase 54: virtual pointer position tracking; pointer_warp/warp_to update
|
||||
* state; pointer_query/query_full return tracked coordinates.
|
||||
* Phase 55: window_get_rect returns real geometry for synthetic toplevel IDs;
|
||||
* window_move records WM-assigned x,y in the view struct.
|
||||
* Phase 56: prop_set/get_wm_state persist WM state (workspace, miniaturized,
|
||||
* shaded, etc.) in the view struct so wWindowGetSavedState works correctly.
|
||||
* Phase 57: icccm_set/get/free_command store WM_COMMAND in the view struct;
|
||||
* misc.c getCommandForWindow uses the vtable on the Wayland path.
|
||||
* Phase 58: stacking_raise/lower/restack manipulate toplevel_list Z-order;
|
||||
* stacking_query enumerates IDs in order (returns 1 to suppress warning).
|
||||
* Phase 62: wl_screen_create_internals creates a real off-screen InputOnly X
|
||||
* window (no_focus_xwin) as the focus sink and sets scr->no_focus_win to it.
|
||||
* wl_focus_set recognises WNATIVE_NONE or no_focus_xwin as "clear focus" and
|
||||
* calls wlr_seat_keyboard_clear_focus instead of activating an XWayland surface.
|
||||
* Phase 63: PropGetProtocols sets DELETE_WINDOW=1 for all Wayland windows
|
||||
* (all XDG toplevels support close); wClientSendProtocol dispatches
|
||||
* client_close in the Wayland path so MC_CLOSE is enabled and kill_close=0.
|
||||
* wManageWindow succeeded log now includes kill_close= field.
|
||||
* Phase 64: zxdg_decoration_manager_v1 advertised; new_toplevel_decoration
|
||||
* listener responds immediately with CLIENT_SIDE mode so clients draw their
|
||||
* own title bars (no X11 frame rendering in the Wayland path).
|
||||
* Phase 65: prop_get_transient_for implemented — walks xdg_toplevel->parent
|
||||
* chain and returns the synthetic Window ID of the parent view so
|
||||
* dialog windows are correctly identified as transients by the policy layer.
|
||||
* Phase 66: XDG popup initial configure — schedule configure for
|
||||
* WLR_XDG_SURFACE_ROLE_POPUP so context menus and autocomplete dropdowns
|
||||
* can commit their first buffer without stalling on the compositor.
|
||||
* Phase 17: XWayland support — wlr_xwayland started alongside the headless
|
||||
* backend; X11 windows (e.g. GNUstep apps) appear via new_surface events,
|
||||
* receive synthetic Window IDs equal to their xcb_window_t, and
|
||||
* are managed through the same wl_toplevel_view / wManageWindow lifecycle
|
||||
* as XDG toplevels. DISPLAY env var is set so X11 clients can connect.
|
||||
* Phase 37: zwlr_data_control_manager_v1, zwlr_input_inhibitor_v1,
|
||||
* zwlr_virtual_pointer_manager_v1, org_kde_kwin_idle, zxdg_exporter/importer_v2
|
||||
* advertised. Input inhibitor activate/deactivate wired.
|
||||
* Phase 36: zwlr_layer_shell_v1 advertised; new_surface handler creates a
|
||||
* wl_layer_view, assigns output, computes anchor/margin geometry, sends
|
||||
* configure, and positions the scene node. Map/unmap/destroy wired.
|
||||
* Phase 35: zwlr_foreign_toplevel_management_v1 advertised; handle created
|
||||
* on map, destroyed on unmap, with title/app_id/output/activated state set.
|
||||
* xdg_activation_v1 advertised; request_activate delivers WM focus + raise.
|
||||
* Phase 34: zwp_text_input_manager_v3, zwp_input_method_manager_v2, and
|
||||
* zwp_virtual_keyboard_manager_v1 advertised for IME / on-screen keyboard.
|
||||
* Phase 33: zwlr_output_management_v1, zwlr_output_power_management_v1,
|
||||
* zwlr_gamma_control_manager_v1, and wp_presentation advertised.
|
||||
* Output management apply/test requests acknowledged (single-output no-op).
|
||||
* Output power set_mode applies DPMS on/off via wlr_output_enable/commit.
|
||||
* Phase 32: zwp_linux_dmabuf_v1, zwlr_screencopy_manager_v1, and
|
||||
* zwlr_export_dmabuf_manager_v1 advertised as passive globals so GPU
|
||||
* zero-copy buffers, screenshot tools, and screen recorders work.
|
||||
* Phase 18: nested Wayland compositor + wlr_scene rendering.
|
||||
* If WMAKER_WAYLAND_NESTED=1 is set, a wlr_wl_backend is used alongside the
|
||||
* headless backend (via wlr_multi_backend) so the compositor appears as a
|
||||
* Wayland window on the host desktop. wlr_scene provides a scene graph for
|
||||
* compositing client surfaces; wlr_scene_output_commit renders each frame.
|
||||
* A per-view scene node is created for each XDG/XWayland surface and kept
|
||||
* in sync with the WM-assigned position.
|
||||
* Phase 20: real input device forwarding for nested mode.
|
||||
* handle_backend_new_input wires listeners for the host compositor's real
|
||||
* pointer/keyboard devices so key presses and mouse motion are forwarded to
|
||||
* focused Wayland clients. A grey wlr_scene_rect root background is added
|
||||
* so the compositor output shows a proper desktop instead of solid black.
|
||||
* Pointer bounds clamping updated to use actual output dimensions.
|
||||
*/
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
|
@ -134,57 +37,56 @@
|
|||
#include <wlr/types/wlr_xdg_shell.h>
|
||||
#include "wmaker-popup-v1-server-protocol.h"
|
||||
#include <wlr/types/wlr_xdg_decoration_v1.h>
|
||||
#include <wlr/xwayland.h> /* Phase 17: XWayland support */
|
||||
#include <wlr/xwayland.h>
|
||||
#include <X11/Xproto.h> /* X_SetInputFocus and other request codes */
|
||||
#include <wlr/backend/wayland.h> /* Phase 18: nested Wayland backend */
|
||||
#include <wlr/backend/multi.h> /* Phase 18: multi-backend */
|
||||
#include <wlr/types/wlr_scene.h> /* Phase 18: scene graph compositing */
|
||||
#include <wlr/render/allocator.h> /* Phase 18: buffer allocator */
|
||||
#include <wlr/types/wlr_buffer.h> /* Phase 29+: WM-owned SHM surface buffers */
|
||||
#include <wlr/backend/wayland.h>
|
||||
#include <wlr/backend/multi.h>
|
||||
#include <wlr/types/wlr_scene.h>
|
||||
#include <wlr/render/allocator.h>
|
||||
#include <wlr/types/wlr_buffer.h>
|
||||
#include <wlr/interfaces/wlr_buffer.h> /* wlr_buffer_init/wlr_buffer_impl */
|
||||
#include <libdrm/drm_fourcc.h> /* Phase 29+: DRM_FORMAT_ARGB8888 */
|
||||
#include <pixman.h> /* Phase 29+: software pixel rendering */
|
||||
#include <wlr/types/wlr_cursor.h> /* Phase 23: hardware cursor tracking */
|
||||
#include <wlr/types/wlr_xcursor_manager.h> /* Phase 23: xcursor theme */
|
||||
#include <wlr/types/wlr_data_device.h> /* Phase 25: clipboard / selection */
|
||||
#include <wlr/types/wlr_primary_selection.h> /* Phase 26: primary selection (middle-click) */
|
||||
#include <wlr/types/wlr_primary_selection_v1.h> /* Phase 26: zwp_primary_selection_device_manager_v1 */
|
||||
#include <wlr/types/wlr_xdg_output_v1.h> /* Phase 27: xdg-output for panel geometry */
|
||||
#include <wlr/types/wlr_idle_inhibit_v1.h> /* Phase 28: idle inhibit for video/fullscreen */
|
||||
#include <wlr/types/wlr_viewporter.h> /* Phase 29: wp_viewporter for video scaling */
|
||||
#include <wlr/types/wlr_relative_pointer_v1.h> /* Phase 30: relative pointer for games */
|
||||
#include <libdrm/drm_fourcc.h>
|
||||
#include <pixman.h>
|
||||
#include <wlr/types/wlr_cursor.h>
|
||||
#include <wlr/types/wlr_xcursor_manager.h>
|
||||
#include <wlr/types/wlr_data_device.h>
|
||||
#include <wlr/types/wlr_primary_selection.h>
|
||||
#include <wlr/types/wlr_primary_selection_v1.h>
|
||||
#include <wlr/types/wlr_xdg_output_v1.h>
|
||||
#include <wlr/types/wlr_idle_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_viewporter.h>
|
||||
#include <wlr/types/wlr_relative_pointer_v1.h>
|
||||
/* Generated protocol header required by wlr_pointer_constraints_v1.h */
|
||||
#include "protocols/pointer-constraints-unstable-v1-protocol.h"
|
||||
#include <wlr/types/wlr_pointer_constraints_v1.h> /* Phase 30: pointer lock for games */
|
||||
#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h> /* Phase 31: shortcut inhibit for games */
|
||||
#include <wlr/types/wlr_linux_dmabuf_v1.h> /* Phase 32: zwp_linux_dmabuf_v1 for GPU zero-copy */
|
||||
#include <wlr/types/wlr_screencopy_v1.h> /* Phase 32: zwlr_screencopy_manager_v1 for screenshots */
|
||||
#include <wlr/types/wlr_export_dmabuf_v1.h> /* Phase 32: zwlr_export_dmabuf_manager_v1 for screen recorders */
|
||||
#include <wlr/types/wlr_output_management_v1.h> /* Phase 33: zwlr_output_management_v1 (randr equivalent) */
|
||||
#include <wlr/types/wlr_pointer_constraints_v1.h>
|
||||
#include <wlr/types/wlr_keyboard_shortcuts_inhibit_v1.h>
|
||||
#include <wlr/types/wlr_linux_dmabuf_v1.h>
|
||||
#include <wlr/types/wlr_screencopy_v1.h>
|
||||
#include <wlr/types/wlr_export_dmabuf_v1.h>
|
||||
#include <wlr/types/wlr_output_management_v1.h>
|
||||
/* Generated protocol header required by wlr_output_power_management_v1.h */
|
||||
#include "protocols/wlr-output-power-management-unstable-v1-protocol.h"
|
||||
#include <wlr/types/wlr_output_power_management_v1.h> /* Phase 33: zwlr_output_power_management_v1 (DPMS) */
|
||||
#include <wlr/types/wlr_gamma_control_v1.h> /* Phase 33: zwlr_gamma_control_manager_v1 (Night Light) */
|
||||
#include <wlr/types/wlr_presentation_time.h> /* Phase 33: wp_presentation (smooth frame timing) */
|
||||
#include <wlr/types/wlr_text_input_v3.h> /* Phase 34: zwp_text_input_manager_v3 (IME client) */
|
||||
#include <wlr/types/wlr_input_method_v2.h> /* Phase 34: zwp_input_method_manager_v2 (IME server) */
|
||||
#include <wlr/types/wlr_virtual_keyboard_v1.h> /* Phase 34: zwp_virtual_keyboard_manager_v1 */
|
||||
#include <wlr/types/wlr_foreign_toplevel_management_v1.h> /* Phase 35: zwlr_foreign_toplevel_management_v1 */
|
||||
#include <wlr/types/wlr_xdg_activation_v1.h> /* Phase 35: xdg_activation_v1 (focus tokens) */
|
||||
#include <wlr/types/wlr_output_power_management_v1.h>
|
||||
#include <wlr/types/wlr_gamma_control_v1.h>
|
||||
#include <wlr/types/wlr_presentation_time.h>
|
||||
#include <wlr/types/wlr_text_input_v3.h>
|
||||
#include <wlr/types/wlr_input_method_v2.h>
|
||||
#include <wlr/types/wlr_virtual_keyboard_v1.h>
|
||||
#include <wlr/types/wlr_foreign_toplevel_management_v1.h>
|
||||
#include <wlr/types/wlr_xdg_activation_v1.h>
|
||||
/* Generated protocol header required by wlr_layer_shell_v1.h */
|
||||
#include "protocols/wlr-layer-shell-unstable-v1-protocol.h"
|
||||
#include <wlr/types/wlr_layer_shell_v1.h> /* Phase 36: zwlr_layer_shell_v1 (panels, docks) */
|
||||
#include <wlr/types/wlr_data_control_v1.h> /* Phase 37: zwlr_data_control_manager_v1 (clipboard mgr) */
|
||||
#include <wlr/types/wlr_virtual_pointer_v1.h> /* Phase 37: zwlr_virtual_pointer_manager_v1 (remote desktop) */
|
||||
#include <wlr/types/wlr_layer_shell_v1.h>
|
||||
#include <wlr/types/wlr_data_control_v1.h>
|
||||
#include <wlr/types/wlr_virtual_pointer_v1.h>
|
||||
/* wlr_input_inhibitor and wlr_idle (org_kde_kwin_idle) were removed in
|
||||
* wlroots 0.18 — use wlr_session_lock_v1 / wlr_idle_notify_v1 instead. */
|
||||
#include <wlr/types/wlr_xdg_foreign_registry.h> /* Phase 37: xdg-foreign registry (shared state) */
|
||||
#include <wlr/types/wlr_xdg_foreign_v2.h> /* Phase 37: zxdg_exporter_v2 / zxdg_importer_v2 */
|
||||
#include <wlr/types/wlr_xdg_foreign_registry.h>
|
||||
#include <wlr/types/wlr_xdg_foreign_v2.h>
|
||||
#include <wlr/util/box.h>
|
||||
/* Generated xdg-shell protocol implementation (Wayland glue code) */
|
||||
#include "protocols/xdg-shell-protocol.c"
|
||||
#include <wlr/util/log.h>
|
||||
/* Phase 77: XKB for keysym→keycode translation and modifier mask setup */
|
||||
#include <xkbcommon/xkbcommon.h>
|
||||
|
||||
#include "../../WindowMaker.h"
|
||||
|
|
@ -193,12 +95,12 @@
|
|||
#include "../../framewin.h" /* WFrameWindow for frame_paint */
|
||||
#include "../../texture.h" /* WTexture, wTextureRenderImage */
|
||||
#include "../../misc.h" /* ShrinkString */
|
||||
#include "../../actions.h" /* Phase 16: wMaximizeWindow, wIconifyWindow, etc. */
|
||||
#include "../../stacking.h" /* Phase 24: wRaiseFrame for click-to-raise */
|
||||
#include "../../xinerama.h" /* Phase 16: wGetHeadForWindow */
|
||||
#include "../../xmodifier.h" /* Phase 77: wSetModifierMasks */
|
||||
#include "../../event.h" /* Phase 78: wWaylandKeyPress */
|
||||
#include "../x11/wmspec.h" /* Phase 30+: get_window_image_from_x11 */
|
||||
#include "../../actions.h"
|
||||
#include "../../stacking.h"
|
||||
#include "../../xinerama.h"
|
||||
#include "../../xmodifier.h"
|
||||
#include "../../event.h"
|
||||
#include "../x11/wmspec.h"
|
||||
#include "../../icon.h" /* WIcon, TILE_* */
|
||||
#include "../../workspace.h" /* WWorkspace */
|
||||
#include "../../dock.h" /* WDock (for clip->collapsed) */
|
||||
|
|
@ -214,7 +116,6 @@
|
|||
/* ------------------------------------------------------------------ */
|
||||
/* WINGs private header — needed for W_EventBackend, W_Screen fields */
|
||||
#include <WINGs/WINGsP.h>
|
||||
/* ------------------------------------------------------------------ */
|
||||
#include <WINGs/WMEvent.h>
|
||||
#include "../../def_pixmaps.h"
|
||||
struct W_Screen;
|
||||
|
|
@ -229,7 +130,6 @@ void W_UnregisterBacking(unsigned long id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Forward declarations */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
#include "wl_types.h"
|
||||
extern void wm_dock_app_add(struct wl_toplevel_view *v);
|
||||
|
|
@ -242,9 +142,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 36 / 37 / 38: XDG surface lifecycle, frame loop, view mgmt */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
* Phase 37: Wayland event loop timer — drives client frame callbacks.
|
||||
|
|
@ -286,28 +183,19 @@ frame_timer_cb(void *data)
|
|||
/* X error handler — defined near the vtable at the bottom of this file. */
|
||||
int wl_catch_xwayland_error(Display *edpy, XErrorEvent *error);
|
||||
|
||||
/* Phase 43: forward declaration — defined in the focus section below. */
|
||||
void wl_focus_set(WNativeWindow win, int revert_to, unsigned long timestamp);
|
||||
/* Phase 50: forward declaration — defined in client section below. */
|
||||
int wl_client_get_pid(WNativeWindow win);
|
||||
/* Phase 13: forward declarations — defined in pointer section below. */
|
||||
void wl_update_pointer_focus(uint32_t time_msec);
|
||||
void wl_pointer_warp_to(int x, int y);
|
||||
/* wmaker-popup-v1 helper — defined in protocol section below. */
|
||||
void wmaker_popup_apply(struct wl_toplevel_view *view);
|
||||
extern void wmaker_popup_manager_bind(struct wl_client *client, void *data, uint32_t version, uint32_t id);
|
||||
/* Phase 14: pointer event handler forward declarations. */
|
||||
extern void handle_pointer_motion(struct wl_listener *listener, void *data);
|
||||
/* Phase 24: click-to-focus helper — defined in Phase 13 pointer section. */
|
||||
extern struct wlr_surface *view_surface_at(int px, int py, double *sx_out,
|
||||
double *sy_out, struct wl_toplevel_view **view_out);
|
||||
/* Phase 24: client cursor-surface request handler. */
|
||||
extern void handle_seat_request_cursor(struct wl_listener *listener, void *data);
|
||||
/* Phase 25: client clipboard selection request handler. */
|
||||
static void handle_seat_request_set_selection(struct wl_listener *listener, void *data);
|
||||
/* Phase 25b: drag-and-drop request handler. */
|
||||
void handle_seat_request_start_drag(struct wl_listener *listener, void *data);
|
||||
/* Phase 26: primary selection request handler. */
|
||||
static void handle_seat_request_primary_selection(struct wl_listener *listener, void *data);
|
||||
/* Compositor-internal clipboard hooks for WINGs. */
|
||||
void wl_clipboard_store_to_seat(const char *text, int len);
|
||||
|
|
@ -318,38 +206,26 @@ void wl_drag_icon_show(struct W_View *view, int x, int y);
|
|||
void wl_drag_icon_move(int x, int y);
|
||||
void wl_drag_icon_hide(void);
|
||||
void wl_drag_cursor_feedback(Bool accepted);
|
||||
/* Phase 28: idle inhibitor created/destroyed handler. */
|
||||
static void handle_idle_new_inhibitor(struct wl_listener *listener, void *data);
|
||||
/* Phase 29: scroll-wheel axis event handler. */
|
||||
extern void handle_pointer_axis(struct wl_listener *listener, void *data);
|
||||
/* Phase 30: new pointer constraint handler. */
|
||||
static void handle_new_pointer_constraint(struct wl_listener *listener, void *data);
|
||||
/* Phase 31: new keyboard shortcuts inhibitor handler. */
|
||||
static void handle_new_shortcuts_inhibitor(struct wl_listener *listener, void *data);
|
||||
/* Phase 33: output management apply/test + output power set_mode handlers. */
|
||||
extern void handle_output_mgr_apply(struct wl_listener *listener, void *data);
|
||||
extern void handle_output_mgr_test(struct wl_listener *listener, void *data);
|
||||
extern void handle_output_power_set_mode(struct wl_listener *listener, void *data);
|
||||
/* Phase 34: text input, input method, virtual keyboard new-instance handlers. */
|
||||
extern void handle_text_input_new(struct wl_listener *listener, void *data);
|
||||
extern void handle_input_method_new(struct wl_listener *listener, void *data);
|
||||
extern void handle_virtual_keyboard_new(struct wl_listener *listener, void *data);
|
||||
/* Phase 35: xdg_activation request_activate handler. */
|
||||
extern void handle_xdg_activation_request(struct wl_listener *listener, void *data);
|
||||
/* Phase 36: layer shell new_surface handler. */
|
||||
static void handle_layer_shell_new_surface(struct wl_listener *listener, void *data);
|
||||
extern void handle_xdg_new_toplevel(struct wl_listener *listener, void *data);
|
||||
extern void handle_new_toplevel_decoration(struct wl_listener *listener, void *data);
|
||||
/* Phase 37: virtual pointer handler. */
|
||||
extern void handle_virtual_pointer_new(struct wl_listener *listener, void *data);
|
||||
/* Phase 17: XWayland new surface forward declaration. */
|
||||
extern void handle_xwayland_new_surface(struct wl_listener *listener, void *data);
|
||||
extern void handle_xwayland_ready(struct wl_listener *listener, void *data);
|
||||
extern void handle_xwayland_server_destroy(struct wl_listener *listener, void *data);
|
||||
extern void wm_dock_create(WScreen *scr);
|
||||
/* Phase 20: nested backend real input device forward declaration. */
|
||||
extern void handle_backend_new_input(struct wl_listener *listener, void *data);
|
||||
/* Phase 18: output lifecycle and frame rendering forward declarations. */
|
||||
extern void handle_backend_new_output(struct wl_listener *listener, void *data);
|
||||
extern void handle_output_frame(struct wl_listener *listener, void *data);
|
||||
extern void handle_pointer_motion_absolute(struct wl_listener *listener, void *data);
|
||||
|
|
@ -365,11 +241,7 @@ extern const char *resize_edges_to_cursor(uint32_t edges);
|
|||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Display lifecycle (Phase 32 / Phase 34) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* Startup pump thread: keeps the Wayland event loop running while the main
|
||||
* thread initialises WINGs/RContext during StartUp(). XWayland needs the
|
||||
|
|
@ -682,7 +554,6 @@ wl_display_open(const char *name)
|
|||
if (!wl_state.is_nested)
|
||||
wlr_headless_add_output(wl_state.headless_inner, 1920, 1080);
|
||||
|
||||
/* Phase 34: create the UNIX socket so Wayland clients can connect. */
|
||||
sock = wl_display_add_socket_auto(wl_state.display);
|
||||
if (!sock) {
|
||||
wwarning("wl_backend: failed to create Wayland compositor socket");
|
||||
|
|
@ -700,7 +571,6 @@ wl_display_open(const char *name)
|
|||
wl_state.socket_name,
|
||||
getenv("DISPLAY") ? getenv("DISPLAY") : "(unset)");
|
||||
|
||||
/* Phase 35: advertise core Wayland protocol globals. */
|
||||
wl_state.compositor =
|
||||
wlr_compositor_create(wl_state.display, 6, wl_state.renderer);
|
||||
wlr_subcompositor_create(wl_state.display);
|
||||
|
|
@ -708,7 +578,6 @@ wl_display_open(const char *name)
|
|||
wl_state.data_device_mgr =
|
||||
wlr_data_device_manager_create(wl_state.display);
|
||||
|
||||
/* Phase 24: handle client cursor-surface requests on the seat. */
|
||||
if (wl_state.seat) {
|
||||
wl_state.seat_request_cursor_listener.notify = handle_seat_request_cursor;
|
||||
wl_signal_add(&wl_state.seat->events.request_set_cursor,
|
||||
|
|
@ -772,7 +641,6 @@ wl_display_open(const char *name)
|
|||
else
|
||||
wwarning("wl_backend: wp_viewporter unavailable");
|
||||
|
||||
/* Phase 30: relative pointer + pointer constraints for games / pointer lock. */
|
||||
wl_state.relative_pointer_mgr =
|
||||
wlr_relative_pointer_manager_v1_create(wl_state.display);
|
||||
if (wl_state.relative_pointer_mgr)
|
||||
|
|
@ -883,7 +751,6 @@ wl_display_open(const char *name)
|
|||
wwarning("wl_backend: xdg-activation created (xdg_activation_v1)");
|
||||
}
|
||||
|
||||
/* Phase 36: layer shell — panels, docks, wallpapers, lock screens. */
|
||||
wl_state.layer_shell = wlr_layer_shell_v1_create(wl_state.display, 4);
|
||||
if (wl_state.layer_shell) {
|
||||
wl_state.layer_shell_new_surface_listener.notify =
|
||||
|
|
@ -946,7 +813,6 @@ wl_display_open(const char *name)
|
|||
wwarning("wl_backend: xdg-decoration-manager created");
|
||||
}
|
||||
|
||||
/* Phase 36: advertise wl_shm (needed by SHM buffer clients). */
|
||||
wlr_renderer_init_wl_shm(wl_state.renderer, wl_state.display);
|
||||
/* wl_output global is created in handle_backend_new_output. */
|
||||
|
||||
|
|
@ -986,7 +852,6 @@ wl_display_open(const char *name)
|
|||
wlr_seat_set_capabilities(wl_state.seat,
|
||||
WL_SEAT_CAPABILITY_KEYBOARD | WL_SEAT_CAPABILITY_POINTER);
|
||||
|
||||
/* Phase 38: initialise per-toplevel tracking and context store. */
|
||||
wl_list_init(&wl_state.toplevel_list);
|
||||
wl_list_init(&wl_state.or_list);
|
||||
wl_list_init(&wl_state.frame_list);
|
||||
|
|
@ -999,7 +864,6 @@ wl_display_open(const char *name)
|
|||
wl_state.next_synthetic_id = 0x10000000UL;
|
||||
wl_state.managed_surface_count = 0;
|
||||
|
||||
/* Phase 36: listen for new XDG toplevels (wlroots 0.19+). */
|
||||
wl_state.xdg_new_surface_listener.notify = handle_xdg_new_toplevel;
|
||||
wl_signal_add(&wl_state.xdg_shell->events.new_toplevel,
|
||||
&wl_state.xdg_new_surface_listener);
|
||||
|
|
@ -1055,7 +919,6 @@ wl_display_open(const char *name)
|
|||
wl_event_source_timer_update(wl_state.frame_timer, 16);
|
||||
}
|
||||
|
||||
/* Phase 54: initialise virtual pointer at screen centre. */
|
||||
wl_state.pointer_x = 960;
|
||||
wl_state.pointer_y = 540;
|
||||
wwarning("wl_backend: virtual pointer initialised at %d,%d",
|
||||
|
|
@ -1271,42 +1134,31 @@ wl_display_close(void)
|
|||
WL_LISTENER_REMOVE(wl_state.pointer_motion_abs_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.pointer_button_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.pointer_frame_listener);
|
||||
/* Phase 20: backend new_input listener and real device listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.backend_new_input_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_keyboard_key_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_keyboard_modifiers_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_pointer_motion_abs_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_pointer_button_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_pointer_frame_listener);
|
||||
/* Phase 24/25: seat cursor + selection listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.seat_request_cursor_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.seat_request_set_selection_listener);
|
||||
/* Phase 26/28: primary selection + idle inhibitor listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.seat_request_primary_selection_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.idle_new_inhibitor_listener);
|
||||
/* Phase 29: axis listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.pointer_axis_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.real_pointer_axis_listener);
|
||||
/* Phase 30/31: pointer constraints + shortcuts inhibitor listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.new_constraint_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.new_shortcuts_inhibitor_listener);
|
||||
/* Phase 33: output management + output power listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.output_mgr_apply_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.output_mgr_test_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.output_power_set_mode_listener);
|
||||
/* Phase 34: text input, input method, virtual keyboard listeners */
|
||||
WL_LISTENER_REMOVE(wl_state.text_input_new_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.input_method_new_listener);
|
||||
WL_LISTENER_REMOVE(wl_state.virtual_keyboard_new_listener);
|
||||
/* Phase 35: xdg_activation listener */
|
||||
WL_LISTENER_REMOVE(wl_state.xdg_activation_request_listener);
|
||||
/* Phase 36: layer shell new_surface listener */
|
||||
WL_LISTENER_REMOVE(wl_state.layer_shell_new_surface_listener);
|
||||
/* Phase 37: virtual pointer listener */
|
||||
WL_LISTENER_REMOVE(wl_state.virtual_pointer_new_listener);
|
||||
#undef WL_LISTENER_REMOVE
|
||||
|
||||
/* Phase 23: destroy cursor and xcursor manager before display teardown. */
|
||||
if (wl_state.xcursor_mgr) {
|
||||
wlr_xcursor_manager_destroy(wl_state.xcursor_mgr);
|
||||
wl_state.xcursor_mgr = NULL;
|
||||
|
|
@ -1581,12 +1433,10 @@ wl_event_loop_terminate(void)
|
|||
}
|
||||
}
|
||||
|
||||
/* ================================================================== */
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Drag icon overlay for WINGs compositor-internal DND */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
||||
|
||||
|
|
@ -1681,12 +1531,7 @@ handle_new_shortcuts_inhibitor(struct wl_listener *listener, void *data)
|
|||
wwarning("wl_backend: keyboard shortcuts inhibitor activated");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 36: layer shell — panels, docks, wallpapers, overlays */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
#define LAYER_VIEW_FROM(l, field) \
|
||||
((struct wl_layer_view *)((char *)(l) - offsetof(struct wl_layer_view, field)))
|
||||
|
|
@ -1871,7 +1716,6 @@ handle_layer_shell_new_surface(struct wl_listener *listener, void *data)
|
|||
ls->namespace ? ls->namespace : "");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Keyboard grabs */
|
||||
|
||||
|
|
@ -1881,7 +1725,6 @@ handle_layer_shell_new_surface(struct wl_listener *listener, void *data)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Screen internals */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int wl_screen_select_input(WScreen *scr, long mask) { (void)scr; (void)mask; return 1; }
|
||||
void wl_screen_set_root_cursor(WScreen *scr, int cursor_id) { (void)scr; (void)cursor_id; }
|
||||
|
|
@ -2410,7 +2253,6 @@ static int parse_color_to_rcolor(WScreen *scr, const char *name, RColor *out)
|
|||
if (wl_state.output)
|
||||
wlr_output_schedule_frame(wl_state.output);
|
||||
}
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_monitors_query(WScreen *scr, WHeadGeometry **heads_out, int *count_out)
|
||||
|
|
@ -2423,7 +2265,6 @@ wl_monitors_query(WScreen *scr, WHeadGeometry **heads_out, int *count_out)
|
|||
return;
|
||||
}
|
||||
|
||||
/* Phase 34: return the single headless output as head 0. */
|
||||
WHeadGeometry *heads = wmalloc(sizeof(WHeadGeometry));
|
||||
|
||||
if (wl_state.output_layout) {
|
||||
|
|
@ -2454,4 +2295,3 @@ wl_monitors_query(WScreen *scr, WHeadGeometry **heads_out, int *count_out)
|
|||
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ extern void W_UnregisterBacking(unsigned long id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Workspace badge */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
RImage *
|
||||
wl_workspace_badge_render(WScreen *scr, WNativeWindow badge_win,
|
||||
|
|
|
|||
|
|
@ -22,7 +22,6 @@ struct wl_toplevel_view *wl_find_view_by_id(WNativeWindow id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Client */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
wl_window_get_client_attrs(WNativeWindow win, WClientAttributes *out)
|
||||
|
|
@ -414,7 +413,6 @@ int wl_client_get_pid(WNativeWindow win)
|
|||
{
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (!v) return 0;
|
||||
/* Phase 17: XWayland surfaces have a direct pid field. */
|
||||
if (v->xw_surface)
|
||||
return (int)v->xw_surface->pid;
|
||||
if (!v->xdg_surface || !v->xdg_surface->resource)
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Compositor-internal clipboard (WINGs ↔ Wayland clients) */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
char *wl_seat_clipboard_text = NULL;
|
||||
int wl_seat_clipboard_len = 0;
|
||||
|
|
|
|||
|
|
@ -9,9 +9,6 @@
|
|||
#include "wl_types.h"
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Context (window → object lookup table) — Phase 38 */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_context_save(WNativeWindow win, WContextKey key, void *data)
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@
|
|||
#include "wl_types.h"
|
||||
#include <WINGs/WINGsP.h>
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 25b: DND request_start_drag — external client starts a drag */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* Currently active external wlr_drag (NULL if none). */
|
||||
struct wlr_drag *wl_current_drag = NULL;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,6 @@ 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 color);
|
||||
void wm_shm_surface_commit(struct wm_shm_surface *s, struct wlr_scene_tree *parent, int x, int y);
|
||||
|
||||
/* Phase 30: WM dock panel (layer-anchored, pixman-rendered) */
|
||||
/* ================================================================== */
|
||||
|
||||
/*
|
||||
|
|
@ -148,9 +147,6 @@ wm_dock_create(WScreen *scr)
|
|||
sw - dw, dw, sh, n_slots);
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 30+: dock icon management */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
* wm_shm_surface_repaint — after updating the pixman pixel data,
|
||||
|
|
|
|||
|
|
@ -5,9 +5,7 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Events */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
Bool
|
||||
wl_noop_screen_get_head_usable_area(WScreen *scr, int head,
|
||||
int *x1, int *y1, int *x2, int *y2)
|
||||
|
|
@ -18,7 +16,6 @@ wl_noop_screen_get_head_usable_area(WScreen *scr, int head,
|
|||
}
|
||||
|
||||
/* WNativeWindow map / unmap / geometry */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -14,7 +14,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Extensions / cursors / error handlers */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void wl_extensions_init(void) {}
|
||||
void wl_cursors_init(void) {}
|
||||
|
|
|
|||
|
|
@ -11,7 +11,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Fake leader */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
WNativeWindow wl_fake_leader_create(WScreen *scr)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -14,12 +14,10 @@ struct wl_toplevel_view *wl_find_view_by_id(WNativeWindow id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Focus */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_focus_set(WNativeWindow win, int revert_to, unsigned long timestamp)
|
||||
{
|
||||
/* Phase 43/62: deliver keyboard focus to the XDG toplevel, or clear it. */
|
||||
(void)revert_to; (void)timestamp;
|
||||
if (!wl_state.seat || !wl_state.keyboard_dev)
|
||||
return;
|
||||
|
|
@ -34,7 +32,6 @@ wl_focus_set(WNativeWindow win, int revert_to, unsigned long timestamp)
|
|||
}
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (!v) return;
|
||||
/* Phase 17: XWayland windows need both X11 focus and Wayland seat focus. */
|
||||
if (v->xw_surface) {
|
||||
wlr_xwayland_surface_activate(v->xw_surface, true);
|
||||
if (v->xw_surface->surface) {
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@ extern void *W_RegisterBacking(unsigned long id, void *img);
|
|||
extern void W_UnregisterBacking(unsigned long id);
|
||||
extern void *W_GetViewBacking(unsigned long id);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void frame_buf_destroy(struct wlr_buffer *wlr_buf)
|
||||
{
|
||||
|
|
@ -270,7 +269,6 @@ frame_buf_hit(int px, int py)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Frame / window lifecycle */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
WNativeWindow
|
||||
wl_frame_create_toplevel(WScreen *scr,
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Key / button grabs */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_key_grab(WNativeWindow win, unsigned int keycode,
|
||||
|
|
|
|||
|
|
@ -13,7 +13,6 @@ void wl_set_cursor_image(const char *name);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Pointer grabs */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
wl_pointer_grab(WNativeWindow grab_win, WNativeWindow confine_to,
|
||||
|
|
@ -61,7 +60,6 @@ wl_pointer_grab(WNativeWindow grab_win, WNativeWindow confine_to,
|
|||
wl_set_cursor_image("left_ptr");
|
||||
}
|
||||
}
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
wl_keyboard_grab(WNativeWindow win)
|
||||
|
|
|
|||
|
|
@ -129,8 +129,6 @@ handle_new_shortcuts_inhibitor(struct wl_listener *listener, void *data)
|
|||
wwarning("wl_backend: keyboard shortcuts inhibitor activated");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
handle_pointer_button(struct wl_listener *listener, void *data)
|
||||
|
|
@ -195,7 +193,6 @@ handle_pointer_button(struct wl_listener *listener, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
/* Phase A: enqueue native WMEvent for WINGs */
|
||||
WMScreen *wmscr = wl_get_wmscreen();
|
||||
if (wmscr) {
|
||||
WMEvent wev;
|
||||
|
|
@ -293,6 +290,5 @@ handle_pointer_frame(struct wl_listener *listener, void *data)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Screen internals */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int wl_screen_replace_wm(WScreen *scr) { (void)scr; return 1; }
|
||||
|
|
|
|||
|
|
@ -10,7 +10,6 @@ struct wl_toplevel_view *wl_find_view_by_id(WNativeWindow id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* ICCCM */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void wl_icccm_set_wm_hints(WNativeWindow win, const WWMHints *hints) { (void)win; (void)hints; }
|
||||
void wl_icccm_set_class_hint(WNativeWindow win, const char *wm_class, const char *wm_instance) { (void)win; (void)wm_class; (void)wm_instance; }
|
||||
|
|
@ -18,7 +17,6 @@ void wl_icccm_set_class_hint_if_absent(WNativeWindow win, const char *wm_class,
|
|||
void
|
||||
wl_icccm_set_command(WNativeWindow win, char **argv, int argc)
|
||||
{
|
||||
/* Phase 57: store WM_COMMAND in the view struct. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
int i;
|
||||
if (!v || !argv || argc <= 0) return;
|
||||
|
|
@ -53,7 +51,6 @@ wl_icccm_get_command(WNativeWindow win, char ***argv_out, int *argc_out)
|
|||
void
|
||||
wl_icccm_free_command(char **argv)
|
||||
{
|
||||
/* Phase 57: free NULL-terminated argv returned by wl_icccm_get_command. */
|
||||
int i;
|
||||
if (!argv) return;
|
||||
for (i = 0; argv[i] != NULL; i++) wfree(argv[i]);
|
||||
|
|
|
|||
|
|
@ -19,9 +19,6 @@ int wWaylandKeyPress(unsigned int keycode, unsigned int modifiers);
|
|||
WMScreen *wl_get_wmscreen(void);
|
||||
void W_WL_EnqueueEvent(struct W_Screen *scr, const WMEvent *ev, struct W_View *target);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 78: keyboard event handlers */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
handle_keyboard_key(struct wl_listener *listener, void *data)
|
||||
|
|
|
|||
|
|
@ -10,9 +10,6 @@
|
|||
#include <wlr/util/log.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 36: layer shell — panels, docks, wallpapers, overlays */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
#define LAYER_VIEW_FROM(l, field) \
|
||||
((struct wl_layer_view *)((char *)(l) - offsetof(struct wl_layer_view, field)))
|
||||
|
|
@ -197,4 +194,3 @@ handle_layer_shell_new_surface(struct wl_listener *listener, void *data)
|
|||
ls->namespace ? ls->namespace : "");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
|
|
|||
|
|
@ -13,9 +13,6 @@
|
|||
#include <wlr/backend/wayland.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 18: output frame rendering and backend new-output handler */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
handle_output_frame(struct wl_listener *listener, void *data)
|
||||
|
|
|
|||
|
|
@ -8,7 +8,6 @@
|
|||
#include <wlr/util/log.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* Phase 33: output management, output power, gamma control */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -21,7 +21,6 @@ void wm_shm_surface_fill(struct wm_shm_surface *s,
|
|||
int x, int y, int w, int h, uint32_t argb);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 81: Overlay animation surface — XOR pixel engine + bitmap */
|
||||
/* font for geometry display (miniaturize zoom, transparent */
|
||||
/* move/resize frames, position/size readouts). */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
|
@ -272,7 +271,6 @@ overlay_flush(void)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Server grab */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void wl_server_grab(void) {} /* no-op: Wayland double-buffers for us */
|
||||
void wl_server_ungrab(void)
|
||||
|
|
@ -288,7 +286,6 @@ void wl_server_ungrab(void)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Overlays */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_overlay_draw_line(WScreen *scr, int x1, int y1, int x2, int y2)
|
||||
|
|
|
|||
|
|
@ -18,9 +18,6 @@
|
|||
/* Forward declarations for functions defined in other wl_*.c files */
|
||||
void wl_set_cursor_image(const char *name);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 13: pointer focus delivery to Wayland surfaces */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
* Find the topmost mapped view whose surface contains screen point (px, py).
|
||||
|
|
@ -170,7 +167,6 @@ wl_update_pointer_focus(uint32_t time_msec)
|
|||
void
|
||||
wl_pointer_warp(int dx, int dy)
|
||||
{
|
||||
/* Phase 54: relative warp — clamp to output bounds. */
|
||||
int ow = wl_state.output ? (int)wl_state.output->width : 1920;
|
||||
int oh = wl_state.output ? (int)wl_state.output->height : 1080;
|
||||
wl_state.pointer_x += dx;
|
||||
|
|
@ -179,18 +175,15 @@ wl_pointer_warp(int dx, int dy)
|
|||
if (wl_state.pointer_y < 0) wl_state.pointer_y = 0;
|
||||
if (wl_state.pointer_x >= ow) wl_state.pointer_x = ow - 1;
|
||||
if (wl_state.pointer_y >= oh) wl_state.pointer_y = oh - 1;
|
||||
/* Phase 23: update hardware cursor position. */
|
||||
if (wl_state.cursor)
|
||||
wlr_cursor_warp(wl_state.cursor, NULL,
|
||||
(double)wl_state.pointer_x, (double)wl_state.pointer_y);
|
||||
/* Phase 13: update pointer focus after relative warp */
|
||||
wl_update_pointer_focus(0);
|
||||
}
|
||||
|
||||
void
|
||||
wl_pointer_warp_to(int x, int y)
|
||||
{
|
||||
/* Phase 54: absolute warp — clamp to output bounds. */
|
||||
int ow = wl_state.output ? (int)wl_state.output->width : 1920;
|
||||
int oh = wl_state.output ? (int)wl_state.output->height : 1080;
|
||||
if (x < 0) x = 0;
|
||||
|
|
@ -199,17 +192,14 @@ wl_pointer_warp_to(int x, int y)
|
|||
if (y >= oh) y = oh - 1;
|
||||
wl_state.pointer_x = x;
|
||||
wl_state.pointer_y = y;
|
||||
/* Phase 23: update hardware cursor position. */
|
||||
if (wl_state.cursor)
|
||||
wlr_cursor_warp(wl_state.cursor, NULL, (double)x, (double)y);
|
||||
/* Phase 13: update pointer focus after absolute warp */
|
||||
wl_update_pointer_focus(0);
|
||||
}
|
||||
|
||||
int
|
||||
wl_pointer_query(WNativeWindow root, int *root_x, int *root_y)
|
||||
{
|
||||
/* Phase 54: return tracked virtual pointer position. */
|
||||
(void)root;
|
||||
*root_x = wl_state.pointer_x;
|
||||
*root_y = wl_state.pointer_y;
|
||||
|
|
@ -222,7 +212,6 @@ wl_pointer_query_full(WNativeWindow root,
|
|||
int *root_x, int *root_y,
|
||||
unsigned int *buttons_out)
|
||||
{
|
||||
/* Phase 54: return tracked virtual pointer position. */
|
||||
(void)root;
|
||||
if (child_out) *child_out = WNATIVE_NONE;
|
||||
if (root_x) *root_x = wl_state.pointer_x;
|
||||
|
|
|
|||
|
|
@ -17,9 +17,6 @@ void wl_grab_apply_motion(void);
|
|||
void wl_update_pointer_focus(uint32_t time_msec);
|
||||
WMScreen *wl_get_wmscreen(void);
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 14: pointer input event handlers */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
handle_pointer_motion(struct wl_listener *listener, void *data)
|
||||
|
|
@ -34,7 +31,6 @@ handle_pointer_motion(struct wl_listener *listener, void *data)
|
|||
if (wl_state.pointer_y < 0) wl_state.pointer_y = 0;
|
||||
if (wl_state.pointer_x >= ow) wl_state.pointer_x = ow - 1;
|
||||
if (wl_state.pointer_y >= oh) wl_state.pointer_y = oh - 1;
|
||||
/* Phase 23: update hardware cursor position. */
|
||||
if (wl_state.cursor)
|
||||
wlr_cursor_warp(wl_state.cursor, NULL,
|
||||
(double)wl_state.pointer_x, (double)wl_state.pointer_y);
|
||||
|
|
@ -120,7 +116,6 @@ handle_pointer_motion(struct wl_listener *listener, void *data)
|
|||
wl_state.last_hovered_id = new_id;
|
||||
}
|
||||
}
|
||||
/* Phase 22: apply grab before updating normal pointer focus. */
|
||||
if (wl_state.grab_type) { wl_grab_apply_motion(); return; }
|
||||
wl_update_pointer_focus(ev->time_msec);
|
||||
}
|
||||
|
|
@ -202,7 +197,6 @@ handle_pointer_motion_absolute(struct wl_listener *listener, void *data)
|
|||
wl_state.last_hovered_id = new_id;
|
||||
}
|
||||
}
|
||||
/* Phase 22: apply grab before updating normal pointer focus. */
|
||||
if (wl_state.grab_type) { wl_grab_apply_motion(); return; }
|
||||
wl_update_pointer_focus(ev->time_msec);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ struct wl_frame_buf *frame_buf_find(WNativeWindow id);
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* wmaker-popup-v1 protocol — client-driven popup positioning */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
static void
|
||||
wmaker_popup_handle_destroy(struct wl_client *client,
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ struct wl_toplevel_view *wl_find_view_by_id(WNativeWindow id);
|
|||
struct wl_toplevel_view *wl_find_view_by_xdg_surface(struct wlr_xdg_surface *surf);
|
||||
|
||||
/* Properties */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
int
|
||||
wl_prop_get_normal_hints(WNativeWindow win, WNormalHints *out, int *pre_icccm)
|
||||
|
|
@ -27,7 +26,6 @@ wl_prop_get_normal_hints(WNativeWindow win, WNormalHints *out, int *pre_icccm)
|
|||
*pre_icccm = 0;
|
||||
if (!v) return 0;
|
||||
|
||||
/* Phase 17: XWayland size_hints path. */
|
||||
if (v->xw_surface) {
|
||||
xcb_size_hints_t *sh = v->xw_surface->size_hints;
|
||||
if (sh) {
|
||||
|
|
@ -84,7 +82,6 @@ int
|
|||
wl_prop_get_wm_class(WNativeWindow win,
|
||||
char **wm_class, char **wm_instance)
|
||||
{
|
||||
/* Phase 41: use XDG app_id / Phase 17: use XWayland WM_CLASS. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (v && v->xw_surface) {
|
||||
*wm_class = strdup(v->xw_surface->class ? v->xw_surface->class : "x11-client");
|
||||
|
|
@ -122,7 +119,6 @@ wl_prop_get_transient_for(WNativeWindow win)
|
|||
* (a wlr_xdg_surface *). We walk the view list to find its ID. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (!v) return WNATIVE_NONE;
|
||||
/* Phase 17: XWayland transient_for via parent window_id. */
|
||||
if (v->xw_surface) {
|
||||
struct wlr_xwayland_surface *parent = v->xw_surface->parent;
|
||||
if (!parent) return WNATIVE_NONE;
|
||||
|
|
@ -145,7 +141,6 @@ int wl_prop_has_gtk_object_path(WNativeWindow win) { (void)win; return 0; }
|
|||
void
|
||||
wl_prop_set_wm_state(WNativeWindow win, const long *data, int n)
|
||||
{
|
||||
/* Phase 56: store WM state in the view struct for later retrieval. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (!v || !data || n <= 0) return;
|
||||
if (v->wm_state) wfree(v->wm_state);
|
||||
|
|
@ -157,7 +152,6 @@ wl_prop_set_wm_state(WNativeWindow win, const long *data, int n)
|
|||
int
|
||||
wl_prop_get_wm_state(WNativeWindow win, long **data_out)
|
||||
{
|
||||
/* Phase 56: return a heap copy of the stored WM state (caller frees). */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
if (!v || !v->wm_state) { *data_out = NULL; return 0; }
|
||||
*data_out = wmalloc((size_t)v->wm_state_n * sizeof(long));
|
||||
|
|
@ -165,5 +159,4 @@ wl_prop_get_wm_state(WNativeWindow win, long **data_out)
|
|||
return v->wm_state_n;
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Screen open/close */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void
|
||||
wl_screen_open(WScreen *scr)
|
||||
|
|
|
|||
|
|
@ -11,9 +11,6 @@
|
|||
#include <pixman.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* ================================================================== */
|
||||
/* Phase 29: WM-owned SHM surfaces (pixman rendering → wlroots scene) */
|
||||
/* ================================================================== */
|
||||
|
||||
/*
|
||||
* wm_shm_surface — a compositor-owned pixel buffer that plugs into the
|
||||
|
|
|
|||
|
|
@ -20,9 +20,6 @@ void wDefaultsCheckDomains(void *arg);
|
|||
#include "wl_types.h"
|
||||
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 29+: signalfd-based signal handling */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
* wl_signalfd_handler -- called from within wl_event_loop_dispatch() when
|
||||
|
|
|
|||
|
|
@ -47,8 +47,6 @@ void wl_appicon_paint(WAppIcon *aicon);
|
|||
extern void *W_RegisterBacking(unsigned long id, void *img);
|
||||
extern void W_UnregisterBacking(unsigned long id);
|
||||
|
||||
/* Phase 80: no-op stubs for X11-only operations */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
void wl_noop_frame_alloc_border_pixel(unsigned long colormap,
|
||||
const char *color_name, unsigned long **pixel_out)
|
||||
|
|
@ -993,7 +991,6 @@ RContext *wl_create_rcontext(int screen_number, RContextAttributes *attribs)
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* vtable */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
const WMBackend wl_backend = {
|
||||
.is_wayland = 1, /* Path 1: distinguishes Wayland from X11 */
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include <wlr/util/log.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* Phase 34: text input v3, input method v2, virtual keyboard v1 */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -5,7 +5,6 @@
|
|||
#include <wlr/util/log.h>
|
||||
#include "wl_types.h"
|
||||
|
||||
/* Phase 37: data control, input inhibitor, virtual pointer, idle, */
|
||||
/* xdg-foreign */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
|
|
|
|||
|
|
@ -23,7 +23,6 @@ pixman_image_t *get_window_image_from_x11(Display *x_display, WNativeWindow win)
|
|||
Bool
|
||||
wl_window_fetch_name(WNativeWindow win, char **name_out)
|
||||
{
|
||||
/* Phase 41: XDG title / Phase 17: XWayland title. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
const char *title = NULL;
|
||||
if (v && v->xw_surface)
|
||||
|
|
@ -40,7 +39,6 @@ wl_window_fetch_name(WNativeWindow win, char **name_out)
|
|||
Bool
|
||||
wl_window_get_icon_name(WNativeWindow win, char **name_out)
|
||||
{
|
||||
/* Phase 60: return title for icon labels; Phase 17: XWayland path. */
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
const char *title = NULL;
|
||||
if (v && v->xw_surface)
|
||||
|
|
@ -347,14 +345,12 @@ int
|
|||
wl_window_get_rect(WNativeWindow win,
|
||||
int *win_x, int *win_y, int *win_w, int *win_h)
|
||||
{
|
||||
/* Phase 55: return real geometry for synthetic toplevel IDs. */
|
||||
if (win == WNATIVE_NONE) {
|
||||
if (win_x) { *win_x = 0; } if (win_y) { *win_y = 0; }
|
||||
if (win_w) { *win_w = 1; } if (win_h) { *win_h = 1; }
|
||||
return 0; /* invalid/none */
|
||||
}
|
||||
struct wl_toplevel_view *v = wl_find_view_by_id(win);
|
||||
/* Phase 17: XWayland geometry. */
|
||||
if (v && v->xw_surface) {
|
||||
if (win_x) { *win_x = v->x; }
|
||||
if (win_y) { *win_y = v->y; }
|
||||
|
|
|
|||
|
|
@ -5,9 +5,6 @@
|
|||
#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()
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ void wm_dock_app_remove(WNativeWindow id);
|
|||
|
||||
#define VIEW_FROM_LISTENER(ptr, field) ((struct wl_toplevel_view *)((char *)(ptr) - offsetof(struct wl_toplevel_view, field)))
|
||||
|
||||
/* Phase 41: look up the view for a given synthetic Window ID. */
|
||||
struct wl_toplevel_view *
|
||||
wl_find_view_by_id(WNativeWindow id)
|
||||
{
|
||||
|
|
@ -45,7 +44,6 @@ wl_find_view_by_id(WNativeWindow id)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
/* Phase 65: look up the view for a given wlr_xdg_surface pointer. */
|
||||
struct wl_toplevel_view *
|
||||
wl_find_view_by_xdg_surface(struct wlr_xdg_surface *surf)
|
||||
{
|
||||
|
|
@ -235,7 +233,6 @@ handle_toplevel_map(struct wl_listener *listener, void *data)
|
|||
const char *app_id_check = view->xdg_surface->toplevel->app_id;
|
||||
int is_popup = (app_id_check && strcmp(app_id_check, "wings-popup") == 0);
|
||||
|
||||
/* Phase 39/41: register the surface as a managed window. */
|
||||
{
|
||||
WScreen *scr = wScreenWithNumber(0);
|
||||
if (scr) {
|
||||
|
|
@ -332,7 +329,6 @@ handle_toplevel_map(struct wl_listener *listener, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
/* Phase 30+: add to dock icon list */
|
||||
wm_dock_app_add(view);
|
||||
}
|
||||
}
|
||||
|
|
@ -357,10 +353,8 @@ handle_toplevel_unmap(struct wl_listener *listener, void *data)
|
|||
view->ft_handle = NULL;
|
||||
}
|
||||
|
||||
/* Phase 30+: remove from dock icon list */
|
||||
wm_dock_app_remove(view->id);
|
||||
|
||||
/* Phase 40: remove the WWindow from the WM's managed list. */
|
||||
WScreen *scr = wScreenWithNumber(0);
|
||||
if (scr) {
|
||||
WObjDescriptor *desc = wm_backend->context_find(view->id, WM_CTX_CLIENT_WIN);
|
||||
|
|
@ -397,7 +391,6 @@ handle_toplevel_destroy(struct wl_listener *listener, void *data)
|
|||
wl_list_remove(&view->commit_listener.link);
|
||||
wl_list_remove(&view->surface_commit_listener.link);
|
||||
wl_list_remove(&view->link);
|
||||
/* Phase 18: remove scene node. */
|
||||
if (view->scene_node) {
|
||||
/* Remove our destroy listener BEFORE destroying so the listener
|
||||
* doesn't fire and try to remove itself from a list we're
|
||||
|
|
@ -407,8 +400,8 @@ handle_toplevel_destroy(struct wl_listener *listener, void *data)
|
|||
view->scene_node = NULL;
|
||||
}
|
||||
wl_state.managed_surface_count--;
|
||||
if (view->wm_state) wfree(view->wm_state); /* Phase 56 */
|
||||
if (view->wm_command) { /* Phase 57 */
|
||||
if (view->wm_state) wfree(view->wm_state);
|
||||
if (view->wm_command) {
|
||||
int ci;
|
||||
for (ci = 0; ci < view->wm_command_n; ci++)
|
||||
wfree(view->wm_command[ci]);
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@
|
|||
/* Forward declarations */
|
||||
struct wl_frame_buf *frame_buf_find(WNativeWindow id);
|
||||
|
||||
/* Phase 35: foreign toplevel management + xdg_activation */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/*
|
||||
|
|
@ -72,4 +71,3 @@ handle_xdg_activation_request(struct wl_listener *listener, void *data)
|
|||
wwarning("wl_backend: xdg_activation request for unknown surface (ignored)");
|
||||
}
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@
|
|||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* XKB */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
WKeyCode
|
||||
wl_keysym_to_keycode(unsigned long keysym)
|
||||
|
|
@ -52,7 +51,6 @@ wl_keysym_to_keycode(unsigned long keysym)
|
|||
unsigned long
|
||||
wl_keysym_from_keycode(unsigned int keycode, unsigned int index)
|
||||
{
|
||||
/* Phase 77: reverse lookup — return the keysym at the given keycode/level. */
|
||||
struct xkb_keymap *km = wl_state.xkb_keymap;
|
||||
if (wl_state.keyboard_dev) {
|
||||
struct wlr_keyboard *kb = wlr_keyboard_from_input_device(wl_state.keyboard_dev);
|
||||
|
|
|
|||
|
|
@ -26,9 +26,6 @@ void wl_pointer_warp_to(int x, int y);
|
|||
#define VIEW_FROM_LISTENER(ptr, field) \
|
||||
((struct wl_toplevel_view *)((char *)(ptr) - offsetof(struct wl_toplevel_view, field)))
|
||||
|
||||
/* ------------------------------------------------------------------ */
|
||||
/* Phase 17: XWayland surface lifecycle */
|
||||
/* ------------------------------------------------------------------ */
|
||||
|
||||
/* --- Override-redirect (unmanaged) XWayland surface handlers --- */
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue