1// Code generated by wlgen; DO NOT EDIT.
2package xdgshell
3
4import (
5 "fmt"
6 wayland "github.com/bnema/purego-libwayland/protocol/wayland"
7 "github.com/bnema/purego-libwayland/server"
8 "runtime"
9)
10
11var WmBaseInterface *server.Interface
12var PositionerInterface *server.Interface
13var SurfaceInterface *server.Interface
14var ToplevelInterface *server.Interface
15var PopupInterface *server.Interface
16
17func init() {
18 WmBaseInterface = &server.Interface{Name: "xdg_wm_base", Version: 7}
19 PositionerInterface = &server.Interface{Name: "xdg_positioner", Version: 7}
20 SurfaceInterface = &server.Interface{Name: "xdg_surface", Version: 7}
21 ToplevelInterface = &server.Interface{Name: "xdg_toplevel", Version: 7}
22 PopupInterface = &server.Interface{Name: "xdg_popup", Version: 7}
23 WmBaseInterface.Requests = []server.Message{
24 {Name: "destroy", Signature: "", Types: []*server.Interface{}},
25 {Name: "create_positioner", Signature: "n", Types: []*server.Interface{PositionerInterface}},
26 {Name: "get_xdg_surface", Signature: "no", Types: []*server.Interface{SurfaceInterface, wayland.SurfaceInterface}},
27 {Name: "pong", Signature: "u", Types: []*server.Interface{nil}},
28 }
29 WmBaseInterface.Events = []server.Message{
30 {Name: "ping", Signature: "u", Types: []*server.Interface{nil}},
31 }
32 PositionerInterface.Requests = []server.Message{
33 {Name: "destroy", Signature: "", Types: []*server.Interface{}},
34 {Name: "set_size", Signature: "ii", Types: []*server.Interface{nil, nil}},
35 {Name: "set_anchor_rect", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}},
36 {Name: "set_anchor", Signature: "u", Types: []*server.Interface{nil}},
37 {Name: "set_gravity", Signature: "u", Types: []*server.Interface{nil}},
38 {Name: "set_constraint_adjustment", Signature: "u", Types: []*server.Interface{nil}},
39 {Name: "set_offset", Signature: "ii", Types: []*server.Interface{nil, nil}},
40 {Name: "set_reactive", Signature: "3", Types: []*server.Interface{}},
41 {Name: "set_parent_size", Signature: "3ii", Types: []*server.Interface{nil, nil}},
42 {Name: "set_parent_configure", Signature: "3u", Types: []*server.Interface{nil}},
43 }
44 PositionerInterface.Events = []server.Message{}
45 SurfaceInterface.Requests = []server.Message{
46 {Name: "destroy", Signature: "", Types: []*server.Interface{}},
47 {Name: "get_toplevel", Signature: "n", Types: []*server.Interface{ToplevelInterface}},
48 {Name: "get_popup", Signature: "n?oo", Types: []*server.Interface{PopupInterface, SurfaceInterface, PositionerInterface}},
49 {Name: "set_window_geometry", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}},
50 {Name: "ack_configure", Signature: "u", Types: []*server.Interface{nil}},
51 }
52 SurfaceInterface.Events = []server.Message{
53 {Name: "configure", Signature: "u", Types: []*server.Interface{nil}},
54 }
55 ToplevelInterface.Requests = []server.Message{
56 {Name: "destroy", Signature: "", Types: []*server.Interface{}},
57 {Name: "set_parent", Signature: "?o", Types: []*server.Interface{ToplevelInterface}},
58 {Name: "set_title", Signature: "s", Types: []*server.Interface{nil}},
59 {Name: "set_app_id", Signature: "s", Types: []*server.Interface{nil}},
60 {Name: "show_window_menu", Signature: "ouii", Types: []*server.Interface{wayland.SeatInterface, nil, nil, nil}},
61 {Name: "move", Signature: "ou", Types: []*server.Interface{wayland.SeatInterface, nil}},
62 {Name: "resize", Signature: "ouu", Types: []*server.Interface{wayland.SeatInterface, nil, nil}},
63 {Name: "set_max_size", Signature: "ii", Types: []*server.Interface{nil, nil}},
64 {Name: "set_min_size", Signature: "ii", Types: []*server.Interface{nil, nil}},
65 {Name: "set_maximized", Signature: "", Types: []*server.Interface{}},
66 {Name: "unset_maximized", Signature: "", Types: []*server.Interface{}},
67 {Name: "set_fullscreen", Signature: "?o", Types: []*server.Interface{wayland.OutputInterface}},
68 {Name: "unset_fullscreen", Signature: "", Types: []*server.Interface{}},
69 {Name: "set_minimized", Signature: "", Types: []*server.Interface{}},
70 }
71 ToplevelInterface.Events = []server.Message{
72 {Name: "configure", Signature: "iia", Types: []*server.Interface{nil, nil, nil}},
73 {Name: "close", Signature: "", Types: []*server.Interface{}},
74 {Name: "configure_bounds", Signature: "4ii", Types: []*server.Interface{nil, nil}},
75 {Name: "wm_capabilities", Signature: "5a", Types: []*server.Interface{nil}},
76 }
77 PopupInterface.Requests = []server.Message{
78 {Name: "destroy", Signature: "", Types: []*server.Interface{}},
79 {Name: "grab", Signature: "ou", Types: []*server.Interface{wayland.SeatInterface, nil}},
80 {Name: "reposition", Signature: "3ou", Types: []*server.Interface{PositionerInterface, nil}},
81 }
82 PopupInterface.Events = []server.Message{
83 {Name: "configure", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}},
84 {Name: "popup_done", Signature: "", Types: []*server.Interface{}},
85 {Name: "repositioned", Signature: "3u", Types: []*server.Interface{nil}},
86 }
87 if err := server.NewInterfaces(WmBaseInterface, PositionerInterface, SurfaceInterface, ToplevelInterface, PopupInterface); err != nil {
88 panic(err)
89 }
90}
91
92// WmBase create desktop-style surfaces.
93type WmBase struct{ *server.Resource }
94
95func WrapWmBase(r *server.Resource) *WmBase {
96 if r == nil {
97 return nil
98 }
99 return &WmBase{r}
100}
101
102const WmBaseRequestDestroy uint32 = 0
103const WmBaseRequestCreatePositioner uint32 = 1
104const WmBaseRequestGetXdgSurface uint32 = 2
105const WmBaseRequestPong uint32 = 3
106const WmBaseEventPing uint32 = 0
107
108// WmBaseError .
109type WmBaseError uint32
110
111const (
112 WmBaseErrorRole WmBaseError = 0
113 WmBaseErrorDefunctSurfaces WmBaseError = 1
114 WmBaseErrorNotTheTopmostPopup WmBaseError = 2
115 WmBaseErrorInvalidPopupParent WmBaseError = 3
116 WmBaseErrorInvalidSurfaceState WmBaseError = 4
117 WmBaseErrorInvalidPositioner WmBaseError = 5
118 WmBaseErrorUnresponsive WmBaseError = 6
119)
120
121// WmBaseHandler handles xdg_wm_base requests.
122type WmBaseHandler interface {
123 Destroy(self *WmBase)
124 CreatePositioner(self *WmBase, id uint32)
125 GetXdgSurface(self *WmBase, id uint32, surface *wayland.Surface)
126 Pong(self *WmBase, serial uint32)
127}
128
129func NewWmBase(c server.Client, version int32, id uint32, h WmBaseHandler) (*WmBase, error) {
130 if h == nil {
131 return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_wm_base")
132 }
133 var self *WmBase
134 r, err := c.CreateResource(WmBaseInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) {
135 switch opcode {
136 case 0:
137 h.Destroy(self)
138 self.Destroy()
139 case 1:
140 h.CreatePositioner(self, args[0].NewID())
141 case 2:
142 h.GetXdgSurface(self, args[0].NewID(), wayland.WrapSurface(args[1].Resource()))
143 case 3:
144 h.Pong(self, args[0].Uint())
145 }
146 })
147 if err != nil {
148 return nil, err
149 }
150 self = WrapWmBase(r)
151 r.Data = self
152 return self, nil
153}
154
155// SendPing check if the client is alive.
156func (self *WmBase) SendPing(serial uint32) {
157 self.PostEvent(WmBaseEventPing, server.Uint(serial))
158}
159func NewWmBaseGlobal(d *server.Display, version int32, bind server.BindFunc) error {
160 return d.CreateGlobal(WmBaseInterface, version, bind)
161}
162
163// Positioner child surface positioner.
164type Positioner struct{ *server.Resource }
165
166func WrapPositioner(r *server.Resource) *Positioner {
167 if r == nil {
168 return nil
169 }
170 return &Positioner{r}
171}
172
173const PositionerRequestDestroy uint32 = 0
174const PositionerRequestSetSize uint32 = 1
175const PositionerRequestSetAnchorRect uint32 = 2
176const PositionerRequestSetAnchor uint32 = 3
177const PositionerRequestSetGravity uint32 = 4
178const PositionerRequestSetConstraintAdjustment uint32 = 5
179const PositionerRequestSetOffset uint32 = 6
180const PositionerRequestSetReactive uint32 = 7
181const PositionerRequestSetParentSize uint32 = 8
182const PositionerRequestSetParentConfigure uint32 = 9
183
184// PositionerError .
185type PositionerError uint32
186
187const (
188 PositionerErrorInvalidInput PositionerError = 0
189)
190
191// PositionerAnchor .
192type PositionerAnchor uint32
193
194const (
195 PositionerAnchorNone PositionerAnchor = 0
196 PositionerAnchorTop PositionerAnchor = 1
197 PositionerAnchorBottom PositionerAnchor = 2
198 PositionerAnchorLeft PositionerAnchor = 3
199 PositionerAnchorRight PositionerAnchor = 4
200 PositionerAnchorTopLeft PositionerAnchor = 5
201 PositionerAnchorBottomLeft PositionerAnchor = 6
202 PositionerAnchorTopRight PositionerAnchor = 7
203 PositionerAnchorBottomRight PositionerAnchor = 8
204)
205
206// PositionerGravity .
207type PositionerGravity uint32
208
209const (
210 PositionerGravityNone PositionerGravity = 0
211 PositionerGravityTop PositionerGravity = 1
212 PositionerGravityBottom PositionerGravity = 2
213 PositionerGravityLeft PositionerGravity = 3
214 PositionerGravityRight PositionerGravity = 4
215 PositionerGravityTopLeft PositionerGravity = 5
216 PositionerGravityBottomLeft PositionerGravity = 6
217 PositionerGravityTopRight PositionerGravity = 7
218 PositionerGravityBottomRight PositionerGravity = 8
219)
220
221// PositionerConstraintAdjustment constraint adjustments (bitfield).
222type PositionerConstraintAdjustment uint32
223
224const (
225 PositionerConstraintAdjustmentNone PositionerConstraintAdjustment = 0
226 PositionerConstraintAdjustmentSlideX PositionerConstraintAdjustment = 1
227 PositionerConstraintAdjustmentSlideY PositionerConstraintAdjustment = 2
228 PositionerConstraintAdjustmentFlipX PositionerConstraintAdjustment = 4
229 PositionerConstraintAdjustmentFlipY PositionerConstraintAdjustment = 8
230 PositionerConstraintAdjustmentResizeX PositionerConstraintAdjustment = 16
231 PositionerConstraintAdjustmentResizeY PositionerConstraintAdjustment = 32
232)
233
234// PositionerHandler handles xdg_positioner requests.
235type PositionerHandler interface {
236 Destroy(self *Positioner)
237 SetSize(self *Positioner, width int32, height int32)
238 SetAnchorRect(self *Positioner, x int32, y int32, width int32, height int32)
239 SetAnchor(self *Positioner, anchor uint32)
240 SetGravity(self *Positioner, gravity uint32)
241 SetConstraintAdjustment(self *Positioner, constraintAdjustment uint32)
242 SetOffset(self *Positioner, x int32, y int32)
243 SetReactive(self *Positioner)
244 SetParentSize(self *Positioner, parentWidth int32, parentHeight int32)
245 SetParentConfigure(self *Positioner, serial uint32)
246}
247
248func NewPositioner(c server.Client, version int32, id uint32, h PositionerHandler) (*Positioner, error) {
249 if h == nil {
250 return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_positioner")
251 }
252 var self *Positioner
253 r, err := c.CreateResource(PositionerInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) {
254 switch opcode {
255 case 0:
256 h.Destroy(self)
257 self.Destroy()
258 case 1:
259 h.SetSize(self, args[0].Int(), args[1].Int())
260 case 2:
261 h.SetAnchorRect(self, args[0].Int(), args[1].Int(), args[2].Int(), args[3].Int())
262 case 3:
263 h.SetAnchor(self, args[0].Uint())
264 case 4:
265 h.SetGravity(self, args[0].Uint())
266 case 5:
267 h.SetConstraintAdjustment(self, args[0].Uint())
268 case 6:
269 h.SetOffset(self, args[0].Int(), args[1].Int())
270 case 7:
271 h.SetReactive(self)
272 case 8:
273 h.SetParentSize(self, args[0].Int(), args[1].Int())
274 case 9:
275 h.SetParentConfigure(self, args[0].Uint())
276 }
277 })
278 if err != nil {
279 return nil, err
280 }
281 self = WrapPositioner(r)
282 r.Data = self
283 return self, nil
284}
285func NewPositionerGlobal(d *server.Display, version int32, bind server.BindFunc) error {
286 return d.CreateGlobal(PositionerInterface, version, bind)
287}
288
289// Surface desktop user interface surface base interface.
290type Surface struct{ *server.Resource }
291
292func WrapSurface(r *server.Resource) *Surface {
293 if r == nil {
294 return nil
295 }
296 return &Surface{r}
297}
298
299const SurfaceRequestDestroy uint32 = 0
300const SurfaceRequestGetToplevel uint32 = 1
301const SurfaceRequestGetPopup uint32 = 2
302const SurfaceRequestSetWindowGeometry uint32 = 3
303const SurfaceRequestAckConfigure uint32 = 4
304const SurfaceEventConfigure uint32 = 0
305
306// SurfaceError .
307type SurfaceError uint32
308
309const (
310 SurfaceErrorNotConstructed SurfaceError = 1
311 SurfaceErrorAlreadyConstructed SurfaceError = 2
312 SurfaceErrorUnconfiguredBuffer SurfaceError = 3
313 SurfaceErrorInvalidSerial SurfaceError = 4
314 SurfaceErrorInvalidSize SurfaceError = 5
315 SurfaceErrorDefunctRoleObject SurfaceError = 6
316)
317
318// SurfaceHandler handles xdg_surface requests.
319type SurfaceHandler interface {
320 Destroy(self *Surface)
321 GetToplevel(self *Surface, id uint32)
322 GetPopup(self *Surface, id uint32, parent *Surface, positioner *Positioner)
323 SetWindowGeometry(self *Surface, x int32, y int32, width int32, height int32)
324 AckConfigure(self *Surface, serial uint32)
325}
326
327func NewSurface(c server.Client, version int32, id uint32, h SurfaceHandler) (*Surface, error) {
328 if h == nil {
329 return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_surface")
330 }
331 var self *Surface
332 r, err := c.CreateResource(SurfaceInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) {
333 switch opcode {
334 case 0:
335 h.Destroy(self)
336 self.Destroy()
337 case 1:
338 h.GetToplevel(self, args[0].NewID())
339 case 2:
340 h.GetPopup(self, args[0].NewID(), WrapSurface(args[1].Resource()), WrapPositioner(args[2].Resource()))
341 case 3:
342 h.SetWindowGeometry(self, args[0].Int(), args[1].Int(), args[2].Int(), args[3].Int())
343 case 4:
344 h.AckConfigure(self, args[0].Uint())
345 }
346 })
347 if err != nil {
348 return nil, err
349 }
350 self = WrapSurface(r)
351 r.Data = self
352 return self, nil
353}
354
355// SendConfigure suggest a surface change.
356func (self *Surface) SendConfigure(serial uint32) {
357 self.PostEvent(SurfaceEventConfigure, server.Uint(serial))
358}
359func NewSurfaceGlobal(d *server.Display, version int32, bind server.BindFunc) error {
360 return d.CreateGlobal(SurfaceInterface, version, bind)
361}
362
363// Toplevel toplevel surface.
364type Toplevel struct{ *server.Resource }
365
366func WrapToplevel(r *server.Resource) *Toplevel {
367 if r == nil {
368 return nil
369 }
370 return &Toplevel{r}
371}
372
373const ToplevelRequestDestroy uint32 = 0
374const ToplevelRequestSetParent uint32 = 1
375const ToplevelRequestSetTitle uint32 = 2
376const ToplevelRequestSetAppId uint32 = 3
377const ToplevelRequestShowWindowMenu uint32 = 4
378const ToplevelRequestMove uint32 = 5
379const ToplevelRequestResize uint32 = 6
380const ToplevelRequestSetMaxSize uint32 = 7
381const ToplevelRequestSetMinSize uint32 = 8
382const ToplevelRequestSetMaximized uint32 = 9
383const ToplevelRequestUnsetMaximized uint32 = 10
384const ToplevelRequestSetFullscreen uint32 = 11
385const ToplevelRequestUnsetFullscreen uint32 = 12
386const ToplevelRequestSetMinimized uint32 = 13
387const ToplevelEventConfigure uint32 = 0
388const ToplevelEventClose uint32 = 1
389const ToplevelEventConfigureBounds uint32 = 2
390const ToplevelEventWmCapabilities uint32 = 3
391
392// ToplevelError .
393type ToplevelError uint32
394
395const (
396 ToplevelErrorInvalidResizeEdge ToplevelError = 0
397 ToplevelErrorInvalidParent ToplevelError = 1
398 ToplevelErrorInvalidSize ToplevelError = 2
399)
400
401// ToplevelResizeEdge edge values for resizing.
402type ToplevelResizeEdge uint32
403
404const (
405 ToplevelResizeEdgeNone ToplevelResizeEdge = 0
406 ToplevelResizeEdgeTop ToplevelResizeEdge = 1
407 ToplevelResizeEdgeBottom ToplevelResizeEdge = 2
408 ToplevelResizeEdgeLeft ToplevelResizeEdge = 4
409 ToplevelResizeEdgeTopLeft ToplevelResizeEdge = 5
410 ToplevelResizeEdgeBottomLeft ToplevelResizeEdge = 6
411 ToplevelResizeEdgeRight ToplevelResizeEdge = 8
412 ToplevelResizeEdgeTopRight ToplevelResizeEdge = 9
413 ToplevelResizeEdgeBottomRight ToplevelResizeEdge = 10
414)
415
416// ToplevelState types of state on the surface.
417type ToplevelState uint32
418
419const (
420 ToplevelStateMaximized ToplevelState = 1
421 ToplevelStateFullscreen ToplevelState = 2
422 ToplevelStateResizing ToplevelState = 3
423 ToplevelStateActivated ToplevelState = 4
424 ToplevelStateTiledLeft ToplevelState = 5
425 ToplevelStateTiledRight ToplevelState = 6
426 ToplevelStateTiledTop ToplevelState = 7
427 ToplevelStateTiledBottom ToplevelState = 8
428 ToplevelStateSuspended ToplevelState = 9
429 ToplevelStateConstrainedLeft ToplevelState = 10
430 ToplevelStateConstrainedRight ToplevelState = 11
431 ToplevelStateConstrainedTop ToplevelState = 12
432 ToplevelStateConstrainedBottom ToplevelState = 13
433)
434
435// ToplevelWmCapabilities .
436type ToplevelWmCapabilities uint32
437
438const (
439 ToplevelWmCapabilitiesWindowMenu ToplevelWmCapabilities = 1
440 ToplevelWmCapabilitiesMaximize ToplevelWmCapabilities = 2
441 ToplevelWmCapabilitiesFullscreen ToplevelWmCapabilities = 3
442 ToplevelWmCapabilitiesMinimize ToplevelWmCapabilities = 4
443)
444
445// ToplevelHandler handles xdg_toplevel requests.
446type ToplevelHandler interface {
447 Destroy(self *Toplevel)
448 SetParent(self *Toplevel, parent *Toplevel)
449 SetTitle(self *Toplevel, title string)
450 SetAppId(self *Toplevel, appId string)
451 ShowWindowMenu(self *Toplevel, seat *wayland.Seat, serial uint32, x int32, y int32)
452 Move(self *Toplevel, seat *wayland.Seat, serial uint32)
453 Resize(self *Toplevel, seat *wayland.Seat, serial uint32, edges uint32)
454 SetMaxSize(self *Toplevel, width int32, height int32)
455 SetMinSize(self *Toplevel, width int32, height int32)
456 SetMaximized(self *Toplevel)
457 UnsetMaximized(self *Toplevel)
458 SetFullscreen(self *Toplevel, output *wayland.Output)
459 UnsetFullscreen(self *Toplevel)
460 SetMinimized(self *Toplevel)
461}
462
463func NewToplevel(c server.Client, version int32, id uint32, h ToplevelHandler) (*Toplevel, error) {
464 if h == nil {
465 return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_toplevel")
466 }
467 var self *Toplevel
468 r, err := c.CreateResource(ToplevelInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) {
469 switch opcode {
470 case 0:
471 h.Destroy(self)
472 self.Destroy()
473 case 1:
474 h.SetParent(self, WrapToplevel(args[0].Resource()))
475 case 2:
476 h.SetTitle(self, args[0].String())
477 case 3:
478 h.SetAppId(self, args[0].String())
479 case 4:
480 h.ShowWindowMenu(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint(), args[2].Int(), args[3].Int())
481 case 5:
482 h.Move(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint())
483 case 6:
484 h.Resize(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint(), args[2].Uint())
485 case 7:
486 h.SetMaxSize(self, args[0].Int(), args[1].Int())
487 case 8:
488 h.SetMinSize(self, args[0].Int(), args[1].Int())
489 case 9:
490 h.SetMaximized(self)
491 case 10:
492 h.UnsetMaximized(self)
493 case 11:
494 h.SetFullscreen(self, wayland.WrapOutput(args[0].Resource()))
495 case 12:
496 h.UnsetFullscreen(self)
497 case 13:
498 h.SetMinimized(self)
499 }
500 })
501 if err != nil {
502 return nil, err
503 }
504 self = WrapToplevel(r)
505 r.Data = self
506 return self, nil
507}
508
509// SendConfigure suggest a surface change.
510func (self *Toplevel) SendConfigure(width int32, height int32, states []byte) {
511 var p runtime.Pinner
512 defer p.Unpin()
513 self.PostEvent(ToplevelEventConfigure, server.Int(width), server.Int(height), server.Array(&p, states))
514}
515
516// SendClose surface wants to be closed.
517func (self *Toplevel) SendClose() {
518 self.PostEvent(ToplevelEventClose)
519}
520
521// SendConfigureBounds recommended window geometry bounds (since version 4).
522func (self *Toplevel) SendConfigureBounds(width int32, height int32) {
523 self.PostEvent(ToplevelEventConfigureBounds, server.Int(width), server.Int(height))
524}
525
526// SendWmCapabilities compositor capabilities (since version 5).
527func (self *Toplevel) SendWmCapabilities(capabilities []byte) {
528 var p runtime.Pinner
529 defer p.Unpin()
530 self.PostEvent(ToplevelEventWmCapabilities, server.Array(&p, capabilities))
531}
532func NewToplevelGlobal(d *server.Display, version int32, bind server.BindFunc) error {
533 return d.CreateGlobal(ToplevelInterface, version, bind)
534}
535
536// Popup short-lived, popup surfaces for menus.
537type Popup struct{ *server.Resource }
538
539func WrapPopup(r *server.Resource) *Popup {
540 if r == nil {
541 return nil
542 }
543 return &Popup{r}
544}
545
546const PopupRequestDestroy uint32 = 0
547const PopupRequestGrab uint32 = 1
548const PopupRequestReposition uint32 = 2
549const PopupEventConfigure uint32 = 0
550const PopupEventPopupDone uint32 = 1
551const PopupEventRepositioned uint32 = 2
552
553// PopupError .
554type PopupError uint32
555
556const (
557 PopupErrorInvalidGrab PopupError = 0
558)
559
560// PopupHandler handles xdg_popup requests.
561type PopupHandler interface {
562 Destroy(self *Popup)
563 Grab(self *Popup, seat *wayland.Seat, serial uint32)
564 Reposition(self *Popup, positioner *Positioner, token uint32)
565}
566
567func NewPopup(c server.Client, version int32, id uint32, h PopupHandler) (*Popup, error) {
568 if h == nil {
569 return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_popup")
570 }
571 var self *Popup
572 r, err := c.CreateResource(PopupInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) {
573 switch opcode {
574 case 0:
575 h.Destroy(self)
576 self.Destroy()
577 case 1:
578 h.Grab(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint())
579 case 2:
580 h.Reposition(self, WrapPositioner(args[0].Resource()), args[1].Uint())
581 }
582 })
583 if err != nil {
584 return nil, err
585 }
586 self = WrapPopup(r)
587 r.Data = self
588 return self, nil
589}
590
591// SendConfigure configure the popup surface.
592func (self *Popup) SendConfigure(x int32, y int32, width int32, height int32) {
593 self.PostEvent(PopupEventConfigure, server.Int(x), server.Int(y), server.Int(width), server.Int(height))
594}
595
596// SendPopupDone popup interaction is done.
597func (self *Popup) SendPopupDone() {
598 self.PostEvent(PopupEventPopupDone)
599}
600
601// SendRepositioned signal the completion of a repositioned request (since version 3).
602func (self *Popup) SendRepositioned(token uint32) {
603 self.PostEvent(PopupEventRepositioned, server.Uint(token))
604}
605func NewPopupGlobal(d *server.Display, version int32, bind server.BindFunc) error {
606 return d.CreateGlobal(PopupInterface, version, bind)
607}
608func resourceOf(v interface{ GetResource() *server.Resource }) *server.Resource {
609 if v == nil {
610 return nil
611 }
612 return v.GetResource()
613}
614func (self *WmBase) GetResource() *server.Resource {
615 if self == nil {
616 return nil
617 }
618 return self.Resource
619}
620func (self *Positioner) GetResource() *server.Resource {
621 if self == nil {
622 return nil
623 }
624 return self.Resource
625}
626func (self *Surface) GetResource() *server.Resource {
627 if self == nil {
628 return nil
629 }
630 return self.Resource
631}
632func (self *Toplevel) GetResource() *server.Resource {
633 if self == nil {
634 return nil
635 }
636 return self.Resource
637}
638func (self *Popup) GetResource() *server.Resource {
639 if self == nil {
640 return nil
641 }
642 return self.Resource
643}