Protocols
wl_compositor,wl_seat,wl_shm,wl_outputzwlr_layer_shell_v1: panels and overlaysext_workspace_manager_v1: workspace trackingzwlr_foreign_toplevel_manager_v1: active window trackingzwp_text_input_v3: IME for CJK inputext_session_lock_v1: lockscreenwl_data_device: clipboard and drag-and-dropwp_viewporter: HiDPI buffer scaling
Key modules
Connection: event loop and dispatchKeyboard: xkbcommon wrapper with key repeatTextInput: IME integration (checkisComposing()before handling keys)Clipboard: paste and drag-and-dropDamageTracker: dirty rect accumulation with overflow fallback to full redrawcapture:ext_image_copy_capture_v1output and toplevel capture helperscapture_overlay: dimmed frozen-capture backdrop for interactive toolsselection_overlay: shared region selector forotter-screenshot,otter-shot, andotter-rec
Region selection overlay
Drag-to-select for screenshots, product shots, and recordings. It composites pixels directly to SHM buffers with incremental damage. Surface Description is not used here. Each app passes a preset (namespace, pool names, visual mode):| Preset | Used by | Visual mode |
|---|---|---|
selection_overlay.preset.screenshot | otter-screenshot | Frozen capture at full brightness; border-only selection chrome |
selection_overlay.preset.shot | otter-shot | Frozen capture dimmed outside the selection |
selection_overlay.preset.rec | otter-rec | Same as shot |

