blob: 8124860b980eaa670d0b79944b010f88eef54e51 [file] [log] [blame]
/*
* Copyright © 2008-2013 Kristian Høgsberg
* Copyright © 2013 Rafael Antognolli
* Copyright © 2013 Jasper St. Pierre
* Copyright © 2010-2013 Intel Corporation
*
* Permission is hereby granted, free of charge, to any person obtaining a
* copy of this software and associated documentation files (the "Software"),
* to deal in the Software without restriction, including without limitation
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
* and/or sell copies of the Software, and to permit persons to whom the
* Software is furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice (including the next
* paragraph) shall be included in all copies or substantial portions of the
* Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
* DEALINGS IN THE SOFTWARE.
*/
#ifndef QT_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5
#define QT_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5
#include "wayland-server.h"
#include <QtWaylandCompositor/private/wayland-xdg-shell-unstable-v5-server-protocol_p.h>
#include <QByteArray>
#include <QMultiMap>
#include <QString>
#ifndef WAYLAND_VERSION_CHECK
#define WAYLAND_VERSION_CHECK(major, minor, micro) \
((WAYLAND_VERSION_MAJOR > (major)) || \
(WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR > (minor)) || \
(WAYLAND_VERSION_MAJOR == (major) && WAYLAND_VERSION_MINOR == (minor) && WAYLAND_VERSION_MICRO >= (micro)))
#endif
QT_BEGIN_NAMESPACE
QT_WARNING_PUSH
QT_WARNING_DISABLE_GCC("-Wmissing-field-initializers")
QT_WARNING_DISABLE_CLANG("-Wmissing-field-initializers")
#if !defined(Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT)
# if defined(QT_SHARED)
# define Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT Q_DECL_EXPORT
# else
# define Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT
# endif
#endif
namespace QtWaylandServer {
class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_shell_v5
{
public:
xdg_shell_v5(struct ::wl_client *client, int id, int version);
xdg_shell_v5(struct ::wl_display *display, int version);
xdg_shell_v5(struct ::wl_resource *resource);
xdg_shell_v5();
virtual ~xdg_shell_v5();
class Resource
{
public:
Resource() : xdg_shell_object(nullptr), handle(nullptr) {}
virtual ~Resource() {}
xdg_shell_v5 *xdg_shell_object;
xdg_shell_v5 *object() { return xdg_shell_object; }
struct ::wl_resource *handle;
struct ::wl_client *client() const { return wl_resource_get_client(handle); }
int version() const { return wl_resource_get_version(handle); }
static Resource *fromResource(struct ::wl_resource *resource);
};
void init(struct ::wl_client *client, int id, int version);
void init(struct ::wl_display *display, int version);
void init(struct ::wl_resource *resource);
Resource *add(struct ::wl_client *client, int version);
Resource *add(struct ::wl_client *client, int id, int version);
Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version);
Resource *resource() { return m_resource; }
const Resource *resource() const { return m_resource; }
QMultiMap<struct ::wl_client*, Resource*> resourceMap() { return m_resource_map; }
const QMultiMap<struct ::wl_client*, Resource*> resourceMap() const { return m_resource_map; }
bool isGlobal() const { return m_global != nullptr; }
bool isResource() const { return m_resource != nullptr; }
static const struct ::wl_interface *interface();
static QByteArray interfaceName() { return interface()->name; }
static int interfaceVersion() { return interface()->version; }
enum version {
version_current = 5 // Always the latest version
};
enum error {
error_role = 0, // given wl_surface has another role
error_defunct_surfaces = 1, // xdg_shell was destroyed before children
error_not_the_topmost_popup = 2, // the client tried to map or destroy a non-topmost popup
error_invalid_popup_parent = 3 // the client specified an invalid popup parent surface
};
void send_ping(uint32_t serial);
void send_ping(struct ::wl_resource *resource, uint32_t serial);
protected:
virtual Resource *xdg_shell_allocate();
virtual void xdg_shell_bind_resource(Resource *resource);
virtual void xdg_shell_destroy_resource(Resource *resource);
virtual void xdg_shell_destroy(Resource *resource);
virtual void xdg_shell_use_unstable_version(Resource *resource, int32_t version);
virtual void xdg_shell_get_xdg_surface(Resource *resource, uint32_t id, struct ::wl_resource *surface);
virtual void xdg_shell_get_xdg_popup(Resource *resource, uint32_t id, struct ::wl_resource *surface, struct ::wl_resource *parent, struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y);
virtual void xdg_shell_pong(Resource *resource, uint32_t serial);
private:
static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id);
static void destroy_func(struct ::wl_resource *client_resource);
static void display_destroy_func(struct ::wl_listener *listener, void *data);
Resource *bind(struct ::wl_client *client, uint32_t id, int version);
Resource *bind(struct ::wl_resource *handle);
static const struct ::xdg_shell_v5_interface m_xdg_shell_interface;
static void handle_destroy(
::wl_client *client,
struct wl_resource *resource);
static void handle_use_unstable_version(
::wl_client *client,
struct wl_resource *resource,
int32_t version);
static void handle_get_xdg_surface(
::wl_client *client,
struct wl_resource *resource,
uint32_t id,
struct ::wl_resource *surface);
static void handle_get_xdg_popup(
::wl_client *client,
struct wl_resource *resource,
uint32_t id,
struct ::wl_resource *surface,
struct ::wl_resource *parent,
struct ::wl_resource *seat,
uint32_t serial,
int32_t x,
int32_t y);
static void handle_pong(
::wl_client *client,
struct wl_resource *resource,
uint32_t serial);
QMultiMap<struct ::wl_client*, Resource*> m_resource_map;
Resource *m_resource;
struct ::wl_global *m_global;
uint32_t m_globalVersion;
struct DisplayDestroyedListener : ::wl_listener {
xdg_shell_v5 *parent;
};
DisplayDestroyedListener m_displayDestroyedListener;
};
class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_surface_v5
{
public:
xdg_surface_v5(struct ::wl_client *client, int id, int version);
xdg_surface_v5(struct ::wl_display *display, int version);
xdg_surface_v5(struct ::wl_resource *resource);
xdg_surface_v5();
virtual ~xdg_surface_v5();
class Resource
{
public:
Resource() : xdg_surface_object(nullptr), handle(nullptr) {}
virtual ~Resource() {}
xdg_surface_v5 *xdg_surface_object;
xdg_surface_v5 *object() { return xdg_surface_object; }
struct ::wl_resource *handle;
struct ::wl_client *client() const { return wl_resource_get_client(handle); }
int version() const { return wl_resource_get_version(handle); }
static Resource *fromResource(struct ::wl_resource *resource);
};
void init(struct ::wl_client *client, int id, int version);
void init(struct ::wl_display *display, int version);
void init(struct ::wl_resource *resource);
Resource *add(struct ::wl_client *client, int version);
Resource *add(struct ::wl_client *client, int id, int version);
Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version);
Resource *resource() { return m_resource; }
const Resource *resource() const { return m_resource; }
QMultiMap<struct ::wl_client*, Resource*> resourceMap() { return m_resource_map; }
const QMultiMap<struct ::wl_client*, Resource*> resourceMap() const { return m_resource_map; }
bool isGlobal() const { return m_global != nullptr; }
bool isResource() const { return m_resource != nullptr; }
static const struct ::wl_interface *interface();
static QByteArray interfaceName() { return interface()->name; }
static int interfaceVersion() { return interface()->version; }
enum resize_edge {
resize_edge_none = 0,
resize_edge_top = 1,
resize_edge_bottom = 2,
resize_edge_left = 4,
resize_edge_top_left = 5,
resize_edge_bottom_left = 6,
resize_edge_right = 8,
resize_edge_top_right = 9,
resize_edge_bottom_right = 10
};
enum state {
state_maximized = 1, // the surface is maximized
state_fullscreen = 2, // the surface is fullscreen
state_resizing = 3,
state_activated = 4
};
void send_configure(int32_t width, int32_t height, const QByteArray &states, uint32_t serial);
void send_configure(struct ::wl_resource *resource, int32_t width, int32_t height, const QByteArray &states, uint32_t serial);
void send_close();
void send_close(struct ::wl_resource *resource);
protected:
virtual Resource *xdg_surface_allocate();
virtual void xdg_surface_bind_resource(Resource *resource);
virtual void xdg_surface_destroy_resource(Resource *resource);
virtual void xdg_surface_destroy(Resource *resource);
virtual void xdg_surface_set_parent(Resource *resource, struct ::wl_resource *parent);
virtual void xdg_surface_set_title(Resource *resource, const QString &title);
virtual void xdg_surface_set_app_id(Resource *resource, const QString &app_id);
virtual void xdg_surface_show_window_menu(Resource *resource, struct ::wl_resource *seat, uint32_t serial, int32_t x, int32_t y);
virtual void xdg_surface_move(Resource *resource, struct ::wl_resource *seat, uint32_t serial);
virtual void xdg_surface_resize(Resource *resource, struct ::wl_resource *seat, uint32_t serial, uint32_t edges);
virtual void xdg_surface_ack_configure(Resource *resource, uint32_t serial);
virtual void xdg_surface_set_window_geometry(Resource *resource, int32_t x, int32_t y, int32_t width, int32_t height);
virtual void xdg_surface_set_maximized(Resource *resource);
virtual void xdg_surface_unset_maximized(Resource *resource);
virtual void xdg_surface_set_fullscreen(Resource *resource, struct ::wl_resource *output);
virtual void xdg_surface_unset_fullscreen(Resource *resource);
virtual void xdg_surface_set_minimized(Resource *resource);
private:
static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id);
static void destroy_func(struct ::wl_resource *client_resource);
static void display_destroy_func(struct ::wl_listener *listener, void *data);
Resource *bind(struct ::wl_client *client, uint32_t id, int version);
Resource *bind(struct ::wl_resource *handle);
static const struct ::xdg_surface_v5_interface m_xdg_surface_interface;
static void handle_destroy(
::wl_client *client,
struct wl_resource *resource);
static void handle_set_parent(
::wl_client *client,
struct wl_resource *resource,
struct ::wl_resource *parent);
static void handle_set_title(
::wl_client *client,
struct wl_resource *resource,
const char *title);
static void handle_set_app_id(
::wl_client *client,
struct wl_resource *resource,
const char *app_id);
static void handle_show_window_menu(
::wl_client *client,
struct wl_resource *resource,
struct ::wl_resource *seat,
uint32_t serial,
int32_t x,
int32_t y);
static void handle_move(
::wl_client *client,
struct wl_resource *resource,
struct ::wl_resource *seat,
uint32_t serial);
static void handle_resize(
::wl_client *client,
struct wl_resource *resource,
struct ::wl_resource *seat,
uint32_t serial,
uint32_t edges);
static void handle_ack_configure(
::wl_client *client,
struct wl_resource *resource,
uint32_t serial);
static void handle_set_window_geometry(
::wl_client *client,
struct wl_resource *resource,
int32_t x,
int32_t y,
int32_t width,
int32_t height);
static void handle_set_maximized(
::wl_client *client,
struct wl_resource *resource);
static void handle_unset_maximized(
::wl_client *client,
struct wl_resource *resource);
static void handle_set_fullscreen(
::wl_client *client,
struct wl_resource *resource,
struct ::wl_resource *output);
static void handle_unset_fullscreen(
::wl_client *client,
struct wl_resource *resource);
static void handle_set_minimized(
::wl_client *client,
struct wl_resource *resource);
QMultiMap<struct ::wl_client*, Resource*> m_resource_map;
Resource *m_resource;
struct ::wl_global *m_global;
uint32_t m_globalVersion;
struct DisplayDestroyedListener : ::wl_listener {
xdg_surface_v5 *parent;
};
DisplayDestroyedListener m_displayDestroyedListener;
};
class Q_WAYLAND_SERVER_XDG_SHELL_UNSTABLE_V5_EXPORT xdg_popup_v5
{
public:
xdg_popup_v5(struct ::wl_client *client, int id, int version);
xdg_popup_v5(struct ::wl_display *display, int version);
xdg_popup_v5(struct ::wl_resource *resource);
xdg_popup_v5();
virtual ~xdg_popup_v5();
class Resource
{
public:
Resource() : xdg_popup_object(nullptr), handle(nullptr) {}
virtual ~Resource() {}
xdg_popup_v5 *xdg_popup_object;
xdg_popup_v5 *object() { return xdg_popup_object; }
struct ::wl_resource *handle;
struct ::wl_client *client() const { return wl_resource_get_client(handle); }
int version() const { return wl_resource_get_version(handle); }
static Resource *fromResource(struct ::wl_resource *resource);
};
void init(struct ::wl_client *client, int id, int version);
void init(struct ::wl_display *display, int version);
void init(struct ::wl_resource *resource);
Resource *add(struct ::wl_client *client, int version);
Resource *add(struct ::wl_client *client, int id, int version);
Resource *add(struct wl_list *resource_list, struct ::wl_client *client, int id, int version);
Resource *resource() { return m_resource; }
const Resource *resource() const { return m_resource; }
QMultiMap<struct ::wl_client*, Resource*> resourceMap() { return m_resource_map; }
const QMultiMap<struct ::wl_client*, Resource*> resourceMap() const { return m_resource_map; }
bool isGlobal() const { return m_global != nullptr; }
bool isResource() const { return m_resource != nullptr; }
static const struct ::wl_interface *interface();
static QByteArray interfaceName() { return interface()->name; }
static int interfaceVersion() { return interface()->version; }
void send_popup_done();
void send_popup_done(struct ::wl_resource *resource);
protected:
virtual Resource *xdg_popup_allocate();
virtual void xdg_popup_bind_resource(Resource *resource);
virtual void xdg_popup_destroy_resource(Resource *resource);
virtual void xdg_popup_destroy(Resource *resource);
private:
static void bind_func(struct ::wl_client *client, void *data, uint32_t version, uint32_t id);
static void destroy_func(struct ::wl_resource *client_resource);
static void display_destroy_func(struct ::wl_listener *listener, void *data);
Resource *bind(struct ::wl_client *client, uint32_t id, int version);
Resource *bind(struct ::wl_resource *handle);
static const struct ::xdg_popup_v5_interface m_xdg_popup_interface;
static void handle_destroy(
::wl_client *client,
struct wl_resource *resource);
QMultiMap<struct ::wl_client*, Resource*> m_resource_map;
Resource *m_resource;
struct ::wl_global *m_global;
uint32_t m_globalVersion;
struct DisplayDestroyedListener : ::wl_listener {
xdg_popup_v5 *parent;
};
DisplayDestroyedListener m_displayDestroyedListener;
};
}
QT_WARNING_POP
QT_END_NAMESPACE
#endif