From 9b510950c0c69b9d19f6a31ee0916c122d9e6a4b Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Sun, 27 Sep 2026 21:05:44 -0400 Subject: [PATCH 1/7] wlr: retarget cgo to wlroots-0.20 Pin pkg-config to wlroots-0.20 and drop the removed matrix helpers. --- wlr.go | 41 +---------------------------------------- 1 file changed, 1 insertion(+), 40 deletions(-) diff --git a/wlr.go b/wlr.go index 702e3eb..3910ace 100644 --- a/wlr.go +++ b/wlr.go @@ -1,7 +1,7 @@ package wlr /* -#cgo pkg-config: wlroots wayland-server pixman-1 +#cgo pkg-config: wlroots-0.20 wayland-server pixman-1 #cgo CFLAGS: -D_GNU_SOURCE -DWLR_USE_UNSTABLE #include @@ -12,7 +12,6 @@ package wlr #include #include #include -#include #include #include */ @@ -36,44 +35,6 @@ const ( EdgeRight Edges = C.WLR_EDGE_RIGHT ) -type Matrix [9]float32 - -func matrixFromC(cm *[9]C.float) *Matrix { - var m Matrix - copyMatrix((*[9]float32)(&m), cm) - return &m -} - -type number interface { - ~float32 | ~float64 | - ~int | ~int8 | ~int16 | ~int32 | ~int64 | - ~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 | ~uintptr -} - -func copyMatrix[Out, In number](out *[9]Out, in *[9]In) { - for i := range out { - out[i] = Out(in[i]) - } -} - -func ProjectBoxMatrix(box image.Rectangle, transform OutputTransform, rotation float32, projection *Matrix) *Matrix { - var cm [9]C.float - pm := projection.toC() - C.wlr_matrix_project_box( - &cm[0], - boxToC(box), - C.enum_wl_output_transform(transform), - C.float(rotation), - &pm[0], - ) - return matrixFromC(&cm) -} - -func (m *Matrix) toC() [9]C.float { - var cm [9]C.float - copyMatrix(&cm, (*[9]float32)(m)) - return cm -} type EventLoop struct { p *C.struct_wl_event_loop From 3e433953f3f4770ac727f8e92ce927a9fbbd3d3b Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Sun, 27 Sep 2026 21:05:44 -0400 Subject: [PATCH 2/7] wlr: replace attach-render with output state and render pass Delete AttachRender/Commit/Rollback and renderer Begin/End/Clear/matrix draw helpers. Add OutputState, CommitState/TestState, BeginRenderPass, and RenderPass.AddTexture/AddRect. CreateGlobal now takes a Display; CreateOutputLayout takes a Display; software cursors go through the render pass. --- output.go | 127 +++++++++++++++++++++++++++++++++----------------- renderer.go | 31 ------------ renderpass.go | 75 +++++++++++++++++++++++++++++ 3 files changed, 159 insertions(+), 74 deletions(-) create mode 100644 renderpass.go diff --git a/output.go b/output.go index b77962c..d183533 100644 --- a/output.go +++ b/output.go @@ -1,10 +1,12 @@ package wlr /* +#include #include #include #include #include +#include */ import "C" @@ -33,35 +35,30 @@ func (o Output) Scale() float32 { return float32(o.p.scale) } -func (o Output) SetScale(scale float32) { - C.wlr_output_set_scale(o.p, C.float(scale)) -} - func (o Output) Transform() OutputTransform { return OutputTransform(o.p.transform) } -func (o Output) SetTransform(transform OutputTransform) { - C.wlr_output_set_transform(o.p, C.enum_wl_output_transform(transform)) -} - -func (o Output) TransformMatrix() *Matrix { - return matrixFromC(&o.p.transform_matrix) -} - func (o Output) OnFrame(cb func(Output)) Listener { return newListener(&o.p.events.frame, func(lis Listener, data unsafe.Pointer) { cb(o) }) } -func (o Output) RenderSoftwareCursors(damage image.Rectangle) { +func (o Output) OnRequestState(cb func(Output, OutputState)) Listener { + return newListener(&o.p.events.request_state, func(lis Listener, data unsafe.Pointer) { + event := (*C.struct_wlr_output_event_request_state)(data) + cb(o, OutputState{p: event.state}) + }) +} + +func (o Output) AddSoftwareCursorsToRenderPass(pass RenderPass, damage image.Rectangle) { var cd *C.pixman_region32_t if damage != (image.Rectangle{}) { t := rectToC(damage) cd = &t } - C.wlr_output_render_software_cursors(o.p, cd) + C.wlr_output_add_software_cursors_to_render_pass(o.p, pass.p, cd) } func (o Output) TransformedResolution() (int, int) { @@ -76,33 +73,36 @@ func (o Output) EffectiveResolution() (int, int) { return int(width), int(height) } -func (o Output) InitRender(a Allocator, r Renderer) { - C.wlr_output_init_render(o.p, a.p, r.p) +func (o Output) InitRender(a Allocator, r Renderer) bool { + return bool(C.wlr_output_init_render(o.p, a.p, r.p)) } -func (o Output) AttachRender() (int, error) { - var bufferAge C.int - if !C.wlr_output_attach_render(o.p, &bufferAge) { - return 0, errors.New("can't make output context current") +func (o Output) BeginRenderPass(state OutputState) (RenderPass, error) { + pass := C.wlr_output_begin_render_pass(o.p, state.p, nil) + if pass == nil { + return RenderPass{}, errors.New("can't begin render pass") } + return RenderPass{p: pass}, nil +} - return int(bufferAge), nil +func (o Output) CreateGlobal(display Display) { + C.wlr_output_create_global(o.p, display.p) } -func (o Output) Rollback() { - C.wlr_output_rollback(o.p) +func (o Output) DestroyGlobal() { + C.wlr_output_destroy_global(o.p) } -func (o Output) CreateGlobal() { - C.wlr_output_create_global(o.p) +func (o Output) TestState(state OutputState) bool { + return bool(C.wlr_output_test_state(o.p, state.p)) } -func (o Output) DestroyGlobal() { - C.wlr_output_destroy_global(o.p) +func (o Output) CommitState(state OutputState) bool { + return bool(C.wlr_output_commit_state(o.p, state.p)) } -func (o Output) Commit() { - C.wlr_output_commit(o.p) +func (o Output) ScheduleFrame() { + C.wlr_output_schedule_frame(o.p) } func (o Output) Modes() iter.Seq[OutputMode] { @@ -117,14 +117,6 @@ func (o Output) Modes() iter.Seq[OutputMode] { } } -func (o Output) SetMode(mode OutputMode) { - C.wlr_output_set_mode(o.p, mode.p) -} - -func (o Output) Enable(enable bool) { - C.wlr_output_enable(o.p, C.bool(enable)) -} - func (o Output) SetTitle(title string) error { if C.wlr_output_is_wl(o.p) { C.wlr_wl_output_set_title(o.p, C.CString(title)) @@ -150,12 +142,55 @@ func (o Output) Height() int { return int(o.p.height) } +func (o Output) Enabled() bool { + return bool(o.p.enabled) +} + +type OutputState struct { + p *C.struct_wlr_output_state +} + +// NewOutputState allocates and initializes an output state on the Go heap. +// Call Finish when done. +func NewOutputState() OutputState { + state := OutputState{p: &C.struct_wlr_output_state{}} + C.wlr_output_state_init(state.p) + return state +} + +func (s OutputState) Valid() bool { + return s.p != nil +} + +func (s OutputState) Finish() { + if s.p == nil { + return + } + C.wlr_output_state_finish(s.p) +} + +func (s OutputState) SetEnabled(enabled bool) { + C.wlr_output_state_set_enabled(s.p, C.bool(enabled)) +} + +func (s OutputState) SetMode(mode OutputMode) { + C.wlr_output_state_set_mode(s.p, mode.p) +} + +func (s OutputState) SetScale(scale float32) { + C.wlr_output_state_set_scale(s.p, C.float(scale)) +} + +func (s OutputState) SetTransform(transform OutputTransform) { + C.wlr_output_state_set_transform(s.p, C.enum_wl_output_transform(transform)) +} + type OutputLayout struct { p *C.struct_wlr_output_layout } -func CreateOutputLayout() OutputLayout { - p := C.wlr_output_layout_create() +func CreateOutputLayout(display Display) OutputLayout { + p := C.wlr_output_layout_create(display.p) return OutputLayout{p: p} } @@ -163,12 +198,14 @@ func (l OutputLayout) Destroy() { C.wlr_output_layout_destroy(l.p) } -func (l OutputLayout) AddAuto(output Output) { - C.wlr_output_layout_add_auto(l.p, output.p) +func (l OutputLayout) AddAuto(output Output) OutputLayoutOutput { + p := C.wlr_output_layout_add_auto(l.p, output.p) + return OutputLayoutOutput{p: p} } -func (l OutputLayout) Add(output Output, lx, ly int) { - C.wlr_output_layout_add(l.p, output.p, C.int(lx), C.int(ly)) +func (l OutputLayout) Add(output Output, lx, ly int) OutputLayoutOutput { + p := C.wlr_output_layout_add(l.p, output.p, C.int(lx), C.int(ly)) + return OutputLayoutOutput{p: p} } func (l OutputLayout) OutputCoords(output Output) (x float64, y float64) { @@ -191,6 +228,10 @@ type OutputLayoutOutput struct { p *C.struct_wlr_output_layout_output } +func (o OutputLayoutOutput) Valid() bool { + return o.p != nil +} + func (o OutputLayoutOutput) X() int { return int(o.p.x) } diff --git a/renderer.go b/renderer.go index 51a37a1..329b148 100644 --- a/renderer.go +++ b/renderer.go @@ -6,8 +6,6 @@ package wlr import "C" import ( - "image" - "image/color" "unsafe" ) @@ -37,32 +35,3 @@ func (r Renderer) InitWLDisplay(display Display) { func (r Renderer) InitWLSHM(display Display) { C.wlr_renderer_init_wl_shm(r.p, display.p) } - -func (r Renderer) Begin(output Output, width int, height int) { - C.wlr_renderer_begin(r.p, C.uint(width), C.uint(height)) -} - -func (r Renderer) Clear(c color.Color) { - cc := colorToC(c) - C.wlr_renderer_clear(r.p, &cc[0]) -} - -func (r Renderer) End() { - C.wlr_renderer_end(r.p) -} - -func (r Renderer) RenderTextureWithMatrix(texture Texture, matrix *Matrix, alpha float32) { - m := matrix.toC() - C.wlr_render_texture_with_matrix(r.p, texture.p, &m[0], C.float(alpha)) -} - -func (r *Renderer) RenderRect(box image.Rectangle, c color.Color, projection *Matrix) { - cc := colorToC(c) - pm := projection.toC() - C.wlr_render_rect( - r.p, - boxToC(box), - &cc[0], - &pm[0], - ) -} diff --git a/renderpass.go b/renderpass.go new file mode 100644 index 0000000..864ed8a --- /dev/null +++ b/renderpass.go @@ -0,0 +1,75 @@ +package wlr + +/* +#include +*/ +import "C" + +import ( + "image" + "image/color" +) + +type BlendMode uint32 + +const ( + BlendModePremultiplied BlendMode = C.WLR_RENDER_BLEND_MODE_PREMULTIPLIED + BlendModeNone BlendMode = C.WLR_RENDER_BLEND_MODE_NONE +) + +type FilterMode uint32 + +const ( + FilterBilinear FilterMode = C.WLR_SCALE_FILTER_BILINEAR + FilterNearest FilterMode = C.WLR_SCALE_FILTER_NEAREST +) + +type RenderPass struct { + p *C.struct_wlr_render_pass +} + +func (r RenderPass) Valid() bool { + return r.p != nil +} + +func (r RenderPass) Submit() bool { + return bool(C.wlr_render_pass_submit(r.p)) +} + +func (r RenderPass) AddTexture(texture Texture, srcBox image.Rectangle, dstBox image.Rectangle, alpha float32, transform OutputTransform, filterMode FilterMode, blendMode BlendMode) { + var alphaC C.float = C.float(alpha) + var options C.struct_wlr_render_texture_options + options.texture = texture.p + if srcBox != (image.Rectangle{}) { + options.src_box = fboxFromRect(srcBox) + } + if dst := boxToC(dstBox); dst != nil { + options.dst_box = *dst + } + options.alpha = &alphaC + options.transform = C.enum_wl_output_transform(transform) + options.filter_mode = C.enum_wlr_scale_filter_mode(filterMode) + options.blend_mode = C.enum_wlr_render_blend_mode(blendMode) + C.wlr_render_pass_add_texture(r.p, &options) +} + +func (r RenderPass) AddRect(box image.Rectangle, c color.Color, blendMode BlendMode) { + cc := colorToC(c) + var options C.struct_wlr_render_rect_options + if b := boxToC(box); b != nil { + options.box = *b + } + options.color = C.struct_wlr_render_color{r: cc[0], g: cc[1], b: cc[2], a: cc[3]} + options.blend_mode = C.enum_wlr_render_blend_mode(blendMode) + C.wlr_render_pass_add_rect(r.p, &options) +} + +func fboxFromRect(r image.Rectangle) C.struct_wlr_fbox { + r = r.Canon() + return C.struct_wlr_fbox{ + x: C.double(r.Min.X), + y: C.double(r.Min.Y), + width: C.double(r.Dx()), + height: C.double(r.Dy()), + } +} From dbba1e53021e4ed7a7fe298b77d980ef6f3a7017 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Sun, 27 Sep 2026 21:05:44 -0400 Subject: [PATCH 3/7] wlr: update backend, input, xdg, and xwayland for 0.20 AutocreateBackend takes an event loop. Fix input device enums and drop vendor/product. Axis/button notify use wl_pointer enums and relative direction. Prefer xdg new_toplevel/new_popup signals. Xwayland cursor uses wlr_buffer; maximized is horz/vert. --- backend.go | 4 ++-- cursor.go | 3 ++- input.go | 38 ++++++++++++++++++++++++-------------- seat.go | 18 +++++++++++++----- xdg.go | 18 +++++++++++++++--- xwayland.go | 12 +++++++++--- 6 files changed, 65 insertions(+), 28 deletions(-) diff --git a/backend.go b/backend.go index f15140c..632e932 100644 --- a/backend.go +++ b/backend.go @@ -17,8 +17,8 @@ type Backend struct { p *C.struct_wlr_backend } -func AutocreateBackend(display Display) Backend { - p := C.wlr_backend_autocreate(display.p, nil) +func AutocreateBackend(loop EventLoop) Backend { + p := C.wlr_backend_autocreate(loop.p, nil) return Backend{p: p} } diff --git a/cursor.go b/cursor.go index 162b208..41fce5f 100644 --- a/cursor.go +++ b/cursor.go @@ -87,7 +87,7 @@ func (c Cursor) OnButton(cb func(p Pointer, time time.Time, button CursorButton, }) } -func (c Cursor) OnAxis(cb func(p Pointer, time time.Time, source AxisSource, orientation AxisOrientation, delta float64, deltaDiscrete int32)) Listener { +func (c Cursor) OnAxis(cb func(p Pointer, time time.Time, source AxisSource, orientation AxisOrientation, delta float64, deltaDiscrete int32, relativeDirection AxisRelativeDirection)) Listener { return newListener(&c.p.events.axis, func(lis Listener, data unsafe.Pointer) { event := (*C.struct_wlr_pointer_axis_event)(data) dev := Pointer{p: event.pointer} @@ -98,6 +98,7 @@ func (c Cursor) OnAxis(cb func(p Pointer, time time.Time, source AxisSource, ori AxisOrientation(event.orientation), float64(event.delta), int32(event.delta_discrete), + AxisRelativeDirection(event.relative_direction), ) }) } diff --git a/input.go b/input.go index cf48d19..4130c5d 100644 --- a/input.go +++ b/input.go @@ -92,8 +92,12 @@ const ( InputDeviceTypeKeyboard InputDeviceType = C.WLR_INPUT_DEVICE_KEYBOARD InputDeviceTypePointer InputDeviceType = C.WLR_INPUT_DEVICE_POINTER InputDeviceTypeTouch InputDeviceType = C.WLR_INPUT_DEVICE_TOUCH - InputDeviceTypeTabletTool InputDeviceType = C.WLR_INPUT_DEVICE_TABLET_TOOL + InputDeviceTypeTablet InputDeviceType = C.WLR_INPUT_DEVICE_TABLET InputDeviceTypeTabletPad InputDeviceType = C.WLR_INPUT_DEVICE_TABLET_PAD + InputDeviceTypeSwitch InputDeviceType = C.WLR_INPUT_DEVICE_SWITCH + + // Deprecated: use InputDeviceTypeTablet. + InputDeviceTypeTabletTool = InputDeviceTypeTablet ) type ButtonState uint32 @@ -106,25 +110,33 @@ const ( type AxisSource uint32 const ( - AxisSourceWheel AxisSource = C.WLR_AXIS_SOURCE_WHEEL - AxisSourceFinger AxisSource = C.WLR_AXIS_SOURCE_FINGER - AxisSourceContinuous AxisSource = C.WLR_AXIS_SOURCE_CONTINUOUS - AxisSourceWheelTilt AxisSource = C.WLR_AXIS_SOURCE_WHEEL_TILT + AxisSourceWheel AxisSource = C.WL_POINTER_AXIS_SOURCE_WHEEL + AxisSourceFinger AxisSource = C.WL_POINTER_AXIS_SOURCE_FINGER + AxisSourceContinuous AxisSource = C.WL_POINTER_AXIS_SOURCE_CONTINUOUS + AxisSourceWheelTilt AxisSource = C.WL_POINTER_AXIS_SOURCE_WHEEL_TILT ) type AxisOrientation uint32 const ( - AxisOrientationVertical AxisOrientation = C.WLR_AXIS_ORIENTATION_VERTICAL - AxisOrientationHorizontal AxisOrientation = C.WLR_AXIS_ORIENTATION_HORIZONTAL + AxisOrientationVertical AxisOrientation = C.WL_POINTER_AXIS_VERTICAL_SCROLL + AxisOrientationHorizontal AxisOrientation = C.WL_POINTER_AXIS_HORIZONTAL_SCROLL +) + +type AxisRelativeDirection uint32 + +const ( + AxisRelativeDirectionIdentical AxisRelativeDirection = C.WL_POINTER_AXIS_RELATIVE_DIRECTION_IDENTICAL + AxisRelativeDirectionInverted AxisRelativeDirection = C.WL_POINTER_AXIS_RELATIVE_DIRECTION_INVERTED ) var inputDeviceNames = []string{ - InputDeviceTypeKeyboard: "keyboard", - InputDeviceTypePointer: "pointer", - InputDeviceTypeTouch: "touch", - InputDeviceTypeTabletTool: "tablet tool", - InputDeviceTypeTabletPad: "tablet pad", + InputDeviceTypeKeyboard: "keyboard", + InputDeviceTypePointer: "pointer", + InputDeviceTypeTouch: "touch", + InputDeviceTypeTablet: "tablet", + InputDeviceTypeTabletPad: "tablet pad", + InputDeviceTypeSwitch: "switch", } type InputDevice struct { @@ -138,8 +150,6 @@ func (d InputDevice) OnDestroy(cb func(InputDevice)) Listener { } func (d InputDevice) Type() InputDeviceType { return InputDeviceType(d.p._type) } -func (d InputDevice) Vendor() int { return int(d.p.vendor) } -func (d InputDevice) Product() int { return int(d.p.product) } func (d InputDevice) Name() string { return C.GoString(d.p.name) } func (d InputDevice) Keyboard() Keyboard { diff --git a/seat.go b/seat.go index 2239e47..a802f12 100644 --- a/seat.go +++ b/seat.go @@ -79,11 +79,19 @@ func (s Seat) GetKeyboard() Keyboard { } func (s Seat) PointerNotifyButton(time time.Time, button CursorButton, state ButtonState) { - C.wlr_seat_pointer_notify_button(s.p, C.uint32_t(time.UnixMilli()), C.uint32_t(button), uint32(state)) -} - -func (s Seat) PointerNotifyAxis(time time.Time, orientation AxisOrientation, delta float64, deltaDiscrete int32, source AxisSource) { - C.wlr_seat_pointer_notify_axis(s.p, C.uint32_t(time.UnixMilli()), C.enum_wlr_axis_orientation(orientation), C.double(delta), C.int32_t(deltaDiscrete), C.enum_wlr_axis_source(source)) + C.wlr_seat_pointer_notify_button(s.p, C.uint32_t(time.UnixMilli()), C.uint32_t(button), C.enum_wl_pointer_button_state(state)) +} + +func (s Seat) PointerNotifyAxis(time time.Time, orientation AxisOrientation, delta float64, deltaDiscrete int32, source AxisSource, relativeDirection AxisRelativeDirection) { + C.wlr_seat_pointer_notify_axis( + s.p, + C.uint32_t(time.UnixMilli()), + C.enum_wl_pointer_axis(orientation), + C.double(delta), + C.int32_t(deltaDiscrete), + C.enum_wl_pointer_axis_source(source), + C.enum_wl_pointer_axis_relative_direction(relativeDirection), + ) } func (s Seat) PointerNotifyEnter(surface Surface, sx float64, sy float64) { diff --git a/xdg.go b/xdg.go index 5a8acac..f4af2f2 100644 --- a/xdg.go +++ b/xdg.go @@ -72,6 +72,20 @@ func (s XDGShell) OnNewSurface(cb func(XDGSurface)) Listener { }) } +// OnNewToplevel is emitted when an xdg_toplevel role is assigned. +// Prefer this over OnNewSurface for managing toplevel windows. +func (s XDGShell) OnNewToplevel(cb func(XDGToplevel)) Listener { + return newListener(&s.p.events.new_toplevel, func(lis Listener, data unsafe.Pointer) { + cb(XDGToplevel{p: (*C.struct_wlr_xdg_toplevel)(data)}) + }) +} + +func (s XDGShell) OnNewPopup(cb func(XDGPopup)) Listener { + return newListener(&s.p.events.new_popup, func(lis Listener, data unsafe.Pointer) { + cb(XDGPopup{p: (*C.struct_wlr_xdg_popup)(data)}) + }) +} + type XDGSurface struct { p *C.struct_wlr_xdg_surface } @@ -186,9 +200,7 @@ func (s XDGSurface) OnNewPopup(cb func(XDGSurface, XDGPopup)) Listener { } func (s XDGSurface) GetGeometry() image.Rectangle { - var cb C.struct_wlr_box - C.wlr_xdg_surface_get_geometry(s.p, &cb) - return boxFromC(&cb) + return boxFromC(&s.p.geometry) } type XDGPopup struct { diff --git a/xwayland.go b/xwayland.go index 4557276..5aa39d3 100644 --- a/xwayland.go +++ b/xwayland.go @@ -1,6 +1,7 @@ package wlr /* +#include #include */ import "C" @@ -43,7 +44,12 @@ func (x Xwayland) OnNewSurface(cb func(XwaylandSurface)) Listener { } func (x Xwayland) SetCursor(img XCursorImage) { - C.wlr_xwayland_set_cursor(x.p, img.p.buffer, img.p.width*4, img.p.width, img.p.height, C.int32_t(img.p.hotspot_x), C.int32_t(img.p.hotspot_y)) + buf := C.wlr_xcursor_image_get_buffer(img.p) + C.wlr_xwayland_set_cursor(x.p, buf, C.int32_t(img.p.hotspot_x), C.int32_t(img.p.hotspot_y)) +} + +func (x Xwayland) DisplayName() string { + return C.GoString(x.p.display_name) } type XwaylandSurface struct { @@ -86,8 +92,8 @@ func (s XwaylandSurface) SetMinimized(minimized bool) { C.wlr_xwayland_surface_set_minimized(s.p, C.bool(minimized)) } -func (s XwaylandSurface) SetMaximized(maximized bool) { - C.wlr_xwayland_surface_set_maximized(s.p, C.bool(maximized)) +func (s XwaylandSurface) SetMaximized(maximizedHorz, maximizedVert bool) { + C.wlr_xwayland_surface_set_maximized(s.p, C.bool(maximizedHorz), C.bool(maximizedVert)) } func (s XwaylandSurface) Configure(x int16, y int16, width uint16, height uint16) { From c4842dc2bf6b05b3443d5ca226c7dcfb5cf17633 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Sun, 27 Sep 2026 21:05:44 -0400 Subject: [PATCH 4/7] xkb: regenerate keysyms Regenerate against current xkbcommon-keysyms.h so the package builds with libxkbcommon 1.8+. --- xkb/syms.go | 67 ++++++----------------------------------------------- 1 file changed, 7 insertions(+), 60 deletions(-) diff --git a/xkb/syms.go b/xkb/syms.go index 226975a..95ed213 100644 --- a/xkb/syms.go +++ b/xkb/syms.go @@ -2194,7 +2194,6 @@ const ( KeySymXF86ApplicationRight KeySym = C.XKB_KEY_XF86ApplicationRight /* switch to application, right*/ KeySymXF86Book KeySym = C.XKB_KEY_XF86Book /* Launch bookreader */ KeySymXF86CD KeySym = C.XKB_KEY_XF86CD /* Launch CD/DVD player */ - KeySymXF86MediaSelectCD KeySym = C.XKB_KEY_XF86MediaSelectCD /* Alias for XF86CD */ KeySymXF86Calculater KeySym = C.XKB_KEY_XF86Calculater /* Launch Calculater */ KeySymXF86Clear KeySym = C.XKB_KEY_XF86Clear /* Clear window, screen */ KeySymXF86Close KeySym = C.XKB_KEY_XF86Close /* Close window */ @@ -2304,43 +2303,15 @@ const ( KeySymXF86Prev_VMode KeySym = C.XKB_KEY_XF86Prev_VMode /* prev. video mode available */ KeySymXF86LogWindowTree KeySym = C.XKB_KEY_XF86LogWindowTree /* print window tree to log */ KeySymXF86LogGrabInfo KeySym = C.XKB_KEY_XF86LogGrabInfo /* print all active grabs to log */ - KeySymXF86MediaPlayPause KeySym = C.XKB_KEY_XF86MediaPlayPause /* KEY_PLAYPAUSE */ - KeySymXF86Exit KeySym = C.XKB_KEY_XF86Exit /* KEY_EXIT */ - KeySymXF86AudioBassBoost KeySym = C.XKB_KEY_XF86AudioBassBoost /* KEY_BASSBOOST */ - KeySymXF86Sport KeySym = C.XKB_KEY_XF86Sport /* KEY_SPORT */ - KeySymXF86BrightnessAuto KeySym = C.XKB_KEY_XF86BrightnessAuto /* Deprecated alias for XF86MonBrightnessAuto */ - KeySymXF86MonBrightnessAuto KeySym = C.XKB_KEY_XF86MonBrightnessAuto /* v3.16 KEY_BRIGHTNESS_AUTO */ + KeySymXF86BrightnessAuto KeySym = C.XKB_KEY_XF86BrightnessAuto /* v3.16 KEY_BRIGHTNESS_AUTO */ KeySymXF86DisplayOff KeySym = C.XKB_KEY_XF86DisplayOff /* v2.6.23 KEY_DISPLAY_OFF */ - KeySymXF86OK KeySym = C.XKB_KEY_XF86OK /* v2.5.26 KEY_OK */ - KeySymXF86GoTo KeySym = C.XKB_KEY_XF86GoTo /* v2.5.26 KEY_GOTO */ - KeySymXF86Info KeySym = C.XKB_KEY_XF86Info /* v2.5.26 KEY_INFO */ - KeySymXF86VendorLogo KeySym = C.XKB_KEY_XF86VendorLogo /* v2.5.26 KEY_VENDOR */ - KeySymXF86MediaSelectProgramGuide KeySym = C.XKB_KEY_XF86MediaSelectProgramGuide /* v2.5.26 KEY_PROGRAM */ - KeySymXF86MediaSelectHome KeySym = C.XKB_KEY_XF86MediaSelectHome /* v2.5.26 KEY_PVR */ - KeySymXF86MediaLanguageMenu KeySym = C.XKB_KEY_XF86MediaLanguageMenu /* v2.5.26 KEY_LANGUAGE */ - KeySymXF86MediaTitleMenu KeySym = C.XKB_KEY_XF86MediaTitleMenu /* v2.5.26 KEY_TITLE */ - KeySymXF86AudioChannelMode KeySym = C.XKB_KEY_XF86AudioChannelMode /* v2.5.26 KEY_MODE */ + KeySymXF86Info KeySym = C.XKB_KEY_XF86Info /* KEY_INFO */ KeySymXF86AspectRatio KeySym = C.XKB_KEY_XF86AspectRatio /* v5.1 KEY_ASPECT_RATIO */ - KeySymXF86MediaSelectPC KeySym = C.XKB_KEY_XF86MediaSelectPC /* v2.5.26 KEY_PC */ - KeySymXF86MediaSelectTV KeySym = C.XKB_KEY_XF86MediaSelectTV /* v2.5.26 KEY_TV */ - KeySymXF86MediaSelectCable KeySym = C.XKB_KEY_XF86MediaSelectCable /* v2.5.26 KEY_TV2 */ - KeySymXF86MediaSelectVCR KeySym = C.XKB_KEY_XF86MediaSelectVCR /* v2.5.26 KEY_VCR */ - KeySymXF86MediaSelectVCRPlus KeySym = C.XKB_KEY_XF86MediaSelectVCRPlus /* v2.5.26 KEY_VCR2 */ - KeySymXF86MediaSelectSatellite KeySym = C.XKB_KEY_XF86MediaSelectSatellite /* v2.5.26 KEY_SAT */ - KeySymXF86MediaSelectTape KeySym = C.XKB_KEY_XF86MediaSelectTape /* v2.5.26 KEY_TAPE */ - KeySymXF86MediaSelectRadio KeySym = C.XKB_KEY_XF86MediaSelectRadio /* v2.5.26 KEY_RADIO */ - KeySymXF86MediaSelectTuner KeySym = C.XKB_KEY_XF86MediaSelectTuner /* v2.5.26 KEY_TUNER */ - KeySymXF86MediaPlayer KeySym = C.XKB_KEY_XF86MediaPlayer /* v2.5.26 KEY_PLAYER */ - KeySymXF86MediaSelectTeletext KeySym = C.XKB_KEY_XF86MediaSelectTeletext /* v2.5.26 KEY_TEXT */ - KeySymXF86DVD KeySym = C.XKB_KEY_XF86DVD /* v2.5.26 KEY_DVD */ - KeySymXF86MediaSelectDVD KeySym = C.XKB_KEY_XF86MediaSelectDVD /* Alias for XF86DVD */ - KeySymXF86MediaSelectAuxiliary KeySym = C.XKB_KEY_XF86MediaSelectAuxiliary /* v2.5.26 KEY_AUX */ - KeySymXF86Audio KeySym = C.XKB_KEY_XF86Audio /* v2.5.26 KEY_AUDIO */ - KeySymXF86ChannelUp KeySym = C.XKB_KEY_XF86ChannelUp /* v2.5.26 KEY_CHANNELUP */ - KeySymXF86ChannelDown KeySym = C.XKB_KEY_XF86ChannelDown /* v2.5.26 KEY_CHANNELDOWN */ - KeySymXF86MediaPlaySlow KeySym = C.XKB_KEY_XF86MediaPlaySlow /* v2.5.26 KEY_SLOW */ - KeySymXF86Break KeySym = C.XKB_KEY_XF86Break /* v2.5.26 KEY_BREAK */ - KeySymXF86NumberEntryMode KeySym = C.XKB_KEY_XF86NumberEntryMode /* v2.5.26 KEY_DIGITS */ + KeySymXF86DVD KeySym = C.XKB_KEY_XF86DVD /* KEY_DVD */ + KeySymXF86Audio KeySym = C.XKB_KEY_XF86Audio /* KEY_AUDIO */ + KeySymXF86ChannelUp KeySym = C.XKB_KEY_XF86ChannelUp /* KEY_CHANNELUP */ + KeySymXF86ChannelDown KeySym = C.XKB_KEY_XF86ChannelDown /* KEY_CHANNELDOWN */ + KeySymXF86Break KeySym = C.XKB_KEY_XF86Break /* KEY_BREAK */ KeySymXF86VideoPhone KeySym = C.XKB_KEY_XF86VideoPhone /* v2.6.20 KEY_VIDEOPHONE */ KeySymXF86ZoomReset KeySym = C.XKB_KEY_XF86ZoomReset /* v2.6.20 KEY_ZOOMRESET */ KeySymXF86Editor KeySym = C.XKB_KEY_XF86Editor /* v2.6.20 KEY_EDITOR */ @@ -2359,28 +2330,8 @@ const ( KeySymXF86NotificationCenter KeySym = C.XKB_KEY_XF86NotificationCenter /* v5.10 KEY_NOTIFICATION_CENTER */ KeySymXF86PickupPhone KeySym = C.XKB_KEY_XF86PickupPhone /* v5.10 KEY_PICKUP_PHONE */ KeySymXF86HangupPhone KeySym = C.XKB_KEY_XF86HangupPhone /* v5.10 KEY_HANGUP_PHONE */ - KeySymXF86LinkPhone KeySym = C.XKB_KEY_XF86LinkPhone /* v6.14 KEY_LINK_PHONE */ KeySymXF86Fn KeySym = C.XKB_KEY_XF86Fn /* KEY_FN */ KeySymXF86Fn_Esc KeySym = C.XKB_KEY_XF86Fn_Esc /* KEY_FN_ESC */ - KeySymXF86Fn_F1 KeySym = C.XKB_KEY_XF86Fn_F1 /* KEY_FN_F1 */ - KeySymXF86Fn_F2 KeySym = C.XKB_KEY_XF86Fn_F2 /* KEY_FN_F2 */ - KeySymXF86Fn_F3 KeySym = C.XKB_KEY_XF86Fn_F3 /* KEY_FN_F3 */ - KeySymXF86Fn_F4 KeySym = C.XKB_KEY_XF86Fn_F4 /* KEY_FN_F4 */ - KeySymXF86Fn_F5 KeySym = C.XKB_KEY_XF86Fn_F5 /* KEY_FN_F5 */ - KeySymXF86Fn_F6 KeySym = C.XKB_KEY_XF86Fn_F6 /* KEY_FN_F6 */ - KeySymXF86Fn_F7 KeySym = C.XKB_KEY_XF86Fn_F7 /* KEY_FN_F7 */ - KeySymXF86Fn_F8 KeySym = C.XKB_KEY_XF86Fn_F8 /* KEY_FN_F8 */ - KeySymXF86Fn_F9 KeySym = C.XKB_KEY_XF86Fn_F9 /* KEY_FN_F9 */ - KeySymXF86Fn_F10 KeySym = C.XKB_KEY_XF86Fn_F10 /* KEY_FN_F10 */ - KeySymXF86Fn_F11 KeySym = C.XKB_KEY_XF86Fn_F11 /* KEY_FN_F11 */ - KeySymXF86Fn_F12 KeySym = C.XKB_KEY_XF86Fn_F12 /* KEY_FN_F12 */ - KeySymXF86Fn_1 KeySym = C.XKB_KEY_XF86Fn_1 /* KEY_FN_1 */ - KeySymXF86Fn_2 KeySym = C.XKB_KEY_XF86Fn_2 /* KEY_FN_2 */ - KeySymXF86Fn_D KeySym = C.XKB_KEY_XF86Fn_D /* KEY_FN_D */ - KeySymXF86Fn_E KeySym = C.XKB_KEY_XF86Fn_E /* KEY_FN_E */ - KeySymXF86Fn_F KeySym = C.XKB_KEY_XF86Fn_F /* KEY_FN_F */ - KeySymXF86Fn_S KeySym = C.XKB_KEY_XF86Fn_S /* KEY_FN_S */ - KeySymXF86Fn_B KeySym = C.XKB_KEY_XF86Fn_B /* KEY_FN_B */ KeySymXF86FnRightShift KeySym = C.XKB_KEY_XF86FnRightShift /* v5.10 KEY_FN_RIGHT_SHIFT */ KeySymXF86Numeric0 KeySym = C.XKB_KEY_XF86Numeric0 /* v2.6.28 KEY_NUMERIC_0 */ KeySymXF86Numeric1 KeySym = C.XKB_KEY_XF86Numeric1 /* v2.6.28 KEY_NUMERIC_1 */ @@ -2411,7 +2362,6 @@ const ( KeySymXF86AttendantToggle KeySym = C.XKB_KEY_XF86AttendantToggle /* v3.10 KEY_ATTENDANT_TOGGLE */ KeySymXF86LightsToggle KeySym = C.XKB_KEY_XF86LightsToggle /* v3.10 KEY_LIGHTS_TOGGLE */ KeySymXF86ALSToggle KeySym = C.XKB_KEY_XF86ALSToggle /* v3.13 KEY_ALS_TOGGLE */ - KeySymXF86RefreshRateToggle KeySym = C.XKB_KEY_XF86RefreshRateToggle /* v6.9 KEY_REFRESH_RATE_TOGGLE */ KeySymXF86Buttonconfig KeySym = C.XKB_KEY_XF86Buttonconfig /* v3.16 KEY_BUTTONCONFIG */ KeySymXF86Taskmanager KeySym = C.XKB_KEY_XF86Taskmanager /* v3.16 KEY_TASKMANAGER */ KeySymXF86Journal KeySym = C.XKB_KEY_XF86Journal /* v3.16 KEY_JOURNAL */ @@ -2425,8 +2375,6 @@ const ( KeySymXF86CameraAccessEnable KeySym = C.XKB_KEY_XF86CameraAccessEnable /* v6.2 KEY_CAMERA_ACCESS_ENABLE */ KeySymXF86CameraAccessDisable KeySym = C.XKB_KEY_XF86CameraAccessDisable /* v6.2 KEY_CAMERA_ACCESS_DISABLE */ KeySymXF86CameraAccessToggle KeySym = C.XKB_KEY_XF86CameraAccessToggle /* v6.2 KEY_CAMERA_ACCESS_TOGGLE */ - KeySymXF86Accessibility KeySym = C.XKB_KEY_XF86Accessibility /* v6.10 KEY_ACCESSIBILITY */ - KeySymXF86DoNotDisturb KeySym = C.XKB_KEY_XF86DoNotDisturb /* v6.10 KEY_DO_NOT_DISTURB */ KeySymXF86BrightnessMin KeySym = C.XKB_KEY_XF86BrightnessMin /* v3.16 KEY_BRIGHTNESS_MIN */ KeySymXF86BrightnessMax KeySym = C.XKB_KEY_XF86BrightnessMax /* v3.16 KEY_BRIGHTNESS_MAX */ KeySymXF86KbdInputAssistPrev KeySym = C.XKB_KEY_XF86KbdInputAssistPrev /* v3.18 KEY_KBDINPUTASSIST_PREV */ @@ -2511,7 +2459,6 @@ const ( KeySymXF86KbdLcdMenu3 KeySym = C.XKB_KEY_XF86KbdLcdMenu3 /* v5.5 KEY_KBD_LCD_MENU3 */ KeySymXF86KbdLcdMenu4 KeySym = C.XKB_KEY_XF86KbdLcdMenu4 /* v5.5 KEY_KBD_LCD_MENU4 */ KeySymXF86KbdLcdMenu5 KeySym = C.XKB_KEY_XF86KbdLcdMenu5 /* v5.5 KEY_KBD_LCD_MENU5 */ - KeySymXF86PerformanceMode KeySym = C.XKB_KEY_XF86PerformanceMode /* v6.17 KEY_PERFORMANCE */ KeySymSunFA_Grave KeySym = C.XKB_KEY_SunFA_Grave KeySymSunFA_Circum KeySym = C.XKB_KEY_SunFA_Circum KeySymSunFA_Tilde KeySym = C.XKB_KEY_SunFA_Tilde From 86cbe39daa6d96e808f80181c61d07335b72a051 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Sun, 27 Sep 2026 21:05:44 -0400 Subject: [PATCH 5/7] wlr: remove unused orphan protocol headers These local copies are unused; wlroots installs its own protocol headers for consumers. --- wlr-layer-shell-unstable-v1-protocol.h | 606 --------- xdg-shell-protocol.h | 1641 ------------------------ 2 files changed, 2247 deletions(-) delete mode 100644 wlr-layer-shell-unstable-v1-protocol.h delete mode 100644 xdg-shell-protocol.h diff --git a/wlr-layer-shell-unstable-v1-protocol.h b/wlr-layer-shell-unstable-v1-protocol.h deleted file mode 100644 index 0277e39..0000000 --- a/wlr-layer-shell-unstable-v1-protocol.h +++ /dev/null @@ -1,606 +0,0 @@ -/* Generated by wayland-scanner 1.20.0 */ - -#ifndef WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H -#define WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_wlr_layer_shell_unstable_v1 The wlr_layer_shell_unstable_v1 protocol - * @section page_ifaces_wlr_layer_shell_unstable_v1 Interfaces - * - @subpage page_iface_zwlr_layer_shell_v1 - create surfaces that are layers of the desktop - * - @subpage page_iface_zwlr_layer_surface_v1 - layer metadata interface - * @section page_copyright_wlr_layer_shell_unstable_v1 Copyright - *
- *
- * Copyright © 2017 Drew DeVault
- *
- * Permission to use, copy, modify, distribute, and sell this
- * software and its documentation for any purpose is hereby granted
- * without fee, provided that the above copyright notice appear in
- * all copies and that both that copyright notice and this permission
- * notice appear in supporting documentation, and that the name of
- * the copyright holders not be used in advertising or publicity
- * pertaining to distribution of the software without specific,
- * written prior permission.  The copyright holders make no
- * representations about the suitability of this software for any
- * purpose.  It is provided "as is" without express or implied
- * warranty.
- *
- * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
- * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
- * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
- * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
- * THIS SOFTWARE.
- * 
- */ -struct wl_output; -struct wl_surface; -struct xdg_popup; -struct zwlr_layer_shell_v1; -struct zwlr_layer_surface_v1; - -#ifndef ZWLR_LAYER_SHELL_V1_INTERFACE -#define ZWLR_LAYER_SHELL_V1_INTERFACE -/** - * @page page_iface_zwlr_layer_shell_v1 zwlr_layer_shell_v1 - * @section page_iface_zwlr_layer_shell_v1_desc Description - * - * Clients can use this interface to assign the surface_layer role to - * wl_surfaces. Such surfaces are assigned to a "layer" of the output and - * rendered with a defined z-depth respective to each other. They may also be - * anchored to the edges and corners of a screen and specify input handling - * semantics. This interface should be suitable for the implementation of - * many desktop shell components, and a broad number of other applications - * that interact with the desktop. - * @section page_iface_zwlr_layer_shell_v1_api API - * See @ref iface_zwlr_layer_shell_v1. - */ -/** - * @defgroup iface_zwlr_layer_shell_v1 The zwlr_layer_shell_v1 interface - * - * Clients can use this interface to assign the surface_layer role to - * wl_surfaces. Such surfaces are assigned to a "layer" of the output and - * rendered with a defined z-depth respective to each other. They may also be - * anchored to the edges and corners of a screen and specify input handling - * semantics. This interface should be suitable for the implementation of - * many desktop shell components, and a broad number of other applications - * that interact with the desktop. - */ -extern const struct wl_interface zwlr_layer_shell_v1_interface; -#endif -#ifndef ZWLR_LAYER_SURFACE_V1_INTERFACE -#define ZWLR_LAYER_SURFACE_V1_INTERFACE -/** - * @page page_iface_zwlr_layer_surface_v1 zwlr_layer_surface_v1 - * @section page_iface_zwlr_layer_surface_v1_desc Description - * - * An interface that may be implemented by a wl_surface, for surfaces that - * are designed to be rendered as a layer of a stacked desktop-like - * environment. - * - * Layer surface state (layer, size, anchor, exclusive zone, - * margin, interactivity) is double-buffered, and will be applied at the - * time wl_surface.commit of the corresponding wl_surface is called. - * - * Attaching a null buffer to a layer surface unmaps it. - * - * Unmapping a layer_surface means that the surface cannot be shown by the - * compositor until it is explicitly mapped again. The layer_surface - * returns to the state it had right after layer_shell.get_layer_surface. - * The client can re-map the surface by performing a commit without any - * buffer attached, waiting for a configure event and handling it as usual. - * @section page_iface_zwlr_layer_surface_v1_api API - * See @ref iface_zwlr_layer_surface_v1. - */ -/** - * @defgroup iface_zwlr_layer_surface_v1 The zwlr_layer_surface_v1 interface - * - * An interface that may be implemented by a wl_surface, for surfaces that - * are designed to be rendered as a layer of a stacked desktop-like - * environment. - * - * Layer surface state (layer, size, anchor, exclusive zone, - * margin, interactivity) is double-buffered, and will be applied at the - * time wl_surface.commit of the corresponding wl_surface is called. - * - * Attaching a null buffer to a layer surface unmaps it. - * - * Unmapping a layer_surface means that the surface cannot be shown by the - * compositor until it is explicitly mapped again. The layer_surface - * returns to the state it had right after layer_shell.get_layer_surface. - * The client can re-map the surface by performing a commit without any - * buffer attached, waiting for a configure event and handling it as usual. - */ -extern const struct wl_interface zwlr_layer_surface_v1_interface; -#endif - -#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM -#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM -enum zwlr_layer_shell_v1_error { - /** - * wl_surface has another role - */ - ZWLR_LAYER_SHELL_V1_ERROR_ROLE = 0, - /** - * layer value is invalid - */ - ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER = 1, - /** - * wl_surface has a buffer attached or committed - */ - ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED = 2, -}; -#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM */ - -#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM -#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM -/** - * @ingroup iface_zwlr_layer_shell_v1 - * available layers for surfaces - * - * These values indicate which layers a surface can be rendered in. They - * are ordered by z depth, bottom-most first. Traditional shell surfaces - * will typically be rendered between the bottom and top layers. - * Fullscreen shell surfaces are typically rendered at the top layer. - * Multiple surfaces can share a single layer, and ordering within a - * single layer is undefined. - */ -enum zwlr_layer_shell_v1_layer { - ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND = 0, - ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM = 1, - ZWLR_LAYER_SHELL_V1_LAYER_TOP = 2, - ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY = 3, -}; -#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM */ - -/** - * @ingroup iface_zwlr_layer_shell_v1 - * @struct zwlr_layer_shell_v1_interface - */ -struct zwlr_layer_shell_v1_interface { - /** - * create a layer_surface from a surface - * - * Create a layer surface for an existing surface. This assigns - * the role of layer_surface, or raises a protocol error if another - * role is already assigned. - * - * Creating a layer surface from a wl_surface which has a buffer - * attached or committed is a client error, and any attempts by a - * client to attach or manipulate a buffer prior to the first - * layer_surface.configure call must also be treated as errors. - * - * After creating a layer_surface object and setting it up, the - * client must perform an initial commit without any buffer - * attached. The compositor will reply with a - * layer_surface.configure event. The client must acknowledge it - * and is then allowed to attach a buffer to map the surface. - * - * You may pass NULL for output to allow the compositor to decide - * which output to use. Generally this will be the one that the - * user most recently interacted with. - * - * Clients can specify a namespace that defines the purpose of the - * layer surface. - * @param layer layer to add this surface to - * @param namespace namespace for the layer surface - */ - void (*get_layer_surface)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface, - struct wl_resource *output, - uint32_t layer, - const char *namespace); - /** - * destroy the layer_shell object - * - * This request indicates that the client will not use the - * layer_shell object any more. Objects that have been created - * through this instance are not affected. - * @since 3 - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); -}; - - -/** - * @ingroup iface_zwlr_layer_shell_v1 - */ -#define ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_shell_v1 - */ -#define ZWLR_LAYER_SHELL_V1_DESTROY_SINCE_VERSION 3 - -#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM -#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM -/** - * @ingroup iface_zwlr_layer_surface_v1 - * types of keyboard interaction possible for a layer shell surface - * - * Types of keyboard interaction possible for layer shell surfaces. The - * rationale for this is twofold: (1) some applications are not interested - * in keyboard events and not allowing them to be focused can improve the - * desktop experience; (2) some applications will want to take exclusive - * keyboard focus. - */ -enum zwlr_layer_surface_v1_keyboard_interactivity { - /** - * no keyboard focus is possible - * - * This value indicates that this surface is not interested in - * keyboard events and the compositor should never assign it the - * keyboard focus. - * - * This is the default value, set for newly created layer shell - * surfaces. - * - * This is useful for e.g. desktop widgets that display information - * or only have interaction with non-keyboard input devices. - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE = 0, - /** - * request exclusive keyboard focus - * - * Request exclusive keyboard focus if this surface is above the - * shell surface layer. - * - * For the top and overlay layers, the seat will always give - * exclusive keyboard focus to the top-most layer which has - * keyboard interactivity set to exclusive. If this layer contains - * multiple surfaces with keyboard interactivity set to exclusive, - * the compositor determines the one receiving keyboard events in - * an implementation- defined manner. In this case, no guarantee is - * made when this surface will receive keyboard focus (if ever). - * - * For the bottom and background layers, the compositor is allowed - * to use normal focus semantics. - * - * This setting is mainly intended for applications that need to - * ensure they receive all keyboard events, such as a lock screen - * or a password prompt. - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE = 1, - /** - * request regular keyboard focus semantics - * - * This requests the compositor to allow this surface to be - * focused and unfocused by the user in an implementation-defined - * manner. The user should be able to unfocus this surface even - * regardless of the layer it is on. - * - * Typically, the compositor will want to use its normal mechanism - * to manage keyboard focus between layer shell surfaces with this - * setting and regular toplevels on the desktop layer (e.g. click - * to focus). Nevertheless, it is possible for a compositor to - * require a special interaction to focus or unfocus layer shell - * surfaces (e.g. requiring a click even if focus follows the mouse - * normally, or providing a keybinding to switch focus between - * layers). - * - * This setting is mainly intended for desktop shell components - * (e.g. panels) that allow keyboard interaction. Using this option - * can allow implementing a desktop shell that can be fully usable - * without the mouse. - * @since 4 - */ - ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND = 2, -}; -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND_SINCE_VERSION 4 -#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM -#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM -enum zwlr_layer_surface_v1_error { - /** - * provided surface state is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE = 0, - /** - * size is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE = 1, - /** - * anchor bitfield is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR = 2, - /** - * keyboard interactivity is invalid - */ - ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY = 3, -}; -#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM */ - -#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM -#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM -enum zwlr_layer_surface_v1_anchor { - /** - * the top edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP = 1, - /** - * the bottom edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM = 2, - /** - * the left edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT = 4, - /** - * the right edge of the anchor rectangle - */ - ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT = 8, -}; -#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM */ - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * @struct zwlr_layer_surface_v1_interface - */ -struct zwlr_layer_surface_v1_interface { - /** - * sets the size of the surface - * - * Sets the size of the surface in surface-local coordinates. The - * compositor will display the surface centered with respect to its - * anchors. - * - * If you pass 0 for either value, the compositor will assign it - * and inform you of the assignment in the configure event. You - * must set your anchor to opposite edges in the dimensions you - * omit; not doing so is a protocol error. Both values are 0 by - * default. - * - * Size is double-buffered, see wl_surface.commit. - */ - void (*set_size)(struct wl_client *client, - struct wl_resource *resource, - uint32_t width, - uint32_t height); - /** - * configures the anchor point of the surface - * - * Requests that the compositor anchor the surface to the - * specified edges and corners. If two orthogonal edges are - * specified (e.g. 'top' and 'left'), then the anchor point will be - * the intersection of the edges (e.g. the top left corner of the - * output); otherwise the anchor point will be centered on that - * edge, or in the center if none is specified. - * - * Anchor is double-buffered, see wl_surface.commit. - */ - void (*set_anchor)(struct wl_client *client, - struct wl_resource *resource, - uint32_t anchor); - /** - * configures the exclusive geometry of this surface - * - * Requests that the compositor avoids occluding an area with - * other surfaces. The compositor's use of this information is - * implementation-dependent - do not assume that this region will - * not actually be occluded. - * - * A positive value is only meaningful if the surface is anchored - * to one edge or an edge and both perpendicular edges. If the - * surface is not anchored, anchored to only two perpendicular - * edges (a corner), anchored to only two parallel edges or - * anchored to all edges, a positive value will be treated the same - * as zero. - * - * A positive zone is the distance from the edge in surface-local - * coordinates to consider exclusive. - * - * Surfaces that do not wish to have an exclusive zone may instead - * specify how they should interact with surfaces that do. If set - * to zero, the surface indicates that it would like to be moved to - * avoid occluding surfaces with a positive exclusive zone. If set - * to -1, the surface indicates that it would not like to be moved - * to accommodate for other surfaces, and the compositor should - * extend it all the way to the edges it is anchored to. - * - * For example, a panel might set its exclusive zone to 10, so that - * maximized shell surfaces are not shown on top of it. A - * notification might set its exclusive zone to 0, so that it is - * moved to avoid occluding the panel, but shell surfaces are shown - * underneath it. A wallpaper or lock screen might set their - * exclusive zone to -1, so that they stretch below or over the - * panel. - * - * The default value is 0. - * - * Exclusive zone is double-buffered, see wl_surface.commit. - */ - void (*set_exclusive_zone)(struct wl_client *client, - struct wl_resource *resource, - int32_t zone); - /** - * sets a margin from the anchor point - * - * Requests that the surface be placed some distance away from - * the anchor point on the output, in surface-local coordinates. - * Setting this value for edges you are not anchored to has no - * effect. - * - * The exclusive zone includes the margin. - * - * Margin is double-buffered, see wl_surface.commit. - */ - void (*set_margin)(struct wl_client *client, - struct wl_resource *resource, - int32_t top, - int32_t right, - int32_t bottom, - int32_t left); - /** - * requests keyboard events - * - * Set how keyboard events are delivered to this surface. By - * default, layer shell surfaces do not receive keyboard events; - * this request can be used to change this. - * - * This setting is inherited by child surfaces set by the get_popup - * request. - * - * Layer surfaces receive pointer, touch, and tablet events - * normally. If you do not want to receive them, set the input - * region on your surface to an empty region. - * - * Keyboard interactivity is double-buffered, see - * wl_surface.commit. - */ - void (*set_keyboard_interactivity)(struct wl_client *client, - struct wl_resource *resource, - uint32_t keyboard_interactivity); - /** - * assign this layer_surface as an xdg_popup parent - * - * This assigns an xdg_popup's parent to this layer_surface. This - * popup should have been created via xdg_surface::get_popup with - * the parent set to NULL, and this request must be invoked before - * committing the popup's initial state. - * - * See the documentation of xdg_popup for more details about what - * an xdg_popup is and how it is used. - */ - void (*get_popup)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *popup); - /** - * ack a configure event - * - * When a configure event is received, if a client commits the - * surface in response to the configure event, then the client must - * make an ack_configure request sometime before the commit - * request, passing along the serial of the configure event. - * - * If the client receives multiple configure events before it can - * respond to one, it only has to ack the last configure event. - * - * A client is not required to commit immediately after sending an - * ack_configure request - it may even ack_configure several times - * before its next surface commit. - * - * A client may send multiple ack_configure requests before - * committing, but only the last request sent before a commit - * indicates which configure event the client really is responding - * to. - * @param serial the serial from the configure event - */ - void (*ack_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); - /** - * destroy the layer_surface - * - * This request destroys the layer surface. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * change the layer of the surface - * - * Change the layer that the surface is rendered on. - * - * Layer is double-buffered, see wl_surface.commit. - * @param layer layer to move this surface to - * @since 2 - */ - void (*set_layer)(struct wl_client *client, - struct wl_resource *resource, - uint32_t layer); -}; - -#define ZWLR_LAYER_SURFACE_V1_CONFIGURE 0 -#define ZWLR_LAYER_SURFACE_V1_CLOSED 1 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_CLOSED_SINCE_VERSION 1 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_ANCHOR_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_MARGIN_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_GET_POPUP_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_zwlr_layer_surface_v1 - */ -#define ZWLR_LAYER_SURFACE_V1_SET_LAYER_SINCE_VERSION 2 - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwlr_layer_surface_v1_send_configure(struct wl_resource *resource_, uint32_t serial, uint32_t width, uint32_t height) -{ - wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CONFIGURE, serial, width, height); -} - -/** - * @ingroup iface_zwlr_layer_surface_v1 - * Sends an closed event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -zwlr_layer_surface_v1_send_closed(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CLOSED); -} - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/xdg-shell-protocol.h b/xdg-shell-protocol.h deleted file mode 100644 index 7c2f5de..0000000 --- a/xdg-shell-protocol.h +++ /dev/null @@ -1,1641 +0,0 @@ -/* Generated by wayland-scanner 1.18.0 */ - -#ifndef XDG_SHELL_SERVER_PROTOCOL_H -#define XDG_SHELL_SERVER_PROTOCOL_H - -#include -#include -#include "wayland-server.h" - -#ifdef __cplusplus -extern "C" { -#endif - -struct wl_client; -struct wl_resource; - -/** - * @page page_xdg_shell The xdg_shell protocol - * @section page_ifaces_xdg_shell Interfaces - * - @subpage page_iface_xdg_wm_base - create desktop-style surfaces - * - @subpage page_iface_xdg_positioner - child surface positioner - * - @subpage page_iface_xdg_surface - desktop user interface surface base interface - * - @subpage page_iface_xdg_toplevel - toplevel surface - * - @subpage page_iface_xdg_popup - short-lived, popup surfaces for menus - * @section page_copyright_xdg_shell Copyright - *
- *
- * Copyright © 2008-2013 Kristian Høgsberg
- * Copyright © 2013      Rafael Antognolli
- * Copyright © 2013      Jasper St. Pierre
- * Copyright © 2010-2013 Intel Corporation
- * Copyright © 2015-2017 Samsung Electronics Co., Ltd
- * Copyright © 2015-2017 Red Hat Inc.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a
- * copy of this software and associated documentation files (the "Software"),
- * to deal in the Software without restriction, including without limitation
- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
- * and/or sell copies of the Software, and to permit persons to whom the
- * Software is furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice (including the next
- * paragraph) shall be included in all copies or substantial portions of the
- * Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- * 
- */ -struct wl_output; -struct wl_seat; -struct wl_surface; -struct xdg_popup; -struct xdg_positioner; -struct xdg_surface; -struct xdg_toplevel; -struct xdg_wm_base; - -/** - * @page page_iface_xdg_wm_base xdg_wm_base - * @section page_iface_xdg_wm_base_desc Description - * - * The xdg_wm_base interface is exposed as a global object enabling clients - * to turn their wl_surfaces into windows in a desktop environment. It - * defines the basic functionality needed for clients and the compositor to - * create windows that can be dragged, resized, maximized, etc, as well as - * creating transient windows such as popup menus. - * @section page_iface_xdg_wm_base_api API - * See @ref iface_xdg_wm_base. - */ -/** - * @defgroup iface_xdg_wm_base The xdg_wm_base interface - * - * The xdg_wm_base interface is exposed as a global object enabling clients - * to turn their wl_surfaces into windows in a desktop environment. It - * defines the basic functionality needed for clients and the compositor to - * create windows that can be dragged, resized, maximized, etc, as well as - * creating transient windows such as popup menus. - */ -extern const struct wl_interface xdg_wm_base_interface; -/** - * @page page_iface_xdg_positioner xdg_positioner - * @section page_iface_xdg_positioner_desc Description - * - * The xdg_positioner provides a collection of rules for the placement of a - * child surface relative to a parent surface. Rules can be defined to ensure - * the child surface remains within the visible area's borders, and to - * specify how the child surface changes its position, such as sliding along - * an axis, or flipping around a rectangle. These positioner-created rules are - * constrained by the requirement that a child surface must intersect with or - * be at least partially adjacent to its parent surface. - * - * See the various requests for details about possible rules. - * - * At the time of the request, the compositor makes a copy of the rules - * specified by the xdg_positioner. Thus, after the request is complete the - * xdg_positioner object can be destroyed or reused; further changes to the - * object will have no effect on previous usages. - * - * For an xdg_positioner object to be considered complete, it must have a - * non-zero size set by set_size, and a non-zero anchor rectangle set by - * set_anchor_rect. Passing an incomplete xdg_positioner object when - * positioning a surface raises an error. - * @section page_iface_xdg_positioner_api API - * See @ref iface_xdg_positioner. - */ -/** - * @defgroup iface_xdg_positioner The xdg_positioner interface - * - * The xdg_positioner provides a collection of rules for the placement of a - * child surface relative to a parent surface. Rules can be defined to ensure - * the child surface remains within the visible area's borders, and to - * specify how the child surface changes its position, such as sliding along - * an axis, or flipping around a rectangle. These positioner-created rules are - * constrained by the requirement that a child surface must intersect with or - * be at least partially adjacent to its parent surface. - * - * See the various requests for details about possible rules. - * - * At the time of the request, the compositor makes a copy of the rules - * specified by the xdg_positioner. Thus, after the request is complete the - * xdg_positioner object can be destroyed or reused; further changes to the - * object will have no effect on previous usages. - * - * For an xdg_positioner object to be considered complete, it must have a - * non-zero size set by set_size, and a non-zero anchor rectangle set by - * set_anchor_rect. Passing an incomplete xdg_positioner object when - * positioning a surface raises an error. - */ -extern const struct wl_interface xdg_positioner_interface; -/** - * @page page_iface_xdg_surface xdg_surface - * @section page_iface_xdg_surface_desc Description - * - * An interface that may be implemented by a wl_surface, for - * implementations that provide a desktop-style user interface. - * - * It provides a base set of functionality required to construct user - * interface elements requiring management by the compositor, such as - * toplevel windows, menus, etc. The types of functionality are split into - * xdg_surface roles. - * - * Creating an xdg_surface does not set the role for a wl_surface. In order - * to map an xdg_surface, the client must create a role-specific object - * using, e.g., get_toplevel, get_popup. The wl_surface for any given - * xdg_surface can have at most one role, and may not be assigned any role - * not based on xdg_surface. - * - * A role must be assigned before any other requests are made to the - * xdg_surface object. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_surface state to take effect. - * - * Creating an xdg_surface from a wl_surface which has a buffer attached or - * committed is a client error, and any attempts by a client to attach or - * manipulate a buffer prior to the first xdg_surface.configure call must - * also be treated as errors. - * - * Mapping an xdg_surface-based role surface is defined as making it - * possible for the surface to be shown by the compositor. Note that - * a mapped surface is not guaranteed to be visible once it is mapped. - * - * For an xdg_surface to be mapped by the compositor, the following - * conditions must be met: - * (1) the client has assigned an xdg_surface-based role to the surface - * (2) the client has set and committed the xdg_surface state and the - * role-dependent state to the surface - * (3) the client has committed a buffer to the surface - * - * A newly-unmapped surface is considered to have met condition (1) out - * of the 3 required conditions for mapping a surface if its role surface - * has not been destroyed. - * @section page_iface_xdg_surface_api API - * See @ref iface_xdg_surface. - */ -/** - * @defgroup iface_xdg_surface The xdg_surface interface - * - * An interface that may be implemented by a wl_surface, for - * implementations that provide a desktop-style user interface. - * - * It provides a base set of functionality required to construct user - * interface elements requiring management by the compositor, such as - * toplevel windows, menus, etc. The types of functionality are split into - * xdg_surface roles. - * - * Creating an xdg_surface does not set the role for a wl_surface. In order - * to map an xdg_surface, the client must create a role-specific object - * using, e.g., get_toplevel, get_popup. The wl_surface for any given - * xdg_surface can have at most one role, and may not be assigned any role - * not based on xdg_surface. - * - * A role must be assigned before any other requests are made to the - * xdg_surface object. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_surface state to take effect. - * - * Creating an xdg_surface from a wl_surface which has a buffer attached or - * committed is a client error, and any attempts by a client to attach or - * manipulate a buffer prior to the first xdg_surface.configure call must - * also be treated as errors. - * - * Mapping an xdg_surface-based role surface is defined as making it - * possible for the surface to be shown by the compositor. Note that - * a mapped surface is not guaranteed to be visible once it is mapped. - * - * For an xdg_surface to be mapped by the compositor, the following - * conditions must be met: - * (1) the client has assigned an xdg_surface-based role to the surface - * (2) the client has set and committed the xdg_surface state and the - * role-dependent state to the surface - * (3) the client has committed a buffer to the surface - * - * A newly-unmapped surface is considered to have met condition (1) out - * of the 3 required conditions for mapping a surface if its role surface - * has not been destroyed. - */ -extern const struct wl_interface xdg_surface_interface; -/** - * @page page_iface_xdg_toplevel xdg_toplevel - * @section page_iface_xdg_toplevel_desc Description - * - * This interface defines an xdg_surface role which allows a surface to, - * among other things, set window-like properties such as maximize, - * fullscreen, and minimize, set application-specific metadata like title and - * id, and well as trigger user interactive operations such as interactive - * resize and move. - * - * Unmapping an xdg_toplevel means that the surface cannot be shown - * by the compositor until it is explicitly mapped again. - * All active operations (e.g., move, resize) are canceled and all - * attributes (e.g. title, state, stacking, ...) are discarded for - * an xdg_toplevel surface when it is unmapped. - * - * Attaching a null buffer to a toplevel unmaps the surface. - * @section page_iface_xdg_toplevel_api API - * See @ref iface_xdg_toplevel. - */ -/** - * @defgroup iface_xdg_toplevel The xdg_toplevel interface - * - * This interface defines an xdg_surface role which allows a surface to, - * among other things, set window-like properties such as maximize, - * fullscreen, and minimize, set application-specific metadata like title and - * id, and well as trigger user interactive operations such as interactive - * resize and move. - * - * Unmapping an xdg_toplevel means that the surface cannot be shown - * by the compositor until it is explicitly mapped again. - * All active operations (e.g., move, resize) are canceled and all - * attributes (e.g. title, state, stacking, ...) are discarded for - * an xdg_toplevel surface when it is unmapped. - * - * Attaching a null buffer to a toplevel unmaps the surface. - */ -extern const struct wl_interface xdg_toplevel_interface; -/** - * @page page_iface_xdg_popup xdg_popup - * @section page_iface_xdg_popup_desc Description - * - * A popup surface is a short-lived, temporary surface. It can be used to - * implement for example menus, popovers, tooltips and other similar user - * interface concepts. - * - * A popup can be made to take an explicit grab. See xdg_popup.grab for - * details. - * - * When the popup is dismissed, a popup_done event will be sent out, and at - * the same time the surface will be unmapped. See the xdg_popup.popup_done - * event for details. - * - * Explicitly destroying the xdg_popup object will also dismiss the popup and - * unmap the surface. Clients that want to dismiss the popup when another - * surface of their own is clicked should dismiss the popup using the destroy - * request. - * - * A newly created xdg_popup will be stacked on top of all previously created - * xdg_popup surfaces associated with the same xdg_toplevel. - * - * The parent of an xdg_popup must be mapped (see the xdg_surface - * description) before the xdg_popup itself. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_popup state to take effect. - * @section page_iface_xdg_popup_api API - * See @ref iface_xdg_popup. - */ -/** - * @defgroup iface_xdg_popup The xdg_popup interface - * - * A popup surface is a short-lived, temporary surface. It can be used to - * implement for example menus, popovers, tooltips and other similar user - * interface concepts. - * - * A popup can be made to take an explicit grab. See xdg_popup.grab for - * details. - * - * When the popup is dismissed, a popup_done event will be sent out, and at - * the same time the surface will be unmapped. See the xdg_popup.popup_done - * event for details. - * - * Explicitly destroying the xdg_popup object will also dismiss the popup and - * unmap the surface. Clients that want to dismiss the popup when another - * surface of their own is clicked should dismiss the popup using the destroy - * request. - * - * A newly created xdg_popup will be stacked on top of all previously created - * xdg_popup surfaces associated with the same xdg_toplevel. - * - * The parent of an xdg_popup must be mapped (see the xdg_surface - * description) before the xdg_popup itself. - * - * The client must call wl_surface.commit on the corresponding wl_surface - * for the xdg_popup state to take effect. - */ -extern const struct wl_interface xdg_popup_interface; - -#ifndef XDG_WM_BASE_ERROR_ENUM -#define XDG_WM_BASE_ERROR_ENUM -enum xdg_wm_base_error { - /** - * given wl_surface has another role - */ - XDG_WM_BASE_ERROR_ROLE = 0, - /** - * xdg_wm_base was destroyed before children - */ - XDG_WM_BASE_ERROR_DEFUNCT_SURFACES = 1, - /** - * the client tried to map or destroy a non-topmost popup - */ - XDG_WM_BASE_ERROR_NOT_THE_TOPMOST_POPUP = 2, - /** - * the client specified an invalid popup parent surface - */ - XDG_WM_BASE_ERROR_INVALID_POPUP_PARENT = 3, - /** - * the client provided an invalid surface state - */ - XDG_WM_BASE_ERROR_INVALID_SURFACE_STATE = 4, - /** - * the client provided an invalid positioner - */ - XDG_WM_BASE_ERROR_INVALID_POSITIONER = 5, -}; -#endif /* XDG_WM_BASE_ERROR_ENUM */ - -/** - * @ingroup iface_xdg_wm_base - * @struct xdg_wm_base_interface - */ -struct xdg_wm_base_interface { - /** - * destroy xdg_wm_base - * - * Destroy this xdg_wm_base object. - * - * Destroying a bound xdg_wm_base object while there are surfaces - * still alive created by this xdg_wm_base object instance is - * illegal and will result in a protocol error. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * create a positioner object - * - * Create a positioner object. A positioner object is used to - * position surfaces relative to some parent surface. See the - * interface description and xdg_surface.get_popup for details. - */ - void (*create_positioner)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id); - /** - * create a shell surface from a surface - * - * This creates an xdg_surface for the given surface. While - * xdg_surface itself is not a role, the corresponding surface may - * only be assigned a role extending xdg_surface, such as - * xdg_toplevel or xdg_popup. - * - * This creates an xdg_surface for the given surface. An - * xdg_surface is used as basis to define a role to a given - * surface, such as xdg_toplevel or xdg_popup. It also manages - * functionality shared between xdg_surface based surface roles. - * - * See the documentation of xdg_surface for more details about what - * an xdg_surface is and how it is used. - */ - void (*get_xdg_surface)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *surface); - /** - * respond to a ping event - * - * A client must respond to a ping event with a pong request or - * the client may be deemed unresponsive. See xdg_wm_base.ping. - * @param serial serial of the ping event - */ - void (*pong)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - -#define XDG_WM_BASE_PING 0 - -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_PING_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_CREATE_POSITIONER_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_GET_XDG_SURFACE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_wm_base - */ -#define XDG_WM_BASE_PONG_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_wm_base - * Sends an ping event to the client owning the resource. - * @param resource_ The client's resource - * @param serial pass this to the pong request - */ -static inline void -xdg_wm_base_send_ping(struct wl_resource *resource_, uint32_t serial) -{ - wl_resource_post_event(resource_, XDG_WM_BASE_PING, serial); -} - -#ifndef XDG_POSITIONER_ERROR_ENUM -#define XDG_POSITIONER_ERROR_ENUM -enum xdg_positioner_error { - /** - * invalid input provided - */ - XDG_POSITIONER_ERROR_INVALID_INPUT = 0, -}; -#endif /* XDG_POSITIONER_ERROR_ENUM */ - -#ifndef XDG_POSITIONER_ANCHOR_ENUM -#define XDG_POSITIONER_ANCHOR_ENUM -enum xdg_positioner_anchor { - XDG_POSITIONER_ANCHOR_NONE = 0, - XDG_POSITIONER_ANCHOR_TOP = 1, - XDG_POSITIONER_ANCHOR_BOTTOM = 2, - XDG_POSITIONER_ANCHOR_LEFT = 3, - XDG_POSITIONER_ANCHOR_RIGHT = 4, - XDG_POSITIONER_ANCHOR_TOP_LEFT = 5, - XDG_POSITIONER_ANCHOR_BOTTOM_LEFT = 6, - XDG_POSITIONER_ANCHOR_TOP_RIGHT = 7, - XDG_POSITIONER_ANCHOR_BOTTOM_RIGHT = 8, -}; -#endif /* XDG_POSITIONER_ANCHOR_ENUM */ - -#ifndef XDG_POSITIONER_GRAVITY_ENUM -#define XDG_POSITIONER_GRAVITY_ENUM -enum xdg_positioner_gravity { - XDG_POSITIONER_GRAVITY_NONE = 0, - XDG_POSITIONER_GRAVITY_TOP = 1, - XDG_POSITIONER_GRAVITY_BOTTOM = 2, - XDG_POSITIONER_GRAVITY_LEFT = 3, - XDG_POSITIONER_GRAVITY_RIGHT = 4, - XDG_POSITIONER_GRAVITY_TOP_LEFT = 5, - XDG_POSITIONER_GRAVITY_BOTTOM_LEFT = 6, - XDG_POSITIONER_GRAVITY_TOP_RIGHT = 7, - XDG_POSITIONER_GRAVITY_BOTTOM_RIGHT = 8, -}; -#endif /* XDG_POSITIONER_GRAVITY_ENUM */ - -#ifndef XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM -#define XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM -/** - * @ingroup iface_xdg_positioner - * vertically resize the surface - * - * Resize the surface vertically so that it is completely unconstrained. - */ -enum xdg_positioner_constraint_adjustment { - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_NONE = 0, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_X = 1, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_SLIDE_Y = 2, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_X = 4, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_FLIP_Y = 8, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_X = 16, - XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_RESIZE_Y = 32, -}; -#endif /* XDG_POSITIONER_CONSTRAINT_ADJUSTMENT_ENUM */ - -/** - * @ingroup iface_xdg_positioner - * @struct xdg_positioner_interface - */ -struct xdg_positioner_interface { - /** - * destroy the xdg_positioner object - * - * Notify the compositor that the xdg_positioner will no longer - * be used. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the size of the to-be positioned rectangle - * - * Set the size of the surface that is to be positioned with the - * positioner object. The size is in surface-local coordinates and - * corresponds to the window geometry. See - * xdg_surface.set_window_geometry. - * - * If a zero or negative size is set the invalid_input error is - * raised. - * @param width width of positioned rectangle - * @param height height of positioned rectangle - */ - void (*set_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * set the anchor rectangle within the parent surface - * - * Specify the anchor rectangle within the parent surface that - * the child surface will be placed relative to. The rectangle is - * relative to the window geometry as defined by - * xdg_surface.set_window_geometry of the parent surface. - * - * When the xdg_positioner object is used to position a child - * surface, the anchor rectangle may not extend outside the window - * geometry of the positioned child's parent surface. - * - * If a negative size is set the invalid_input error is raised. - * @param x x position of anchor rectangle - * @param y y position of anchor rectangle - * @param width width of anchor rectangle - * @param height height of anchor rectangle - */ - void (*set_anchor_rect)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y, - int32_t width, - int32_t height); - /** - * set anchor rectangle anchor - * - * Defines the anchor point for the anchor rectangle. The - * specified anchor is used derive an anchor point that the child - * surface will be positioned relative to. If a corner anchor is - * set (e.g. 'top_left' or 'bottom_right'), the anchor point will - * be at the specified corner; otherwise, the derived anchor point - * will be centered on the specified edge, or in the center of the - * anchor rectangle if no edge is specified. - * @param anchor anchor - */ - void (*set_anchor)(struct wl_client *client, - struct wl_resource *resource, - uint32_t anchor); - /** - * set child surface gravity - * - * Defines in what direction a surface should be positioned, - * relative to the anchor point of the parent surface. If a corner - * gravity is specified (e.g. 'bottom_right' or 'top_left'), then - * the child surface will be placed towards the specified gravity; - * otherwise, the child surface will be centered over the anchor - * point on any axis that had no gravity specified. - * @param gravity gravity direction - */ - void (*set_gravity)(struct wl_client *client, - struct wl_resource *resource, - uint32_t gravity); - /** - * set the adjustment to be done when constrained - * - * Specify how the window should be positioned if the originally - * intended position caused the surface to be constrained, meaning - * at least partially outside positioning boundaries set by the - * compositor. The adjustment is set by constructing a bitmask - * describing the adjustment to be made when the surface is - * constrained on that axis. - * - * If no bit for one axis is set, the compositor will assume that - * the child surface should not change its position on that axis - * when constrained. - * - * If more than one bit for one axis is set, the order of how - * adjustments are applied is specified in the corresponding - * adjustment descriptions. - * - * The default adjustment is none. - * @param constraint_adjustment bit mask of constraint adjustments - */ - void (*set_constraint_adjustment)(struct wl_client *client, - struct wl_resource *resource, - uint32_t constraint_adjustment); - /** - * set surface position offset - * - * Specify the surface position offset relative to the position - * of the anchor on the anchor rectangle and the anchor on the - * surface. For example if the anchor of the anchor rectangle is at - * (x, y), the surface has the gravity bottom|right, and the offset - * is (ox, oy), the calculated surface position will be (x + ox, y - * + oy). The offset position of the surface is the one used for - * constraint testing. See set_constraint_adjustment. - * - * An example use case is placing a popup menu on top of a user - * interface element, while aligning the user interface element of - * the parent surface with some user interface element placed - * somewhere in the popup surface. - * @param x surface position x offset - * @param y surface position y offset - */ - void (*set_offset)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y); - /** - * continuously reconstrain the surface - * - * When set reactive, the surface is reconstrained if the - * conditions used for constraining changed, e.g. the parent window - * moved. - * - * If the conditions changed and the popup was reconstrained, an - * xdg_popup.configure event is sent with updated geometry, - * followed by an xdg_surface.configure event. - * @since 3 - */ - void (*set_reactive)(struct wl_client *client, - struct wl_resource *resource); - /** - * - * - * Set the parent window geometry the compositor should use when - * positioning the popup. The compositor may use this information - * to determine the future state the popup should be constrained - * using. If this doesn't match the dimension of the parent the - * popup is eventually positioned against, the behavior is - * undefined. - * - * The arguments are given in the surface-local coordinate space. - * @param parent_width future window geometry width of parent - * @param parent_height future window geometry height of parent - * @since 3 - */ - void (*set_parent_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t parent_width, - int32_t parent_height); - /** - * set parent configure this is a response to - * - * Set the serial of a xdg_surface.configure event this - * positioner will be used in response to. The compositor may use - * this information together with set_parent_size to determine what - * future state the popup should be constrained using. - * @param serial serial of parent configure event - * @since 3 - */ - void (*set_parent_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - - -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_ANCHOR_RECT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_ANCHOR_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_GRAVITY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_CONSTRAINT_ADJUSTMENT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_OFFSET_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_REACTIVE_SINCE_VERSION 3 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_PARENT_SIZE_SINCE_VERSION 3 -/** - * @ingroup iface_xdg_positioner - */ -#define XDG_POSITIONER_SET_PARENT_CONFIGURE_SINCE_VERSION 3 - -#ifndef XDG_SURFACE_ERROR_ENUM -#define XDG_SURFACE_ERROR_ENUM -enum xdg_surface_error { - XDG_SURFACE_ERROR_NOT_CONSTRUCTED = 1, - XDG_SURFACE_ERROR_ALREADY_CONSTRUCTED = 2, - XDG_SURFACE_ERROR_UNCONFIGURED_BUFFER = 3, -}; -#endif /* XDG_SURFACE_ERROR_ENUM */ - -/** - * @ingroup iface_xdg_surface - * @struct xdg_surface_interface - */ -struct xdg_surface_interface { - /** - * destroy the xdg_surface - * - * Destroy the xdg_surface object. An xdg_surface must only be - * destroyed after its role object has been destroyed. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * assign the xdg_toplevel surface role - * - * This creates an xdg_toplevel object for the given xdg_surface - * and gives the associated wl_surface the xdg_toplevel role. - * - * See the documentation of xdg_toplevel for more details about - * what an xdg_toplevel is and how it is used. - */ - void (*get_toplevel)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id); - /** - * assign the xdg_popup surface role - * - * This creates an xdg_popup object for the given xdg_surface and - * gives the associated wl_surface the xdg_popup role. - * - * If null is passed as a parent, a parent surface must be - * specified using some other protocol, before committing the - * initial state. - * - * See the documentation of xdg_popup for more details about what - * an xdg_popup is and how it is used. - */ - void (*get_popup)(struct wl_client *client, - struct wl_resource *resource, - uint32_t id, - struct wl_resource *parent, - struct wl_resource *positioner); - /** - * set the new window geometry - * - * The window geometry of a surface is its "visible bounds" from - * the user's perspective. Client-side decorations often have - * invisible portions like drop-shadows which should be ignored for - * the purposes of aligning, placing and constraining windows. - * - * The window geometry is double buffered, and will be applied at - * the time wl_surface.commit of the corresponding wl_surface is - * called. - * - * When maintaining a position, the compositor should treat the (x, - * y) coordinate of the window geometry as the top left corner of - * the window. A client changing the (x, y) window geometry - * coordinate should in general not alter the position of the - * window. - * - * Once the window geometry of the surface is set, it is not - * possible to unset it, and it will remain the same until - * set_window_geometry is called again, even if a new subsurface or - * buffer is attached. - * - * If never set, the value is the full bounds of the surface, - * including any subsurfaces. This updates dynamically on every - * commit. This unset is meant for extremely simple clients. - * - * The arguments are given in the surface-local coordinate space of - * the wl_surface associated with this xdg_surface. - * - * The width and height must be greater than zero. Setting an - * invalid size will raise an error. When applied, the effective - * window geometry will be the set window geometry clamped to the - * bounding rectangle of the combined geometry of the surface of - * the xdg_surface and the associated subsurfaces. - */ - void (*set_window_geometry)(struct wl_client *client, - struct wl_resource *resource, - int32_t x, - int32_t y, - int32_t width, - int32_t height); - /** - * ack a configure event - * - * When a configure event is received, if a client commits the - * surface in response to the configure event, then the client must - * make an ack_configure request sometime before the commit - * request, passing along the serial of the configure event. - * - * For instance, for toplevel surfaces the compositor might use - * this information to move a surface to the top left only when the - * client has drawn itself for the maximized or fullscreen state. - * - * If the client receives multiple configure events before it can - * respond to one, it only has to ack the last configure event. - * - * A client is not required to commit immediately after sending an - * ack_configure request - it may even ack_configure several times - * before its next surface commit. - * - * A client may send multiple ack_configure requests before - * committing, but only the last request sent before a commit - * indicates which configure event the client really is responding - * to. - * @param serial the serial from the configure event - */ - void (*ack_configure)(struct wl_client *client, - struct wl_resource *resource, - uint32_t serial); -}; - -#define XDG_SURFACE_CONFIGURE 0 - -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_CONFIGURE_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_GET_TOPLEVEL_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_GET_POPUP_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_SET_WINDOW_GEOMETRY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_surface - */ -#define XDG_SURFACE_ACK_CONFIGURE_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_surface - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - * @param serial serial of the configure event - */ -static inline void -xdg_surface_send_configure(struct wl_resource *resource_, uint32_t serial) -{ - wl_resource_post_event(resource_, XDG_SURFACE_CONFIGURE, serial); -} - -#ifndef XDG_TOPLEVEL_RESIZE_EDGE_ENUM -#define XDG_TOPLEVEL_RESIZE_EDGE_ENUM -/** - * @ingroup iface_xdg_toplevel - * edge values for resizing - * - * These values are used to indicate which edge of a surface - * is being dragged in a resize operation. - */ -enum xdg_toplevel_resize_edge { - XDG_TOPLEVEL_RESIZE_EDGE_NONE = 0, - XDG_TOPLEVEL_RESIZE_EDGE_TOP = 1, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM = 2, - XDG_TOPLEVEL_RESIZE_EDGE_LEFT = 4, - XDG_TOPLEVEL_RESIZE_EDGE_TOP_LEFT = 5, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_LEFT = 6, - XDG_TOPLEVEL_RESIZE_EDGE_RIGHT = 8, - XDG_TOPLEVEL_RESIZE_EDGE_TOP_RIGHT = 9, - XDG_TOPLEVEL_RESIZE_EDGE_BOTTOM_RIGHT = 10, -}; -#endif /* XDG_TOPLEVEL_RESIZE_EDGE_ENUM */ - -#ifndef XDG_TOPLEVEL_STATE_ENUM -#define XDG_TOPLEVEL_STATE_ENUM -/** - * @ingroup iface_xdg_toplevel - * the surface is tiled - * - * The window is currently in a tiled layout and the bottom edge is - * considered to be adjacent to another part of the tiling grid. - */ -enum xdg_toplevel_state { - /** - * the surface is maximized - */ - XDG_TOPLEVEL_STATE_MAXIMIZED = 1, - /** - * the surface is fullscreen - */ - XDG_TOPLEVEL_STATE_FULLSCREEN = 2, - /** - * the surface is being resized - */ - XDG_TOPLEVEL_STATE_RESIZING = 3, - /** - * the surface is now activated - */ - XDG_TOPLEVEL_STATE_ACTIVATED = 4, - /** - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_LEFT = 5, - /** - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_RIGHT = 6, - /** - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_TOP = 7, - /** - * @since 2 - */ - XDG_TOPLEVEL_STATE_TILED_BOTTOM = 8, -}; -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_LEFT_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_RIGHT_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_TOP_SINCE_VERSION 2 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_STATE_TILED_BOTTOM_SINCE_VERSION 2 -#endif /* XDG_TOPLEVEL_STATE_ENUM */ - -/** - * @ingroup iface_xdg_toplevel - * @struct xdg_toplevel_interface - */ -struct xdg_toplevel_interface { - /** - * destroy the xdg_toplevel - * - * This request destroys the role surface and unmaps the surface; - * see "Unmapping" behavior in interface section for details. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the parent of this surface - * - * Set the "parent" of this surface. This surface should be - * stacked above the parent surface and all other ancestor - * surfaces. - * - * Parent windows should be set on dialogs, toolboxes, or other - * "auxiliary" surfaces, so that the parent is raised when the - * dialog is raised. - * - * Setting a null parent for a child window removes any - * parent-child relationship for the child. Setting a null parent - * for a window which currently has no parent is a no-op. - * - * If the parent is unmapped then its children are managed as - * though the parent of the now-unmapped parent has become the - * parent of this surface. If no parent exists for the now-unmapped - * parent then the children are managed as though they have no - * parent surface. - */ - void (*set_parent)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *parent); - /** - * set surface title - * - * Set a short title for the surface. - * - * This string may be used to identify the surface in a task bar, - * window list, or other user interface elements provided by the - * compositor. - * - * The string must be encoded in UTF-8. - */ - void (*set_title)(struct wl_client *client, - struct wl_resource *resource, - const char *title); - /** - * set application ID - * - * Set an application identifier for the surface. - * - * The app ID identifies the general class of applications to which - * the surface belongs. The compositor can use this to group - * multiple surfaces together, or to determine how to launch a new - * application. - * - * For D-Bus activatable applications, the app ID is used as the - * D-Bus service name. - * - * The compositor shell will try to group application surfaces - * together by their app ID. As a best practice, it is suggested to - * select app ID's that match the basename of the application's - * .desktop file. For example, "org.freedesktop.FooViewer" where - * the .desktop file is "org.freedesktop.FooViewer.desktop". - * - * Like other properties, a set_app_id request can be sent after - * the xdg_toplevel has been mapped to update the property. - * - * See the desktop-entry specification [0] for more details on - * application identifiers and how they relate to well-known D-Bus - * names and .desktop files. - * - * [0] http://standards.freedesktop.org/desktop-entry-spec/ - */ - void (*set_app_id)(struct wl_client *client, - struct wl_resource *resource, - const char *app_id); - /** - * show the window menu - * - * Clients implementing client-side decorations might want to - * show a context menu when right-clicking on the decorations, - * giving the user a menu that they can use to maximize or minimize - * the window. - * - * This request asks the compositor to pop up such a window menu at - * the given position, relative to the local surface coordinates of - * the parent surface. There are no guarantees as to what menu - * items the window menu contains. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - * @param x the x position to pop up the window menu at - * @param y the y position to pop up the window menu at - */ - void (*show_window_menu)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial, - int32_t x, - int32_t y); - /** - * start an interactive move - * - * Start an interactive, user-driven move of the surface. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * passed serial is used to determine the type of interactive move - * (touch, pointer, etc). - * - * The server may ignore move requests depending on the state of - * the surface (e.g. fullscreen or maximized), or if the passed - * serial is no longer valid. - * - * If triggered, the surface will lose the focus of the device - * (wl_pointer, wl_touch, etc) used for the move. It is up to the - * compositor to visually indicate that the move is taking place, - * such as updating a pointer cursor, during the move. There is no - * guarantee that the device focus will return when the move is - * completed. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - */ - void (*move)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial); - /** - * start an interactive resize - * - * Start a user-driven, interactive resize of the surface. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * passed serial is used to determine the type of interactive - * resize (touch, pointer, etc). - * - * The server may ignore resize requests depending on the state of - * the surface (e.g. fullscreen or maximized). - * - * If triggered, the client will receive configure events with the - * "resize" state enum value and the expected sizes. See the - * "resize" enum value for more details about what is required. The - * client must also acknowledge configure events using - * "ack_configure". After the resize is completed, the client will - * receive another "configure" event without the resize state. - * - * If triggered, the surface also will lose the focus of the device - * (wl_pointer, wl_touch, etc) used for the resize. It is up to the - * compositor to visually indicate that the resize is taking place, - * such as updating a pointer cursor, during the resize. There is - * no guarantee that the device focus will return when the resize - * is completed. - * - * The edges parameter specifies how the surface should be resized, - * and is one of the values of the resize_edge enum. The compositor - * may use this information to update the surface position for - * example when dragging the top left corner. The compositor may - * also use this information to adapt its behavior, e.g. choose an - * appropriate cursor image. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - * @param edges which edge or corner is being dragged - */ - void (*resize)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial, - uint32_t edges); - /** - * set the maximum size - * - * Set a maximum size for the window. - * - * The client can specify a maximum size so that the compositor - * does not try to configure the window beyond this size. - * - * The width and height arguments are in window geometry - * coordinates. See xdg_surface.set_window_geometry. - * - * Values set in this way are double-buffered. They will get - * applied on the next commit. - * - * The compositor can use this information to allow or disallow - * different states like maximize or fullscreen and draw accurate - * animations. - * - * Similarly, a tiling window manager may use this information to - * place and resize client windows in a more effective way. - * - * The client should not rely on the compositor to obey the maximum - * size. The compositor may decide to ignore the values set by the - * client and request a larger size. - * - * If never set, or a value of zero in the request, means that the - * client has no expected maximum size in the given dimension. As a - * result, a client wishing to reset the maximum size to an - * unspecified state can use zero for width and height in the - * request. - * - * Requesting a maximum size to be smaller than the minimum size of - * a surface is illegal and will result in a protocol error. - * - * The width and height must be greater than or equal to zero. - * Using strictly negative values for width and height will result - * in a protocol error. - */ - void (*set_max_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * set the minimum size - * - * Set a minimum size for the window. - * - * The client can specify a minimum size so that the compositor - * does not try to configure the window below this size. - * - * The width and height arguments are in window geometry - * coordinates. See xdg_surface.set_window_geometry. - * - * Values set in this way are double-buffered. They will get - * applied on the next commit. - * - * The compositor can use this information to allow or disallow - * different states like maximize or fullscreen and draw accurate - * animations. - * - * Similarly, a tiling window manager may use this information to - * place and resize client windows in a more effective way. - * - * The client should not rely on the compositor to obey the minimum - * size. The compositor may decide to ignore the values set by the - * client and request a smaller size. - * - * If never set, or a value of zero in the request, means that the - * client has no expected minimum size in the given dimension. As a - * result, a client wishing to reset the minimum size to an - * unspecified state can use zero for width and height in the - * request. - * - * Requesting a minimum size to be larger than the maximum size of - * a surface is illegal and will result in a protocol error. - * - * The width and height must be greater than or equal to zero. - * Using strictly negative values for width and height will result - * in a protocol error. - */ - void (*set_min_size)(struct wl_client *client, - struct wl_resource *resource, - int32_t width, - int32_t height); - /** - * maximize the window - * - * Maximize the surface. - * - * After requesting that the surface should be maximized, the - * compositor will respond by emitting a configure event. Whether - * this configure actually sets the window maximized is subject to - * compositor policies. The client must then update its content, - * drawing in the configured state. The client must also - * acknowledge the configure when committing the new content (see - * ack_configure). - * - * It is up to the compositor to decide how and where to maximize - * the surface, for example which output and what region of the - * screen should be used. - * - * If the surface was already maximized, the compositor will still - * emit a configure event with the "maximized" state. - * - * If the surface is in a fullscreen state, this request has no - * direct effect. It may alter the state the surface is returned to - * when unmaximized unless overridden by the compositor. - */ - void (*set_maximized)(struct wl_client *client, - struct wl_resource *resource); - /** - * unmaximize the window - * - * Unmaximize the surface. - * - * After requesting that the surface should be unmaximized, the - * compositor will respond by emitting a configure event. Whether - * this actually un-maximizes the window is subject to compositor - * policies. If available and applicable, the compositor will - * include the window geometry dimensions the window had prior to - * being maximized in the configure event. The client must then - * update its content, drawing it in the configured state. The - * client must also acknowledge the configure when committing the - * new content (see ack_configure). - * - * It is up to the compositor to position the surface after it was - * unmaximized; usually the position the surface had before - * maximizing, if applicable. - * - * If the surface was already not maximized, the compositor will - * still emit a configure event without the "maximized" state. - * - * If the surface is in a fullscreen state, this request has no - * direct effect. It may alter the state the surface is returned to - * when unmaximized unless overridden by the compositor. - */ - void (*unset_maximized)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the window as fullscreen on an output - * - * Make the surface fullscreen. - * - * After requesting that the surface should be fullscreened, the - * compositor will respond by emitting a configure event. Whether - * the client is actually put into a fullscreen state is subject to - * compositor policies. The client must also acknowledge the - * configure when committing the new content (see ack_configure). - * - * The output passed by the request indicates the client's - * preference as to which display it should be set fullscreen on. - * If this value is NULL, it's up to the compositor to choose which - * display will be used to map this surface. - * - * If the surface doesn't cover the whole output, the compositor - * will position the surface in the center of the output and - * compensate with with border fill covering the rest of the - * output. The content of the border fill is undefined, but should - * be assumed to be in some way that attempts to blend into the - * surrounding area (e.g. solid black). - * - * If the fullscreened surface is not opaque, the compositor must - * make sure that other screen content not part of the same surface - * tree (made up of subsurfaces, popups or similarly coupled - * surfaces) are not visible below the fullscreened surface. - */ - void (*set_fullscreen)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *output); - /** - * unset the window as fullscreen - * - * Make the surface no longer fullscreen. - * - * After requesting that the surface should be unfullscreened, the - * compositor will respond by emitting a configure event. Whether - * this actually removes the fullscreen state of the client is - * subject to compositor policies. - * - * Making a surface unfullscreen sets states for the surface based - * on the following: * the state(s) it may have had before becoming - * fullscreen * any state(s) decided by the compositor * any - * state(s) requested by the client while the surface was - * fullscreen - * - * The compositor may include the previous window geometry - * dimensions in the configure event, if applicable. - * - * The client must also acknowledge the configure when committing - * the new content (see ack_configure). - */ - void (*unset_fullscreen)(struct wl_client *client, - struct wl_resource *resource); - /** - * set the window as minimized - * - * Request that the compositor minimize your surface. There is no - * way to know if the surface is currently minimized, nor is there - * any way to unset minimization on this surface. - * - * If you are looking to throttle redrawing when minimized, please - * instead use the wl_surface.frame event for this, as this will - * also work with live previews on windows in Alt-Tab, Expose or - * similar compositor features. - */ - void (*set_minimized)(struct wl_client *client, - struct wl_resource *resource); -}; - -#define XDG_TOPLEVEL_CONFIGURE 0 -#define XDG_TOPLEVEL_CLOSE 1 - -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_CLOSE_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_PARENT_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_TITLE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_APP_ID_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SHOW_WINDOW_MENU_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_MOVE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_RESIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MAX_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MIN_SIZE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MAXIMIZED_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_UNSET_MAXIMIZED_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_FULLSCREEN_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_UNSET_FULLSCREEN_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_toplevel - */ -#define XDG_TOPLEVEL_SET_MINIMIZED_SINCE_VERSION 1 - -/** - * @ingroup iface_xdg_toplevel - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -xdg_toplevel_send_configure(struct wl_resource *resource_, int32_t width, int32_t height, struct wl_array *states) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_CONFIGURE, width, height, states); -} - -/** - * @ingroup iface_xdg_toplevel - * Sends an close event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -xdg_toplevel_send_close(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, XDG_TOPLEVEL_CLOSE); -} - -#ifndef XDG_POPUP_ERROR_ENUM -#define XDG_POPUP_ERROR_ENUM -enum xdg_popup_error { - /** - * tried to grab after being mapped - */ - XDG_POPUP_ERROR_INVALID_GRAB = 0, -}; -#endif /* XDG_POPUP_ERROR_ENUM */ - -/** - * @ingroup iface_xdg_popup - * @struct xdg_popup_interface - */ -struct xdg_popup_interface { - /** - * remove xdg_popup interface - * - * This destroys the popup. Explicitly destroying the xdg_popup - * object will also dismiss the popup, and unmap the surface. - * - * If this xdg_popup is not the "topmost" popup, a protocol error - * will be sent. - */ - void (*destroy)(struct wl_client *client, - struct wl_resource *resource); - /** - * make the popup take an explicit grab - * - * This request makes the created popup take an explicit grab. An - * explicit grab will be dismissed when the user dismisses the - * popup, or when the client destroys the xdg_popup. This can be - * done by the user clicking outside the surface, using the - * keyboard, or even locking the screen through closing the lid or - * a timeout. - * - * If the compositor denies the grab, the popup will be immediately - * dismissed. - * - * This request must be used in response to some sort of user - * action like a button press, key press, or touch down event. The - * serial number of the event should be passed as 'serial'. - * - * The parent of a grabbing popup must either be an xdg_toplevel - * surface or another xdg_popup with an explicit grab. If the - * parent is another xdg_popup it means that the popups are nested, - * with this popup now being the topmost popup. - * - * Nested popups must be destroyed in the reverse order they were - * created in, e.g. the only popup you are allowed to destroy at - * all times is the topmost one. - * - * When compositors choose to dismiss a popup, they may dismiss - * every nested grabbing popup as well. When a compositor dismisses - * popups, it will follow the same dismissing order as required - * from the client. - * - * The parent of a grabbing popup must either be another xdg_popup - * with an active explicit grab, or an xdg_popup or xdg_toplevel, - * if there are no explicit grabs already taken. - * - * If the topmost grabbing popup is destroyed, the grab will be - * returned to the parent of the popup, if that parent previously - * had an explicit grab. - * - * If the parent is a grabbing popup which has already been - * dismissed, this popup will be immediately dismissed. If the - * parent is a popup that did not take an explicit grab, an error - * will be raised. - * - * During a popup grab, the client owning the grab will receive - * pointer and touch events for all their surfaces as normal - * (similar to an "owner-events" grab in X11 parlance), while the - * top most grabbing popup will always have keyboard focus. - * @param seat the wl_seat of the user event - * @param serial the serial of the user event - */ - void (*grab)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *seat, - uint32_t serial); - /** - * recalculate the popup's location - * - * Reposition an already-mapped popup. The popup will be placed - * given the details in the passed xdg_positioner object, and a - * xdg_popup.repositioned followed by xdg_popup.configure and - * xdg_surface.configure will be emitted in response. Any - * parameters set by the previous positioner will be discarded. - * - * The passed token will be sent in the corresponding - * xdg_popup.repositioned event. The new popup position will not - * take effect until the corresponding configure event is - * acknowledged by the client. See xdg_popup.repositioned for - * details. The token itself is opaque, and has no other special - * meaning. - * - * If multiple reposition requests are sent, the compositor may - * skip all but the last one. - * - * If the popup is repositioned in response to a configure event - * for its parent, the client should send an - * xdg_positioner.set_parent_configure and possibly a - * xdg_positioner.set_parent_size request to allow the compositor - * to properly constrain the popup. - * - * If the popup is repositioned together with a parent that is - * being resized, but not in response to a configure event, the - * client should send a xdg_positioner.set_parent_size request. - * @param token reposition request token - * @since 3 - */ - void (*reposition)(struct wl_client *client, - struct wl_resource *resource, - struct wl_resource *positioner, - uint32_t token); -}; - -#define XDG_POPUP_CONFIGURE 0 -#define XDG_POPUP_POPUP_DONE 1 -#define XDG_POPUP_REPOSITIONED 2 - -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_CONFIGURE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_POPUP_DONE_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_REPOSITIONED_SINCE_VERSION 3 - -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_DESTROY_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_GRAB_SINCE_VERSION 1 -/** - * @ingroup iface_xdg_popup - */ -#define XDG_POPUP_REPOSITION_SINCE_VERSION 3 - -/** - * @ingroup iface_xdg_popup - * Sends an configure event to the client owning the resource. - * @param resource_ The client's resource - * @param x x position relative to parent surface window geometry - * @param y y position relative to parent surface window geometry - * @param width window geometry width - * @param height window geometry height - */ -static inline void -xdg_popup_send_configure(struct wl_resource *resource_, int32_t x, int32_t y, int32_t width, int32_t height) -{ - wl_resource_post_event(resource_, XDG_POPUP_CONFIGURE, x, y, width, height); -} - -/** - * @ingroup iface_xdg_popup - * Sends an popup_done event to the client owning the resource. - * @param resource_ The client's resource - */ -static inline void -xdg_popup_send_popup_done(struct wl_resource *resource_) -{ - wl_resource_post_event(resource_, XDG_POPUP_POPUP_DONE); -} - -/** - * @ingroup iface_xdg_popup - * Sends an repositioned event to the client owning the resource. - * @param resource_ The client's resource - * @param token reposition request token - */ -static inline void -xdg_popup_send_repositioned(struct wl_resource *resource_, uint32_t token) -{ - wl_resource_post_event(resource_, XDG_POPUP_REPOSITIONED, token); -} - -#ifdef __cplusplus -} -#endif - -#endif From 95082321419f06d3dcdc5407184ef848e4c3706d Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 28 Sep 2026 11:17:05 -0400 Subject: [PATCH 6/7] meta: pin wlroots 0.20.2 for ci Bump the shared CI pin so the workflow builds wlroots-0.20 from source and pkg-config resolves wlroots-0.20.pc under the install prefix. --- .github/wlroots-version | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/wlroots-version b/.github/wlroots-version index 44e33a4..727d97b 100644 --- a/.github/wlroots-version +++ b/.github/wlroots-version @@ -1 +1 @@ -0.17.4 +0.20.2 From 4400d711023f5f199ae38b9e2509f922decb87e5 Mon Sep 17 00:00:00 2001 From: DeedleFake Date: Mon, 28 Sep 2026 12:03:11 -0400 Subject: [PATCH 7/7] wlr: restore protocol headers needed for cgo Distro wlroots packages omit meson-generated *-protocol.h files that public headers quote-include. cgo puts the package directory on the include path, so keeping the ones this module needs here unblocks builds against /usr. --- wlr-layer-shell-unstable-v1-protocol.h | 757 ++++++++++++++++++ ...ut-power-management-unstable-v1-protocol.h | 285 +++++++ 2 files changed, 1042 insertions(+) create mode 100644 wlr-layer-shell-unstable-v1-protocol.h create mode 100644 wlr-output-power-management-unstable-v1-protocol.h diff --git a/wlr-layer-shell-unstable-v1-protocol.h b/wlr-layer-shell-unstable-v1-protocol.h new file mode 100644 index 0000000..680787b --- /dev/null +++ b/wlr-layer-shell-unstable-v1-protocol.h @@ -0,0 +1,757 @@ +/* Generated by wayland-scanner 1.24.0 */ + +#ifndef WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H +#define WLR_LAYER_SHELL_UNSTABLE_V1_SERVER_PROTOCOL_H + +#include +#include +#include "wayland-server.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct wl_client; +struct wl_resource; + +/** + * @page page_wlr_layer_shell_unstable_v1 The wlr_layer_shell_unstable_v1 protocol + * @section page_ifaces_wlr_layer_shell_unstable_v1 Interfaces + * - @subpage page_iface_zwlr_layer_shell_v1 - create surfaces that are layers of the desktop + * - @subpage page_iface_zwlr_layer_surface_v1 - layer metadata interface + * @section page_copyright_wlr_layer_shell_unstable_v1 Copyright + *
+ *
+ * Copyright © 2017 Drew DeVault
+ *
+ * Permission to use, copy, modify, distribute, and sell this
+ * software and its documentation for any purpose is hereby granted
+ * without fee, provided that the above copyright notice appear in
+ * all copies and that both that copyright notice and this permission
+ * notice appear in supporting documentation, and that the name of
+ * the copyright holders not be used in advertising or publicity
+ * pertaining to distribution of the software without specific,
+ * written prior permission.  The copyright holders make no
+ * representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied
+ * warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
+ * AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
+ * THIS SOFTWARE.
+ * 
+ */ +struct wl_output; +struct wl_surface; +struct xdg_popup; +struct zwlr_layer_shell_v1; +struct zwlr_layer_surface_v1; + +#ifndef ZWLR_LAYER_SHELL_V1_INTERFACE +#define ZWLR_LAYER_SHELL_V1_INTERFACE +/** + * @page page_iface_zwlr_layer_shell_v1 zwlr_layer_shell_v1 + * @section page_iface_zwlr_layer_shell_v1_desc Description + * + * Clients can use this interface to assign the surface_layer role to + * wl_surfaces. Such surfaces are assigned to a "layer" of the output and + * rendered with a defined z-depth respective to each other. They may also be + * anchored to the edges and corners of a screen and specify input handling + * semantics. This interface should be suitable for the implementation of + * many desktop shell components, and a broad number of other applications + * that interact with the desktop. + * @section page_iface_zwlr_layer_shell_v1_api API + * See @ref iface_zwlr_layer_shell_v1. + */ +/** + * @defgroup iface_zwlr_layer_shell_v1 The zwlr_layer_shell_v1 interface + * + * Clients can use this interface to assign the surface_layer role to + * wl_surfaces. Such surfaces are assigned to a "layer" of the output and + * rendered with a defined z-depth respective to each other. They may also be + * anchored to the edges and corners of a screen and specify input handling + * semantics. This interface should be suitable for the implementation of + * many desktop shell components, and a broad number of other applications + * that interact with the desktop. + */ +extern const struct wl_interface zwlr_layer_shell_v1_interface; +#endif +#ifndef ZWLR_LAYER_SURFACE_V1_INTERFACE +#define ZWLR_LAYER_SURFACE_V1_INTERFACE +/** + * @page page_iface_zwlr_layer_surface_v1 zwlr_layer_surface_v1 + * @section page_iface_zwlr_layer_surface_v1_desc Description + * + * An interface that may be implemented by a wl_surface, for surfaces that + * are designed to be rendered as a layer of a stacked desktop-like + * environment. + * + * Layer surface state (layer, size, anchor, exclusive zone, + * margin, interactivity) is double-buffered, and will be applied at the + * time wl_surface.commit of the corresponding wl_surface is called. + * + * Attaching a null buffer to a layer surface unmaps it. + * + * Unmapping a layer_surface means that the surface cannot be shown by the + * compositor until it is explicitly mapped again. The layer_surface + * returns to the state it had right after layer_shell.get_layer_surface. + * The client can re-map the surface by performing a commit without any + * buffer attached, waiting for a configure event and handling it as usual. + * @section page_iface_zwlr_layer_surface_v1_api API + * See @ref iface_zwlr_layer_surface_v1. + */ +/** + * @defgroup iface_zwlr_layer_surface_v1 The zwlr_layer_surface_v1 interface + * + * An interface that may be implemented by a wl_surface, for surfaces that + * are designed to be rendered as a layer of a stacked desktop-like + * environment. + * + * Layer surface state (layer, size, anchor, exclusive zone, + * margin, interactivity) is double-buffered, and will be applied at the + * time wl_surface.commit of the corresponding wl_surface is called. + * + * Attaching a null buffer to a layer surface unmaps it. + * + * Unmapping a layer_surface means that the surface cannot be shown by the + * compositor until it is explicitly mapped again. The layer_surface + * returns to the state it had right after layer_shell.get_layer_surface. + * The client can re-map the surface by performing a commit without any + * buffer attached, waiting for a configure event and handling it as usual. + */ +extern const struct wl_interface zwlr_layer_surface_v1_interface; +#endif + +#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM +#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM +enum zwlr_layer_shell_v1_error { + /** + * wl_surface has another role + */ + ZWLR_LAYER_SHELL_V1_ERROR_ROLE = 0, + /** + * layer value is invalid + */ + ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER = 1, + /** + * wl_surface has a buffer attached or committed + */ + ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED = 2, +}; +#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM */ + +#ifndef ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID +#define ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_layer_shell_v1 + * Validate a zwlr_layer_shell_v1 error value. + * + * @return true on success, false on error. + * @ref zwlr_layer_shell_v1_error + */ +static inline bool +zwlr_layer_shell_v1_error_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_LAYER_SHELL_V1_ERROR_ROLE: + return version >= 1; + case ZWLR_LAYER_SHELL_V1_ERROR_INVALID_LAYER: + return version >= 1; + case ZWLR_LAYER_SHELL_V1_ERROR_ALREADY_CONSTRUCTED: + return version >= 1; + default: + return false; + } +} +#endif /* ZWLR_LAYER_SHELL_V1_ERROR_ENUM_IS_VALID */ + +#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM +#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM +/** + * @ingroup iface_zwlr_layer_shell_v1 + * available layers for surfaces + * + * These values indicate which layers a surface can be rendered in. They + * are ordered by z depth, bottom-most first. Traditional shell surfaces + * will typically be rendered between the bottom and top layers. + * Fullscreen shell surfaces are typically rendered at the top layer. + * Multiple surfaces can share a single layer, and ordering within a + * single layer is undefined. + */ +enum zwlr_layer_shell_v1_layer { + ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND = 0, + ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM = 1, + ZWLR_LAYER_SHELL_V1_LAYER_TOP = 2, + ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY = 3, +}; +#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM */ + +#ifndef ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID +#define ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_layer_shell_v1 + * Validate a zwlr_layer_shell_v1 layer value. + * + * @return true on success, false on error. + * @ref zwlr_layer_shell_v1_layer + */ +static inline bool +zwlr_layer_shell_v1_layer_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_LAYER_SHELL_V1_LAYER_BACKGROUND: + return version >= 1; + case ZWLR_LAYER_SHELL_V1_LAYER_BOTTOM: + return version >= 1; + case ZWLR_LAYER_SHELL_V1_LAYER_TOP: + return version >= 1; + case ZWLR_LAYER_SHELL_V1_LAYER_OVERLAY: + return version >= 1; + default: + return false; + } +} +#endif /* ZWLR_LAYER_SHELL_V1_LAYER_ENUM_IS_VALID */ + +/** + * @ingroup iface_zwlr_layer_shell_v1 + * @struct zwlr_layer_shell_v1_interface + */ +struct zwlr_layer_shell_v1_interface { + /** + * create a layer_surface from a surface + * + * Create a layer surface for an existing surface. This assigns + * the role of layer_surface, or raises a protocol error if another + * role is already assigned. + * + * Creating a layer surface from a wl_surface which has a buffer + * attached or committed is a client error, and any attempts by a + * client to attach or manipulate a buffer prior to the first + * layer_surface.configure call must also be treated as errors. + * + * After creating a layer_surface object and setting it up, the + * client must perform an initial commit without any buffer + * attached. The compositor will reply with a + * layer_surface.configure event. The client must acknowledge it + * and is then allowed to attach a buffer to map the surface. + * + * You may pass NULL for output to allow the compositor to decide + * which output to use. Generally this will be the one that the + * user most recently interacted with. + * + * Clients can specify a namespace that defines the purpose of the + * layer surface. + * @param layer layer to add this surface to + * @param namespace namespace for the layer surface + */ + void (*get_layer_surface)(struct wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct wl_resource *surface, + struct wl_resource *output, + uint32_t layer, + const char *namespace); + /** + * destroy the layer_shell object + * + * This request indicates that the client will not use the + * layer_shell object any more. Objects that have been created + * through this instance are not affected. + * @since 3 + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); +}; + + +/** + * @ingroup iface_zwlr_layer_shell_v1 + */ +#define ZWLR_LAYER_SHELL_V1_GET_LAYER_SURFACE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_shell_v1 + */ +#define ZWLR_LAYER_SHELL_V1_DESTROY_SINCE_VERSION 3 + +#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM +#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM +/** + * @ingroup iface_zwlr_layer_surface_v1 + * types of keyboard interaction possible for a layer shell surface + * + * Types of keyboard interaction possible for layer shell surfaces. The + * rationale for this is twofold: (1) some applications are not interested + * in keyboard events and not allowing them to be focused can improve the + * desktop experience; (2) some applications will want to take exclusive + * keyboard focus. + */ +enum zwlr_layer_surface_v1_keyboard_interactivity { + /** + * no keyboard focus is possible + * + * This value indicates that this surface is not interested in + * keyboard events and the compositor should never assign it the + * keyboard focus. + * + * This is the default value, set for newly created layer shell + * surfaces. + * + * This is useful for e.g. desktop widgets that display information + * or only have interaction with non-keyboard input devices. + */ + ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE = 0, + /** + * request exclusive keyboard focus + * + * Request exclusive keyboard focus if this surface is above the + * shell surface layer. + * + * For the top and overlay layers, the seat will always give + * exclusive keyboard focus to the top-most layer which has + * keyboard interactivity set to exclusive. If this layer contains + * multiple surfaces with keyboard interactivity set to exclusive, + * the compositor determines the one receiving keyboard events in + * an implementation- defined manner. In this case, no guarantee is + * made when this surface will receive keyboard focus (if ever). + * + * For the bottom and background layers, the compositor is allowed + * to use normal focus semantics. + * + * This setting is mainly intended for applications that need to + * ensure they receive all keyboard events, such as a lock screen + * or a password prompt. + */ + ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE = 1, + /** + * request regular keyboard focus semantics + * + * This requests the compositor to allow this surface to be + * focused and unfocused by the user in an implementation-defined + * manner. The user should be able to unfocus this surface even + * regardless of the layer it is on. + * + * Typically, the compositor will want to use its normal mechanism + * to manage keyboard focus between layer shell surfaces with this + * setting and regular toplevels on the desktop layer (e.g. click + * to focus). Nevertheless, it is possible for a compositor to + * require a special interaction to focus or unfocus layer shell + * surfaces (e.g. requiring a click even if focus follows the mouse + * normally, or providing a keybinding to switch focus between + * layers). + * + * This setting is mainly intended for desktop shell components + * (e.g. panels) that allow keyboard interaction. Using this option + * can allow implementing a desktop shell that can be fully usable + * without the mouse. + * @since 4 + */ + ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND = 2, +}; +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND_SINCE_VERSION 4 +#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM */ + +#ifndef ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID +#define ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_layer_surface_v1 + * Validate a zwlr_layer_surface_v1 keyboard_interactivity value. + * + * @return true on success, false on error. + * @ref zwlr_layer_surface_v1_keyboard_interactivity + */ +static inline bool +zwlr_layer_surface_v1_keyboard_interactivity_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_NONE: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_EXCLUSIVE: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ON_DEMAND: + return version >= 4; + default: + return false; + } +} +#endif /* ZWLR_LAYER_SURFACE_V1_KEYBOARD_INTERACTIVITY_ENUM_IS_VALID */ + +#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM +#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM +enum zwlr_layer_surface_v1_error { + /** + * provided surface state is invalid + */ + ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE = 0, + /** + * size is invalid + */ + ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE = 1, + /** + * anchor bitfield is invalid + */ + ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR = 2, + /** + * keyboard interactivity is invalid + */ + ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY = 3, + /** + * exclusive edge is invalid given the surface anchors + */ + ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE = 4, +}; +#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM */ + +#ifndef ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID +#define ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_layer_surface_v1 + * Validate a zwlr_layer_surface_v1 error value. + * + * @return true on success, false on error. + * @ref zwlr_layer_surface_v1_error + */ +static inline bool +zwlr_layer_surface_v1_error_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SURFACE_STATE: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_SIZE: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_ANCHOR: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_KEYBOARD_INTERACTIVITY: + return version >= 1; + case ZWLR_LAYER_SURFACE_V1_ERROR_INVALID_EXCLUSIVE_EDGE: + return version >= 1; + default: + return false; + } +} +#endif /* ZWLR_LAYER_SURFACE_V1_ERROR_ENUM_IS_VALID */ + +#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM +#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM +enum zwlr_layer_surface_v1_anchor { + /** + * the top edge of the anchor rectangle + */ + ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP = 1, + /** + * the bottom edge of the anchor rectangle + */ + ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM = 2, + /** + * the left edge of the anchor rectangle + */ + ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT = 4, + /** + * the right edge of the anchor rectangle + */ + ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT = 8, +}; +#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM */ + +#ifndef ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID +#define ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_layer_surface_v1 + * Validate a zwlr_layer_surface_v1 anchor value. + * + * @return true on success, false on error. + * @ref zwlr_layer_surface_v1_anchor + */ +static inline bool +zwlr_layer_surface_v1_anchor_is_valid(uint32_t value, uint32_t version) { + uint32_t valid = 0; + if (version >= 1) + valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP; + if (version >= 1) + valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM; + if (version >= 1) + valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT; + if (version >= 1) + valid |= ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT; + return (value & ~valid) == 0; +} +#endif /* ZWLR_LAYER_SURFACE_V1_ANCHOR_ENUM_IS_VALID */ + +/** + * @ingroup iface_zwlr_layer_surface_v1 + * @struct zwlr_layer_surface_v1_interface + */ +struct zwlr_layer_surface_v1_interface { + /** + * sets the size of the surface + * + * Sets the size of the surface in surface-local coordinates. The + * compositor will display the surface centered with respect to its + * anchors. + * + * If you pass 0 for either value, the compositor will assign it + * and inform you of the assignment in the configure event. You + * must set your anchor to opposite edges in the dimensions you + * omit; not doing so is a protocol error. Both values are 0 by + * default. + * + * Size is double-buffered, see wl_surface.commit. + */ + void (*set_size)(struct wl_client *client, + struct wl_resource *resource, + uint32_t width, + uint32_t height); + /** + * configures the anchor point of the surface + * + * Requests that the compositor anchor the surface to the + * specified edges and corners. If two orthogonal edges are + * specified (e.g. 'top' and 'left'), then the anchor point will be + * the intersection of the edges (e.g. the top left corner of the + * output); otherwise the anchor point will be centered on that + * edge, or in the center if none is specified. + * + * Anchor is double-buffered, see wl_surface.commit. + */ + void (*set_anchor)(struct wl_client *client, + struct wl_resource *resource, + uint32_t anchor); + /** + * configures the exclusive geometry of this surface + * + * Requests that the compositor avoids occluding an area with + * other surfaces. The compositor's use of this information is + * implementation-dependent - do not assume that this region will + * not actually be occluded. + * + * A positive value is only meaningful if the surface is anchored + * to one edge or an edge and both perpendicular edges. If the + * surface is not anchored, anchored to only two perpendicular + * edges (a corner), anchored to only two parallel edges or + * anchored to all edges, a positive value will be treated the same + * as zero. + * + * A positive zone is the distance from the edge in surface-local + * coordinates to consider exclusive. + * + * Surfaces that do not wish to have an exclusive zone may instead + * specify how they should interact with surfaces that do. If set + * to zero, the surface indicates that it would like to be moved to + * avoid occluding surfaces with a positive exclusive zone. If set + * to -1, the surface indicates that it would not like to be moved + * to accommodate for other surfaces, and the compositor should + * extend it all the way to the edges it is anchored to. + * + * For example, a panel might set its exclusive zone to 10, so that + * maximized shell surfaces are not shown on top of it. A + * notification might set its exclusive zone to 0, so that it is + * moved to avoid occluding the panel, but shell surfaces are shown + * underneath it. A wallpaper or lock screen might set their + * exclusive zone to -1, so that they stretch below or over the + * panel. + * + * The default value is 0. + * + * Exclusive zone is double-buffered, see wl_surface.commit. + */ + void (*set_exclusive_zone)(struct wl_client *client, + struct wl_resource *resource, + int32_t zone); + /** + * sets a margin from the anchor point + * + * Requests that the surface be placed some distance away from + * the anchor point on the output, in surface-local coordinates. + * Setting this value for edges you are not anchored to has no + * effect. + * + * The exclusive zone includes the margin. + * + * Margin is double-buffered, see wl_surface.commit. + */ + void (*set_margin)(struct wl_client *client, + struct wl_resource *resource, + int32_t top, + int32_t right, + int32_t bottom, + int32_t left); + /** + * requests keyboard events + * + * Set how keyboard events are delivered to this surface. By + * default, layer shell surfaces do not receive keyboard events; + * this request can be used to change this. + * + * This setting is inherited by child surfaces set by the get_popup + * request. + * + * Layer surfaces receive pointer, touch, and tablet events + * normally. If you do not want to receive them, set the input + * region on your surface to an empty region. + * + * Keyboard interactivity is double-buffered, see + * wl_surface.commit. + */ + void (*set_keyboard_interactivity)(struct wl_client *client, + struct wl_resource *resource, + uint32_t keyboard_interactivity); + /** + * assign this layer_surface as an xdg_popup parent + * + * This assigns an xdg_popup's parent to this layer_surface. This + * popup should have been created via xdg_surface::get_popup with + * the parent set to NULL, and this request must be invoked before + * committing the popup's initial state. + * + * See the documentation of xdg_popup for more details about what + * an xdg_popup is and how it is used. + */ + void (*get_popup)(struct wl_client *client, + struct wl_resource *resource, + struct wl_resource *popup); + /** + * ack a configure event + * + * When a configure event is received, if a client commits the + * surface in response to the configure event, then the client must + * make an ack_configure request sometime before the commit + * request, passing along the serial of the configure event. + * + * If the client receives multiple configure events before it can + * respond to one, it only has to ack the last configure event. + * + * A client is not required to commit immediately after sending an + * ack_configure request - it may even ack_configure several times + * before its next surface commit. + * + * A client may send multiple ack_configure requests before + * committing, but only the last request sent before a commit + * indicates which configure event the client really is responding + * to. + * @param serial the serial from the configure event + */ + void (*ack_configure)(struct wl_client *client, + struct wl_resource *resource, + uint32_t serial); + /** + * destroy the layer_surface + * + * This request destroys the layer surface. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); + /** + * change the layer of the surface + * + * Change the layer that the surface is rendered on. + * + * Layer is double-buffered, see wl_surface.commit. + * @param layer layer to move this surface to + * @since 2 + */ + void (*set_layer)(struct wl_client *client, + struct wl_resource *resource, + uint32_t layer); + /** + * set the edge the exclusive zone will be applied to + * + * Requests an edge for the exclusive zone to apply. The + * exclusive edge will be automatically deduced from anchor points + * when possible, but when the surface is anchored to a corner, it + * will be necessary to set it explicitly to disambiguate, as it is + * not possible to deduce which one of the two corner edges should + * be used. + * + * The edge must be one the surface is anchored to, otherwise the + * invalid_exclusive_edge protocol error will be raised. + * @since 5 + */ + void (*set_exclusive_edge)(struct wl_client *client, + struct wl_resource *resource, + uint32_t edge); +}; + +#define ZWLR_LAYER_SURFACE_V1_CONFIGURE 0 +#define ZWLR_LAYER_SURFACE_V1_CLOSED 1 + +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_CLOSED_SINCE_VERSION 1 + +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_SIZE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_ANCHOR_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_ZONE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_MARGIN_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_KEYBOARD_INTERACTIVITY_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_GET_POPUP_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_ACK_CONFIGURE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_DESTROY_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_LAYER_SINCE_VERSION 2 +/** + * @ingroup iface_zwlr_layer_surface_v1 + */ +#define ZWLR_LAYER_SURFACE_V1_SET_EXCLUSIVE_EDGE_SINCE_VERSION 5 + +/** + * @ingroup iface_zwlr_layer_surface_v1 + * Sends an configure event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +zwlr_layer_surface_v1_send_configure(struct wl_resource *resource_, uint32_t serial, uint32_t width, uint32_t height) +{ + wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CONFIGURE, serial, width, height); +} + +/** + * @ingroup iface_zwlr_layer_surface_v1 + * Sends an closed event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +zwlr_layer_surface_v1_send_closed(struct wl_resource *resource_) +{ + wl_resource_post_event(resource_, ZWLR_LAYER_SURFACE_V1_CLOSED); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/wlr-output-power-management-unstable-v1-protocol.h b/wlr-output-power-management-unstable-v1-protocol.h new file mode 100644 index 0000000..9ec6060 --- /dev/null +++ b/wlr-output-power-management-unstable-v1-protocol.h @@ -0,0 +1,285 @@ +/* Generated by wayland-scanner 1.24.0 */ + +#ifndef WLR_OUTPUT_POWER_MANAGEMENT_UNSTABLE_V1_SERVER_PROTOCOL_H +#define WLR_OUTPUT_POWER_MANAGEMENT_UNSTABLE_V1_SERVER_PROTOCOL_H + +#include +#include +#include "wayland-server.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct wl_client; +struct wl_resource; + +/** + * @page page_wlr_output_power_management_unstable_v1 The wlr_output_power_management_unstable_v1 protocol + * Control power management modes of outputs + * + * @section page_desc_wlr_output_power_management_unstable_v1 Description + * + * This protocol allows clients to control power management modes + * of outputs that are currently part of the compositor space. The + * intent is to allow special clients like desktop shells to power + * down outputs when the system is idle. + * + * To modify outputs not currently part of the compositor space see + * wlr-output-management. + * + * Warning! The protocol described in this file is experimental and + * backward incompatible changes may be made. Backward compatible changes + * may be added together with the corresponding interface version bump. + * Backward incompatible changes are done by bumping the version number in + * the protocol and interface names and resetting the interface version. + * Once the protocol is to be declared stable, the 'z' prefix and the + * version number in the protocol and interface names are removed and the + * interface version number is reset. + * + * @section page_ifaces_wlr_output_power_management_unstable_v1 Interfaces + * - @subpage page_iface_zwlr_output_power_manager_v1 - manager to create per-output power management + * - @subpage page_iface_zwlr_output_power_v1 - adjust power management mode for an output + * @section page_copyright_wlr_output_power_management_unstable_v1 Copyright + *
+ *
+ * Copyright © 2019 Purism SPC
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice (including the next
+ * paragraph) shall be included in all copies or substantial portions of the
+ * Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ * 
+ */ +struct wl_output; +struct zwlr_output_power_manager_v1; +struct zwlr_output_power_v1; + +#ifndef ZWLR_OUTPUT_POWER_MANAGER_V1_INTERFACE +#define ZWLR_OUTPUT_POWER_MANAGER_V1_INTERFACE +/** + * @page page_iface_zwlr_output_power_manager_v1 zwlr_output_power_manager_v1 + * @section page_iface_zwlr_output_power_manager_v1_desc Description + * + * This interface is a manager that allows creating per-output power + * management mode controls. + * @section page_iface_zwlr_output_power_manager_v1_api API + * See @ref iface_zwlr_output_power_manager_v1. + */ +/** + * @defgroup iface_zwlr_output_power_manager_v1 The zwlr_output_power_manager_v1 interface + * + * This interface is a manager that allows creating per-output power + * management mode controls. + */ +extern const struct wl_interface zwlr_output_power_manager_v1_interface; +#endif +#ifndef ZWLR_OUTPUT_POWER_V1_INTERFACE +#define ZWLR_OUTPUT_POWER_V1_INTERFACE +/** + * @page page_iface_zwlr_output_power_v1 zwlr_output_power_v1 + * @section page_iface_zwlr_output_power_v1_desc Description + * + * This object offers requests to set the power management mode of + * an output. + * @section page_iface_zwlr_output_power_v1_api API + * See @ref iface_zwlr_output_power_v1. + */ +/** + * @defgroup iface_zwlr_output_power_v1 The zwlr_output_power_v1 interface + * + * This object offers requests to set the power management mode of + * an output. + */ +extern const struct wl_interface zwlr_output_power_v1_interface; +#endif + +/** + * @ingroup iface_zwlr_output_power_manager_v1 + * @struct zwlr_output_power_manager_v1_interface + */ +struct zwlr_output_power_manager_v1_interface { + /** + * get a power management for an output + * + * Create an output power management mode control that can be + * used to adjust the power management mode for a given output. + */ + void (*get_output_power)(struct wl_client *client, + struct wl_resource *resource, + uint32_t id, + struct wl_resource *output); + /** + * destroy the manager + * + * All objects created by the manager will still remain valid, + * until their appropriate destroy request has been called. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); +}; + + +/** + * @ingroup iface_zwlr_output_power_manager_v1 + */ +#define ZWLR_OUTPUT_POWER_MANAGER_V1_GET_OUTPUT_POWER_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_output_power_manager_v1 + */ +#define ZWLR_OUTPUT_POWER_MANAGER_V1_DESTROY_SINCE_VERSION 1 + +#ifndef ZWLR_OUTPUT_POWER_V1_MODE_ENUM +#define ZWLR_OUTPUT_POWER_V1_MODE_ENUM +enum zwlr_output_power_v1_mode { + /** + * Output is turned off. + */ + ZWLR_OUTPUT_POWER_V1_MODE_OFF = 0, + /** + * Output is turned on, no power saving + */ + ZWLR_OUTPUT_POWER_V1_MODE_ON = 1, +}; +#endif /* ZWLR_OUTPUT_POWER_V1_MODE_ENUM */ + +#ifndef ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID +#define ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_output_power_v1 + * Validate a zwlr_output_power_v1 mode value. + * + * @return true on success, false on error. + * @ref zwlr_output_power_v1_mode + */ +static inline bool +zwlr_output_power_v1_mode_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_OUTPUT_POWER_V1_MODE_OFF: + return version >= 1; + case ZWLR_OUTPUT_POWER_V1_MODE_ON: + return version >= 1; + default: + return false; + } +} +#endif /* ZWLR_OUTPUT_POWER_V1_MODE_ENUM_IS_VALID */ + +#ifndef ZWLR_OUTPUT_POWER_V1_ERROR_ENUM +#define ZWLR_OUTPUT_POWER_V1_ERROR_ENUM +enum zwlr_output_power_v1_error { + /** + * nonexistent power save mode + */ + ZWLR_OUTPUT_POWER_V1_ERROR_INVALID_MODE = 1, +}; +#endif /* ZWLR_OUTPUT_POWER_V1_ERROR_ENUM */ + +#ifndef ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID +#define ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID +/** + * @ingroup iface_zwlr_output_power_v1 + * Validate a zwlr_output_power_v1 error value. + * + * @return true on success, false on error. + * @ref zwlr_output_power_v1_error + */ +static inline bool +zwlr_output_power_v1_error_is_valid(uint32_t value, uint32_t version) { + switch (value) { + case ZWLR_OUTPUT_POWER_V1_ERROR_INVALID_MODE: + return version >= 1; + default: + return false; + } +} +#endif /* ZWLR_OUTPUT_POWER_V1_ERROR_ENUM_IS_VALID */ + +/** + * @ingroup iface_zwlr_output_power_v1 + * @struct zwlr_output_power_v1_interface + */ +struct zwlr_output_power_v1_interface { + /** + * Set an outputs power save mode + * + * Set an output's power save mode to the given mode. The mode + * change is effective immediately. If the output does not support + * the given mode a failed event is sent. + * @param mode the power save mode to set + */ + void (*set_mode)(struct wl_client *client, + struct wl_resource *resource, + uint32_t mode); + /** + * destroy this power management + * + * Destroys the output power management mode control object. + */ + void (*destroy)(struct wl_client *client, + struct wl_resource *resource); +}; + +#define ZWLR_OUTPUT_POWER_V1_MODE 0 +#define ZWLR_OUTPUT_POWER_V1_FAILED 1 + +/** + * @ingroup iface_zwlr_output_power_v1 + */ +#define ZWLR_OUTPUT_POWER_V1_MODE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_output_power_v1 + */ +#define ZWLR_OUTPUT_POWER_V1_FAILED_SINCE_VERSION 1 + +/** + * @ingroup iface_zwlr_output_power_v1 + */ +#define ZWLR_OUTPUT_POWER_V1_SET_MODE_SINCE_VERSION 1 +/** + * @ingroup iface_zwlr_output_power_v1 + */ +#define ZWLR_OUTPUT_POWER_V1_DESTROY_SINCE_VERSION 1 + +/** + * @ingroup iface_zwlr_output_power_v1 + * Sends an mode event to the client owning the resource. + * @param resource_ The client's resource + * @param mode the output's new power management mode + */ +static inline void +zwlr_output_power_v1_send_mode(struct wl_resource *resource_, uint32_t mode) +{ + wl_resource_post_event(resource_, ZWLR_OUTPUT_POWER_V1_MODE, mode); +} + +/** + * @ingroup iface_zwlr_output_power_v1 + * Sends an failed event to the client owning the resource. + * @param resource_ The client's resource + */ +static inline void +zwlr_output_power_v1_send_failed(struct wl_resource *resource_) +{ + wl_resource_post_event(resource_, ZWLR_OUTPUT_POWER_V1_FAILED); +} + +#ifdef __cplusplus +} +#endif + +#endif