summaryrefslogtreecommitdiff
path: root/applets
diff options
context:
space:
mode:
Diffstat (limited to 'applets')
-rwxr-xr-xapplets/wncklet/wayland-protocol/generate-code.sh20
-rw-r--r--applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-client.h594
-rw-r--r--applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-code.c104
-rw-r--r--applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1.xml259
4 files changed, 977 insertions, 0 deletions
diff --git a/applets/wncklet/wayland-protocol/generate-code.sh b/applets/wncklet/wayland-protocol/generate-code.sh
new file mode 100755
index 00000000..90b248b2
--- /dev/null
+++ b/applets/wncklet/wayland-protocol/generate-code.sh
@@ -0,0 +1,20 @@
+#!/bin/bash
+# This script uses wayland-scanner to generate C bindings from Wayland protocol XML definitions
+# It only needs to be called with the XML files change, and is not called as part of the build system
+
+# Fail the script if anything goes wrong
+set -euo pipefail
+
+# Get the directory this script is in
+SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )"
+
+echo "Looking for Wayland protocols in $SCRIPT_DIR"
+
+# Loop through all XML files in the same directory as this script
+for PROTO_FILE_PATH in $(ls "$SCRIPT_DIR"/*.xml); do
+ # Strip the path and the .xml extension
+ PROTO_NAME=$(basename "$PROTO_FILE_PATH" .xml)
+ echo "Generating C bindings for $PROTO_NAME"
+ wayland-scanner -c client-header "$PROTO_FILE_PATH" "$SCRIPT_DIR/$PROTO_NAME-client.h"
+ wayland-scanner -c private-code "$PROTO_FILE_PATH" "$SCRIPT_DIR/$PROTO_NAME-code.c"
+done
diff --git a/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-client.h b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-client.h
new file mode 100644
index 00000000..c5f28aab
--- /dev/null
+++ b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-client.h
@@ -0,0 +1,594 @@
+/* Generated by wayland-scanner 1.18.0 */
+
+#ifndef WLR_FOREIGN_TOPLEVEL_MANAGEMENT_UNSTABLE_V1_CLIENT_PROTOCOL_H
+#define WLR_FOREIGN_TOPLEVEL_MANAGEMENT_UNSTABLE_V1_CLIENT_PROTOCOL_H
+
+#include <stdint.h>
+#include <stddef.h>
+#include "wayland-client-core.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @page page_wlr_foreign_toplevel_management_unstable_v1 The wlr_foreign_toplevel_management_unstable_v1 protocol
+ * @section page_ifaces_wlr_foreign_toplevel_management_unstable_v1 Interfaces
+ * - @subpage page_iface_zwlr_foreign_toplevel_manager_v1 - list and control opened apps
+ * - @subpage page_iface_zwlr_foreign_toplevel_handle_v1 - an opened toplevel
+ * @section page_copyright_wlr_foreign_toplevel_management_unstable_v1 Copyright
+ * <pre>
+ *
+ * Copyright © 2018 Ilia Bozhinov
+ *
+ * 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.
+ * </pre>
+ */
+struct wl_output;
+struct wl_seat;
+struct wl_surface;
+struct zwlr_foreign_toplevel_handle_v1;
+struct zwlr_foreign_toplevel_manager_v1;
+
+/**
+ * @page page_iface_zwlr_foreign_toplevel_manager_v1 zwlr_foreign_toplevel_manager_v1
+ * @section page_iface_zwlr_foreign_toplevel_manager_v1_desc Description
+ *
+ * The purpose of this protocol is to enable the creation of taskbars
+ * and docks by providing them with a list of opened applications and
+ * letting them request certain actions on them, like maximizing, etc.
+ *
+ * After a client binds the zwlr_foreign_toplevel_manager_v1, each opened
+ * toplevel window will be sent via the toplevel event
+ * @section page_iface_zwlr_foreign_toplevel_manager_v1_api API
+ * See @ref iface_zwlr_foreign_toplevel_manager_v1.
+ */
+/**
+ * @defgroup iface_zwlr_foreign_toplevel_manager_v1 The zwlr_foreign_toplevel_manager_v1 interface
+ *
+ * The purpose of this protocol is to enable the creation of taskbars
+ * and docks by providing them with a list of opened applications and
+ * letting them request certain actions on them, like maximizing, etc.
+ *
+ * After a client binds the zwlr_foreign_toplevel_manager_v1, each opened
+ * toplevel window will be sent via the toplevel event
+ */
+extern const struct wl_interface zwlr_foreign_toplevel_manager_v1_interface;
+/**
+ * @page page_iface_zwlr_foreign_toplevel_handle_v1 zwlr_foreign_toplevel_handle_v1
+ * @section page_iface_zwlr_foreign_toplevel_handle_v1_desc Description
+ *
+ * A zwlr_foreign_toplevel_handle_v1 object represents an opened toplevel
+ * window. Each app may have multiple opened toplevels.
+ *
+ * Each toplevel has a list of outputs it is visible on, conveyed to the
+ * client with the output_enter and output_leave events.
+ * @section page_iface_zwlr_foreign_toplevel_handle_v1_api API
+ * See @ref iface_zwlr_foreign_toplevel_handle_v1.
+ */
+/**
+ * @defgroup iface_zwlr_foreign_toplevel_handle_v1 The zwlr_foreign_toplevel_handle_v1 interface
+ *
+ * A zwlr_foreign_toplevel_handle_v1 object represents an opened toplevel
+ * window. Each app may have multiple opened toplevels.
+ *
+ * Each toplevel has a list of outputs it is visible on, conveyed to the
+ * client with the output_enter and output_leave events.
+ */
+extern const struct wl_interface zwlr_foreign_toplevel_handle_v1_interface;
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ * @struct zwlr_foreign_toplevel_manager_v1_listener
+ */
+struct zwlr_foreign_toplevel_manager_v1_listener {
+ /**
+ * a toplevel has been created
+ *
+ * This event is emitted whenever a new toplevel window is
+ * created. It is emitted for all toplevels, regardless of the app
+ * that has created them.
+ *
+ * All initial details of the toplevel(title, app_id, states, etc.)
+ * will be sent immediately after this event via the corresponding
+ * events in zwlr_foreign_toplevel_handle_v1.
+ */
+ void (*toplevel)(void *data,
+ struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1,
+ struct zwlr_foreign_toplevel_handle_v1 *toplevel);
+ /**
+ * the compositor has finished with the toplevel manager
+ *
+ * This event indicates that the compositor is done sending
+ * events to the zwlr_foreign_toplevel_manager_v1. The server will
+ * destroy the object immediately after sending this request, so it
+ * will become invalid and the client should free any resources
+ * associated with it.
+ */
+ void (*finished)(void *data,
+ struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1);
+};
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ */
+static inline int
+zwlr_foreign_toplevel_manager_v1_add_listener(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1,
+ const struct zwlr_foreign_toplevel_manager_v1_listener *listener, void *data)
+{
+ return wl_proxy_add_listener((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1,
+ (void (**)(void)) listener, data);
+}
+
+#define ZWLR_FOREIGN_TOPLEVEL_MANAGER_V1_STOP 0
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_MANAGER_V1_TOPLEVEL_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_MANAGER_V1_FINISHED_SINCE_VERSION 1
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_MANAGER_V1_STOP_SINCE_VERSION 1
+
+/** @ingroup iface_zwlr_foreign_toplevel_manager_v1 */
+static inline void
+zwlr_foreign_toplevel_manager_v1_set_user_data(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1, void *user_data)
+{
+ wl_proxy_set_user_data((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1, user_data);
+}
+
+/** @ingroup iface_zwlr_foreign_toplevel_manager_v1 */
+static inline void *
+zwlr_foreign_toplevel_manager_v1_get_user_data(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1)
+{
+ return wl_proxy_get_user_data((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1);
+}
+
+static inline uint32_t
+zwlr_foreign_toplevel_manager_v1_get_version(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1)
+{
+ return wl_proxy_get_version((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1);
+}
+
+/** @ingroup iface_zwlr_foreign_toplevel_manager_v1 */
+static inline void
+zwlr_foreign_toplevel_manager_v1_destroy(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1)
+{
+ wl_proxy_destroy((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_manager_v1
+ *
+ * Indicates the client no longer wishes to receive events for new toplevels.
+ * However the compositor may emit further toplevel_created events, until
+ * the finished event is emitted.
+ *
+ * The client must not send any more requests after this one.
+ */
+static inline void
+zwlr_foreign_toplevel_manager_v1_stop(struct zwlr_foreign_toplevel_manager_v1 *zwlr_foreign_toplevel_manager_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_manager_v1,
+ ZWLR_FOREIGN_TOPLEVEL_MANAGER_V1_STOP);
+}
+
+#ifndef ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ * types of states on the toplevel
+ *
+ * The different states that a toplevel can have. These have the same meaning
+ * as the states with the same names defined in xdg-toplevel
+ */
+enum zwlr_foreign_toplevel_handle_v1_state {
+ /**
+ * the toplevel is maximized
+ */
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_MAXIMIZED = 0,
+ /**
+ * the toplevel is minimized
+ */
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_MINIMIZED = 1,
+ /**
+ * the toplevel is active
+ */
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ACTIVATED = 2,
+ /**
+ * the toplevel is fullscreen
+ * @since 2
+ */
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_FULLSCREEN = 3,
+};
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_FULLSCREEN_SINCE_VERSION 2
+#endif /* ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_ENUM */
+
+#ifndef ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ERROR_ENUM
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ERROR_ENUM
+enum zwlr_foreign_toplevel_handle_v1_error {
+ /**
+ * the provided rectangle is invalid
+ */
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ERROR_INVALID_RECTANGLE = 0,
+};
+#endif /* ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ERROR_ENUM */
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ * @struct zwlr_foreign_toplevel_handle_v1_listener
+ */
+struct zwlr_foreign_toplevel_handle_v1_listener {
+ /**
+ * title change
+ *
+ * This event is emitted whenever the title of the toplevel
+ * changes.
+ */
+ void (*title)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ const char *title);
+ /**
+ * app-id change
+ *
+ * This event is emitted whenever the app-id of the toplevel
+ * changes.
+ */
+ void (*app_id)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ const char *app_id);
+ /**
+ * toplevel entered an output
+ *
+ * This event is emitted whenever the toplevel becomes visible on
+ * the given output. A toplevel may be visible on multiple outputs.
+ */
+ void (*output_enter)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ struct wl_output *output);
+ /**
+ * toplevel left an output
+ *
+ * This event is emitted whenever the toplevel stops being
+ * visible on the given output. It is guaranteed that an
+ * entered-output event with the same output has been emitted
+ * before this event.
+ */
+ void (*output_leave)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ struct wl_output *output);
+ /**
+ * the toplevel state changed
+ *
+ * This event is emitted immediately after the
+ * zlw_foreign_toplevel_handle_v1 is created and each time the
+ * toplevel state changes, either because of a compositor action or
+ * because of a request in this protocol.
+ */
+ void (*state)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ struct wl_array *state);
+ /**
+ * all information about the toplevel has been sent
+ *
+ * This event is sent after all changes in the toplevel state
+ * have been sent.
+ *
+ * This allows changes to the zwlr_foreign_toplevel_handle_v1
+ * properties to be seen as atomic, even if they happen via
+ * multiple events.
+ */
+ void (*done)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1);
+ /**
+ * this toplevel has been destroyed
+ *
+ * This event means the toplevel has been destroyed. It is
+ * guaranteed there won't be any more events for this
+ * zwlr_foreign_toplevel_handle_v1. The toplevel itself becomes
+ * inert so any requests will be ignored except the destroy
+ * request.
+ */
+ void (*closed)(void *data,
+ struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1);
+};
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+static inline int
+zwlr_foreign_toplevel_handle_v1_add_listener(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1,
+ const struct zwlr_foreign_toplevel_handle_v1_listener *listener, void *data)
+{
+ return wl_proxy_add_listener((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ (void (**)(void)) listener, data);
+}
+
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MAXIMIZED 0
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MAXIMIZED 1
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MINIMIZED 2
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MINIMIZED 3
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ACTIVATE 4
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_CLOSE 5
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_RECTANGLE 6
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY 7
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_FULLSCREEN 8
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_FULLSCREEN 9
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_TITLE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_APP_ID_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_OUTPUT_ENTER_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_OUTPUT_LEAVE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_STATE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_DONE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_CLOSED_SINCE_VERSION 1
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MAXIMIZED_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MAXIMIZED_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MINIMIZED_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MINIMIZED_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ACTIVATE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_CLOSE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_RECTANGLE_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY_SINCE_VERSION 1
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_FULLSCREEN_SINCE_VERSION 2
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ */
+#define ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_FULLSCREEN_SINCE_VERSION 2
+
+/** @ingroup iface_zwlr_foreign_toplevel_handle_v1 */
+static inline void
+zwlr_foreign_toplevel_handle_v1_set_user_data(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1, void *user_data)
+{
+ wl_proxy_set_user_data((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1, user_data);
+}
+
+/** @ingroup iface_zwlr_foreign_toplevel_handle_v1 */
+static inline void *
+zwlr_foreign_toplevel_handle_v1_get_user_data(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ return wl_proxy_get_user_data((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1);
+}
+
+static inline uint32_t
+zwlr_foreign_toplevel_handle_v1_get_version(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ return wl_proxy_get_version((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be maximized. If the maximized state actually
+ * changes, this will be indicated by the state event.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_set_maximized(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MAXIMIZED);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be unmaximized. If the maximized state actually
+ * changes, this will be indicated by the state event.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_unset_maximized(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MAXIMIZED);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be minimized. If the minimized state actually
+ * changes, this will be indicated by the state event.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_set_minimized(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_MINIMIZED);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be unminimized. If the minimized state actually
+ * changes, this will be indicated by the state event.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_unset_minimized(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_MINIMIZED);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Request that this toplevel be activated on the given seat.
+ * There is no guarantee the toplevel will be actually activated.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_activate(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1, struct wl_seat *seat)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_ACTIVATE, seat);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Send a request to the toplevel to close itself. The compositor would
+ * typically use a shell-specific method to carry out this request, for
+ * example by sending the xdg_toplevel.close event. However, this gives
+ * no guarantees the toplevel will actually be destroyed. If and when
+ * this happens, the zwlr_foreign_toplevel_handle_v1.closed event will
+ * be emitted.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_close(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_CLOSE);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * The rectangle of the surface specified in this request corresponds to
+ * the place where the app using this protocol represents the given toplevel.
+ * It can be used by the compositor as a hint for some operations, e.g
+ * minimizing. The client is however not required to set this, in which
+ * case the compositor is free to decide some default value.
+ *
+ * If the client specifies more than one rectangle, only the last one is
+ * considered.
+ *
+ * The dimensions are given in surface-local coordinates.
+ * Setting width=height=0 removes the already-set rectangle.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_set_rectangle(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1, struct wl_surface *surface, int32_t x, int32_t y, int32_t width, int32_t height)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_RECTANGLE, surface, x, y, width, height);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Destroys the zwlr_foreign_toplevel_handle_v1 object.
+ *
+ * This request should be called either when the client does not want to
+ * use the toplevel anymore or after the closed event to finalize the
+ * destruction of the object.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_destroy(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_DESTROY);
+
+ wl_proxy_destroy((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be fullscreened on the given output. If the
+ * fullscreen state and/or the outputs the toplevel is visible on actually
+ * change, this will be indicated by the state and output_enter/leave
+ * events.
+ *
+ * The output parameter is only a hint to the compositor. Also, if output
+ * is NULL, the compositor should decide which output the toplevel will be
+ * fullscreened on, if at all.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_set_fullscreen(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1, struct wl_output *output)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_SET_FULLSCREEN, output);
+}
+
+/**
+ * @ingroup iface_zwlr_foreign_toplevel_handle_v1
+ *
+ * Requests that the toplevel be unfullscreened. If the fullscreen state
+ * actually changes, this will be indicated by the state event.
+ */
+static inline void
+zwlr_foreign_toplevel_handle_v1_unset_fullscreen(struct zwlr_foreign_toplevel_handle_v1 *zwlr_foreign_toplevel_handle_v1)
+{
+ wl_proxy_marshal((struct wl_proxy *) zwlr_foreign_toplevel_handle_v1,
+ ZWLR_FOREIGN_TOPLEVEL_HANDLE_V1_UNSET_FULLSCREEN);
+}
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-code.c b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-code.c
new file mode 100644
index 00000000..ef335644
--- /dev/null
+++ b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1-code.c
@@ -0,0 +1,104 @@
+/* Generated by wayland-scanner 1.18.0 */
+
+/*
+ * Copyright © 2018 Ilia Bozhinov
+ *
+ * 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.
+ */
+
+#include <stdlib.h>
+#include <stdint.h>
+#include "wayland-util.h"
+
+#ifndef __has_attribute
+# define __has_attribute(x) 0 /* Compatibility with non-clang compilers. */
+#endif
+
+#if (__has_attribute(visibility) || defined(__GNUC__) && __GNUC__ >= 4)
+#define WL_PRIVATE __attribute__ ((visibility("hidden")))
+#else
+#define WL_PRIVATE
+#endif
+
+extern const struct wl_interface wl_output_interface;
+extern const struct wl_interface wl_seat_interface;
+extern const struct wl_interface wl_surface_interface;
+extern const struct wl_interface zwlr_foreign_toplevel_handle_v1_interface;
+
+static const struct wl_interface *wlr_foreign_toplevel_management_unstable_v1_types[] = {
+ NULL,
+ &zwlr_foreign_toplevel_handle_v1_interface,
+ &wl_seat_interface,
+ &wl_surface_interface,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ &wl_output_interface,
+ &wl_output_interface,
+ &wl_output_interface,
+};
+
+static const struct wl_message zwlr_foreign_toplevel_manager_v1_requests[] = {
+ { "stop", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+};
+
+static const struct wl_message zwlr_foreign_toplevel_manager_v1_events[] = {
+ { "toplevel", "n", wlr_foreign_toplevel_management_unstable_v1_types + 1 },
+ { "finished", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+};
+
+WL_PRIVATE const struct wl_interface zwlr_foreign_toplevel_manager_v1_interface = {
+ "zwlr_foreign_toplevel_manager_v1", 2,
+ 1, zwlr_foreign_toplevel_manager_v1_requests,
+ 2, zwlr_foreign_toplevel_manager_v1_events,
+};
+
+static const struct wl_message zwlr_foreign_toplevel_handle_v1_requests[] = {
+ { "set_maximized", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "unset_maximized", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "set_minimized", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "unset_minimized", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "activate", "o", wlr_foreign_toplevel_management_unstable_v1_types + 2 },
+ { "close", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "set_rectangle", "oiiii", wlr_foreign_toplevel_management_unstable_v1_types + 3 },
+ { "destroy", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "set_fullscreen", "2?o", wlr_foreign_toplevel_management_unstable_v1_types + 8 },
+ { "unset_fullscreen", "2", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+};
+
+static const struct wl_message zwlr_foreign_toplevel_handle_v1_events[] = {
+ { "title", "s", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "app_id", "s", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "output_enter", "o", wlr_foreign_toplevel_management_unstable_v1_types + 9 },
+ { "output_leave", "o", wlr_foreign_toplevel_management_unstable_v1_types + 10 },
+ { "state", "a", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "done", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+ { "closed", "", wlr_foreign_toplevel_management_unstable_v1_types + 0 },
+};
+
+WL_PRIVATE const struct wl_interface zwlr_foreign_toplevel_handle_v1_interface = {
+ "zwlr_foreign_toplevel_handle_v1", 2,
+ 10, zwlr_foreign_toplevel_handle_v1_requests,
+ 7, zwlr_foreign_toplevel_handle_v1_events,
+};
+
diff --git a/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1.xml b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1.xml
new file mode 100644
index 00000000..a97738f8
--- /dev/null
+++ b/applets/wncklet/wayland-protocol/wlr-foreign-toplevel-management-unstable-v1.xml
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="wlr_foreign_toplevel_management_unstable_v1">
+ <copyright>
+ Copyright © 2018 Ilia Bozhinov
+
+ 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="zwlr_foreign_toplevel_manager_v1" version="2">
+ <description summary="list and control opened apps">
+ The purpose of this protocol is to enable the creation of taskbars
+ and docks by providing them with a list of opened applications and
+ letting them request certain actions on them, like maximizing, etc.
+
+ After a client binds the zwlr_foreign_toplevel_manager_v1, each opened
+ toplevel window will be sent via the toplevel event
+ </description>
+
+ <event name="toplevel">
+ <description summary="a toplevel has been created">
+ This event is emitted whenever a new toplevel window is created. It
+ is emitted for all toplevels, regardless of the app that has created
+ them.
+
+ All initial details of the toplevel(title, app_id, states, etc.) will
+ be sent immediately after this event via the corresponding events in
+ zwlr_foreign_toplevel_handle_v1.
+ </description>
+ <arg name="toplevel" type="new_id" interface="zwlr_foreign_toplevel_handle_v1"/>
+ </event>
+
+ <request name="stop">
+ <description summary="stop sending events">
+ Indicates the client no longer wishes to receive events for new toplevels.
+ However the compositor may emit further toplevel_created events, until
+ the finished event is emitted.
+
+ The client must not send any more requests after this one.
+ </description>
+ </request>
+
+ <event name="finished">
+ <description summary="the compositor has finished with the toplevel manager">
+ This event indicates that the compositor is done sending events to the
+ zwlr_foreign_toplevel_manager_v1. The server will destroy the object
+ immediately after sending this request, so it will become invalid and
+ the client should free any resources associated with it.
+ </description>
+ </event>
+ </interface>
+
+ <interface name="zwlr_foreign_toplevel_handle_v1" version="2">
+ <description summary="an opened toplevel">
+ A zwlr_foreign_toplevel_handle_v1 object represents an opened toplevel
+ window. Each app may have multiple opened toplevels.
+
+ Each toplevel has a list of outputs it is visible on, conveyed to the
+ client with the output_enter and output_leave events.
+ </description>
+
+ <event name="title">
+ <description summary="title change">
+ This event is emitted whenever the title of the toplevel changes.
+ </description>
+ <arg name="title" type="string"/>
+ </event>
+
+ <event name="app_id">
+ <description summary="app-id change">
+ This event is emitted whenever the app-id of the toplevel changes.
+ </description>
+ <arg name="app_id" type="string"/>
+ </event>
+
+ <event name="output_enter">
+ <description summary="toplevel entered an output">
+ This event is emitted whenever the toplevel becomes visible on
+ the given output. A toplevel may be visible on multiple outputs.
+ </description>
+ <arg name="output" type="object" interface="wl_output"/>
+ </event>
+
+ <event name="output_leave">
+ <description summary="toplevel left an output">
+ This event is emitted whenever the toplevel stops being visible on
+ the given output. It is guaranteed that an entered-output event
+ with the same output has been emitted before this event.
+ </description>
+ <arg name="output" type="object" interface="wl_output"/>
+ </event>
+
+ <request name="set_maximized">
+ <description summary="requests that the toplevel be maximized">
+ Requests that the toplevel be maximized. If the maximized state actually
+ changes, this will be indicated by the state event.
+ </description>
+ </request>
+
+ <request name="unset_maximized">
+ <description summary="requests that the toplevel be unmaximized">
+ Requests that the toplevel be unmaximized. If the maximized state actually
+ changes, this will be indicated by the state event.
+ </description>
+ </request>
+
+ <request name="set_minimized">
+ <description summary="requests that the toplevel be minimized">
+ Requests that the toplevel be minimized. If the minimized state actually
+ changes, this will be indicated by the state event.
+ </description>
+ </request>
+
+ <request name="unset_minimized">
+ <description summary="requests that the toplevel be unminimized">
+ Requests that the toplevel be unminimized. If the minimized state actually
+ changes, this will be indicated by the state event.
+ </description>
+ </request>
+
+ <request name="activate">
+ <description summary="activate the toplevel">
+ Request that this toplevel be activated on the given seat.
+ There is no guarantee the toplevel will be actually activated.
+ </description>
+ <arg name="seat" type="object" interface="wl_seat"/>
+ </request>
+
+ <enum name="state">
+ <description summary="types of states on the toplevel">
+ The different states that a toplevel can have. These have the same meaning
+ as the states with the same names defined in xdg-toplevel
+ </description>
+
+ <entry name="maximized" value="0" summary="the toplevel is maximized"/>
+ <entry name="minimized" value="1" summary="the toplevel is minimized"/>
+ <entry name="activated" value="2" summary="the toplevel is active"/>
+ <entry name="fullscreen" value="3" summary="the toplevel is fullscreen" since="2"/>
+ </enum>
+
+ <event name="state">
+ <description summary="the toplevel state changed">
+ This event is emitted immediately after the zlw_foreign_toplevel_handle_v1
+ is created and each time the toplevel state changes, either because of a
+ compositor action or because of a request in this protocol.
+ </description>
+
+ <arg name="state" type="array"/>
+ </event>
+
+ <event name="done">
+ <description summary="all information about the toplevel has been sent">
+ This event is sent after all changes in the toplevel state have been
+ sent.
+
+ This allows changes to the zwlr_foreign_toplevel_handle_v1 properties
+ to be seen as atomic, even if they happen via multiple events.
+ </description>
+ </event>
+
+ <request name="close">
+ <description summary="request that the toplevel be closed">
+ Send a request to the toplevel to close itself. The compositor would
+ typically use a shell-specific method to carry out this request, for
+ example by sending the xdg_toplevel.close event. However, this gives
+ no guarantees the toplevel will actually be destroyed. If and when
+ this happens, the zwlr_foreign_toplevel_handle_v1.closed event will
+ be emitted.
+ </description>
+ </request>
+
+ <request name="set_rectangle">
+ <description summary="the rectangle which represents the toplevel">
+ The rectangle of the surface specified in this request corresponds to
+ the place where the app using this protocol represents the given toplevel.
+ It can be used by the compositor as a hint for some operations, e.g
+ minimizing. The client is however not required to set this, in which
+ case the compositor is free to decide some default value.
+
+ If the client specifies more than one rectangle, only the last one is
+ considered.
+
+ The dimensions are given in surface-local coordinates.
+ Setting width=height=0 removes the already-set rectangle.
+ </description>
+
+ <arg name="surface" type="object" interface="wl_surface"/>
+ <arg name="x" type="int"/>
+ <arg name="y" type="int"/>
+ <arg name="width" type="int"/>
+ <arg name="height" type="int"/>
+ </request>
+
+ <enum name="error">
+ <entry name="invalid_rectangle" value="0"
+ summary="the provided rectangle is invalid"/>
+ </enum>
+
+ <event name="closed">
+ <description summary="this toplevel has been destroyed">
+ This event means the toplevel has been destroyed. It is guaranteed there
+ won't be any more events for this zwlr_foreign_toplevel_handle_v1. The
+ toplevel itself becomes inert so any requests will be ignored except the
+ destroy request.
+ </description>
+ </event>
+
+ <request name="destroy" type="destructor">
+ <description summary="destroy the zwlr_foreign_toplevel_handle_v1 object">
+ Destroys the zwlr_foreign_toplevel_handle_v1 object.
+
+ This request should be called either when the client does not want to
+ use the toplevel anymore or after the closed event to finalize the
+ destruction of the object.
+ </description>
+ </request>
+
+ <!-- Version 2 additions -->
+
+ <request name="set_fullscreen" since="2">
+ <description summary="request that the toplevel be fullscreened">
+ Requests that the toplevel be fullscreened on the given output. If the
+ fullscreen state and/or the outputs the toplevel is visible on actually
+ change, this will be indicated by the state and output_enter/leave
+ events.
+
+ The output parameter is only a hint to the compositor. Also, if output
+ is NULL, the compositor should decide which output the toplevel will be
+ fullscreened on, if at all.
+ </description>
+ <arg name="output" type="object" interface="wl_output" allow-null="true"/>
+ </request>
+
+ <request name="unset_fullscreen" since="2">
+ <description summary="request that the toplevel be unfullscreened">
+ Requests that the toplevel be unfullscreened. If the fullscreen state
+ actually changes, this will be indicated by the state event.
+ </description>
+ </request>
+ </interface>
+</protocol>