v0.2.0 107c393

xdgshell.go RawHistoryFolder

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}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 1

Tags 14

↑↓ moveenter openesc close