diff options
| author | Drew DeVault <sir@cmpwn.com> | 2015-11-12 08:17:52 -0500 | 
|---|---|---|
| committer | Drew DeVault <sir@cmpwn.com> | 2015-11-12 08:17:52 -0500 | 
| commit | aadcba4b7cfa9ce3096fd166a046b151fd5ba8fa (patch) | |
| tree | 62968b4f9a22d275965605cba155afbb69892ee0 | |
| parent | 250097d32b7503b5a3fbb14b4582534ae3957035 (diff) | |
| download | sway-aadcba4b7cfa9ce3096fd166a046b151fd5ba8fa.tar.xz | |
Add new dependencies for wayland clients
Cairo for rendering shit, Pango for text rendering, and wayland client
stuff. Thanks @Cloudef, blatantly ripping off his cmake files for this
| -rw-r--r-- | CMake/FindCairo.cmake | 47 | ||||
| -rw-r--r-- | CMake/FindPango.cmake | 47 | ||||
| -rw-r--r-- | CMake/FindWayland.cmake | 62 | ||||
| -rw-r--r-- | CMake/Wayland.cmake | 77 | ||||
| -rw-r--r-- | CMakeLists.txt | 3 | ||||
| -rw-r--r-- | README.md | 3 | ||||
| -rw-r--r-- | xdg-shell.xml | 422 | 
7 files changed, 661 insertions, 0 deletions
| diff --git a/CMake/FindCairo.cmake b/CMake/FindCairo.cmake new file mode 100644 index 00000000..36c28095 --- /dev/null +++ b/CMake/FindCairo.cmake @@ -0,0 +1,47 @@ +# - Try to find the cairo library +# Once done this will define +# +#  CAIRO_FOUND - system has cairo +#  CAIRO_INCLUDE_DIRS - the cairo include directory +#  CAIRO_LIBRARIES - Link these to use cairo +# +# Define CAIRO_MIN_VERSION for which version desired. +# + +INCLUDE(FindPkgConfig) + +IF(Cairo_FIND_REQUIRED) +        SET(_pkgconfig_REQUIRED "REQUIRED") +ELSE(Cairo_FIND_REQUIRED) +        SET(_pkgconfig_REQUIRED "") +ENDIF(Cairo_FIND_REQUIRED) + +IF(CAIRO_MIN_VERSION) +        PKG_SEARCH_MODULE(CAIRO ${_pkgconfig_REQUIRED} cairo>=${CAIRO_MIN_VERSION}) +ELSE(CAIRO_MIN_VERSION) +        PKG_SEARCH_MODULE(CAIRO ${_pkgconfig_REQUIRED} cairo) +ENDIF(CAIRO_MIN_VERSION) + +IF(NOT CAIRO_FOUND AND NOT PKG_CONFIG_FOUND) +        FIND_PATH(CAIRO_INCLUDE_DIRS cairo.h) +        FIND_LIBRARY(CAIRO_LIBRARIES cairo) + +        # Report results +        IF(CAIRO_LIBRARIES AND CAIRO_INCLUDE_DIRS) +                SET(CAIRO_FOUND 1) +                IF(NOT Cairo_FIND_QUIETLY) +                        MESSAGE(STATUS "Found Cairo: ${CAIRO_LIBRARIES}") +                ENDIF(NOT Cairo_FIND_QUIETLY) +        ELSE(CAIRO_LIBRARIES AND CAIRO_INCLUDE_DIRS) +                IF(Cairo_FIND_REQUIRED) +                        MESSAGE(SEND_ERROR "Could not find Cairo") +                ELSE(Cairo_FIND_REQUIRED) +                        IF(NOT Cairo_FIND_QUIETLY) +                                MESSAGE(STATUS "Could not find Cairo") +                        ENDIF(NOT Cairo_FIND_QUIETLY) +                ENDIF(Cairo_FIND_REQUIRED) +        ENDIF(CAIRO_LIBRARIES AND CAIRO_INCLUDE_DIRS) +ENDIF(NOT CAIRO_FOUND AND NOT PKG_CONFIG_FOUND) + +# Hide advanced variables from CMake GUIs +MARK_AS_ADVANCED(CAIRO_LIBRARIES CAIRO_INCLUDE_DIRS) diff --git a/CMake/FindPango.cmake b/CMake/FindPango.cmake new file mode 100644 index 00000000..64bf9ac4 --- /dev/null +++ b/CMake/FindPango.cmake @@ -0,0 +1,47 @@ +# - Try to find the pango library +# Once done this will define +# +#  PANGO_FOUND - system has pango +#  PANGO_INCLUDE_DIRS - the pango include directory +#  PANGO_LIBRARIES - Link these to use pango +# +# Define PANGO_MIN_VERSION for which version desired. +# + +INCLUDE(FindPkgConfig) + +IF(Pango_FIND_REQUIRED) +        SET(_pkgconfig_REQUIRED "REQUIRED") +ELSE(Pango_FIND_REQUIRED) +        SET(_pkgconfig_REQUIRED "") +ENDIF(Pango_FIND_REQUIRED) + +IF(PANGO_MIN_VERSION) +        PKG_SEARCH_MODULE(PANGO ${_pkgconfig_REQUIRED} "pango>=${PANGO_MIN_VERSION} pangocairo>=${PANGO_MIN_VERSION}") +ELSE(PANGO_MIN_VERSION) +        PKG_SEARCH_MODULE(PANGO ${_pkgconfig_REQUIRED} "pango pangocairo") +ENDIF(PANGO_MIN_VERSION) + +IF(NOT PANGO_FOUND AND NOT PKG_CONFIG_FOUND) +        FIND_PATH(PANGO_INCLUDE_DIRS pango.h) +        FIND_LIBRARY(PANGO_LIBRARIES pango pangocairo) + +        # Report results +        IF(PANGO_LIBRARIES AND PANGO_INCLUDE_DIRS) +                SET(PANGO_FOUND 1) +                IF(NOT Pango_FIND_QUIETLY) +                        MESSAGE(STATUS "Found Pango: ${PANGO_LIBRARIES}") +                ENDIF(NOT Pango_FIND_QUIETLY) +        ELSE(PANGO_LIBRARIES AND PANGO_INCLUDE_DIRS) +                IF(Pango_FIND_REQUIRED) +                        MESSAGE(SEND_ERROR "Could not find Pango") +                ELSE(Pango_FIND_REQUIRED) +                        IF(NOT Pango_FIND_QUIETLY) +                                MESSAGE(STATUS "Could not find Pango") +                        ENDIF(NOT Pango_FIND_QUIETLY) +                ENDIF(Pango_FIND_REQUIRED) +        ENDIF(PANGO_LIBRARIES AND PANGO_INCLUDE_DIRS) +ENDIF(NOT PANGO_FOUND AND NOT PKG_CONFIG_FOUND) + +# Hide advanced variables from CMake GUIs +MARK_AS_ADVANCED(PANGO_LIBRARIES PANGO_INCLUDE_DIRS) diff --git a/CMake/FindWayland.cmake b/CMake/FindWayland.cmake new file mode 100644 index 00000000..00c17a3c --- /dev/null +++ b/CMake/FindWayland.cmake @@ -0,0 +1,62 @@ +# Try to find Wayland on a Unix system +# +# This will define: +# +#   WAYLAND_FOUND       - True if Wayland is found +#   WAYLAND_LIBRARIES   - Link these to use Wayland +#   WAYLAND_INCLUDE_DIR - Include directory for Wayland +#   WAYLAND_DEFINITIONS - Compiler flags for using Wayland +# +# In addition the following more fine grained variables will be defined: +# +#   WAYLAND_CLIENT_FOUND  WAYLAND_CLIENT_INCLUDE_DIR  WAYLAND_CLIENT_LIBRARIES +#   WAYLAND_SERVER_FOUND  WAYLAND_SERVER_INCLUDE_DIR  WAYLAND_SERVER_LIBRARIES +#   WAYLAND_EGL_FOUND     WAYLAND_EGL_INCLUDE_DIR     WAYLAND_EGL_LIBRARIES +# +# Copyright (c) 2013 Martin Gräßlin <mgraesslin@kde.org> +# +# Redistribution and use is allowed according to the terms of the BSD license. +# For details see the accompanying COPYING-CMAKE-SCRIPTS file. + +IF (NOT WIN32) +  IF (WAYLAND_INCLUDE_DIR AND WAYLAND_LIBRARIES) +    # In the cache already +    SET(WAYLAND_FIND_QUIETLY TRUE) +  ENDIF () + +  # Use pkg-config to get the directories and then use these values +  # in the FIND_PATH() and FIND_LIBRARY() calls +  FIND_PACKAGE(PkgConfig) +  PKG_CHECK_MODULES(PKG_WAYLAND QUIET wayland-client wayland-server wayland-egl) + +  SET(WAYLAND_DEFINITIONS ${PKG_WAYLAND_CFLAGS}) + +  FIND_PATH(WAYLAND_CLIENT_INCLUDE_DIR  NAMES wayland-client.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) +  FIND_PATH(WAYLAND_SERVER_INCLUDE_DIR  NAMES wayland-server.h HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) +  FIND_PATH(WAYLAND_EGL_INCLUDE_DIR     NAMES wayland-egl.h    HINTS ${PKG_WAYLAND_INCLUDE_DIRS}) + +  FIND_LIBRARY(WAYLAND_CLIENT_LIBRARIES NAMES wayland-client   HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) +  FIND_LIBRARY(WAYLAND_SERVER_LIBRARIES NAMES wayland-server   HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) +  FIND_LIBRARY(WAYLAND_EGL_LIBRARIES    NAMES wayland-egl      HINTS ${PKG_WAYLAND_LIBRARY_DIRS}) + +  set(WAYLAND_INCLUDE_DIR ${WAYLAND_CLIENT_INCLUDE_DIR} ${WAYLAND_SERVER_INCLUDE_DIR} ${WAYLAND_EGL_INCLUDE_DIR}) + +  set(WAYLAND_LIBRARIES ${WAYLAND_CLIENT_LIBRARIES} ${WAYLAND_SERVER_LIBRARIES} ${WAYLAND_EGL_LIBRARIES}) + +  list(REMOVE_DUPLICATES WAYLAND_INCLUDE_DIR) + +  include(FindPackageHandleStandardArgs) + +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_CLIENT  DEFAULT_MSG  WAYLAND_CLIENT_LIBRARIES  WAYLAND_CLIENT_INCLUDE_DIR) +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_SERVER  DEFAULT_MSG  WAYLAND_SERVER_LIBRARIES  WAYLAND_SERVER_INCLUDE_DIR) +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND_EGL     DEFAULT_MSG  WAYLAND_EGL_LIBRARIES     WAYLAND_EGL_INCLUDE_DIR) +  FIND_PACKAGE_HANDLE_STANDARD_ARGS(WAYLAND         DEFAULT_MSG  WAYLAND_LIBRARIES         WAYLAND_INCLUDE_DIR) + +  MARK_AS_ADVANCED( +        WAYLAND_INCLUDE_DIR         WAYLAND_LIBRARIES +        WAYLAND_CLIENT_INCLUDE_DIR  WAYLAND_CLIENT_LIBRARIES +        WAYLAND_SERVER_INCLUDE_DIR  WAYLAND_SERVER_LIBRARIES +        WAYLAND_EGL_INCLUDE_DIR     WAYLAND_EGL_LIBRARIES +  ) + +ENDIF () diff --git a/CMake/Wayland.cmake b/CMake/Wayland.cmake new file mode 100644 index 00000000..42f97b3b --- /dev/null +++ b/CMake/Wayland.cmake @@ -0,0 +1,77 @@ +#============================================================================= +# Copyright (C) 2012-2013 Pier Luigi Fiorini <pierluigi.fiorini@gmail.com> +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# * Redistributions of source code must retain the above copyright +#   notice, this list of conditions and the following disclaimer. +# +# * Redistributions in binary form must reproduce the above copyright +#   notice, this list of conditions and the following disclaimer in the +#   documentation and/or other materials provided with the distribution. +# +# * Neither the name of Pier Luigi Fiorini nor the names of his +#   contributors may be used to endorse or promote products derived +#   from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +#============================================================================= + +find_program(WAYLAND_SCANNER_EXECUTABLE NAMES wayland-scanner) + +# wayland_add_protocol_client(outfiles inputfile basename) +function(WAYLAND_ADD_PROTOCOL_CLIENT _sources _protocol _basename) +    if(NOT WAYLAND_SCANNER_EXECUTABLE) +        message(FATAL "The wayland-scanner executable has nto been found on your system. You must install it.") +    endif() + +    get_filename_component(_infile ${_protocol} ABSOLUTE) +    set(_client_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-client-protocol.h") +    set(_code "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-protocol.c") + +    add_custom_command(OUTPUT "${_client_header}" +        COMMAND ${WAYLAND_SCANNER_EXECUTABLE} client-header < ${_infile} > ${_client_header} +        DEPENDS ${_infile} VERBATIM) + +    add_custom_command(OUTPUT "${_code}" +        COMMAND ${WAYLAND_SCANNER_EXECUTABLE} code < ${_infile} > ${_code} +        DEPENDS ${_infile} VERBATIM) + +    list(APPEND ${_sources} "${_client_header}" "${_code}") +    set(${_sources} ${${_sources}} PARENT_SCOPE) +endfunction() + +# wayland_add_protocol_server(outfiles inputfile basename) +function(WAYLAND_ADD_PROTOCOL_SERVER _sources _protocol _basename) +    if(NOT WAYLAND_SCANNER_EXECUTABLE) +        message(FATAL "The wayland-scanner executable has nto been found on your system. You must install it.") +    endif() + +    get_filename_component(_infile ${_protocol} ABSOLUTE) +    set(_server_header "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-server-protocol.h") +    set(_code "${CMAKE_CURRENT_BINARY_DIR}/wayland-${_basename}-protocol.c") + +    add_custom_command(OUTPUT "${_server_header}" +        COMMAND ${WAYLAND_SCANNER_EXECUTABLE} server-header < ${_infile} > ${_server_header} +        DEPENDS ${_infile} VERBATIM) + +    add_custom_command(OUTPUT "${_code}" +        COMMAND ${WAYLAND_SCANNER_EXECUTABLE} code < ${_infile} > ${_code} +        DEPENDS ${_infile} VERBATIM) + +    list(APPEND ${_sources} "${_server_header}" "${_code}") +    set(${_sources} ${${_sources}} PARENT_SCOPE) +endfunction() diff --git a/CMakeLists.txt b/CMakeLists.txt index d8e4ebca..b497cedb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -40,6 +40,9 @@ find_package(WLC REQUIRED)  find_package(A2X REQUIRED)  find_package(PCRE REQUIRED)  find_package(JsonC REQUIRED) +FIND_PACKAGE(Wayland REQUIRED) +FIND_PACKAGE(Cairo REQUIRED) +FIND_PACKAGE(Pango REQUIRED)  FILE(GLOB sources ${PROJECT_SOURCE_DIR}/sway/*.c) @@ -32,10 +32,13 @@ Install dependencies:  * cmake  * [wlc](https://github.com/Cloudef/wlc) +* wayland  * xwayland  * asciidoc  * pcre  * json-c +* pango +* cairo  Run these commands: diff --git a/xdg-shell.xml b/xdg-shell.xml new file mode 100644 index 00000000..776438be --- /dev/null +++ b/xdg-shell.xml @@ -0,0 +1,422 @@ +<?xml version="1.0" encoding="UTF-8"?> +<protocol name="xdg_shell"> + +  <copyright> +    Copyright © 2008-2013 Kristian Høgsberg +    Copyright © 2013      Rafael Antognolli +    Copyright © 2013      Jasper St. Pierre +    Copyright © 2010-2013 Intel Corporation + +    Permission to use, copy, modify, distribute, and sell this +    software and its documentation for any purpose is hereby granted +    without fee, provided that the above copyright notice appear in +    all copies and that both that copyright notice and this permission +    notice appear in supporting documentation, and that the name of +    the copyright holders not be used in advertising or publicity +    pertaining to distribution of the software without specific, +    written prior permission.  The copyright holders make no +    representations about the suitability of this software for any +    purpose.  It is provided "as is" without express or implied +    warranty. + +    THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS +    SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND +    FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY +    SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN +    AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, +    ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF +    THIS SOFTWARE. +  </copyright> + +  <interface name="xdg_shell" version="1"> +    <description summary="create desktop-style surfaces"> +      This interface is implemented by servers that provide +      desktop-style user interfaces. + +      It allows clients to associate a xdg_surface with +      a basic surface. +    </description> + +    <enum name="version"> +      <description summary="latest protocol version"> +	The 'current' member of this enum gives the version of the +	protocol.  Implementations can compare this to the version +	they implement using static_assert to ensure the protocol and +	implementation versions match. +      </description> +      <entry name="current" value="4" summary="Always the latest version"/> +    </enum> + +    <enum name="error"> +      <entry name="role" value="0" summary="given wl_surface has another role"/> +    </enum> + +    <request name="use_unstable_version"> +      <description summary="enable use of this unstable version"> +	Negotiate the unstable version of the interface.  This +	mechanism is in place to ensure client and server agree on the +	unstable versions of the protocol that they speak or exit +	cleanly if they don't agree.  This request will go away once +	the xdg-shell protocol is stable. +      </description> +      <arg name="version" type="int"/> +    </request> + +    <request name="get_xdg_surface"> +      <description summary="create a shell surface from a surface"> +	Create a shell surface for an existing surface. + +	This request gives the surface the role of xdg_surface. If the +	surface already has another role, it raises a protocol error. + +	Only one shell or popup surface can be associated with a given +	surface. +      </description> +      <arg name="id" type="new_id" interface="xdg_surface"/> +      <arg name="surface" type="object" interface="wl_surface"/> +    </request> + +    <request name="get_xdg_popup"> +      <description summary="create a shell surface from a surface"> +	Create a popup surface for an existing surface. + +	This request gives the surface the role of xdg_popup. If the +	surface already has another role, it raises a protocol error. + +	Only one shell or popup surface can be associated with a given +	surface. +      </description> +      <arg name="id" type="new_id" interface="xdg_popup"/> +      <arg name="surface" type="object" interface="wl_surface"/> +      <arg name="parent" type="object" interface="wl_surface"/> +      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> +      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> +      <arg name="x" type="int"/> +      <arg name="y" type="int"/> +      <arg name="flags" type="uint"/> +    </request> + +    <event name="ping"> +      <description summary="check if the client is alive"> +        The ping event asks the client if it's still alive. Pass the +        serial specified in the event back to the compositor by sending +        a "pong" request back with the specified serial. + +        Compositors can use this to determine if the client is still +        alive. It's unspecified what will happen if the client doesn't +        respond to the ping request, or in what timeframe. Clients should +        try to respond in a reasonable amount of time. +      </description> +      <arg name="serial" type="uint" summary="pass this to the callback"/> +    </event> + +    <request name="pong"> +      <description summary="respond to a ping event"> +	A client must respond to a ping event with a pong request or +	the client may be deemed unresponsive. +      </description> +      <arg name="serial" type="uint" summary="serial of the ping event"/> +    </request> +  </interface> + +  <interface name="xdg_surface" version="1"> + +    <description summary="desktop-style metadata interface"> +      An interface that may be implemented by a wl_surface, for +      implementations that provide a desktop-style user interface. + +      It provides requests to treat surfaces like windows, allowing to set +      properties like maximized, fullscreen, minimized, and to move and resize +      them, and associate metadata like title and app id. + +      On the server side the object is automatically destroyed when +      the related wl_surface is destroyed.  On client side, +      xdg_surface.destroy() must be called before destroying +      the wl_surface object. +    </description> + +    <request name="destroy" type="destructor"> +      <description summary="remove xdg_surface interface"> +	The xdg_surface interface is removed from the wl_surface object +	that was turned into a xdg_surface with +	xdg_shell.get_xdg_surface request. The xdg_surface properties, +	like maximized and fullscreen, are lost. The wl_surface loses +	its role as a xdg_surface. The wl_surface is unmapped. +      </description> +    </request> + +    <request name="set_parent"> +      <description summary="surface is a child of another surface"> +	Child surfaces are stacked above their parents, and will be +	unmapped if the parent is unmapped too. They should not appear +	on task bars and alt+tab. +      </description> +      <arg name="parent" type="object" interface="wl_surface" allow-null="true"/> +    </request> + +    <request name="set_title"> +      <description summary="set surface title"> +	Set a short title for the surface. + +	This string may be used to identify the surface in a task bar, +	window list, or other user interface elements provided by the +	compositor. + +	The string must be encoded in UTF-8. +      </description> +      <arg name="title" type="string"/> +    </request> + +    <request name="set_app_id"> +      <description summary="set surface class"> +	Set an id for the surface. + +	The app id identifies the general class of applications to which +	the surface belongs. + +	It should be the ID that appears in the new desktop entry +	specification, the interface name. +      </description> +      <arg name="app_id" type="string"/> +    </request> + +    <request name="show_window_menu"> +      <description summary="show the window menu"> +        Clients implementing client-side decorations might want to show +        a context menu when right-clicking on the decorations, giving the +        user a menu that they can use to maximize or minimize the window. + +        This request asks the compositor to pop up such a window menu at +        the given position, relative to the parent surface. There are +        no guarantees as to what the window menu contains. + +        Your surface must have focus on the seat passed in to pop up the +        window menu. +      </description> + +      <arg name="seat" type="object" interface="wl_seat" summary="the seat to pop the window up on"/> +      <arg name="serial" type="uint" summary="serial of the event to pop up the window for"/> +      <arg name="x" type="int" summary="the x position to pop up the window menu at"/> +      <arg name="y" type="int" summary="the y position to pop up the window menu at"/> +    </request> + +    <request name="move"> +      <description summary="start an interactive move"> +	Start a pointer-driven move of the surface. + +	This request must be used in response to a button press event. +	The server may ignore move requests depending on the state of +	the surface (e.g. fullscreen or maximized). +      </description> +      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> +      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> +    </request> + +    <enum name="resize_edge"> +      <description summary="edge values for resizing"> +	These values are used to indicate which edge of a surface +	is being dragged in a resize operation. The server may +	use this information to adapt its behavior, e.g. choose +	an appropriate cursor image. +      </description> +      <entry name="none" value="0"/> +      <entry name="top" value="1"/> +      <entry name="bottom" value="2"/> +      <entry name="left" value="4"/> +      <entry name="top_left" value="5"/> +      <entry name="bottom_left" value="6"/> +      <entry name="right" value="8"/> +      <entry name="top_right" value="9"/> +      <entry name="bottom_right" value="10"/> +    </enum> + +    <request name="resize"> +      <description summary="start an interactive resize"> +	Start a pointer-driven resizing of the surface. + +	This request must be used in response to a button press event. +	The server may ignore resize requests depending on the state of +	the surface (e.g. fullscreen or maximized). +      </description> +      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/> +      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> +      <arg name="edges" type="uint" summary="which edge or corner is being dragged"/> +    </request> + +    <enum name="state"> +      <description summary="types of state on the surface"> +        The different state values used on the surface. This is designed for +        state values like maximized, fullscreen. It is paired with the +        configure event to ensure that both the client and the compositor +        setting the state can be synchronized. + +        States set in this way are double-buffered. They will get applied on +        the next commit. + +        Desktop environments may extend this enum by taking up a range of +        values and documenting the range they chose in this description. +        They are not required to document the values for the range that they +        chose. Ideally, any good extensions from a desktop environment should +        make its way into standardization into this enum. + +        The current reserved ranges are: + +        0x0000 - 0x0FFF: xdg-shell core values, documented below. +        0x1000 - 0x1FFF: GNOME +      </description> +      <entry name="maximized" value="1" summary="the surface is maximized"> +        The surface is maximized. The window geometry specified in the configure +        event must be obeyed by the client. +      </entry> +      <entry name="fullscreen" value="2" summary="the surface is fullscreen"> +        The surface is fullscreen. The window geometry specified in the configure +        event must be obeyed by the client. +      </entry> +      <entry name="resizing" value="3"> +        The surface is being resized. The window geometry specified in the +        configure event is a maximum; the client cannot resize beyond it. +        Clients that have aspect ratio or cell sizing configuration can use +        a smaller size, however. +      </entry> +      <entry name="activated" value="4"> +        Client window decorations should be painted as if the window is +        active. Do not assume this means that the window actually has +        keyboard or pointer focus. +      </entry> +    </enum> + +    <event name="configure"> +      <description summary="suggest a surface change"> +	The configure event asks the client to resize its surface. + +	The width and height arguments specify a hint to the window +        about how its surface should be resized in window geometry +        coordinates. The states listed in the event specify how the +        width/height arguments should be interpreted. + +        A client should arrange a new surface, and then send a +        ack_configure request with the serial sent in this configure +        event before attaching a new surface. + +	If the client receives multiple configure events before it +        can respond to one, it is free to discard all but the last +        event it received. +      </description> + +      <arg name="width" type="int"/> +      <arg name="height" type="int"/> +      <arg name="states" type="array"/> +      <arg name="serial" type="uint"/> +    </event> + +    <request name="ack_configure"> +      <description summary="ack a configure event"> +        When a configure event is received, a client should then ack it +        using the ack_configure request to ensure that the compositor +        knows the client has seen the event. + +        By this point, the state is confirmed, and the next attach should +        contain the buffer drawn for the configure event you are acking. +      </description> +      <arg name="serial" type="uint" summary="a serial to configure for"/> +    </request> + +    <request name="set_window_geometry"> +      <description summary="set the new window geometry"> +        The window geometry of a window is its "visible bounds" from the +        user's perspective. Client-side decorations often have invisible +        portions like drop-shadows which should be ignored for the +        purposes of aligning, placing and constraining windows. + +        The default value is the full bounds of the surface, including any +        subsurfaces. Once the window geometry of the surface is set once, +        it is not possible to unset it, and it will remain the same until +        set_window_geometry is called again, even if a new subsurface or +        buffer is attached. + +        If responding to a configure event, the window geometry in here +        must respect the sizing negotiations specified by the states in +        the configure event. +      </description> +      <arg name="x" type="int"/> +      <arg name="y" type="int"/> +      <arg name="width" type="int"/> +      <arg name="height" type="int"/> +    </request> + +    <request name="set_maximized" /> +    <request name="unset_maximized" /> + +    <request name="set_fullscreen"> +      <description summary="set the window as fullscreen on a monitor"> +	Make the surface fullscreen. + +        You can specify an output that you would prefer to be fullscreen. +	If this value is NULL, it's up to the compositor to choose which +        display will be used to map this surface. +      </description> +      <arg name="output" type="object" interface="wl_output" allow-null="true"/> +    </request> +    <request name="unset_fullscreen" /> + +    <request name="set_minimized" /> + +    <event name="close"> +      <description summary="surface wants to be closed"> +        The close event is sent by the compositor when the user +        wants the surface to be closed. This should be equivalent to +        the user clicking the close button in client-side decorations, +        if your application has any... + +        This is only a request that the user intends to close your +        window. The client may choose to ignore this request, or show +        a dialog to ask the user to save their data... +      </description> +    </event> +  </interface> + +  <interface name="xdg_popup" version="1"> +    <description summary="desktop-style metadata interface"> +      An interface that may be implemented by a wl_surface, for +      implementations that provide a desktop-style popups/menus. A popup +      surface is a transient surface with an added pointer grab. + +      An existing implicit grab will be changed to owner-events mode, +      and the popup grab will continue after the implicit grab ends +      (i.e. releasing the mouse button does not cause the popup to be +      unmapped). + +      The popup grab continues until the window is destroyed or a mouse +      button is pressed in any other clients window. A click in any of +      the clients surfaces is reported as normal, however, clicks in +      other clients surfaces will be discarded and trigger the callback. + +      The x and y arguments specify the locations of the upper left +      corner of the surface relative to the upper left corner of the +      parent surface, in surface local coordinates. + +      xdg_popup surfaces are always transient for another surface. +    </description> + +    <request name="destroy" type="destructor"> +      <description summary="remove xdg_surface interface"> +	The xdg_surface interface is removed from the wl_surface object +	that was turned into a xdg_surface with +	xdg_shell.get_xdg_surface request. The xdg_surface properties, +	like maximized and fullscreen, are lost. The wl_surface loses +	its role as a xdg_surface. The wl_surface is unmapped. +      </description> +    </request> + +    <event name="popup_done"> +      <description summary="popup interaction is done"> +	The popup_done event is sent out when a popup grab is broken, +	that is, when the users clicks a surface that doesn't belong +	to the client owning the popup surface. +      </description> +      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/> +    </event> + +  </interface> +</protocol> | 
