aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Crisci <tony@dubstepdish.com>2017-08-05 12:57:34 -0400
committerTony Crisci <tony@dubstepdish.com>2017-08-09 12:30:11 -0400
commit347707c9629334278cd85922a407d73629210c7b (patch)
treec3799eec8aba0083460c25698d606177a3602079
parentdf378d32740495d33dc46e799a547adc9b9620e1 (diff)
Add shell surface stubs
Add stubs for the wl_shell_surface interface. Implement wl_shell_get_shell_surface by creating the shell surface and settings its implementation to these stubs.
-rw-r--r--examples/compositor/wl_shell.c85
1 files changed, 84 insertions, 1 deletions
diff --git a/examples/compositor/wl_shell.c b/examples/compositor/wl_shell.c
index f2ec3c56..b8cf126c 100644
--- a/examples/compositor/wl_shell.c
+++ b/examples/compositor/wl_shell.c
@@ -1,12 +1,95 @@
#include <assert.h>
#include <wayland-server.h>
#include <wlr/util/log.h>
+#include <stdlib.h>
#include "compositor.h"
+static void shell_surface_pong(struct wl_client *client, struct wl_resource
+ *resource, uint32_t serial) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface pong");
+}
+
+static void shell_surface_move(struct wl_client *client, struct wl_resource
+ *resource, struct wl_resource *seat, uint32_t serial) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface move");
+}
+
+static void shell_surface_resize(struct wl_client *client,
+ struct wl_resource *resource, struct wl_resource *seat, uint32_t serial,
+ uint32_t edges) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface resize");
+}
+
+static void shell_surface_set_toplevel(struct wl_client *client,
+ struct wl_resource *resource) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_toplevel");
+}
+
+static void shell_surface_set_transient(struct wl_client *client,
+ struct wl_resource *resource, struct wl_resource *parent, int32_t x,
+ int32_t y, uint32_t flags) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_transient");
+}
+
+static void shell_surface_set_fullscreen(struct wl_client *client,
+ struct wl_resource *resource, uint32_t method, uint32_t framerate,
+ struct wl_resource *output) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_fullscreen");
+}
+
+static void shell_surface_set_popup(struct wl_client *client,
+ struct wl_resource *resource, struct wl_resource *seat, uint32_t serial,
+ struct wl_resource *parent, int32_t x, int32_t y, uint32_t flags) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_popup");
+}
+
+static void shell_surface_set_maximized(struct wl_client *client,
+ struct wl_resource *resource, struct wl_resource *output) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_maximized");
+}
+
+static void shell_surface_set_title(struct wl_client *client,
+ struct wl_resource *resource, const char *title) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_title");
+}
+
+static void shell_surface_set_class(struct wl_client *client,
+ struct wl_resource *resource, const char *class_) {
+ wlr_log(L_DEBUG, "TODO: implement shell surface set_class");
+}
+
+struct wl_shell_surface_interface shell_surface_interface = {
+ .pong = shell_surface_pong,
+ .move = shell_surface_move,
+ .resize = shell_surface_resize,
+ .set_toplevel = shell_surface_set_toplevel,
+ .set_transient = shell_surface_set_transient,
+ .set_fullscreen = shell_surface_set_fullscreen,
+ .set_popup = shell_surface_set_popup,
+ .set_maximized = shell_surface_set_maximized,
+ .set_title = shell_surface_set_title,
+ .set_class = shell_surface_set_class,
+};
+
+struct shell_surface_state {
+ struct wlr_surface *wlr_surface;
+};
+
+static void destroy_shell_surface(struct wl_resource *resource) {
+ struct shell_surface_state *state = wl_resource_get_user_data(resource);
+ free(state);
+}
+
void wl_shell_get_shell_surface(struct wl_client *client,
struct wl_resource *resource, uint32_t id,
struct wl_resource *surface) {
- wlr_log(L_DEBUG, "TODO: implement get_shell_surface");
+ struct wlr_surface *wlr_surface = wl_resource_get_user_data(surface);
+ struct shell_surface_state *state = malloc(sizeof(struct shell_surface_state));
+ state->wlr_surface = wlr_surface;
+ struct wl_resource *shell_surface_resource = wl_resource_create(client,
+ &wl_shell_surface_interface, wl_resource_get_version(resource), id);
+ wl_resource_set_implementation(shell_surface_resource,
+ &shell_surface_interface, state, destroy_shell_surface);
}
static struct wl_shell_interface wl_shell_impl = {