// Code generated by wlbgen; DO NOT EDIT. // Upstream protocol copyright and license: // 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. package xdgshell import ( "fmt" wayland "github.com/bnema/go-wayland-bindings/server/wayland" "github.com/bnema/purego-libwayland/server" "runtime" ) var WmBaseInterface *server.Interface var PositionerInterface *server.Interface var SurfaceInterface *server.Interface var ToplevelInterface *server.Interface var PopupInterface *server.Interface func init() { WmBaseInterface = &server.Interface{Name: "xdg_wm_base", Version: 7} PositionerInterface = &server.Interface{Name: "xdg_positioner", Version: 7} SurfaceInterface = &server.Interface{Name: "xdg_surface", Version: 7} ToplevelInterface = &server.Interface{Name: "xdg_toplevel", Version: 7} PopupInterface = &server.Interface{Name: "xdg_popup", Version: 7} WmBaseInterface.Requests = []server.Message{ {Name: "destroy", Signature: "", Types: []*server.Interface{}}, {Name: "create_positioner", Signature: "n", Types: []*server.Interface{PositionerInterface}}, {Name: "get_xdg_surface", Signature: "no", Types: []*server.Interface{SurfaceInterface, wayland.SurfaceInterface}}, {Name: "pong", Signature: "u", Types: []*server.Interface{nil}}, } WmBaseInterface.Events = []server.Message{ {Name: "ping", Signature: "u", Types: []*server.Interface{nil}}, } PositionerInterface.Requests = []server.Message{ {Name: "destroy", Signature: "", Types: []*server.Interface{}}, {Name: "set_size", Signature: "ii", Types: []*server.Interface{nil, nil}}, {Name: "set_anchor_rect", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}}, {Name: "set_anchor", Signature: "u", Types: []*server.Interface{nil}}, {Name: "set_gravity", Signature: "u", Types: []*server.Interface{nil}}, {Name: "set_constraint_adjustment", Signature: "u", Types: []*server.Interface{nil}}, {Name: "set_offset", Signature: "ii", Types: []*server.Interface{nil, nil}}, {Name: "set_reactive", Signature: "3", Types: []*server.Interface{}}, {Name: "set_parent_size", Signature: "3ii", Types: []*server.Interface{nil, nil}}, {Name: "set_parent_configure", Signature: "3u", Types: []*server.Interface{nil}}, } PositionerInterface.Events = []server.Message{} SurfaceInterface.Requests = []server.Message{ {Name: "destroy", Signature: "", Types: []*server.Interface{}}, {Name: "get_toplevel", Signature: "n", Types: []*server.Interface{ToplevelInterface}}, {Name: "get_popup", Signature: "n?oo", Types: []*server.Interface{PopupInterface, SurfaceInterface, PositionerInterface}}, {Name: "set_window_geometry", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}}, {Name: "ack_configure", Signature: "u", Types: []*server.Interface{nil}}, } SurfaceInterface.Events = []server.Message{ {Name: "configure", Signature: "u", Types: []*server.Interface{nil}}, } ToplevelInterface.Requests = []server.Message{ {Name: "destroy", Signature: "", Types: []*server.Interface{}}, {Name: "set_parent", Signature: "?o", Types: []*server.Interface{ToplevelInterface}}, {Name: "set_title", Signature: "s", Types: []*server.Interface{nil}}, {Name: "set_app_id", Signature: "s", Types: []*server.Interface{nil}}, {Name: "show_window_menu", Signature: "ouii", Types: []*server.Interface{wayland.SeatInterface, nil, nil, nil}}, {Name: "move", Signature: "ou", Types: []*server.Interface{wayland.SeatInterface, nil}}, {Name: "resize", Signature: "ouu", Types: []*server.Interface{wayland.SeatInterface, nil, nil}}, {Name: "set_max_size", Signature: "ii", Types: []*server.Interface{nil, nil}}, {Name: "set_min_size", Signature: "ii", Types: []*server.Interface{nil, nil}}, {Name: "set_maximized", Signature: "", Types: []*server.Interface{}}, {Name: "unset_maximized", Signature: "", Types: []*server.Interface{}}, {Name: "set_fullscreen", Signature: "?o", Types: []*server.Interface{wayland.OutputInterface}}, {Name: "unset_fullscreen", Signature: "", Types: []*server.Interface{}}, {Name: "set_minimized", Signature: "", Types: []*server.Interface{}}, } ToplevelInterface.Events = []server.Message{ {Name: "configure", Signature: "iia", Types: []*server.Interface{nil, nil, nil}}, {Name: "close", Signature: "", Types: []*server.Interface{}}, {Name: "configure_bounds", Signature: "4ii", Types: []*server.Interface{nil, nil}}, {Name: "wm_capabilities", Signature: "5a", Types: []*server.Interface{nil}}, } PopupInterface.Requests = []server.Message{ {Name: "destroy", Signature: "", Types: []*server.Interface{}}, {Name: "grab", Signature: "ou", Types: []*server.Interface{wayland.SeatInterface, nil}}, {Name: "reposition", Signature: "3ou", Types: []*server.Interface{PositionerInterface, nil}}, } PopupInterface.Events = []server.Message{ {Name: "configure", Signature: "iiii", Types: []*server.Interface{nil, nil, nil, nil}}, {Name: "popup_done", Signature: "", Types: []*server.Interface{}}, {Name: "repositioned", Signature: "3u", Types: []*server.Interface{nil}}, } if err := server.NewInterfaces(WmBaseInterface, PositionerInterface, SurfaceInterface, ToplevelInterface, PopupInterface); err != nil { panic(err) } } // WmBase create desktop-style surfaces. type WmBase struct{ *server.Resource } func WrapWmBase(r *server.Resource) *WmBase { if r == nil { return nil } return &WmBase{r} } const WmBaseRequestDestroy uint32 = 0 const WmBaseRequestCreatePositioner uint32 = 1 const WmBaseRequestGetXdgSurface uint32 = 2 const WmBaseRequestPong uint32 = 3 const WmBaseEventPing uint32 = 0 // WmBaseError . type WmBaseError uint32 const ( WmBaseErrorRole WmBaseError = 0 WmBaseErrorDefunctSurfaces WmBaseError = 1 WmBaseErrorNotTheTopmostPopup WmBaseError = 2 WmBaseErrorInvalidPopupParent WmBaseError = 3 WmBaseErrorInvalidSurfaceState WmBaseError = 4 WmBaseErrorInvalidPositioner WmBaseError = 5 WmBaseErrorUnresponsive WmBaseError = 6 ) // WmBaseHandler handles xdg_wm_base requests. type WmBaseHandler interface { Destroy(self *WmBase) CreatePositioner(self *WmBase, id uint32) GetXdgSurface(self *WmBase, id uint32, surface *wayland.Surface) Pong(self *WmBase, serial uint32) } func NewWmBase(c server.Client, version int32, id uint32, h WmBaseHandler) (*WmBase, error) { if h == nil { return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_wm_base") } var self *WmBase r, err := c.CreateResource(WmBaseInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) { switch opcode { case 0: h.Destroy(self) self.Destroy() case 1: h.CreatePositioner(self, args[0].NewID()) case 2: h.GetXdgSurface(self, args[0].NewID(), wayland.WrapSurface(args[1].Resource())) case 3: h.Pong(self, args[0].Uint()) } }) if err != nil { return nil, err } self = WrapWmBase(r) r.Data = self return self, nil } // SendPing check if the client is alive. func (self *WmBase) SendPing(serial uint32) { self.PostEvent(WmBaseEventPing, server.Uint(serial)) } func NewWmBaseGlobal(d *server.Display, version int32, bind server.BindFunc) error { return d.CreateGlobal(WmBaseInterface, version, bind) } // Positioner child surface positioner. type Positioner struct{ *server.Resource } func WrapPositioner(r *server.Resource) *Positioner { if r == nil { return nil } return &Positioner{r} } const PositionerRequestDestroy uint32 = 0 const PositionerRequestSetSize uint32 = 1 const PositionerRequestSetAnchorRect uint32 = 2 const PositionerRequestSetAnchor uint32 = 3 const PositionerRequestSetGravity uint32 = 4 const PositionerRequestSetConstraintAdjustment uint32 = 5 const PositionerRequestSetOffset uint32 = 6 const PositionerRequestSetReactive uint32 = 7 const PositionerRequestSetParentSize uint32 = 8 const PositionerRequestSetParentConfigure uint32 = 9 // PositionerError . type PositionerError uint32 const ( PositionerErrorInvalidInput PositionerError = 0 ) // PositionerAnchor . type PositionerAnchor uint32 const ( PositionerAnchorNone PositionerAnchor = 0 PositionerAnchorTop PositionerAnchor = 1 PositionerAnchorBottom PositionerAnchor = 2 PositionerAnchorLeft PositionerAnchor = 3 PositionerAnchorRight PositionerAnchor = 4 PositionerAnchorTopLeft PositionerAnchor = 5 PositionerAnchorBottomLeft PositionerAnchor = 6 PositionerAnchorTopRight PositionerAnchor = 7 PositionerAnchorBottomRight PositionerAnchor = 8 ) // PositionerGravity . type PositionerGravity uint32 const ( PositionerGravityNone PositionerGravity = 0 PositionerGravityTop PositionerGravity = 1 PositionerGravityBottom PositionerGravity = 2 PositionerGravityLeft PositionerGravity = 3 PositionerGravityRight PositionerGravity = 4 PositionerGravityTopLeft PositionerGravity = 5 PositionerGravityBottomLeft PositionerGravity = 6 PositionerGravityTopRight PositionerGravity = 7 PositionerGravityBottomRight PositionerGravity = 8 ) // PositionerConstraintAdjustment constraint adjustments (bitfield). type PositionerConstraintAdjustment uint32 const ( PositionerConstraintAdjustmentNone PositionerConstraintAdjustment = 0 PositionerConstraintAdjustmentSlideX PositionerConstraintAdjustment = 1 PositionerConstraintAdjustmentSlideY PositionerConstraintAdjustment = 2 PositionerConstraintAdjustmentFlipX PositionerConstraintAdjustment = 4 PositionerConstraintAdjustmentFlipY PositionerConstraintAdjustment = 8 PositionerConstraintAdjustmentResizeX PositionerConstraintAdjustment = 16 PositionerConstraintAdjustmentResizeY PositionerConstraintAdjustment = 32 ) // PositionerHandler handles xdg_positioner requests. type PositionerHandler interface { Destroy(self *Positioner) SetSize(self *Positioner, width int32, height int32) SetAnchorRect(self *Positioner, x int32, y int32, width int32, height int32) SetAnchor(self *Positioner, anchor uint32) SetGravity(self *Positioner, gravity uint32) SetConstraintAdjustment(self *Positioner, constraintAdjustment uint32) SetOffset(self *Positioner, x int32, y int32) SetReactive(self *Positioner) SetParentSize(self *Positioner, parentWidth int32, parentHeight int32) SetParentConfigure(self *Positioner, serial uint32) } func NewPositioner(c server.Client, version int32, id uint32, h PositionerHandler) (*Positioner, error) { if h == nil { return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_positioner") } var self *Positioner r, err := c.CreateResource(PositionerInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) { switch opcode { case 0: h.Destroy(self) self.Destroy() case 1: h.SetSize(self, args[0].Int(), args[1].Int()) case 2: h.SetAnchorRect(self, args[0].Int(), args[1].Int(), args[2].Int(), args[3].Int()) case 3: h.SetAnchor(self, args[0].Uint()) case 4: h.SetGravity(self, args[0].Uint()) case 5: h.SetConstraintAdjustment(self, args[0].Uint()) case 6: h.SetOffset(self, args[0].Int(), args[1].Int()) case 7: h.SetReactive(self) case 8: h.SetParentSize(self, args[0].Int(), args[1].Int()) case 9: h.SetParentConfigure(self, args[0].Uint()) } }) if err != nil { return nil, err } self = WrapPositioner(r) r.Data = self return self, nil } func NewPositionerGlobal(d *server.Display, version int32, bind server.BindFunc) error { return d.CreateGlobal(PositionerInterface, version, bind) } // Surface desktop user interface surface base interface. type Surface struct{ *server.Resource } func WrapSurface(r *server.Resource) *Surface { if r == nil { return nil } return &Surface{r} } const SurfaceRequestDestroy uint32 = 0 const SurfaceRequestGetToplevel uint32 = 1 const SurfaceRequestGetPopup uint32 = 2 const SurfaceRequestSetWindowGeometry uint32 = 3 const SurfaceRequestAckConfigure uint32 = 4 const SurfaceEventConfigure uint32 = 0 // SurfaceError . type SurfaceError uint32 const ( SurfaceErrorNotConstructed SurfaceError = 1 SurfaceErrorAlreadyConstructed SurfaceError = 2 SurfaceErrorUnconfiguredBuffer SurfaceError = 3 SurfaceErrorInvalidSerial SurfaceError = 4 SurfaceErrorInvalidSize SurfaceError = 5 SurfaceErrorDefunctRoleObject SurfaceError = 6 ) // SurfaceHandler handles xdg_surface requests. type SurfaceHandler interface { Destroy(self *Surface) GetToplevel(self *Surface, id uint32) GetPopup(self *Surface, id uint32, parent *Surface, positioner *Positioner) SetWindowGeometry(self *Surface, x int32, y int32, width int32, height int32) AckConfigure(self *Surface, serial uint32) } func NewSurface(c server.Client, version int32, id uint32, h SurfaceHandler) (*Surface, error) { if h == nil { return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_surface") } var self *Surface r, err := c.CreateResource(SurfaceInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) { switch opcode { case 0: h.Destroy(self) self.Destroy() case 1: h.GetToplevel(self, args[0].NewID()) case 2: h.GetPopup(self, args[0].NewID(), WrapSurface(args[1].Resource()), WrapPositioner(args[2].Resource())) case 3: h.SetWindowGeometry(self, args[0].Int(), args[1].Int(), args[2].Int(), args[3].Int()) case 4: h.AckConfigure(self, args[0].Uint()) } }) if err != nil { return nil, err } self = WrapSurface(r) r.Data = self return self, nil } // SendConfigure suggest a surface change. func (self *Surface) SendConfigure(serial uint32) { self.PostEvent(SurfaceEventConfigure, server.Uint(serial)) } func NewSurfaceGlobal(d *server.Display, version int32, bind server.BindFunc) error { return d.CreateGlobal(SurfaceInterface, version, bind) } // Toplevel toplevel surface. type Toplevel struct{ *server.Resource } func WrapToplevel(r *server.Resource) *Toplevel { if r == nil { return nil } return &Toplevel{r} } const ToplevelRequestDestroy uint32 = 0 const ToplevelRequestSetParent uint32 = 1 const ToplevelRequestSetTitle uint32 = 2 const ToplevelRequestSetAppId uint32 = 3 const ToplevelRequestShowWindowMenu uint32 = 4 const ToplevelRequestMove uint32 = 5 const ToplevelRequestResize uint32 = 6 const ToplevelRequestSetMaxSize uint32 = 7 const ToplevelRequestSetMinSize uint32 = 8 const ToplevelRequestSetMaximized uint32 = 9 const ToplevelRequestUnsetMaximized uint32 = 10 const ToplevelRequestSetFullscreen uint32 = 11 const ToplevelRequestUnsetFullscreen uint32 = 12 const ToplevelRequestSetMinimized uint32 = 13 const ToplevelEventConfigure uint32 = 0 const ToplevelEventClose uint32 = 1 const ToplevelEventConfigureBounds uint32 = 2 const ToplevelEventWmCapabilities uint32 = 3 // ToplevelError . type ToplevelError uint32 const ( ToplevelErrorInvalidResizeEdge ToplevelError = 0 ToplevelErrorInvalidParent ToplevelError = 1 ToplevelErrorInvalidSize ToplevelError = 2 ) // ToplevelResizeEdge edge values for resizing. type ToplevelResizeEdge uint32 const ( ToplevelResizeEdgeNone ToplevelResizeEdge = 0 ToplevelResizeEdgeTop ToplevelResizeEdge = 1 ToplevelResizeEdgeBottom ToplevelResizeEdge = 2 ToplevelResizeEdgeLeft ToplevelResizeEdge = 4 ToplevelResizeEdgeTopLeft ToplevelResizeEdge = 5 ToplevelResizeEdgeBottomLeft ToplevelResizeEdge = 6 ToplevelResizeEdgeRight ToplevelResizeEdge = 8 ToplevelResizeEdgeTopRight ToplevelResizeEdge = 9 ToplevelResizeEdgeBottomRight ToplevelResizeEdge = 10 ) // ToplevelState types of state on the surface. type ToplevelState uint32 const ( ToplevelStateMaximized ToplevelState = 1 ToplevelStateFullscreen ToplevelState = 2 ToplevelStateResizing ToplevelState = 3 ToplevelStateActivated ToplevelState = 4 ToplevelStateTiledLeft ToplevelState = 5 ToplevelStateTiledRight ToplevelState = 6 ToplevelStateTiledTop ToplevelState = 7 ToplevelStateTiledBottom ToplevelState = 8 ToplevelStateSuspended ToplevelState = 9 ToplevelStateConstrainedLeft ToplevelState = 10 ToplevelStateConstrainedRight ToplevelState = 11 ToplevelStateConstrainedTop ToplevelState = 12 ToplevelStateConstrainedBottom ToplevelState = 13 ) // ToplevelWmCapabilities . type ToplevelWmCapabilities uint32 const ( ToplevelWmCapabilitiesWindowMenu ToplevelWmCapabilities = 1 ToplevelWmCapabilitiesMaximize ToplevelWmCapabilities = 2 ToplevelWmCapabilitiesFullscreen ToplevelWmCapabilities = 3 ToplevelWmCapabilitiesMinimize ToplevelWmCapabilities = 4 ) // ToplevelHandler handles xdg_toplevel requests. type ToplevelHandler interface { Destroy(self *Toplevel) SetParent(self *Toplevel, parent *Toplevel) SetTitle(self *Toplevel, title string) SetAppId(self *Toplevel, appId string) ShowWindowMenu(self *Toplevel, seat *wayland.Seat, serial uint32, x int32, y int32) Move(self *Toplevel, seat *wayland.Seat, serial uint32) Resize(self *Toplevel, seat *wayland.Seat, serial uint32, edges uint32) SetMaxSize(self *Toplevel, width int32, height int32) SetMinSize(self *Toplevel, width int32, height int32) SetMaximized(self *Toplevel) UnsetMaximized(self *Toplevel) SetFullscreen(self *Toplevel, output *wayland.Output) UnsetFullscreen(self *Toplevel) SetMinimized(self *Toplevel) } func NewToplevel(c server.Client, version int32, id uint32, h ToplevelHandler) (*Toplevel, error) { if h == nil { return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_toplevel") } var self *Toplevel r, err := c.CreateResource(ToplevelInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) { switch opcode { case 0: h.Destroy(self) self.Destroy() case 1: h.SetParent(self, WrapToplevel(args[0].Resource())) case 2: h.SetTitle(self, args[0].String()) case 3: h.SetAppId(self, args[0].String()) case 4: h.ShowWindowMenu(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint(), args[2].Int(), args[3].Int()) case 5: h.Move(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint()) case 6: h.Resize(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint(), args[2].Uint()) case 7: h.SetMaxSize(self, args[0].Int(), args[1].Int()) case 8: h.SetMinSize(self, args[0].Int(), args[1].Int()) case 9: h.SetMaximized(self) case 10: h.UnsetMaximized(self) case 11: h.SetFullscreen(self, wayland.WrapOutput(args[0].Resource())) case 12: h.UnsetFullscreen(self) case 13: h.SetMinimized(self) } }) if err != nil { return nil, err } self = WrapToplevel(r) r.Data = self return self, nil } // SendConfigure suggest a surface change. func (self *Toplevel) SendConfigure(width int32, height int32, states []byte) { var p runtime.Pinner defer p.Unpin() self.PostEvent(ToplevelEventConfigure, server.Int(width), server.Int(height), server.Array(&p, states)) } // SendClose surface wants to be closed. func (self *Toplevel) SendClose() { self.PostEvent(ToplevelEventClose) } // SendConfigureBounds recommended window geometry bounds (since version 4). func (self *Toplevel) SendConfigureBounds(width int32, height int32) { self.PostEvent(ToplevelEventConfigureBounds, server.Int(width), server.Int(height)) } // SendWmCapabilities compositor capabilities (since version 5). func (self *Toplevel) SendWmCapabilities(capabilities []byte) { var p runtime.Pinner defer p.Unpin() self.PostEvent(ToplevelEventWmCapabilities, server.Array(&p, capabilities)) } func NewToplevelGlobal(d *server.Display, version int32, bind server.BindFunc) error { return d.CreateGlobal(ToplevelInterface, version, bind) } // Popup short-lived, popup surfaces for menus. type Popup struct{ *server.Resource } func WrapPopup(r *server.Resource) *Popup { if r == nil { return nil } return &Popup{r} } const PopupRequestDestroy uint32 = 0 const PopupRequestGrab uint32 = 1 const PopupRequestReposition uint32 = 2 const PopupEventConfigure uint32 = 0 const PopupEventPopupDone uint32 = 1 const PopupEventRepositioned uint32 = 2 // PopupError . type PopupError uint32 const ( PopupErrorInvalidGrab PopupError = 0 ) // PopupHandler handles xdg_popup requests. type PopupHandler interface { Destroy(self *Popup) Grab(self *Popup, seat *wayland.Seat, serial uint32) Reposition(self *Popup, positioner *Positioner, token uint32) } func NewPopup(c server.Client, version int32, id uint32, h PopupHandler) (*Popup, error) { if h == nil { return nil, fmt.Errorf("purego-libwayland: nil handler for xdg_popup") } var self *Popup r, err := c.CreateResource(PopupInterface, version, id, func(_ *server.Resource, opcode uint32, args []server.Arg) { switch opcode { case 0: h.Destroy(self) self.Destroy() case 1: h.Grab(self, wayland.WrapSeat(args[0].Resource()), args[1].Uint()) case 2: h.Reposition(self, WrapPositioner(args[0].Resource()), args[1].Uint()) } }) if err != nil { return nil, err } self = WrapPopup(r) r.Data = self return self, nil } // SendConfigure configure the popup surface. func (self *Popup) SendConfigure(x int32, y int32, width int32, height int32) { self.PostEvent(PopupEventConfigure, server.Int(x), server.Int(y), server.Int(width), server.Int(height)) } // SendPopupDone popup interaction is done. func (self *Popup) SendPopupDone() { self.PostEvent(PopupEventPopupDone) } // SendRepositioned signal the completion of a repositioned request (since version 3). func (self *Popup) SendRepositioned(token uint32) { self.PostEvent(PopupEventRepositioned, server.Uint(token)) } func NewPopupGlobal(d *server.Display, version int32, bind server.BindFunc) error { return d.CreateGlobal(PopupInterface, version, bind) } func resourceOf(v interface{ GetResource() *server.Resource }) *server.Resource { if v == nil { return nil } return v.GetResource() } func (self *WmBase) GetResource() *server.Resource { if self == nil { return nil } return self.Resource } func (self *Positioner) GetResource() *server.Resource { if self == nil { return nil } return self.Resource } func (self *Surface) GetResource() *server.Resource { if self == nil { return nil } return self.Resource } func (self *Toplevel) GetResource() *server.Resource { if self == nil { return nil } return self.Resource } func (self *Popup) GetResource() *server.Resource { if self == nil { return nil } return self.Resource }