1 /++ 2 + Module generated by wayland:scanner-v0.3.1 for xdg_shell_unstable_v6 protocol 3 + xml protocol: xdg-shell-unstable-v6.xml 4 + generated code: client 5 +/ 6 module zxdg_shell_v6; 7 /+ 8 + Protocol copyright: 9 + 10 + Copyright © 2008-2013 Kristian Høgsberg 11 + Copyright © 2013 Rafael Antognolli 12 + Copyright © 2013 Jasper St. Pierre 13 + Copyright © 2010-2013 Intel Corporation 14 + 15 + Permission is hereby granted, free of charge, to any person obtaining a 16 + copy of this software and associated documentation files (the "Software"), 17 + to deal in the Software without restriction, including without limitation 18 + the rights to use, copy, modify, merge, publish, distribute, sublicense, 19 + and/or sell copies of the Software, and to permit persons to whom the 20 + Software is furnished to do so, subject to the following conditions: 21 + 22 + The above copyright notice and this permission notice (including the next 23 + paragraph) shall be included in all copies or substantial portions of the 24 + Software. 25 + 26 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 27 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 28 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 29 + THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 30 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 31 + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 32 + DEALINGS IN THE SOFTWARE. 33 +/ 34 /+ 35 + Bindings copyright: 36 + 37 + Copyright © 2017-2019 Rémi Thebault 38 +/ 39 import wayland.client; 40 import wayland.native.client; 41 import wayland.native.util; 42 import wayland.util; 43 44 import std.exception : enforce; 45 import std..string : fromStringz, toStringz; 46 47 /++ 48 + create desktop-style surfaces 49 + 50 + xdg_shell allows clients to turn a wl_surface into a "real window" 51 + which can be dragged, resized, stacked, and moved around by the 52 + user. Everything about this interface is suited towards traditional 53 + desktop environments. 54 +/ 55 final class ZxdgShellV6 : WlProxy 56 { 57 /// Version of xdg_shell_unstable_v6.zxdg_shell_v6 58 enum ver = 1; 59 60 /// Build a ZxdgShellV6 from a native object. 61 private this(wl_proxy* native) 62 { 63 super(native); 64 wl_proxy_add_listener(proxy, cast(void_func_t*)&wl_d_zxdg_shell_v6_listener, null); 65 } 66 67 /// Interface object that creates ZxdgShellV6 objects. 68 static @property immutable(WlProxyInterface) iface() 69 { 70 return zxdgShellV6Iface; 71 } 72 73 /// Op-code of ZxdgShellV6.destroy. 74 enum destroyOpCode = 0; 75 /// Op-code of ZxdgShellV6.createPositioner. 76 enum createPositionerOpCode = 1; 77 /// Op-code of ZxdgShellV6.getXdgSurface. 78 enum getXdgSurfaceOpCode = 2; 79 /// Op-code of ZxdgShellV6.pong. 80 enum pongOpCode = 3; 81 82 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgShellV6.destroy. 83 enum destroySinceVersion = 1; 84 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgShellV6.createPositioner. 85 enum createPositionerSinceVersion = 1; 86 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgShellV6.getXdgSurface. 87 enum getXdgSurfaceSinceVersion = 1; 88 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgShellV6.pong. 89 enum pongSinceVersion = 1; 90 91 /// xdg_shell_unstable_v6 protocol version introducing ZxdgShellV6.onPing. 92 enum onPingSinceVersion = 1; 93 94 /// Event delegate signature of ZxdgShellV6.onPing. 95 alias OnPingEventDg = void delegate(ZxdgShellV6 zxdgShellV6, 96 uint serial); 97 98 enum Error : uint 99 { 100 /// given wl_surface has another role 101 role = 0, 102 /// xdg_shell was destroyed before children 103 defunctSurfaces = 1, 104 /// the client tried to map or destroy a non-topmost popup 105 notTheTopmostPopup = 2, 106 /// the client specified an invalid popup parent surface 107 invalidPopupParent = 3, 108 /// the client provided an invalid surface state 109 invalidSurfaceState = 4, 110 /// the client provided an invalid positioner 111 invalidPositioner = 5, 112 } 113 114 /++ 115 + destroy xdg_shell 116 + 117 + Destroy this xdg_shell object. 118 + 119 + Destroying a bound xdg_shell object while there are surfaces 120 + still alive created by this xdg_shell object instance is illegal 121 + and will result in a protocol error. 122 +/ 123 void destroy() 124 { 125 wl_proxy_marshal( 126 proxy, destroyOpCode 127 ); 128 super.destroyNotify(); 129 } 130 131 /++ 132 + create a positioner object 133 + 134 + Create a positioner object. A positioner object is used to position 135 + surfaces relative to some parent surface. See the interface description 136 + and xdg_surface.get_popup for details. 137 +/ 138 ZxdgPositionerV6 createPositioner() 139 { 140 auto _pp = wl_proxy_marshal_constructor( 141 proxy, createPositionerOpCode, ZxdgPositionerV6.iface.native, null 142 ); 143 if (!_pp) return null; 144 auto _p = WlProxy.get(_pp); 145 if (_p) return cast(ZxdgPositionerV6)_p; 146 return new ZxdgPositionerV6(_pp); 147 } 148 149 /++ 150 + create a shell surface from a surface 151 + 152 + This creates an xdg_surface for the given surface. While xdg_surface 153 + itself is not a role, the corresponding surface may only be assigned 154 + a role extending xdg_surface, such as xdg_toplevel or xdg_popup. 155 + 156 + This creates an xdg_surface for the given surface. An xdg_surface is 157 + used as basis to define a role to a given surface, such as xdg_toplevel 158 + or xdg_popup. It also manages functionality shared between xdg_surface 159 + based surface roles. 160 + 161 + See the documentation of xdg_surface for more details about what an 162 + xdg_surface is and how it is used. 163 +/ 164 ZxdgSurfaceV6 getXdgSurface(WlSurface surface) 165 { 166 auto _pp = wl_proxy_marshal_constructor( 167 proxy, getXdgSurfaceOpCode, ZxdgSurfaceV6.iface.native, null, 168 surface.proxy 169 ); 170 if (!_pp) return null; 171 auto _p = WlProxy.get(_pp); 172 if (_p) return cast(ZxdgSurfaceV6)_p; 173 return new ZxdgSurfaceV6(_pp); 174 } 175 176 /++ 177 + respond to a ping event 178 + 179 + A client must respond to a ping event with a pong request or 180 + the client may be deemed unresponsive. See xdg_shell.ping. 181 +/ 182 void pong(uint serial) 183 { 184 wl_proxy_marshal( 185 proxy, pongOpCode, serial 186 ); 187 } 188 189 /++ 190 + check if the client is alive 191 + 192 + The ping event asks the client if it's still alive. Pass the 193 + serial specified in the event back to the compositor by sending 194 + a "pong" request back with the specified serial. See xdg_shell.ping. 195 + 196 + Compositors can use this to determine if the client is still 197 + alive. It's unspecified what will happen if the client doesn't 198 + respond to the ping request, or in what timeframe. Clients should 199 + try to respond in a reasonable amount of time. 200 + 201 + A compositor is free to ping in any way it wants, but a client must 202 + always respond to any xdg_shell object it created. 203 +/ 204 @property void onPing(OnPingEventDg dg) 205 { 206 _onPing = dg; 207 } 208 209 private OnPingEventDg _onPing; 210 } 211 212 /++ 213 + child surface positioner 214 + 215 + The xdg_positioner provides a collection of rules for the placement of a 216 + child surface relative to a parent surface. Rules can be defined to ensure 217 + the child surface remains within the visible area's borders, and to 218 + specify how the child surface changes its position, such as sliding along 219 + an axis, or flipping around a rectangle. These positioner-created rules are 220 + constrained by the requirement that a child surface must intersect with or 221 + be at least partially adjacent to its parent surface. 222 + 223 + See the various requests for details about possible rules. 224 + 225 + At the time of the request, the compositor makes a copy of the rules 226 + specified by the xdg_positioner. Thus, after the request is complete the 227 + xdg_positioner object can be destroyed or reused; further changes to the 228 + object will have no effect on previous usages. 229 + 230 + For an xdg_positioner object to be considered complete, it must have a 231 + non-zero size set by set_size, and a non-zero anchor rectangle set by 232 + set_anchor_rect. Passing an incomplete xdg_positioner object when 233 + positioning a surface raises an error. 234 +/ 235 final class ZxdgPositionerV6 : WlProxy 236 { 237 /// Version of xdg_shell_unstable_v6.zxdg_positioner_v6 238 enum ver = 1; 239 240 /// Build a ZxdgPositionerV6 from a native object. 241 private this(wl_proxy* native) 242 { 243 super(native); 244 } 245 246 /// Interface object that creates ZxdgPositionerV6 objects. 247 static @property immutable(WlProxyInterface) iface() 248 { 249 return zxdgPositionerV6Iface; 250 } 251 252 /// Op-code of ZxdgPositionerV6.destroy. 253 enum destroyOpCode = 0; 254 /// Op-code of ZxdgPositionerV6.setSize. 255 enum setSizeOpCode = 1; 256 /// Op-code of ZxdgPositionerV6.setAnchorRect. 257 enum setAnchorRectOpCode = 2; 258 /// Op-code of ZxdgPositionerV6.setAnchor. 259 enum setAnchorOpCode = 3; 260 /// Op-code of ZxdgPositionerV6.setGravity. 261 enum setGravityOpCode = 4; 262 /// Op-code of ZxdgPositionerV6.setConstraintAdjustment. 263 enum setConstraintAdjustmentOpCode = 5; 264 /// Op-code of ZxdgPositionerV6.setOffset. 265 enum setOffsetOpCode = 6; 266 267 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.destroy. 268 enum destroySinceVersion = 1; 269 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setSize. 270 enum setSizeSinceVersion = 1; 271 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setAnchorRect. 272 enum setAnchorRectSinceVersion = 1; 273 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setAnchor. 274 enum setAnchorSinceVersion = 1; 275 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setGravity. 276 enum setGravitySinceVersion = 1; 277 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setConstraintAdjustment. 278 enum setConstraintAdjustmentSinceVersion = 1; 279 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPositionerV6.setOffset. 280 enum setOffsetSinceVersion = 1; 281 282 enum Error : uint 283 { 284 /// invalid input provided 285 invalidInput = 0, 286 } 287 288 enum Anchor : uint 289 { 290 /// the center of the anchor rectangle 291 none = 0, 292 /// the top edge of the anchor rectangle 293 top = 1, 294 /// the bottom edge of the anchor rectangle 295 bottom = 2, 296 /// the left edge of the anchor rectangle 297 left = 4, 298 /// the right edge of the anchor rectangle 299 right = 8, 300 } 301 302 enum Gravity : uint 303 { 304 /// center over the anchor edge 305 none = 0, 306 /// position above the anchor edge 307 top = 1, 308 /// position below the anchor edge 309 bottom = 2, 310 /// position to the left of the anchor edge 311 left = 4, 312 /// position to the right of the anchor edge 313 right = 8, 314 } 315 316 /++ 317 + constraint adjustments 318 + 319 + The constraint adjustment value define ways the compositor will adjust 320 + the position of the surface, if the unadjusted position would result 321 + in the surface being partly constrained. 322 + 323 + Whether a surface is considered 'constrained' is left to the compositor 324 + to determine. For example, the surface may be partly outside the 325 + compositor's defined 'work area', thus necessitating the child surface's 326 + position be adjusted until it is entirely inside the work area. 327 + 328 + The adjustments can be combined, according to a defined precedence: 1$(RPAREN) 329 + Flip, 2$(RPAREN) Slide, 3$(RPAREN) Resize. 330 +/ 331 enum ConstraintAdjustment : uint 332 { 333 none = 0, 334 slideX = 1, 335 slideY = 2, 336 flipX = 4, 337 flipY = 8, 338 resizeX = 16, 339 resizeY = 32, 340 } 341 342 /++ 343 + destroy the xdg_positioner object 344 + 345 + Notify the compositor that the xdg_positioner will no longer be used. 346 +/ 347 void destroy() 348 { 349 wl_proxy_marshal( 350 proxy, destroyOpCode 351 ); 352 super.destroyNotify(); 353 } 354 355 /++ 356 + set the size of the to-be positioned rectangle 357 + 358 + Set the size of the surface that is to be positioned with the positioner 359 + object. The size is in surface-local coordinates and corresponds to the 360 + window geometry. See xdg_surface.set_window_geometry. 361 + 362 + If a zero or negative size is set the invalid_input error is raised. 363 +/ 364 void setSize(int width, 365 int height) 366 { 367 wl_proxy_marshal( 368 proxy, setSizeOpCode, width, height 369 ); 370 } 371 372 /++ 373 + set the anchor rectangle within the parent surface 374 + 375 + Specify the anchor rectangle within the parent surface that the child 376 + surface will be placed relative to. The rectangle is relative to the 377 + window geometry as defined by xdg_surface.set_window_geometry of the 378 + parent surface. The rectangle must be at least 1x1 large. 379 + 380 + When the xdg_positioner object is used to position a child surface, the 381 + anchor rectangle may not extend outside the window geometry of the 382 + positioned child's parent surface. 383 + 384 + If a zero or negative size is set the invalid_input error is raised. 385 +/ 386 void setAnchorRect(int x, 387 int y, 388 int width, 389 int height) 390 { 391 wl_proxy_marshal( 392 proxy, setAnchorRectOpCode, x, y, width, height 393 ); 394 } 395 396 /++ 397 + set anchor rectangle anchor edges 398 + 399 + Defines a set of edges for the anchor rectangle. These are used to 400 + derive an anchor point that the child surface will be positioned 401 + relative to. If two orthogonal edges are specified $(LPAREN)e.g. 'top' and 402 + 'left'$(RPAREN), then the anchor point will be the intersection of the edges 403 + $(LPAREN)e.g. the top left position of the rectangle$(RPAREN); otherwise, the derived 404 + anchor point will be centered on the specified edge, or in the center of 405 + the anchor rectangle if no edge is specified. 406 + 407 + If two parallel anchor edges are specified $(LPAREN)e.g. 'left' and 'right'$(RPAREN), 408 + the invalid_input error is raised. 409 +/ 410 void setAnchor(Anchor anchor) 411 { 412 wl_proxy_marshal( 413 proxy, setAnchorOpCode, anchor 414 ); 415 } 416 417 /++ 418 + set child surface gravity 419 + 420 + Defines in what direction a surface should be positioned, relative to 421 + the anchor point of the parent surface. If two orthogonal gravities are 422 + specified $(LPAREN)e.g. 'bottom' and 'right'$(RPAREN), then the child surface will be 423 + placed in the specified direction; otherwise, the child surface will be 424 + centered over the anchor point on any axis that had no gravity 425 + specified. 426 + 427 + If two parallel gravities are specified $(LPAREN)e.g. 'left' and 'right'$(RPAREN), the 428 + invalid_input error is raised. 429 +/ 430 void setGravity(Gravity gravity) 431 { 432 wl_proxy_marshal( 433 proxy, setGravityOpCode, gravity 434 ); 435 } 436 437 /++ 438 + set the adjustment to be done when constrained 439 + 440 + Specify how the window should be positioned if the originally intended 441 + position caused the surface to be constrained, meaning at least 442 + partially outside positioning boundaries set by the compositor. The 443 + adjustment is set by constructing a bitmask describing the adjustment to 444 + be made when the surface is constrained on that axis. 445 + 446 + If no bit for one axis is set, the compositor will assume that the child 447 + surface should not change its position on that axis when constrained. 448 + 449 + If more than one bit for one axis is set, the order of how adjustments 450 + are applied is specified in the corresponding adjustment descriptions. 451 + 452 + The default adjustment is none. 453 +/ 454 void setConstraintAdjustment(uint constraintAdjustment) 455 { 456 wl_proxy_marshal( 457 proxy, setConstraintAdjustmentOpCode, constraintAdjustment 458 ); 459 } 460 461 /++ 462 + set surface position offset 463 + 464 + Specify the surface position offset relative to the position of the 465 + anchor on the anchor rectangle and the anchor on the surface. For 466 + example if the anchor of the anchor rectangle is at $(LPAREN)x, y$(RPAREN), the surface 467 + has the gravity bottom|right, and the offset is $(LPAREN)ox, oy$(RPAREN), the calculated 468 + surface position will be $(LPAREN)x + ox, y + oy$(RPAREN). The offset position of the 469 + surface is the one used for constraint testing. See 470 + set_constraint_adjustment. 471 + 472 + An example use case is placing a popup menu on top of a user interface 473 + element, while aligning the user interface element of the parent surface 474 + with some user interface element placed somewhere in the popup surface. 475 +/ 476 void setOffset(int x, 477 int y) 478 { 479 wl_proxy_marshal( 480 proxy, setOffsetOpCode, x, y 481 ); 482 } 483 } 484 485 /++ 486 + desktop user interface surface base interface 487 + 488 + An interface that may be implemented by a wl_surface, for 489 + implementations that provide a desktop-style user interface. 490 + 491 + It provides a base set of functionality required to construct user 492 + interface elements requiring management by the compositor, such as 493 + toplevel windows, menus, etc. The types of functionality are split into 494 + xdg_surface roles. 495 + 496 + Creating an xdg_surface does not set the role for a wl_surface. In order 497 + to map an xdg_surface, the client must create a role-specific object 498 + using, e.g., get_toplevel, get_popup. The wl_surface for any given 499 + xdg_surface can have at most one role, and may not be assigned any role 500 + not based on xdg_surface. 501 + 502 + A role must be assigned before any other requests are made to the 503 + xdg_surface object. 504 + 505 + The client must call wl_surface.commit on the corresponding wl_surface 506 + for the xdg_surface state to take effect. 507 + 508 + Creating an xdg_surface from a wl_surface which has a buffer attached or 509 + committed is a client error, and any attempts by a client to attach or 510 + manipulate a buffer prior to the first xdg_surface.configure call must 511 + also be treated as errors. 512 + 513 + For a surface to be mapped by the compositor, the following conditions 514 + must be met: $(LPAREN)1$(RPAREN) the client has assigned a xdg_surface based role to the 515 + surface, $(LPAREN)2$(RPAREN) the client has set and committed the xdg_surface state and 516 + the role dependent state to the surface and $(LPAREN)3$(RPAREN) the client has committed a 517 + buffer to the surface. 518 +/ 519 final class ZxdgSurfaceV6 : WlProxy 520 { 521 /// Version of xdg_shell_unstable_v6.zxdg_surface_v6 522 enum ver = 1; 523 524 /// Build a ZxdgSurfaceV6 from a native object. 525 private this(wl_proxy* native) 526 { 527 super(native); 528 wl_proxy_add_listener(proxy, cast(void_func_t*)&wl_d_zxdg_surface_v6_listener, null); 529 } 530 531 /// Interface object that creates ZxdgSurfaceV6 objects. 532 static @property immutable(WlProxyInterface) iface() 533 { 534 return zxdgSurfaceV6Iface; 535 } 536 537 /// Op-code of ZxdgSurfaceV6.destroy. 538 enum destroyOpCode = 0; 539 /// Op-code of ZxdgSurfaceV6.getToplevel. 540 enum getToplevelOpCode = 1; 541 /// Op-code of ZxdgSurfaceV6.getPopup. 542 enum getPopupOpCode = 2; 543 /// Op-code of ZxdgSurfaceV6.setWindowGeometry. 544 enum setWindowGeometryOpCode = 3; 545 /// Op-code of ZxdgSurfaceV6.ackConfigure. 546 enum ackConfigureOpCode = 4; 547 548 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgSurfaceV6.destroy. 549 enum destroySinceVersion = 1; 550 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgSurfaceV6.getToplevel. 551 enum getToplevelSinceVersion = 1; 552 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgSurfaceV6.getPopup. 553 enum getPopupSinceVersion = 1; 554 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgSurfaceV6.setWindowGeometry. 555 enum setWindowGeometrySinceVersion = 1; 556 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgSurfaceV6.ackConfigure. 557 enum ackConfigureSinceVersion = 1; 558 559 /// xdg_shell_unstable_v6 protocol version introducing ZxdgSurfaceV6.onConfigure. 560 enum onConfigureSinceVersion = 1; 561 562 /// Event delegate signature of ZxdgSurfaceV6.onConfigure. 563 alias OnConfigureEventDg = void delegate(ZxdgSurfaceV6 zxdgSurfaceV6, 564 uint serial); 565 566 enum Error : uint 567 { 568 notConstructed = 1, 569 alreadyConstructed = 2, 570 unconfiguredBuffer = 3, 571 } 572 573 /++ 574 + destroy the xdg_surface 575 + 576 + Destroy the xdg_surface object. An xdg_surface must only be destroyed 577 + after its role object has been destroyed. 578 +/ 579 void destroy() 580 { 581 wl_proxy_marshal( 582 proxy, destroyOpCode 583 ); 584 super.destroyNotify(); 585 } 586 587 /++ 588 + assign the xdg_toplevel surface role 589 + 590 + This creates an xdg_toplevel object for the given xdg_surface and gives 591 + the associated wl_surface the xdg_toplevel role. 592 + 593 + See the documentation of xdg_toplevel for more details about what an 594 + xdg_toplevel is and how it is used. 595 +/ 596 ZxdgToplevelV6 getToplevel() 597 { 598 auto _pp = wl_proxy_marshal_constructor( 599 proxy, getToplevelOpCode, ZxdgToplevelV6.iface.native, null 600 ); 601 if (!_pp) return null; 602 auto _p = WlProxy.get(_pp); 603 if (_p) return cast(ZxdgToplevelV6)_p; 604 return new ZxdgToplevelV6(_pp); 605 } 606 607 /++ 608 + assign the xdg_popup surface role 609 + 610 + This creates an xdg_popup object for the given xdg_surface and gives the 611 + associated wl_surface the xdg_popup role. 612 + 613 + See the documentation of xdg_popup for more details about what an 614 + xdg_popup is and how it is used. 615 +/ 616 ZxdgPopupV6 getPopup(ZxdgSurfaceV6 parent, 617 ZxdgPositionerV6 positioner) 618 { 619 auto _pp = wl_proxy_marshal_constructor( 620 proxy, getPopupOpCode, ZxdgPopupV6.iface.native, null, parent.proxy, 621 positioner.proxy 622 ); 623 if (!_pp) return null; 624 auto _p = WlProxy.get(_pp); 625 if (_p) return cast(ZxdgPopupV6)_p; 626 return new ZxdgPopupV6(_pp); 627 } 628 629 /++ 630 + set the new window geometry 631 + 632 + The window geometry of a surface is its "visible bounds" from the 633 + user's perspective. Client-side decorations often have invisible 634 + portions like drop-shadows which should be ignored for the 635 + purposes of aligning, placing and constraining windows. 636 + 637 + The window geometry is double buffered, and will be applied at the 638 + time wl_surface.commit of the corresponding wl_surface is called. 639 + 640 + Once the window geometry of the surface is set, it is not possible to 641 + unset it, and it will remain the same until set_window_geometry is 642 + called again, even if a new subsurface or buffer is attached. 643 + 644 + If never set, the value is the full bounds of the surface, 645 + including any subsurfaces. This updates dynamically on every 646 + commit. This unset is meant for extremely simple clients. 647 + 648 + The arguments are given in the surface-local coordinate space of 649 + the wl_surface associated with this xdg_surface. 650 + 651 + The width and height must be greater than zero. Setting an invalid size 652 + will raise an error. When applied, the effective window geometry will be 653 + the set window geometry clamped to the bounding rectangle of the 654 + combined geometry of the surface of the xdg_surface and the associated 655 + subsurfaces. 656 +/ 657 void setWindowGeometry(int x, 658 int y, 659 int width, 660 int height) 661 { 662 wl_proxy_marshal( 663 proxy, setWindowGeometryOpCode, x, y, width, height 664 ); 665 } 666 667 /++ 668 + ack a configure event 669 + 670 + When a configure event is received, if a client commits the 671 + surface in response to the configure event, then the client 672 + must make an ack_configure request sometime before the commit 673 + request, passing along the serial of the configure event. 674 + 675 + For instance, for toplevel surfaces the compositor might use this 676 + information to move a surface to the top left only when the client has 677 + drawn itself for the maximized or fullscreen state. 678 + 679 + If the client receives multiple configure events before it 680 + can respond to one, it only has to ack the last configure event. 681 + 682 + A client is not required to commit immediately after sending 683 + an ack_configure request - it may even ack_configure several times 684 + before its next surface commit. 685 + 686 + A client may send multiple ack_configure requests before committing, but 687 + only the last request sent before a commit indicates which configure 688 + event the client really is responding to. 689 +/ 690 void ackConfigure(uint serial) 691 { 692 wl_proxy_marshal( 693 proxy, ackConfigureOpCode, serial 694 ); 695 } 696 697 /++ 698 + suggest a surface change 699 + 700 + The configure event marks the end of a configure sequence. A configure 701 + sequence is a set of one or more events configuring the state of the 702 + xdg_surface, including the final xdg_surface.configure event. 703 + 704 + Where applicable, xdg_surface surface roles will during a configure 705 + sequence extend this event as a latched state sent as events before the 706 + xdg_surface.configure event. Such events should be considered to make up 707 + a set of atomically applied configuration states, where the 708 + xdg_surface.configure commits the accumulated state. 709 + 710 + Clients should arrange their surface for the new states, and then send 711 + an ack_configure request with the serial sent in this configure event at 712 + some point before committing the new surface. 713 + 714 + If the client receives multiple configure events before it can respond 715 + to one, it is free to discard all but the last event it received. 716 +/ 717 @property void onConfigure(OnConfigureEventDg dg) 718 { 719 _onConfigure = dg; 720 } 721 722 private OnConfigureEventDg _onConfigure; 723 } 724 725 /++ 726 + toplevel surface 727 + 728 + This interface defines an xdg_surface role which allows a surface to, 729 + among other things, set window-like properties such as maximize, 730 + fullscreen, and minimize, set application-specific metadata like title and 731 + id, and well as trigger user interactive operations such as interactive 732 + resize and move. 733 +/ 734 final class ZxdgToplevelV6 : WlProxy 735 { 736 /// Version of xdg_shell_unstable_v6.zxdg_toplevel_v6 737 enum ver = 1; 738 739 /// Build a ZxdgToplevelV6 from a native object. 740 private this(wl_proxy* native) 741 { 742 super(native); 743 wl_proxy_add_listener(proxy, cast(void_func_t*)&wl_d_zxdg_toplevel_v6_listener, null); 744 } 745 746 /// Interface object that creates ZxdgToplevelV6 objects. 747 static @property immutable(WlProxyInterface) iface() 748 { 749 return zxdgToplevelV6Iface; 750 } 751 752 /// Op-code of ZxdgToplevelV6.destroy. 753 enum destroyOpCode = 0; 754 /// Op-code of ZxdgToplevelV6.setParent. 755 enum setParentOpCode = 1; 756 /// Op-code of ZxdgToplevelV6.setTitle. 757 enum setTitleOpCode = 2; 758 /// Op-code of ZxdgToplevelV6.setAppId. 759 enum setAppIdOpCode = 3; 760 /// Op-code of ZxdgToplevelV6.showWindowMenu. 761 enum showWindowMenuOpCode = 4; 762 /// Op-code of ZxdgToplevelV6.move. 763 enum moveOpCode = 5; 764 /// Op-code of ZxdgToplevelV6.resize. 765 enum resizeOpCode = 6; 766 /// Op-code of ZxdgToplevelV6.setMaxSize. 767 enum setMaxSizeOpCode = 7; 768 /// Op-code of ZxdgToplevelV6.setMinSize. 769 enum setMinSizeOpCode = 8; 770 /// Op-code of ZxdgToplevelV6.setMaximized. 771 enum setMaximizedOpCode = 9; 772 /// Op-code of ZxdgToplevelV6.unsetMaximized. 773 enum unsetMaximizedOpCode = 10; 774 /// Op-code of ZxdgToplevelV6.setFullscreen. 775 enum setFullscreenOpCode = 11; 776 /// Op-code of ZxdgToplevelV6.unsetFullscreen. 777 enum unsetFullscreenOpCode = 12; 778 /// Op-code of ZxdgToplevelV6.setMinimized. 779 enum setMinimizedOpCode = 13; 780 781 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.destroy. 782 enum destroySinceVersion = 1; 783 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setParent. 784 enum setParentSinceVersion = 1; 785 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setTitle. 786 enum setTitleSinceVersion = 1; 787 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setAppId. 788 enum setAppIdSinceVersion = 1; 789 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.showWindowMenu. 790 enum showWindowMenuSinceVersion = 1; 791 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.move. 792 enum moveSinceVersion = 1; 793 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.resize. 794 enum resizeSinceVersion = 1; 795 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setMaxSize. 796 enum setMaxSizeSinceVersion = 1; 797 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setMinSize. 798 enum setMinSizeSinceVersion = 1; 799 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setMaximized. 800 enum setMaximizedSinceVersion = 1; 801 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.unsetMaximized. 802 enum unsetMaximizedSinceVersion = 1; 803 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setFullscreen. 804 enum setFullscreenSinceVersion = 1; 805 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.unsetFullscreen. 806 enum unsetFullscreenSinceVersion = 1; 807 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgToplevelV6.setMinimized. 808 enum setMinimizedSinceVersion = 1; 809 810 /// xdg_shell_unstable_v6 protocol version introducing ZxdgToplevelV6.onConfigure. 811 enum onConfigureSinceVersion = 1; 812 /// xdg_shell_unstable_v6 protocol version introducing ZxdgToplevelV6.onClose. 813 enum onCloseSinceVersion = 1; 814 815 /// Event delegate signature of ZxdgToplevelV6.onConfigure. 816 alias OnConfigureEventDg = void delegate(ZxdgToplevelV6 zxdgToplevelV6, 817 int width, 818 int height, 819 wl_array* states); 820 /// Event delegate signature of ZxdgToplevelV6.onClose. 821 alias OnCloseEventDg = void delegate(ZxdgToplevelV6 zxdgToplevelV6); 822 823 /++ 824 + edge values for resizing 825 + 826 + These values are used to indicate which edge of a surface 827 + is being dragged in a resize operation. 828 +/ 829 enum ResizeEdge : uint 830 { 831 none = 0, 832 top = 1, 833 bottom = 2, 834 left = 4, 835 topLeft = 5, 836 bottomLeft = 6, 837 right = 8, 838 topRight = 9, 839 bottomRight = 10, 840 } 841 842 /++ 843 + types of state on the surface 844 + 845 + The different state values used on the surface. This is designed for 846 + state values like maximized, fullscreen. It is paired with the 847 + configure event to ensure that both the client and the compositor 848 + setting the state can be synchronized. 849 + 850 + States set in this way are double-buffered. They will get applied on 851 + the next commit. 852 +/ 853 enum State : uint 854 { 855 /// the surface is maximized 856 maximized = 1, 857 /// the surface is fullscreen 858 fullscreen = 2, 859 /// the surface is being resized 860 resizing = 3, 861 /// the surface is now activated 862 activated = 4, 863 } 864 865 /++ 866 + destroy the xdg_toplevel 867 + 868 + Unmap and destroy the window. The window will be effectively 869 + hidden from the user's point of view, and all state like 870 + maximization, fullscreen, and so on, will be lost. 871 +/ 872 void destroy() 873 { 874 wl_proxy_marshal( 875 proxy, destroyOpCode 876 ); 877 super.destroyNotify(); 878 } 879 880 /++ 881 + set the parent of this surface 882 + 883 + Set the "parent" of this surface. This window should be stacked 884 + above a parent. The parent surface must be mapped as long as this 885 + surface is mapped. 886 + 887 + Parent windows should be set on dialogs, toolboxes, or other 888 + "auxiliary" surfaces, so that the parent is raised when the dialog 889 + is raised. 890 +/ 891 void setParent(ZxdgToplevelV6 parent) 892 { 893 wl_proxy_marshal( 894 proxy, setParentOpCode, parent.proxy 895 ); 896 } 897 898 /++ 899 + set surface title 900 + 901 + Set a short title for the surface. 902 + 903 + This string may be used to identify the surface in a task bar, 904 + window list, or other user interface elements provided by the 905 + compositor. 906 + 907 + The string must be encoded in UTF-8. 908 +/ 909 void setTitle(string title) 910 { 911 wl_proxy_marshal( 912 proxy, setTitleOpCode, toStringz(title) 913 ); 914 } 915 916 /++ 917 + set application ID 918 + 919 + Set an application identifier for the surface. 920 + 921 + The app ID identifies the general class of applications to which 922 + the surface belongs. The compositor can use this to group multiple 923 + surfaces together, or to determine how to launch a new application. 924 + 925 + For D-Bus activatable applications, the app ID is used as the D-Bus 926 + service name. 927 + 928 + The compositor shell will try to group application surfaces together 929 + by their app ID. As a best practice, it is suggested to select app 930 + ID's that match the basename of the application's .desktop file. 931 + For example, "org.freedesktop.FooViewer" where the .desktop file is 932 + "org.freedesktop.FooViewer.desktop". 933 + 934 + See the desktop-entry specification [0] for more details on 935 + application identifiers and how they relate to well-known D-Bus 936 + names and .desktop files. 937 + 938 + [0] http://standards.freedesktop.org/desktop-entry-spec/ 939 +/ 940 void setAppId(string appId) 941 { 942 wl_proxy_marshal( 943 proxy, setAppIdOpCode, toStringz(appId) 944 ); 945 } 946 947 /++ 948 + show the window menu 949 + 950 + Clients implementing client-side decorations might want to show 951 + a context menu when right-clicking on the decorations, giving the 952 + user a menu that they can use to maximize or minimize the window. 953 + 954 + This request asks the compositor to pop up such a window menu at 955 + the given position, relative to the local surface coordinates of 956 + the parent surface. There are no guarantees as to what menu items 957 + the window menu contains. 958 + 959 + This request must be used in response to some sort of user action 960 + like a button press, key press, or touch down event. 961 +/ 962 void showWindowMenu(WlSeat seat, 963 uint serial, 964 int x, 965 int y) 966 { 967 wl_proxy_marshal( 968 proxy, showWindowMenuOpCode, seat.proxy, serial, x, y 969 ); 970 } 971 972 /++ 973 + start an interactive move 974 + 975 + Start an interactive, user-driven move of the surface. 976 + 977 + This request must be used in response to some sort of user action 978 + like a button press, key press, or touch down event. The passed 979 + serial is used to determine the type of interactive move $(LPAREN)touch, 980 + pointer, etc$(RPAREN). 981 + 982 + The server may ignore move requests depending on the state of 983 + the surface $(LPAREN)e.g. fullscreen or maximized$(RPAREN), or if the passed serial 984 + is no longer valid. 985 + 986 + If triggered, the surface will lose the focus of the device 987 + $(LPAREN)wl_pointer, wl_touch, etc$(RPAREN) used for the move. It is up to the 988 + compositor to visually indicate that the move is taking place, such as 989 + updating a pointer cursor, during the move. There is no guarantee 990 + that the device focus will return when the move is completed. 991 +/ 992 void move(WlSeat seat, 993 uint serial) 994 { 995 wl_proxy_marshal( 996 proxy, moveOpCode, seat.proxy, serial 997 ); 998 } 999 1000 /++ 1001 + start an interactive resize 1002 + 1003 + Start a user-driven, interactive resize of the surface. 1004 + 1005 + This request must be used in response to some sort of user action 1006 + like a button press, key press, or touch down event. The passed 1007 + serial is used to determine the type of interactive resize $(LPAREN)touch, 1008 + pointer, etc$(RPAREN). 1009 + 1010 + The server may ignore resize requests depending on the state of 1011 + the surface $(LPAREN)e.g. fullscreen or maximized$(RPAREN). 1012 + 1013 + If triggered, the client will receive configure events with the 1014 + "resize" state enum value and the expected sizes. See the "resize" 1015 + enum value for more details about what is required. The client 1016 + must also acknowledge configure events using "ack_configure". After 1017 + the resize is completed, the client will receive another "configure" 1018 + event without the resize state. 1019 + 1020 + If triggered, the surface also will lose the focus of the device 1021 + $(LPAREN)wl_pointer, wl_touch, etc$(RPAREN) used for the resize. It is up to the 1022 + compositor to visually indicate that the resize is taking place, 1023 + such as updating a pointer cursor, during the resize. There is no 1024 + guarantee that the device focus will return when the resize is 1025 + completed. 1026 + 1027 + The edges parameter specifies how the surface should be resized, 1028 + and is one of the values of the resize_edge enum. The compositor 1029 + may use this information to update the surface position for 1030 + example when dragging the top left corner. The compositor may also 1031 + use this information to adapt its behavior, e.g. choose an 1032 + appropriate cursor image. 1033 +/ 1034 void resize(WlSeat seat, 1035 uint serial, 1036 uint edges) 1037 { 1038 wl_proxy_marshal( 1039 proxy, resizeOpCode, seat.proxy, serial, edges 1040 ); 1041 } 1042 1043 /++ 1044 + set the maximum size 1045 + 1046 + Set a maximum size for the window. 1047 + 1048 + The client can specify a maximum size so that the compositor does 1049 + not try to configure the window beyond this size. 1050 + 1051 + The width and height arguments are in window geometry coordinates. 1052 + See xdg_surface.set_window_geometry. 1053 + 1054 + Values set in this way are double-buffered. They will get applied 1055 + on the next commit. 1056 + 1057 + The compositor can use this information to allow or disallow 1058 + different states like maximize or fullscreen and draw accurate 1059 + animations. 1060 + 1061 + Similarly, a tiling window manager may use this information to 1062 + place and resize client windows in a more effective way. 1063 + 1064 + The client should not rely on the compositor to obey the maximum 1065 + size. The compositor may decide to ignore the values set by the 1066 + client and request a larger size. 1067 + 1068 + If never set, or a value of zero in the request, means that the 1069 + client has no expected maximum size in the given dimension. 1070 + As a result, a client wishing to reset the maximum size 1071 + to an unspecified state can use zero for width and height in the 1072 + request. 1073 + 1074 + Requesting a maximum size to be smaller than the minimum size of 1075 + a surface is illegal and will result in a protocol error. 1076 + 1077 + The width and height must be greater than or equal to zero. Using 1078 + strictly negative values for width and height will result in a 1079 + protocol error. 1080 +/ 1081 void setMaxSize(int width, 1082 int height) 1083 { 1084 wl_proxy_marshal( 1085 proxy, setMaxSizeOpCode, width, height 1086 ); 1087 } 1088 1089 /++ 1090 + set the minimum size 1091 + 1092 + Set a minimum size for the window. 1093 + 1094 + The client can specify a minimum size so that the compositor does 1095 + not try to configure the window below this size. 1096 + 1097 + The width and height arguments are in window geometry coordinates. 1098 + See xdg_surface.set_window_geometry. 1099 + 1100 + Values set in this way are double-buffered. They will get applied 1101 + on the next commit. 1102 + 1103 + The compositor can use this information to allow or disallow 1104 + different states like maximize or fullscreen and draw accurate 1105 + animations. 1106 + 1107 + Similarly, a tiling window manager may use this information to 1108 + place and resize client windows in a more effective way. 1109 + 1110 + The client should not rely on the compositor to obey the minimum 1111 + size. The compositor may decide to ignore the values set by the 1112 + client and request a smaller size. 1113 + 1114 + If never set, or a value of zero in the request, means that the 1115 + client has no expected minimum size in the given dimension. 1116 + As a result, a client wishing to reset the minimum size 1117 + to an unspecified state can use zero for width and height in the 1118 + request. 1119 + 1120 + Requesting a minimum size to be larger than the maximum size of 1121 + a surface is illegal and will result in a protocol error. 1122 + 1123 + The width and height must be greater than or equal to zero. Using 1124 + strictly negative values for width and height will result in a 1125 + protocol error. 1126 +/ 1127 void setMinSize(int width, 1128 int height) 1129 { 1130 wl_proxy_marshal( 1131 proxy, setMinSizeOpCode, width, height 1132 ); 1133 } 1134 1135 /++ 1136 + maximize the window 1137 + 1138 + Maximize the surface. 1139 + 1140 + After requesting that the surface should be maximized, the compositor 1141 + will respond by emitting a configure event with the "maximized" state 1142 + and the required window geometry. The client should then update its 1143 + content, drawing it in a maximized state, i.e. without shadow or other 1144 + decoration outside of the window geometry. The client must also 1145 + acknowledge the configure when committing the new content $(LPAREN)see 1146 + ack_configure$(RPAREN). 1147 + 1148 + It is up to the compositor to decide how and where to maximize the 1149 + surface, for example which output and what region of the screen should 1150 + be used. 1151 + 1152 + If the surface was already maximized, the compositor will still emit 1153 + a configure event with the "maximized" state. 1154 +/ 1155 void setMaximized() 1156 { 1157 wl_proxy_marshal( 1158 proxy, setMaximizedOpCode 1159 ); 1160 } 1161 1162 /++ 1163 + unmaximize the window 1164 + 1165 + Unmaximize the surface. 1166 + 1167 + After requesting that the surface should be unmaximized, the compositor 1168 + will respond by emitting a configure event without the "maximized" 1169 + state. If available, the compositor will include the window geometry 1170 + dimensions the window had prior to being maximized in the configure 1171 + request. The client must then update its content, drawing it in a 1172 + regular state, i.e. potentially with shadow, etc. The client must also 1173 + acknowledge the configure when committing the new content $(LPAREN)see 1174 + ack_configure$(RPAREN). 1175 + 1176 + It is up to the compositor to position the surface after it was 1177 + unmaximized; usually the position the surface had before maximizing, if 1178 + applicable. 1179 + 1180 + If the surface was already not maximized, the compositor will still 1181 + emit a configure event without the "maximized" state. 1182 +/ 1183 void unsetMaximized() 1184 { 1185 wl_proxy_marshal( 1186 proxy, unsetMaximizedOpCode 1187 ); 1188 } 1189 1190 /++ 1191 + set the window as fullscreen on a monitor 1192 + 1193 + Make the surface fullscreen. 1194 + 1195 + You can specify an output that you would prefer to be fullscreen. 1196 + If this value is NULL, it's up to the compositor to choose which 1197 + display will be used to map this surface. 1198 + 1199 + If the surface doesn't cover the whole output, the compositor will 1200 + position the surface in the center of the output and compensate with 1201 + black borders filling the rest of the output. 1202 +/ 1203 void setFullscreen(WlOutput output) 1204 { 1205 wl_proxy_marshal( 1206 proxy, setFullscreenOpCode, output.proxy 1207 ); 1208 } 1209 1210 void unsetFullscreen() 1211 { 1212 wl_proxy_marshal( 1213 proxy, unsetFullscreenOpCode 1214 ); 1215 } 1216 1217 /++ 1218 + set the window as minimized 1219 + 1220 + Request that the compositor minimize your surface. There is no 1221 + way to know if the surface is currently minimized, nor is there 1222 + any way to unset minimization on this surface. 1223 + 1224 + If you are looking to throttle redrawing when minimized, please 1225 + instead use the wl_surface.frame event for this, as this will 1226 + also work with live previews on windows in Alt-Tab, Expose or 1227 + similar compositor features. 1228 +/ 1229 void setMinimized() 1230 { 1231 wl_proxy_marshal( 1232 proxy, setMinimizedOpCode 1233 ); 1234 } 1235 1236 /++ 1237 + suggest a surface change 1238 + 1239 + This configure event asks the client to resize its toplevel surface or 1240 + to change its state. The configured state should not be applied 1241 + immediately. See xdg_surface.configure for details. 1242 + 1243 + The width and height arguments specify a hint to the window 1244 + about how its surface should be resized in window geometry 1245 + coordinates. See set_window_geometry. 1246 + 1247 + If the width or height arguments are zero, it means the client 1248 + should decide its own window dimension. This may happen when the 1249 + compositor needs to configure the state of the surface but doesn't 1250 + have any information about any previous or expected dimension. 1251 + 1252 + The states listed in the event specify how the width/height 1253 + arguments should be interpreted, and possibly how it should be 1254 + drawn. 1255 + 1256 + Clients must send an ack_configure in response to this event. See 1257 + xdg_surface.configure and xdg_surface.ack_configure for details. 1258 +/ 1259 @property void onConfigure(OnConfigureEventDg dg) 1260 { 1261 _onConfigure = dg; 1262 } 1263 1264 /++ 1265 + surface wants to be closed 1266 + 1267 + The close event is sent by the compositor when the user 1268 + wants the surface to be closed. This should be equivalent to 1269 + the user clicking the close button in client-side decorations, 1270 + if your application has any. 1271 + 1272 + This is only a request that the user intends to close the 1273 + window. The client may choose to ignore this request, or show 1274 + a dialog to ask the user to save their data, etc. 1275 +/ 1276 @property void onClose(OnCloseEventDg dg) 1277 { 1278 _onClose = dg; 1279 } 1280 1281 private OnConfigureEventDg _onConfigure; 1282 private OnCloseEventDg _onClose; 1283 } 1284 1285 /++ 1286 + short-lived, popup surfaces for menus 1287 + 1288 + A popup surface is a short-lived, temporary surface. It can be used to 1289 + implement for example menus, popovers, tooltips and other similar user 1290 + interface concepts. 1291 + 1292 + A popup can be made to take an explicit grab. See xdg_popup.grab for 1293 + details. 1294 + 1295 + When the popup is dismissed, a popup_done event will be sent out, and at 1296 + the same time the surface will be unmapped. See the xdg_popup.popup_done 1297 + event for details. 1298 + 1299 + Explicitly destroying the xdg_popup object will also dismiss the popup and 1300 + unmap the surface. Clients that want to dismiss the popup when another 1301 + surface of their own is clicked should dismiss the popup using the destroy 1302 + request. 1303 + 1304 + The parent surface must have either the xdg_toplevel or xdg_popup surface 1305 + role. 1306 + 1307 + A newly created xdg_popup will be stacked on top of all previously created 1308 + xdg_popup surfaces associated with the same xdg_toplevel. 1309 + 1310 + The parent of an xdg_popup must be mapped $(LPAREN)see the xdg_surface 1311 + description$(RPAREN) before the xdg_popup itself. 1312 + 1313 + The x and y arguments passed when creating the popup object specify 1314 + where the top left of the popup should be placed, relative to the 1315 + local surface coordinates of the parent surface. See 1316 + xdg_surface.get_popup. An xdg_popup must intersect with or be at least 1317 + partially adjacent to its parent surface. 1318 + 1319 + The client must call wl_surface.commit on the corresponding wl_surface 1320 + for the xdg_popup state to take effect. 1321 +/ 1322 final class ZxdgPopupV6 : WlProxy 1323 { 1324 /// Version of xdg_shell_unstable_v6.zxdg_popup_v6 1325 enum ver = 1; 1326 1327 /// Build a ZxdgPopupV6 from a native object. 1328 private this(wl_proxy* native) 1329 { 1330 super(native); 1331 wl_proxy_add_listener(proxy, cast(void_func_t*)&wl_d_zxdg_popup_v6_listener, null); 1332 } 1333 1334 /// Interface object that creates ZxdgPopupV6 objects. 1335 static @property immutable(WlProxyInterface) iface() 1336 { 1337 return zxdgPopupV6Iface; 1338 } 1339 1340 /// Op-code of ZxdgPopupV6.destroy. 1341 enum destroyOpCode = 0; 1342 /// Op-code of ZxdgPopupV6.grab. 1343 enum grabOpCode = 1; 1344 1345 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPopupV6.destroy. 1346 enum destroySinceVersion = 1; 1347 /// Version of xdg_shell_unstable_v6 protocol introducing ZxdgPopupV6.grab. 1348 enum grabSinceVersion = 1; 1349 1350 /// xdg_shell_unstable_v6 protocol version introducing ZxdgPopupV6.onConfigure. 1351 enum onConfigureSinceVersion = 1; 1352 /// xdg_shell_unstable_v6 protocol version introducing ZxdgPopupV6.onPopupDone. 1353 enum onPopupDoneSinceVersion = 1; 1354 1355 /// Event delegate signature of ZxdgPopupV6.onConfigure. 1356 alias OnConfigureEventDg = void delegate(ZxdgPopupV6 zxdgPopupV6, 1357 int x, 1358 int y, 1359 int width, 1360 int height); 1361 /// Event delegate signature of ZxdgPopupV6.onPopupDone. 1362 alias OnPopupDoneEventDg = void delegate(ZxdgPopupV6 zxdgPopupV6); 1363 1364 enum Error : uint 1365 { 1366 /// tried to grab after being mapped 1367 invalidGrab = 0, 1368 } 1369 1370 /++ 1371 + remove xdg_popup interface 1372 + 1373 + This destroys the popup. Explicitly destroying the xdg_popup 1374 + object will also dismiss the popup, and unmap the surface. 1375 + 1376 + If this xdg_popup is not the "topmost" popup, a protocol error 1377 + will be sent. 1378 +/ 1379 void destroy() 1380 { 1381 wl_proxy_marshal( 1382 proxy, destroyOpCode 1383 ); 1384 super.destroyNotify(); 1385 } 1386 1387 /++ 1388 + make the popup take an explicit grab 1389 + 1390 + This request makes the created popup take an explicit grab. An explicit 1391 + grab will be dismissed when the user dismisses the popup, or when the 1392 + client destroys the xdg_popup. This can be done by the user clicking 1393 + outside the surface, using the keyboard, or even locking the screen 1394 + through closing the lid or a timeout. 1395 + 1396 + If the compositor denies the grab, the popup will be immediately 1397 + dismissed. 1398 + 1399 + This request must be used in response to some sort of user action like a 1400 + button press, key press, or touch down event. The serial number of the 1401 + event should be passed as 'serial'. 1402 + 1403 + The parent of a grabbing popup must either be an xdg_toplevel surface or 1404 + another xdg_popup with an explicit grab. If the parent is another 1405 + xdg_popup it means that the popups are nested, with this popup now being 1406 + the topmost popup. 1407 + 1408 + Nested popups must be destroyed in the reverse order they were created 1409 + in, e.g. the only popup you are allowed to destroy at all times is the 1410 + topmost one. 1411 + 1412 + When compositors choose to dismiss a popup, they may dismiss every 1413 + nested grabbing popup as well. When a compositor dismisses popups, it 1414 + will follow the same dismissing order as required from the client. 1415 + 1416 + The parent of a grabbing popup must either be another xdg_popup with an 1417 + active explicit grab, or an xdg_popup or xdg_toplevel, if there are no 1418 + explicit grabs already taken. 1419 + 1420 + If the topmost grabbing popup is destroyed, the grab will be returned to 1421 + the parent of the popup, if that parent previously had an explicit grab. 1422 + 1423 + If the parent is a grabbing popup which has already been dismissed, this 1424 + popup will be immediately dismissed. If the parent is a popup that did 1425 + not take an explicit grab, an error will be raised. 1426 + 1427 + During a popup grab, the client owning the grab will receive pointer 1428 + and touch events for all their surfaces as normal $(LPAREN)similar to an 1429 + "owner-events" grab in X11 parlance$(RPAREN), while the top most grabbing popup 1430 + will always have keyboard focus. 1431 +/ 1432 void grab(WlSeat seat, 1433 uint serial) 1434 { 1435 wl_proxy_marshal( 1436 proxy, grabOpCode, seat.proxy, serial 1437 ); 1438 } 1439 1440 /++ 1441 + configure the popup surface 1442 + 1443 + This event asks the popup surface to configure itself given the 1444 + configuration. The configured state should not be applied immediately. 1445 + See xdg_surface.configure for details. 1446 + 1447 + The x and y arguments represent the position the popup was placed at 1448 + given the xdg_positioner rule, relative to the upper left corner of the 1449 + window geometry of the parent surface. 1450 +/ 1451 @property void onConfigure(OnConfigureEventDg dg) 1452 { 1453 _onConfigure = dg; 1454 } 1455 1456 /++ 1457 + popup interaction is done 1458 + 1459 + The popup_done event is sent out when a popup is dismissed by the 1460 + compositor. The client should destroy the xdg_popup object at this 1461 + point. 1462 +/ 1463 @property void onPopupDone(OnPopupDoneEventDg dg) 1464 { 1465 _onPopupDone = dg; 1466 } 1467 1468 private OnConfigureEventDg _onConfigure; 1469 private OnPopupDoneEventDg _onPopupDone; 1470 } 1471 1472 private: 1473 1474 immutable WlProxyInterface zxdgShellV6Iface; 1475 immutable WlProxyInterface zxdgPositionerV6Iface; 1476 immutable WlProxyInterface zxdgSurfaceV6Iface; 1477 immutable WlProxyInterface zxdgToplevelV6Iface; 1478 immutable WlProxyInterface zxdgPopupV6Iface; 1479 1480 immutable final class ZxdgShellV6Iface : WlProxyInterface 1481 { 1482 this(immutable wl_interface* native) 1483 { 1484 super(native); 1485 } 1486 override WlProxy makeProxy(wl_proxy* proxy) immutable 1487 { 1488 return new ZxdgShellV6(proxy); 1489 } 1490 } 1491 1492 immutable final class ZxdgPositionerV6Iface : WlProxyInterface 1493 { 1494 this(immutable wl_interface* native) 1495 { 1496 super(native); 1497 } 1498 override WlProxy makeProxy(wl_proxy* proxy) immutable 1499 { 1500 return new ZxdgPositionerV6(proxy); 1501 } 1502 } 1503 1504 immutable final class ZxdgSurfaceV6Iface : WlProxyInterface 1505 { 1506 this(immutable wl_interface* native) 1507 { 1508 super(native); 1509 } 1510 override WlProxy makeProxy(wl_proxy* proxy) immutable 1511 { 1512 return new ZxdgSurfaceV6(proxy); 1513 } 1514 } 1515 1516 immutable final class ZxdgToplevelV6Iface : WlProxyInterface 1517 { 1518 this(immutable wl_interface* native) 1519 { 1520 super(native); 1521 } 1522 override WlProxy makeProxy(wl_proxy* proxy) immutable 1523 { 1524 return new ZxdgToplevelV6(proxy); 1525 } 1526 } 1527 1528 immutable final class ZxdgPopupV6Iface : WlProxyInterface 1529 { 1530 this(immutable wl_interface* native) 1531 { 1532 super(native); 1533 } 1534 override WlProxy makeProxy(wl_proxy* proxy) immutable 1535 { 1536 return new ZxdgPopupV6(proxy); 1537 } 1538 } 1539 1540 immutable wl_interface[] wl_ifaces; 1541 1542 enum zxdgShellV6Index = 0; 1543 enum zxdgPositionerV6Index = 1; 1544 enum zxdgSurfaceV6Index = 2; 1545 enum zxdgToplevelV6Index = 3; 1546 enum zxdgPopupV6Index = 4; 1547 1548 shared static this() 1549 { 1550 auto ifaces = new wl_interface[5]; 1551 1552 auto msgTypes = [ 1553 null, 1554 null, 1555 null, 1556 null, 1557 &ifaces[zxdgPositionerV6Index], 1558 &ifaces[zxdgSurfaceV6Index], 1559 cast(wl_interface*)WlSurface.iface.native, 1560 &ifaces[zxdgToplevelV6Index], 1561 &ifaces[zxdgPopupV6Index], 1562 &ifaces[zxdgSurfaceV6Index], 1563 &ifaces[zxdgPositionerV6Index], 1564 &ifaces[zxdgToplevelV6Index], 1565 cast(wl_interface*)WlSeat.iface.native, 1566 null, 1567 null, 1568 null, 1569 cast(wl_interface*)WlSeat.iface.native, 1570 null, 1571 cast(wl_interface*)WlSeat.iface.native, 1572 null, 1573 null, 1574 cast(wl_interface*)WlOutput.iface.native, 1575 cast(wl_interface*)WlSeat.iface.native, 1576 null, 1577 ]; 1578 1579 auto zxdg_shell_v6_requests = [ 1580 wl_message("destroy", "", &msgTypes[0]), 1581 wl_message("create_positioner", "n", &msgTypes[4]), 1582 wl_message("get_xdg_surface", "no", &msgTypes[5]), 1583 wl_message("pong", "u", &msgTypes[0]), 1584 ]; 1585 auto zxdg_shell_v6_events = [ 1586 wl_message("ping", "u", &msgTypes[0]), 1587 ]; 1588 ifaces[zxdgShellV6Index].name = "zxdg_shell_v6"; 1589 ifaces[zxdgShellV6Index].version_ = 1; 1590 ifaces[zxdgShellV6Index].method_count = 4; 1591 ifaces[zxdgShellV6Index].methods = zxdg_shell_v6_requests.ptr; 1592 ifaces[zxdgShellV6Index].event_count = 1; 1593 ifaces[zxdgShellV6Index].events = zxdg_shell_v6_events.ptr; 1594 1595 auto zxdg_positioner_v6_requests = [ 1596 wl_message("destroy", "", &msgTypes[0]), 1597 wl_message("set_size", "ii", &msgTypes[0]), 1598 wl_message("set_anchor_rect", "iiii", &msgTypes[0]), 1599 wl_message("set_anchor", "u", &msgTypes[0]), 1600 wl_message("set_gravity", "u", &msgTypes[0]), 1601 wl_message("set_constraint_adjustment", "u", &msgTypes[0]), 1602 wl_message("set_offset", "ii", &msgTypes[0]), 1603 ]; 1604 ifaces[zxdgPositionerV6Index].name = "zxdg_positioner_v6"; 1605 ifaces[zxdgPositionerV6Index].version_ = 1; 1606 ifaces[zxdgPositionerV6Index].method_count = 7; 1607 ifaces[zxdgPositionerV6Index].methods = zxdg_positioner_v6_requests.ptr; 1608 1609 auto zxdg_surface_v6_requests = [ 1610 wl_message("destroy", "", &msgTypes[0]), 1611 wl_message("get_toplevel", "n", &msgTypes[7]), 1612 wl_message("get_popup", "noo", &msgTypes[8]), 1613 wl_message("set_window_geometry", "iiii", &msgTypes[0]), 1614 wl_message("ack_configure", "u", &msgTypes[0]), 1615 ]; 1616 auto zxdg_surface_v6_events = [ 1617 wl_message("configure", "u", &msgTypes[0]), 1618 ]; 1619 ifaces[zxdgSurfaceV6Index].name = "zxdg_surface_v6"; 1620 ifaces[zxdgSurfaceV6Index].version_ = 1; 1621 ifaces[zxdgSurfaceV6Index].method_count = 5; 1622 ifaces[zxdgSurfaceV6Index].methods = zxdg_surface_v6_requests.ptr; 1623 ifaces[zxdgSurfaceV6Index].event_count = 1; 1624 ifaces[zxdgSurfaceV6Index].events = zxdg_surface_v6_events.ptr; 1625 1626 auto zxdg_toplevel_v6_requests = [ 1627 wl_message("destroy", "", &msgTypes[0]), 1628 wl_message("set_parent", "?o", &msgTypes[11]), 1629 wl_message("set_title", "s", &msgTypes[0]), 1630 wl_message("set_app_id", "s", &msgTypes[0]), 1631 wl_message("show_window_menu", "ouii", &msgTypes[12]), 1632 wl_message("move", "ou", &msgTypes[16]), 1633 wl_message("resize", "ouu", &msgTypes[18]), 1634 wl_message("set_max_size", "ii", &msgTypes[0]), 1635 wl_message("set_min_size", "ii", &msgTypes[0]), 1636 wl_message("set_maximized", "", &msgTypes[0]), 1637 wl_message("unset_maximized", "", &msgTypes[0]), 1638 wl_message("set_fullscreen", "?o", &msgTypes[21]), 1639 wl_message("unset_fullscreen", "", &msgTypes[0]), 1640 wl_message("set_minimized", "", &msgTypes[0]), 1641 ]; 1642 auto zxdg_toplevel_v6_events = [ 1643 wl_message("configure", "iia", &msgTypes[0]), 1644 wl_message("close", "", &msgTypes[0]), 1645 ]; 1646 ifaces[zxdgToplevelV6Index].name = "zxdg_toplevel_v6"; 1647 ifaces[zxdgToplevelV6Index].version_ = 1; 1648 ifaces[zxdgToplevelV6Index].method_count = 14; 1649 ifaces[zxdgToplevelV6Index].methods = zxdg_toplevel_v6_requests.ptr; 1650 ifaces[zxdgToplevelV6Index].event_count = 2; 1651 ifaces[zxdgToplevelV6Index].events = zxdg_toplevel_v6_events.ptr; 1652 1653 auto zxdg_popup_v6_requests = [ 1654 wl_message("destroy", "", &msgTypes[0]), 1655 wl_message("grab", "ou", &msgTypes[22]), 1656 ]; 1657 auto zxdg_popup_v6_events = [ 1658 wl_message("configure", "iiii", &msgTypes[0]), 1659 wl_message("popup_done", "", &msgTypes[0]), 1660 ]; 1661 ifaces[zxdgPopupV6Index].name = "zxdg_popup_v6"; 1662 ifaces[zxdgPopupV6Index].version_ = 1; 1663 ifaces[zxdgPopupV6Index].method_count = 2; 1664 ifaces[zxdgPopupV6Index].methods = zxdg_popup_v6_requests.ptr; 1665 ifaces[zxdgPopupV6Index].event_count = 2; 1666 ifaces[zxdgPopupV6Index].events = zxdg_popup_v6_events.ptr; 1667 1668 import std.exception : assumeUnique; 1669 wl_ifaces = assumeUnique(ifaces); 1670 1671 zxdgShellV6Iface = new immutable ZxdgShellV6Iface( &wl_ifaces[zxdgShellV6Index] ); 1672 zxdgPositionerV6Iface = new immutable ZxdgPositionerV6Iface( &wl_ifaces[zxdgPositionerV6Index] ); 1673 zxdgSurfaceV6Iface = new immutable ZxdgSurfaceV6Iface( &wl_ifaces[zxdgSurfaceV6Index] ); 1674 zxdgToplevelV6Iface = new immutable ZxdgToplevelV6Iface( &wl_ifaces[zxdgToplevelV6Index] ); 1675 zxdgPopupV6Iface = new immutable ZxdgPopupV6Iface( &wl_ifaces[zxdgPopupV6Index] ); 1676 } 1677 1678 extern(C) nothrow 1679 { 1680 struct zxdg_shell_v6_listener 1681 { 1682 void function(void* data, 1683 wl_proxy* proxy, 1684 uint serial) ping; 1685 } 1686 1687 __gshared wl_d_zxdg_shell_v6_listener = zxdg_shell_v6_listener (&wl_d_on_zxdg_shell_v6_ping); 1688 1689 void wl_d_on_zxdg_shell_v6_ping(void* data, 1690 wl_proxy* proxy, 1691 uint serial) 1692 { 1693 nothrowFnWrapper!({ 1694 auto _p = WlProxy.get(proxy); 1695 assert(_p, "listener stub without proxy"); 1696 auto _i = cast(ZxdgShellV6)_p; 1697 assert(_i, "listener stub proxy is not ZxdgShellV6"); 1698 if (_i._onPing) 1699 { 1700 _i._onPing(_i, serial); 1701 } 1702 }); 1703 } 1704 1705 1706 struct zxdg_surface_v6_listener 1707 { 1708 void function(void* data, 1709 wl_proxy* proxy, 1710 uint serial) configure; 1711 } 1712 1713 __gshared wl_d_zxdg_surface_v6_listener = zxdg_surface_v6_listener (&wl_d_on_zxdg_surface_v6_configure); 1714 1715 void wl_d_on_zxdg_surface_v6_configure(void* data, 1716 wl_proxy* proxy, 1717 uint serial) 1718 { 1719 nothrowFnWrapper!({ 1720 auto _p = WlProxy.get(proxy); 1721 assert(_p, "listener stub without proxy"); 1722 auto _i = cast(ZxdgSurfaceV6)_p; 1723 assert(_i, "listener stub proxy is not ZxdgSurfaceV6"); 1724 if (_i._onConfigure) 1725 { 1726 _i._onConfigure(_i, serial); 1727 } 1728 }); 1729 } 1730 1731 struct zxdg_toplevel_v6_listener 1732 { 1733 void function(void* data, 1734 wl_proxy* proxy, 1735 int width, 1736 int height, 1737 wl_array* states) configure; 1738 void function(void* data, 1739 wl_proxy* proxy) close; 1740 } 1741 1742 __gshared wl_d_zxdg_toplevel_v6_listener = zxdg_toplevel_v6_listener (&wl_d_on_zxdg_toplevel_v6_configure, 1743 &wl_d_on_zxdg_toplevel_v6_close); 1744 1745 void wl_d_on_zxdg_toplevel_v6_configure(void* data, 1746 wl_proxy* proxy, 1747 int width, 1748 int height, 1749 wl_array* states) 1750 { 1751 nothrowFnWrapper!({ 1752 auto _p = WlProxy.get(proxy); 1753 assert(_p, "listener stub without proxy"); 1754 auto _i = cast(ZxdgToplevelV6)_p; 1755 assert(_i, "listener stub proxy is not ZxdgToplevelV6"); 1756 if (_i._onConfigure) 1757 { 1758 _i._onConfigure(_i, width, height, states); 1759 } 1760 }); 1761 } 1762 1763 void wl_d_on_zxdg_toplevel_v6_close(void* data, 1764 wl_proxy* proxy) 1765 { 1766 nothrowFnWrapper!({ 1767 auto _p = WlProxy.get(proxy); 1768 assert(_p, "listener stub without proxy"); 1769 auto _i = cast(ZxdgToplevelV6)_p; 1770 assert(_i, "listener stub proxy is not ZxdgToplevelV6"); 1771 if (_i._onClose) 1772 { 1773 _i._onClose(_i); 1774 } 1775 }); 1776 } 1777 1778 struct zxdg_popup_v6_listener 1779 { 1780 void function(void* data, 1781 wl_proxy* proxy, 1782 int x, 1783 int y, 1784 int width, 1785 int height) configure; 1786 void function(void* data, 1787 wl_proxy* proxy) popup_done; 1788 } 1789 1790 __gshared wl_d_zxdg_popup_v6_listener = zxdg_popup_v6_listener (&wl_d_on_zxdg_popup_v6_configure, 1791 &wl_d_on_zxdg_popup_v6_popup_done); 1792 1793 void wl_d_on_zxdg_popup_v6_configure(void* data, 1794 wl_proxy* proxy, 1795 int x, 1796 int y, 1797 int width, 1798 int height) 1799 { 1800 nothrowFnWrapper!({ 1801 auto _p = WlProxy.get(proxy); 1802 assert(_p, "listener stub without proxy"); 1803 auto _i = cast(ZxdgPopupV6)_p; 1804 assert(_i, "listener stub proxy is not ZxdgPopupV6"); 1805 if (_i._onConfigure) 1806 { 1807 _i._onConfigure(_i, x, y, width, height); 1808 } 1809 }); 1810 } 1811 1812 void wl_d_on_zxdg_popup_v6_popup_done(void* data, 1813 wl_proxy* proxy) 1814 { 1815 nothrowFnWrapper!({ 1816 auto _p = WlProxy.get(proxy); 1817 assert(_p, "listener stub without proxy"); 1818 auto _i = cast(ZxdgPopupV6)_p; 1819 assert(_i, "listener stub proxy is not ZxdgPopupV6"); 1820 if (_i._onPopupDone) 1821 { 1822 _i._onPopupDone(_i); 1823 } 1824 }); 1825 } 1826 }