Generate protocol types and metadata from xml

parent c37c57ae
*.deps
*.o
*.so
*.pc
......
......@@ -3,22 +3,34 @@ include config.mk
subdirs = clients spec
libs = libwayland-server.so libwayland.so
all : $(libs) compositor subdirs-all
all : $(libs) compositor subdirs-all scanner
libwayland-server.so : \
wayland-protocol.o \
wayland.o \
event-loop.o \
connection.o \
wayland-util.o \
wayland-hash.o \
wayland-protocol.o
wayland-hash.o
libwayland.so : \
wayland-protocol.o \
wayland-client.o \
connection.o \
wayland-util.o \
wayland-hash.o \
wayland-protocol.o
wayland-hash.o
wayland.o : wayland-server-protocol.h
wayland-client.o : wayland-client-protocol.h
wayland-protocol.c : protocol.xml scanner
./scanner code < $< > $@
wayland-server-protocol.h : protocol.xml scanner
./scanner server-header < $< > $@
wayland-client-protocol.h : protocol.xml scanner
./scanner client-header < $< > $@
$(libs) : CFLAGS += -fPIC $(FFI_CFLAGS)
$(libs) : LDLIBS += $(FFI_LIBS)
......@@ -35,6 +47,12 @@ compositor : \
compositor : CFLAGS += $(COMPOSITOR_CFLAGS)
compositor : LDLIBS += ./libwayland-server.so $(COMPOSITOR_LIBS) -rdynamic -lrt -lEGL -lm
scanner : \
scanner.o \
wayland-util.o
scanner : LDLIBS += $(EXPAT_LIBS)
subdirs-all subdirs-clean :
for f in $(subdirs); do $(MAKE) -C $$f $(@:subdirs-%=%); done
......@@ -46,7 +64,9 @@ install : $(libs) compositor
install 70-wayland.rules ${udev_rules_dir}
clean : subdirs-clean
rm -f compositor *.o *.so
rm -f compositor scanner *.o *.so
rm -f wayland-protocol.c \
wayland-server-protocol.h wayland-client-protocol.h
config.mk : config.mk.in
./config.status
......@@ -34,7 +34,6 @@
#include <EGL/eglext.h>
#include "wayland.h"
#include "wayland-protocol.h"
#include "compositor.h"
struct drm_compositor {
......
......@@ -38,7 +38,6 @@
#include <EGL/eglext.h>
#include "wayland.h"
#include "wayland-protocol.h"
#include "compositor.h"
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
......
......@@ -38,7 +38,7 @@
#include <EGL/eglext.h>
#include "wayland.h"
#include "wayland-protocol.h"
#include "wayland-server-protocol.h"
#include "cairo-util.h"
#include "compositor.h"
......@@ -425,8 +425,8 @@ surface_destroy(struct wl_client *client,
static void
surface_attach(struct wl_client *client,
struct wl_surface *surface, uint32_t name,
uint32_t width, uint32_t height, uint32_t stride,
struct wl_object *visual)
int32_t width, int32_t height, uint32_t stride,
struct wl_visual *visual)
{
struct wlsc_surface *es = (struct wlsc_surface *) surface;
struct wlsc_compositor *ec = es->compositor;
......@@ -441,11 +441,11 @@ surface_attach(struct wl_client *client,
es->width = width;
es->height = height;
if (visual == &ec->argb_visual.base)
if (visual == &ec->argb_visual)
es->visual = &ec->argb_visual;
else if (visual == &ec->premultiplied_argb_visual.base)
else if (visual == &ec->premultiplied_argb_visual)
es->visual = &ec->premultiplied_argb_visual;
else if (visual == &ec->rgb_visual.base)
else if (visual == &ec->rgb_visual)
es->visual = &ec->rgb_visual;
else
/* FIXME: Smack client with an exception event */;
......@@ -559,13 +559,13 @@ wlsc_input_device_set_keyboard_focus(struct wlsc_input_device *device,
(!surface || device->keyboard_focus->base.client != surface->base.client))
wl_surface_post_event(&device->keyboard_focus->base,
&device->base,
WL_INPUT_KEYBOARD_FOCUS,
WL_INPUT_DEVICE_KEYBOARD_FOCUS,
time, NULL, &device->keys);
if (surface)
wl_surface_post_event(&surface->base,
&device->base,
WL_INPUT_KEYBOARD_FOCUS,
WL_INPUT_DEVICE_KEYBOARD_FOCUS,
time, &surface->base, &device->keys);
device->keyboard_focus = surface;
......@@ -583,12 +583,12 @@ wlsc_input_device_set_pointer_focus(struct wlsc_input_device *device,
(!surface || device->pointer_focus->base.client != surface->base.client))
wl_surface_post_event(&device->pointer_focus->base,
&device->base,
WL_INPUT_POINTER_FOCUS,
WL_INPUT_DEVICE_POINTER_FOCUS,
time, NULL);
if (surface)
wl_surface_post_event(&surface->base,
&device->base,
WL_INPUT_POINTER_FOCUS,
WL_INPUT_DEVICE_POINTER_FOCUS,
time, &surface->base);
device->pointer_focus = surface;
......@@ -644,7 +644,7 @@ notify_motion(struct wlsc_input_device *device, uint32_t time, int x, int y)
if (es)
wl_surface_post_event(&es->base, &device->base,
WL_INPUT_MOTION, time, x, y, sx, sy);
WL_INPUT_DEVICE_MOTION, time, x, y, sx, sy);
wlsc_matrix_init(&device->sprite->matrix);
wlsc_matrix_scale(&device->sprite->matrix, 64, 64, 1);
......@@ -675,7 +675,7 @@ notify_button(struct wlsc_input_device *device,
/* FIXME: Swallow click on raise? */
wl_surface_post_event(&surface->base, &device->base,
WL_INPUT_BUTTON, time, button, state);
WL_INPUT_DEVICE_BUTTON, time, button, state);
wlsc_compositor_schedule_repaint(compositor);
}
......@@ -730,7 +730,7 @@ notify_key(struct wlsc_input_device *device,
if (device->keyboard_focus != NULL)
wl_surface_post_event(&device->keyboard_focus->base,
&device->base,
WL_INPUT_KEY, time, key, state);
WL_INPUT_DEVICE_KEY, time, key, state);
}
static uint32_t
......
......@@ -18,6 +18,8 @@ CLIENT_LIBS = @CLIENT_LIBS@
POPPLER_CFLAGS = @POPPLER_CFLAGS@
POPPLER_LIBS = @POPPLER_LIBS@
EXPAT_LIBS = @EXPAT_LIBS@
first : all
-include .*.deps
......@@ -14,5 +14,16 @@ if test $CC = gcc; then
fi
AC_SUBST(GCC_CFLAGS)
EXPAT_LIB=""
AC_ARG_WITH(expat, [ --with-expat=<dir> Use expat from here],
[ expat=$withval
CPPFLAGS="$CPPFLAGS -I$withval/include"
LDFLAGS="$LDFLAGS -L$withval/lib" ] )
AC_CHECK_HEADERS(expat.h, [AC_DEFINE(HAVE_EXPAT_H)],
[AC_MSG_ERROR([Can't find expat.h. Please install expat.])])
AC_CHECK_LIB(expat, XML_ParserCreate, [EXPAT_LIBS="-lexpat"],
[AC_MSG_ERROR([Can't find expat library. Please install expat.])])
AC_SUBST(EXPAT_LIBS)
AC_CONFIG_FILES([config.mk wayland-server.pc wayland.pc])
AC_OUTPUT
<protocol>
<interface name="display" version="1">
<event name="invalid_object">
<arg name="object_id" type="uint"/>
</event>
<event name="invalid_method">
<arg name="object_id" type="uint"/>
<arg name="opcode" type="uint"/>
</event>
<event name="no_memory"/>
<event name="global">
<arg name="id" type="new_id"/>
<arg name="name" type="string"/>
<arg name="version" type="uint"/>
</event>
<event name="range">
<arg name="base" type="uint"/>
</event>
</interface>
<interface name="compositor" version="1">
<request name="create_surface">
<arg name="id" type="new_id"/>
</request>
<request name="commit">
<arg name="key" type="uint"/>
</request>
<event name="device">
<arg name="name" type="string"/>
</event>
<event name="acknowledge">
<arg name="key" type="uint"/>
<arg name="frame" type="uint"/>
</event>
<event name="frame">
<arg name="frame" type="uint"/>
<arg name="timestamp" type="uint"/>
</event>
</interface>
<interface name="shell" version="1">
<request name="move">
<arg name="time" type="uint"/>
</request>
<request name="resize">
<arg name="time" type="uint"/>
<arg name="edges" type="uint"/>
</request>
<event name="configure">
<arg name="surface" type="surface"/>
<arg name="x" type="int"/>
<arg name="y" type="int"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</event>
</interface>
<interface name="surface" version="1">
<request name="destroy"/>
<request name="attach">
<arg name="name" type="uint"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
<arg name="stride" type="uint"/>
<arg name="visual" type="visual"/>
</request>
<request name="map">
<arg name="x" type="int"/>
<arg name="y" type="int"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</request>
<request name="damage">
<arg name="x" type="int"/>
<arg name="y" type="int"/>
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</request>
</interface>
<interface name="input_device" version="1">
<event name="motion">
<arg name="time" type="uint"/>
<arg name="x" type="int"/>
<arg name="y" type="int"/>
<arg name="surface_x" type="int"/>
<arg name="surface_y" type="int"/>
</event>
<event name="button">
<arg name="time" type="uint"/>
<arg name="button" type="uint"/>
<arg name="state" type="uint"/>
</event>
<event name="key">
<arg name="time" type="uint"/>
<arg name="key" type="uint"/>
<arg name="state" type="uint"/>
</event>
<event name="pointer_focus">
<arg name="time" type="uint"/>
<arg name="surface" type="surface"/>
</event>
<event name="keyboard_focus">
<arg name="time" type="uint"/>
<arg name="surface" type="surface"/>
<arg name="keys" type="array"/>
</event>
</interface>
<interface name="output" version="1">
<event name="geometry">
<arg name="width" type="int"/>
<arg name="height" type="int"/>
</event>
</interface>
<interface name="visual" version="1">
</protocol>
\ No newline at end of file
This diff is collapsed.
......@@ -33,7 +33,7 @@
#include <assert.h>
#include <sys/poll.h>
#include "wayland-protocol.h"
#include "wayland-client-protocol.h"
#include "connection.h"
#include "wayland-util.h"
#include "wayland-client.h"
......@@ -334,19 +334,6 @@ display_handle_range(void *data,
display->next_range = range;
}
struct wl_display_listener {
void (*invalid_object)(void *data,
struct wl_display *display, uint32_t id);
void (*invalid_method)(void *data, struct wl_display *display,
uint32_t id, uint32_t opcode);
void (*no_memory)(void *data,
struct wl_display *display);
void (*global)(void *data, struct wl_display *display,
uint32_t id, const char *interface, uint32_t version);
void (*range)(void *data,
struct wl_display *display, uint32_t range);
};
static const struct wl_display_listener display_listener = {
display_handle_invalid_object,
display_handle_invalid_method,
......
......@@ -24,16 +24,12 @@
#define _WAYLAND_CLIENT_H
#include "wayland-util.h"
#include "wayland-client-protocol.h"
#ifdef __cplusplus
extern "C" {
#endif
struct wl_object;
struct wl_display;
struct wl_surface;
struct wl_visual;
#define WL_DISPLAY_READABLE 0x01
#define WL_DISPLAY_WRITABLE 0x02
......@@ -70,18 +66,6 @@ wl_display_get_premultiplied_argb_visual(struct wl_display *display);
struct wl_visual *
wl_display_get_rgb_visual(struct wl_display *display);
struct wl_compositor_listener {
void (*device)(void *data,
struct wl_compositor *compositor,
const char *device);
void (*acknowledge)(void *data,
struct wl_compositor *compositor,
uint32_t key, uint32_t frame);
void (*frame)(void *data,
struct wl_compositor *compositor,
uint32_t frame, uint32_t timestamp);
};
struct wl_surface *
wl_compositor_create_surface(struct wl_compositor *compositor);
void
......@@ -104,43 +88,11 @@ void wl_surface_damage(struct wl_surface *surface,
void wl_surface_set_user_data(struct wl_surface *surface, void *user_data);
void *wl_surface_get_user_data(struct wl_surface *surface);
struct wl_output;
struct wl_output_listener {
void (*geometry)(void *data,
struct wl_output *output,
int32_t width, int32_t height);
};
int
wl_output_add_listener(struct wl_output *output,
const struct wl_output_listener *listener,
void *data);
struct wl_input_device;
struct wl_input_device_listener {
void (*motion)(void *data,
struct wl_input_device *input_device,
uint32_t time,
int32_t x, int32_t y, int32_t sx, int32_t sy);
void (*button)(void *data,
struct wl_input_device *input_device,
uint32_t time,
uint32_t button, uint32_t state);
void (*key)(void *data,
struct wl_input_device *input_device,
uint32_t time,
uint32_t button, uint32_t state);
void (*pointer_focus)(void *data,
struct wl_input_device *input_device,
uint32_t time,
struct wl_surface *surface);
void (*keyboard_focus)(void *data,
struct wl_input_device *input_device,
uint32_t time,
struct wl_surface *surface,
struct wl_array *keys);
};
int
wl_input_device_add_listener(struct wl_input_device *input_device,
const struct wl_input_device_listener *listener,
......
/*
* Copyright © 2008 Kristian Høgsberg
*
* 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"
#include "wayland-protocol.h"
static const struct wl_message display_events[] = {
{ "invalid_object", "u" },
{ "invalid_method", "uu" },
{ "no_memory", "" },
{ "global", "nsu" },
{ "range", "u" },
};
WL_EXPORT const struct wl_interface wl_display_interface = {
"display", 1,
0, NULL,
ARRAY_LENGTH(display_events), display_events,
};
static const struct wl_message compositor_methods[] = {
{ "create_surface", "n" },
{ "commit", "u" }
};
static const struct wl_message compositor_events[] = {
{ "device", "s" },
{ "acknowledge", "uu" },
{ "frame", "uu" }
};
WL_EXPORT const struct wl_interface wl_compositor_interface = {
"compositor", 1,
ARRAY_LENGTH(compositor_methods), compositor_methods,
ARRAY_LENGTH(compositor_events), compositor_events,
};
static const struct wl_message surface_methods[] = {
{ "destroy", "" },
{ "attach", "uuuuo" },
{ "map", "iiii" },
{ "damage", "iiii" }
};
WL_EXPORT const struct wl_interface wl_surface_interface = {
"surface", 1,
ARRAY_LENGTH(surface_methods), surface_methods,
0, NULL,
};
static const struct wl_message input_device_events[] = {
{ "motion", "uiiii" },
{ "button", "uuu" },
{ "key", "uuu" },
{ "pointer_focus", "uo" },
{ "keyboard_focus", "uoa" },
};
WL_EXPORT const struct wl_interface wl_input_device_interface = {
"input_device", 1,
0, NULL,
ARRAY_LENGTH(input_device_events), input_device_events,
};
static const struct wl_message output_events[] = {
{ "geometry", "uu" },
};
WL_EXPORT const struct wl_interface wl_output_interface = {
"output", 1,
0, NULL,
ARRAY_LENGTH(output_events), output_events,
};
WL_EXPORT const struct wl_interface wl_visual_interface = {
"visual", 1,
0, NULL,
0, NULL,
};
/*
* Copyright © 2008 Kristian Høgsberg
*
* 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.
*/
#ifndef WAYLAND_PROTOCOL_H
#define WAYLAND_PROTOCOL_H
#ifdef __cplusplus
extern "C" {
#endif
#include <stdint.h>
#define WL_DISPLAY_INVALID_OBJECT 0
#define WL_DISPLAY_INVALID_METHOD 1
#define WL_DISPLAY_NO_MEMORY 2
#define WL_DISPLAY_GLOBAL 3
#define WL_DISPLAY_RANGE 4
extern const struct wl_interface wl_display_interface;
#define WL_COMPOSITOR_CREATE_SURFACE 0
#define WL_COMPOSITOR_COMMIT 1
#define WL_COMPOSITOR_DEVICE 0
#define WL_COMPOSITOR_ACKNOWLEDGE 1
#define WL_COMPOSITOR_FRAME 2
extern const struct wl_interface wl_compositor_interface;
#define WL_SURFACE_DESTROY 0
#define WL_SURFACE_ATTACH 1
#define WL_SURFACE_MAP 2
#define WL_SURFACE_DAMAGE 3
extern const struct wl_interface wl_surface_interface;
#define WL_INPUT_MOTION 0
#define WL_INPUT_BUTTON 1
#define WL_INPUT_KEY 2
#define WL_INPUT_POINTER_FOCUS 3
#define WL_INPUT_KEYBOARD_FOCUS 4
extern const struct wl_interface wl_input_device_interface;
#define WL_OUTPUT_GEOMETRY 0
extern const struct wl_interface wl_output_interface;
extern const struct wl_interface wl_visual_interface;
#ifdef __cplusplus
}
#endif
#endif
......@@ -34,8 +34,8 @@
#include <assert.h>
#include <ffi.h>
#include "wayland-protocol.h"
#include "wayland.h"
#include "wayland-server-protocol.h"
#include "connection.h"
struct wl_client {
......
......@@ -29,6 +29,7 @@ extern "C" {
#include <stdint.h>
#include "wayland-util.h"
#include "wayland-server-protocol.h"
enum {
WL_EVENT_READABLE = 0x01,
......@@ -99,27 +100,6 @@ struct wl_surface {
struct wl_list link;
};
struct wl_compositor_interface {
void (*create_surface)(struct wl_client *client,
struct wl_compositor *compositor, uint32_t id);
void (*commit)(struct wl_client *client,
struct wl_compositor *compositor, uint32_t key);
};
struct wl_surface_interface {
void (*destroy)(struct wl_client *client,
struct wl_surface *surface);
void (*attach)(struct wl_client *client,
struct wl_surface *surface, uint32_t name,
uint32_t width, uint32_t height, uint32_t stride,
struct wl_object *visual);
void (*map)(struct wl_client *client,
struct wl_surface *surface,
int32_t x, int32_t y, int32_t width, int32_t height);
void (*damage)(struct wl_client *client, struct wl_surface *surface,
int32_t x, int32_t y, int32_t width, int32_t height);
};
void
wl_client_post_event(struct wl_client *client,
struct wl_object *sender,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment