mirror of
				https://gitlab.freedesktop.org/wayland/wayland.git
				synced 2025-11-03 09:01:42 -05:00 
			
		
		
		
	Generate protocol types and metadata from xml
This commit is contained in:
		
							parent
							
								
									c37c57aec7
								
							
						
					
					
						commit
						a1f3f60bea
					
				
					 15 changed files with 637 additions and 289 deletions
				
			
		
							
								
								
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
					@ -1,3 +1,4 @@
 | 
				
			||||||
 | 
					*.deps
 | 
				
			||||||
*.o
 | 
					*.o
 | 
				
			||||||
*.so
 | 
					*.so
 | 
				
			||||||
*.pc
 | 
					*.pc
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										32
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										32
									
								
								Makefile
									
										
									
									
									
								
							| 
						 | 
					@ -3,22 +3,34 @@ include config.mk
 | 
				
			||||||
subdirs = clients spec
 | 
					subdirs = clients spec
 | 
				
			||||||
libs = libwayland-server.so libwayland.so
 | 
					libs = libwayland-server.so libwayland.so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all : $(libs) compositor subdirs-all
 | 
					all : $(libs) compositor subdirs-all scanner
 | 
				
			||||||
 | 
					
 | 
				
			||||||
libwayland-server.so :				\
 | 
					libwayland-server.so :				\
 | 
				
			||||||
 | 
						wayland-protocol.o			\
 | 
				
			||||||
	wayland.o				\
 | 
						wayland.o				\
 | 
				
			||||||
	event-loop.o				\
 | 
						event-loop.o				\
 | 
				
			||||||
	connection.o				\
 | 
						connection.o				\
 | 
				
			||||||
	wayland-util.o				\
 | 
						wayland-util.o				\
 | 
				
			||||||
	wayland-hash.o				\
 | 
						wayland-hash.o
 | 
				
			||||||
	wayland-protocol.o
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
libwayland.so :					\
 | 
					libwayland.so :					\
 | 
				
			||||||
 | 
						wayland-protocol.o			\
 | 
				
			||||||
	wayland-client.o			\
 | 
						wayland-client.o			\
 | 
				
			||||||
	connection.o				\
 | 
						connection.o				\
 | 
				
			||||||
	wayland-util.o				\
 | 
						wayland-util.o				\
 | 
				
			||||||
	wayland-hash.o				\
 | 
						wayland-hash.o
 | 
				
			||||||
	wayland-protocol.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) : CFLAGS += -fPIC $(FFI_CFLAGS)
 | 
				
			||||||
$(libs) : LDLIBS += $(FFI_LIBS)
 | 
					$(libs) : LDLIBS += $(FFI_LIBS)
 | 
				
			||||||
| 
						 | 
					@ -35,6 +47,12 @@ compositor :					\
 | 
				
			||||||
compositor : CFLAGS += $(COMPOSITOR_CFLAGS)
 | 
					compositor : CFLAGS += $(COMPOSITOR_CFLAGS)
 | 
				
			||||||
compositor : LDLIBS += ./libwayland-server.so $(COMPOSITOR_LIBS) -rdynamic -lrt -lEGL -lm
 | 
					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 :
 | 
					subdirs-all subdirs-clean :
 | 
				
			||||||
	for f in $(subdirs); do $(MAKE) -C $$f $(@:subdirs-%=%); done
 | 
						for f in $(subdirs); do $(MAKE) -C $$f $(@:subdirs-%=%); done
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -46,7 +64,9 @@ install : $(libs) compositor
 | 
				
			||||||
	install 70-wayland.rules ${udev_rules_dir}
 | 
						install 70-wayland.rules ${udev_rules_dir}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
clean : subdirs-clean
 | 
					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.mk : config.mk.in
 | 
				
			||||||
	./config.status
 | 
						./config.status
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -34,7 +34,6 @@
 | 
				
			||||||
#include <EGL/eglext.h>
 | 
					#include <EGL/eglext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland.h"
 | 
					#include "wayland.h"
 | 
				
			||||||
#include "wayland-protocol.h"
 | 
					 | 
				
			||||||
#include "compositor.h"
 | 
					#include "compositor.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct drm_compositor {
 | 
					struct drm_compositor {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,7 +38,6 @@
 | 
				
			||||||
#include <EGL/eglext.h>
 | 
					#include <EGL/eglext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland.h"
 | 
					#include "wayland.h"
 | 
				
			||||||
#include "wayland-protocol.h"
 | 
					 | 
				
			||||||
#include "compositor.h"
 | 
					#include "compositor.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
 | 
					#define ARRAY_SIZE(array) (sizeof(array) / sizeof(array[0]))
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										26
									
								
								compositor.c
									
										
									
									
									
								
							
							
						
						
									
										26
									
								
								compositor.c
									
										
									
									
									
								
							| 
						 | 
					@ -38,7 +38,7 @@
 | 
				
			||||||
#include <EGL/eglext.h>
 | 
					#include <EGL/eglext.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland.h"
 | 
					#include "wayland.h"
 | 
				
			||||||
#include "wayland-protocol.h"
 | 
					#include "wayland-server-protocol.h"
 | 
				
			||||||
#include "cairo-util.h"
 | 
					#include "cairo-util.h"
 | 
				
			||||||
#include "compositor.h"
 | 
					#include "compositor.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -425,8 +425,8 @@ surface_destroy(struct wl_client *client,
 | 
				
			||||||
static void
 | 
					static void
 | 
				
			||||||
surface_attach(struct wl_client *client,
 | 
					surface_attach(struct wl_client *client,
 | 
				
			||||||
	       struct wl_surface *surface, uint32_t name, 
 | 
						       struct wl_surface *surface, uint32_t name, 
 | 
				
			||||||
	       uint32_t width, uint32_t height, uint32_t stride,
 | 
						       int32_t width, int32_t height, uint32_t stride,
 | 
				
			||||||
	       struct wl_object *visual)
 | 
						       struct wl_visual *visual)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct wlsc_surface *es = (struct wlsc_surface *) surface;
 | 
						struct wlsc_surface *es = (struct wlsc_surface *) surface;
 | 
				
			||||||
	struct wlsc_compositor *ec = es->compositor;
 | 
						struct wlsc_compositor *ec = es->compositor;
 | 
				
			||||||
| 
						 | 
					@ -441,11 +441,11 @@ surface_attach(struct wl_client *client,
 | 
				
			||||||
	es->width = width;
 | 
						es->width = width;
 | 
				
			||||||
	es->height = height;
 | 
						es->height = height;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (visual == &ec->argb_visual.base)
 | 
						if (visual == &ec->argb_visual)
 | 
				
			||||||
		es->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;
 | 
							es->visual = &ec->premultiplied_argb_visual;
 | 
				
			||||||
	else if (visual == &ec->rgb_visual.base)
 | 
						else if (visual == &ec->rgb_visual)
 | 
				
			||||||
		es->visual = &ec->rgb_visual;
 | 
							es->visual = &ec->rgb_visual;
 | 
				
			||||||
	else
 | 
						else
 | 
				
			||||||
		/* FIXME: Smack client with an exception event */;
 | 
							/* 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))
 | 
						    (!surface || device->keyboard_focus->base.client != surface->base.client))
 | 
				
			||||||
		wl_surface_post_event(&device->keyboard_focus->base,
 | 
							wl_surface_post_event(&device->keyboard_focus->base,
 | 
				
			||||||
				      &device->base,
 | 
									      &device->base,
 | 
				
			||||||
				      WL_INPUT_KEYBOARD_FOCUS,
 | 
									      WL_INPUT_DEVICE_KEYBOARD_FOCUS,
 | 
				
			||||||
				      time, NULL, &device->keys);
 | 
									      time, NULL, &device->keys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (surface)
 | 
						if (surface)
 | 
				
			||||||
		wl_surface_post_event(&surface->base,
 | 
							wl_surface_post_event(&surface->base,
 | 
				
			||||||
				      &device->base,
 | 
									      &device->base,
 | 
				
			||||||
				      WL_INPUT_KEYBOARD_FOCUS,
 | 
									      WL_INPUT_DEVICE_KEYBOARD_FOCUS,
 | 
				
			||||||
				      time, &surface->base, &device->keys);
 | 
									      time, &surface->base, &device->keys);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	device->keyboard_focus = surface;
 | 
						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))
 | 
						    (!surface || device->pointer_focus->base.client != surface->base.client))
 | 
				
			||||||
		wl_surface_post_event(&device->pointer_focus->base,
 | 
							wl_surface_post_event(&device->pointer_focus->base,
 | 
				
			||||||
				      &device->base,
 | 
									      &device->base,
 | 
				
			||||||
				      WL_INPUT_POINTER_FOCUS,
 | 
									      WL_INPUT_DEVICE_POINTER_FOCUS,
 | 
				
			||||||
				      time, NULL);
 | 
									      time, NULL);
 | 
				
			||||||
	if (surface)
 | 
						if (surface)
 | 
				
			||||||
		wl_surface_post_event(&surface->base,
 | 
							wl_surface_post_event(&surface->base,
 | 
				
			||||||
				      &device->base,
 | 
									      &device->base,
 | 
				
			||||||
				      WL_INPUT_POINTER_FOCUS,
 | 
									      WL_INPUT_DEVICE_POINTER_FOCUS,
 | 
				
			||||||
				      time, &surface->base);
 | 
									      time, &surface->base);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	device->pointer_focus = surface;
 | 
						device->pointer_focus = surface;
 | 
				
			||||||
| 
						 | 
					@ -644,7 +644,7 @@ notify_motion(struct wlsc_input_device *device, uint32_t time, int x, int y)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (es)
 | 
						if (es)
 | 
				
			||||||
		wl_surface_post_event(&es->base, &device->base,
 | 
							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_init(&device->sprite->matrix);
 | 
				
			||||||
	wlsc_matrix_scale(&device->sprite->matrix, 64, 64, 1);
 | 
						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? */
 | 
							/* FIXME: Swallow click on raise? */
 | 
				
			||||||
		wl_surface_post_event(&surface->base, &device->base,
 | 
							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);
 | 
							wlsc_compositor_schedule_repaint(compositor);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
| 
						 | 
					@ -730,7 +730,7 @@ notify_key(struct wlsc_input_device *device,
 | 
				
			||||||
	if (device->keyboard_focus != NULL)
 | 
						if (device->keyboard_focus != NULL)
 | 
				
			||||||
		wl_surface_post_event(&device->keyboard_focus->base,
 | 
							wl_surface_post_event(&device->keyboard_focus->base,
 | 
				
			||||||
				      &device->base,
 | 
									      &device->base,
 | 
				
			||||||
				      WL_INPUT_KEY, time, key, state);
 | 
									      WL_INPUT_DEVICE_KEY, time, key, state);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static uint32_t
 | 
					static uint32_t
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,8 @@ CLIENT_LIBS = @CLIENT_LIBS@
 | 
				
			||||||
POPPLER_CFLAGS = @POPPLER_CFLAGS@
 | 
					POPPLER_CFLAGS = @POPPLER_CFLAGS@
 | 
				
			||||||
POPPLER_LIBS = @POPPLER_LIBS@
 | 
					POPPLER_LIBS = @POPPLER_LIBS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					EXPAT_LIBS = @EXPAT_LIBS@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
first : all
 | 
					first : all
 | 
				
			||||||
 | 
					
 | 
				
			||||||
-include .*.deps
 | 
					-include .*.deps
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										11
									
								
								configure.ac
									
										
									
									
									
								
							
							
						
						
									
										11
									
								
								configure.ac
									
										
									
									
									
								
							| 
						 | 
					@ -14,5 +14,16 @@ if test $CC = gcc; then
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
AC_SUBST(GCC_CFLAGS)
 | 
					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_CONFIG_FILES([config.mk wayland-server.pc wayland.pc])
 | 
				
			||||||
AC_OUTPUT
 | 
					AC_OUTPUT
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										137
									
								
								protocol.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										137
									
								
								protocol.xml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,137 @@
 | 
				
			||||||
 | 
					<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>
 | 
				
			||||||
							
								
								
									
										443
									
								
								scanner.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										443
									
								
								scanner.c
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,443 @@
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * Copyright © 2010 Intel Corporation
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is free software; you can redistribute it and/or modify
 | 
				
			||||||
 | 
					 * it under the terms of the GNU General Public License as published by
 | 
				
			||||||
 | 
					 * the Free Software Foundation; either version 2 of the License, or
 | 
				
			||||||
 | 
					 * (at your option) any later version.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * This program is distributed in the hope that it will be useful,
 | 
				
			||||||
 | 
					 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
				
			||||||
 | 
					 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
				
			||||||
 | 
					 * GNU General Public License for more details.
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * You should have received a copy of the GNU General Public License
 | 
				
			||||||
 | 
					 * along with this program; if not, write to the Free Software Foundation,
 | 
				
			||||||
 | 
					 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <stdio.h>
 | 
				
			||||||
 | 
					#include <string.h>
 | 
				
			||||||
 | 
					#include <errno.h>
 | 
				
			||||||
 | 
					#include <ctype.h>
 | 
				
			||||||
 | 
					#include <expat.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "wayland-util.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char copyright[] =
 | 
				
			||||||
 | 
						"/*\n"
 | 
				
			||||||
 | 
						" * Copyright © 2010 Kristian Høgsberg\n"
 | 
				
			||||||
 | 
						" *\n"
 | 
				
			||||||
 | 
						" * Permission to use, copy, modify, distribute, and sell this software and its\n"
 | 
				
			||||||
 | 
						" * documentation for any purpose is hereby granted without fee, provided that\n"
 | 
				
			||||||
 | 
						" * the above copyright notice appear in all copies and that both that copyright\n"
 | 
				
			||||||
 | 
						" * notice and this permission notice appear in supporting documentation, and\n"
 | 
				
			||||||
 | 
						" * that the name of the copyright holders not be used in advertising or\n"
 | 
				
			||||||
 | 
						" * publicity pertaining to distribution of the software without specific,\n"
 | 
				
			||||||
 | 
						" * written prior permission.  The copyright holders make no representations\n"
 | 
				
			||||||
 | 
						" * about the suitability of this software for any purpose.  It is provided \"as\n"
 | 
				
			||||||
 | 
						" * is\" without express or implied warranty.\n"
 | 
				
			||||||
 | 
						" *\n"
 | 
				
			||||||
 | 
						" * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,\n"
 | 
				
			||||||
 | 
						" * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO\n"
 | 
				
			||||||
 | 
						" * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR\n"
 | 
				
			||||||
 | 
						" * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,\n"
 | 
				
			||||||
 | 
						" * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER\n"
 | 
				
			||||||
 | 
						" * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE\n"
 | 
				
			||||||
 | 
						" * OF THIS SOFTWARE.\n"
 | 
				
			||||||
 | 
						" */\n";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static int
 | 
				
			||||||
 | 
					usage(int ret)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						fprintf(stderr, "usage: ./scanner [header|code]\n");
 | 
				
			||||||
 | 
						exit(ret);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define XML_BUFFER_SIZE 4096
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct protocol {
 | 
				
			||||||
 | 
						struct wl_list interface_list;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct interface {
 | 
				
			||||||
 | 
						char *name;
 | 
				
			||||||
 | 
						char *uppercase_name;
 | 
				
			||||||
 | 
						int version;
 | 
				
			||||||
 | 
						struct wl_list request_list;
 | 
				
			||||||
 | 
						struct wl_list event_list;
 | 
				
			||||||
 | 
						struct wl_list link;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct message {
 | 
				
			||||||
 | 
						char *name;
 | 
				
			||||||
 | 
						char *uppercase_name;
 | 
				
			||||||
 | 
						struct wl_list arg_list;
 | 
				
			||||||
 | 
						struct wl_list link;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum arg_type {
 | 
				
			||||||
 | 
						NEW_ID,
 | 
				
			||||||
 | 
						INT,
 | 
				
			||||||
 | 
						UNSIGNED,
 | 
				
			||||||
 | 
						STRING,
 | 
				
			||||||
 | 
						OBJECT,
 | 
				
			||||||
 | 
						ARRAY
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct arg {
 | 
				
			||||||
 | 
						char *name;
 | 
				
			||||||
 | 
						enum arg_type type;
 | 
				
			||||||
 | 
						char *object_name;
 | 
				
			||||||
 | 
						struct wl_list link;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					struct parse_context {
 | 
				
			||||||
 | 
						struct protocol *protocol;
 | 
				
			||||||
 | 
						struct interface *interface;
 | 
				
			||||||
 | 
						struct message *message;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static char *
 | 
				
			||||||
 | 
					uppercase_dup(const char *src)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						char *u;
 | 
				
			||||||
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u = strdup(src);
 | 
				
			||||||
 | 
						for (i = 0; u[i]; i++)
 | 
				
			||||||
 | 
							u[i] = toupper(u[i]);
 | 
				
			||||||
 | 
						u[i] = '\0';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return u;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					start_element(void *data, const char *element_name, const char **atts)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct parse_context *ctx = data;
 | 
				
			||||||
 | 
						struct interface *interface;
 | 
				
			||||||
 | 
						struct message *message;
 | 
				
			||||||
 | 
						struct arg *arg;
 | 
				
			||||||
 | 
						const char *name, *type;
 | 
				
			||||||
 | 
						int i, version;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						name = 0;
 | 
				
			||||||
 | 
						type = 0;
 | 
				
			||||||
 | 
						version = 0;
 | 
				
			||||||
 | 
						for (i = 0; atts[i]; i += 2) {
 | 
				
			||||||
 | 
							if (strcmp(atts[i], "name") == 0)
 | 
				
			||||||
 | 
								name = atts[i + 1];
 | 
				
			||||||
 | 
							if (strcmp(atts[i], "version") == 0)
 | 
				
			||||||
 | 
								version = atoi(atts[i + 1]);
 | 
				
			||||||
 | 
							if (strcmp(atts[i], "type") == 0)
 | 
				
			||||||
 | 
								type = atts[i + 1];
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (strcmp(element_name, "interface") == 0) {
 | 
				
			||||||
 | 
							if (name == NULL) {
 | 
				
			||||||
 | 
								fprintf(stderr, "no interface name given\n");
 | 
				
			||||||
 | 
								exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (version == 0) {
 | 
				
			||||||
 | 
								fprintf(stderr, "no interface version given\n");
 | 
				
			||||||
 | 
								exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							interface = malloc(sizeof *interface);
 | 
				
			||||||
 | 
							interface->name = strdup(name);
 | 
				
			||||||
 | 
							interface->uppercase_name = uppercase_dup(name);
 | 
				
			||||||
 | 
							interface->version = version;
 | 
				
			||||||
 | 
							wl_list_init(&interface->request_list);
 | 
				
			||||||
 | 
							wl_list_init(&interface->event_list);
 | 
				
			||||||
 | 
							wl_list_insert(ctx->protocol->interface_list.prev,
 | 
				
			||||||
 | 
								       &interface->link);
 | 
				
			||||||
 | 
							ctx->interface = interface;
 | 
				
			||||||
 | 
						} else if (strcmp(element_name, "request") == 0 ||
 | 
				
			||||||
 | 
							   strcmp(element_name, "event") == 0) {
 | 
				
			||||||
 | 
							if (name == NULL) {
 | 
				
			||||||
 | 
								fprintf(stderr, "no request name given\n");
 | 
				
			||||||
 | 
								exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							message = malloc(sizeof *message);
 | 
				
			||||||
 | 
							message->name = strdup(name);
 | 
				
			||||||
 | 
							message->uppercase_name = uppercase_dup(name);
 | 
				
			||||||
 | 
							wl_list_init(&message->arg_list);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (strcmp(element_name, "request") == 0)
 | 
				
			||||||
 | 
								wl_list_insert(ctx->interface->request_list.prev,
 | 
				
			||||||
 | 
									       &message->link);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								wl_list_insert(ctx->interface->event_list.prev,
 | 
				
			||||||
 | 
									       &message->link);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ctx->message = message;
 | 
				
			||||||
 | 
						} else if (strcmp(element_name, "arg") == 0) {
 | 
				
			||||||
 | 
							arg = malloc(sizeof *arg);
 | 
				
			||||||
 | 
							arg->name = strdup(name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (strcmp(type, "new_id") == 0)
 | 
				
			||||||
 | 
								arg->type = NEW_ID;
 | 
				
			||||||
 | 
							else if (strcmp(type, "int") == 0)
 | 
				
			||||||
 | 
								arg->type = INT;
 | 
				
			||||||
 | 
							else if (strcmp(type, "uint") == 0)
 | 
				
			||||||
 | 
								arg->type = UNSIGNED;
 | 
				
			||||||
 | 
							else if (strcmp(type, "string") == 0)
 | 
				
			||||||
 | 
								arg->type = STRING;
 | 
				
			||||||
 | 
							else if (strcmp(type, "array") == 0)
 | 
				
			||||||
 | 
								arg->type = ARRAY;
 | 
				
			||||||
 | 
							else {
 | 
				
			||||||
 | 
								arg->type = OBJECT;
 | 
				
			||||||
 | 
								arg->object_name = strdup(type);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							wl_list_insert(ctx->message->arg_list.prev,
 | 
				
			||||||
 | 
								       &arg->link);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					emit_opcodes(struct wl_list *message_list, struct interface *interface)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct message *m;
 | 
				
			||||||
 | 
						int opcode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (wl_list_empty(message_list))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						opcode = 0;
 | 
				
			||||||
 | 
						wl_list_for_each(m, message_list, link)
 | 
				
			||||||
 | 
							printf("#define WL_%s_%s\t%d\n",
 | 
				
			||||||
 | 
							       interface->uppercase_name, m->uppercase_name, opcode++);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					emit_structs(struct wl_list *message_list, struct interface *interface)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct message *m;
 | 
				
			||||||
 | 
						struct arg *a;
 | 
				
			||||||
 | 
						int is_interface;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						is_interface = message_list == &interface->request_list;
 | 
				
			||||||
 | 
						printf("struct wl_%s_%s {\n", interface->name,
 | 
				
			||||||
 | 
						       is_interface ? "interface" : "listener");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_for_each(m, message_list, link) {
 | 
				
			||||||
 | 
							printf("\tvoid (*%s)(", m->name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (is_interface) {
 | 
				
			||||||
 | 
								printf("struct wl_client *client, struct wl_%s *%s",
 | 
				
			||||||
 | 
								       interface->name, interface->name);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								printf("void *data, struct wl_%s *%s",
 | 
				
			||||||
 | 
								       interface->name, interface->name);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!wl_list_empty(&m->arg_list))
 | 
				
			||||||
 | 
								printf(", ");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							wl_list_for_each(a, &m->arg_list, link) {
 | 
				
			||||||
 | 
								switch (a->type) {
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
								case INT:
 | 
				
			||||||
 | 
									printf("int32_t ");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case NEW_ID:
 | 
				
			||||||
 | 
								case UNSIGNED:
 | 
				
			||||||
 | 
									printf("uint32_t ");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case STRING:
 | 
				
			||||||
 | 
									printf("const char *");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case OBJECT:
 | 
				
			||||||
 | 
									printf("struct wl_%s *", a->object_name);
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case ARRAY:
 | 
				
			||||||
 | 
									printf("struct wl_array *");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								printf("%s%s",
 | 
				
			||||||
 | 
								       a->name,
 | 
				
			||||||
 | 
								       a->link.next == &m->arg_list ? "" : ", ");
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf(");\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("};\n\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					emit_header(struct protocol *protocol, int server)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct interface *i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("%s\n\n"
 | 
				
			||||||
 | 
						       "#ifndef WAYLAND_PROTOCOL_H\n"
 | 
				
			||||||
 | 
						       "#define WAYLAND_PROTOCOL_H\n"
 | 
				
			||||||
 | 
						       "\n"
 | 
				
			||||||
 | 
						       "#ifdef  __cplusplus\n"
 | 
				
			||||||
 | 
						       "extern \"C\" {\n"
 | 
				
			||||||
 | 
						       "#endif\n"
 | 
				
			||||||
 | 
						       "\n"
 | 
				
			||||||
 | 
						       "#include <stdint.h>\n"
 | 
				
			||||||
 | 
						       "#include \"wayland-util.h\"\n\n"
 | 
				
			||||||
 | 
						       "struct wl_client;\n\n", copyright);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_for_each(i, &protocol->interface_list, link)
 | 
				
			||||||
 | 
							printf("struct wl_%s;\n", i->name);
 | 
				
			||||||
 | 
						printf("\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_for_each(i, &protocol->interface_list, link) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (server) {
 | 
				
			||||||
 | 
								emit_structs(&i->request_list, i);
 | 
				
			||||||
 | 
								emit_opcodes(&i->event_list, i);
 | 
				
			||||||
 | 
							} else {
 | 
				
			||||||
 | 
								emit_structs(&i->event_list, i);
 | 
				
			||||||
 | 
								emit_opcodes(&i->request_list, i);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf("extern const struct wl_interface "
 | 
				
			||||||
 | 
							       "wl_%s_interface;\n\n",
 | 
				
			||||||
 | 
							       i->name);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("#ifdef  __cplusplus\n"
 | 
				
			||||||
 | 
						       "}\n"
 | 
				
			||||||
 | 
						       "#endif\n"
 | 
				
			||||||
 | 
						       "\n"
 | 
				
			||||||
 | 
						       "#endif\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					emit_messages(struct wl_list *message_list,
 | 
				
			||||||
 | 
						      struct interface *interface, const char *suffix)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct message *m;
 | 
				
			||||||
 | 
						struct arg *a;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (wl_list_empty(message_list))
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("static const struct wl_message "
 | 
				
			||||||
 | 
						       "%s_%s[] = {\n",
 | 
				
			||||||
 | 
						       interface->name, suffix);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_for_each(m, message_list, link) {
 | 
				
			||||||
 | 
							printf("\t{ \"%s\", \"", m->name);
 | 
				
			||||||
 | 
							wl_list_for_each(a, &m->arg_list, link) {
 | 
				
			||||||
 | 
								switch (a->type) {
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
								case INT:
 | 
				
			||||||
 | 
									printf("i");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case NEW_ID:
 | 
				
			||||||
 | 
									printf("n");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case UNSIGNED:
 | 
				
			||||||
 | 
									printf("u");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case STRING:
 | 
				
			||||||
 | 
									printf("s");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case OBJECT:
 | 
				
			||||||
 | 
									printf("o");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case ARRAY:
 | 
				
			||||||
 | 
									printf("a");
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							printf("\" },\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("};\n\n");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void
 | 
				
			||||||
 | 
					emit_code(struct protocol *protocol)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct interface *i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						printf("%s\n\n"
 | 
				
			||||||
 | 
						       "#include <stdlib.h>\n"
 | 
				
			||||||
 | 
						       "#include <stdint.h>\n"
 | 
				
			||||||
 | 
						       "#include \"wayland-util.h\"\n\n",
 | 
				
			||||||
 | 
						       copyright);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_for_each(i, &protocol->interface_list, link) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							emit_messages(&i->request_list, i, "requests");
 | 
				
			||||||
 | 
							emit_messages(&i->event_list, i, "events");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf("WL_EXPORT const struct wl_interface "
 | 
				
			||||||
 | 
							       "wl_%s_interface = {\n"
 | 
				
			||||||
 | 
							       "\t\"%s\", %d,\n",
 | 
				
			||||||
 | 
							       i->name, i->name, i->version);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!wl_list_empty(&i->request_list))
 | 
				
			||||||
 | 
								printf("\tARRAY_LENGTH(%s_requests), %s_requests,\n",
 | 
				
			||||||
 | 
								       i->name, i->name);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								printf("\t0, NULL,\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if (!wl_list_empty(&i->event_list))
 | 
				
			||||||
 | 
								printf("\tARRAY_LENGTH(%s_events), %s_events,\n",
 | 
				
			||||||
 | 
								       i->name, i->name);
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								printf("\t0, NULL,\n");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							printf("};\n\n");
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int main(int argc, char *argv[])
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						struct parse_context ctx;
 | 
				
			||||||
 | 
						struct protocol protocol;
 | 
				
			||||||
 | 
						XML_Parser parser;
 | 
				
			||||||
 | 
						int len;
 | 
				
			||||||
 | 
						void *buf;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (argc != 2)
 | 
				
			||||||
 | 
							usage(EXIT_FAILURE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						wl_list_init(&protocol.interface_list);
 | 
				
			||||||
 | 
						ctx.protocol = &protocol;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						parser = XML_ParserCreate(NULL);
 | 
				
			||||||
 | 
						XML_SetUserData(parser, &ctx);
 | 
				
			||||||
 | 
						if (parser == NULL) {
 | 
				
			||||||
 | 
							fprintf(stderr, "failed to create parser\n");
 | 
				
			||||||
 | 
							exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XML_SetElementHandler(parser, start_element, NULL);
 | 
				
			||||||
 | 
						do {
 | 
				
			||||||
 | 
							buf = XML_GetBuffer(parser, XML_BUFFER_SIZE);
 | 
				
			||||||
 | 
							len = fread(buf, 1, XML_BUFFER_SIZE, stdin);
 | 
				
			||||||
 | 
							if (len < 0) {
 | 
				
			||||||
 | 
								fprintf(stderr, "fread: %s\n", strerror(errno));
 | 
				
			||||||
 | 
								exit(EXIT_FAILURE);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							XML_ParseBuffer(parser, len, len == 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						} while (len > 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						XML_ParserFree(parser);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if (strcmp(argv[1], "client-header") == 0) {
 | 
				
			||||||
 | 
							emit_header(&protocol, 0);
 | 
				
			||||||
 | 
						} else if (strcmp(argv[1], "server-header") == 0) {
 | 
				
			||||||
 | 
							emit_header(&protocol, 1);
 | 
				
			||||||
 | 
						} else if (strcmp(argv[1], "code") == 0) {
 | 
				
			||||||
 | 
							emit_code(&protocol);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -33,7 +33,7 @@
 | 
				
			||||||
#include <assert.h>
 | 
					#include <assert.h>
 | 
				
			||||||
#include <sys/poll.h>
 | 
					#include <sys/poll.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland-protocol.h"
 | 
					#include "wayland-client-protocol.h"
 | 
				
			||||||
#include "connection.h"
 | 
					#include "connection.h"
 | 
				
			||||||
#include "wayland-util.h"
 | 
					#include "wayland-util.h"
 | 
				
			||||||
#include "wayland-client.h"
 | 
					#include "wayland-client.h"
 | 
				
			||||||
| 
						 | 
					@ -334,19 +334,6 @@ display_handle_range(void *data,
 | 
				
			||||||
	display->next_range = range;
 | 
						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 = {
 | 
					static const struct wl_display_listener display_listener = {
 | 
				
			||||||
	display_handle_invalid_object,
 | 
						display_handle_invalid_object,
 | 
				
			||||||
	display_handle_invalid_method,
 | 
						display_handle_invalid_method,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -24,16 +24,12 @@
 | 
				
			||||||
#define _WAYLAND_CLIENT_H
 | 
					#define _WAYLAND_CLIENT_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland-util.h"
 | 
					#include "wayland-util.h"
 | 
				
			||||||
 | 
					#include "wayland-client-protocol.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef  __cplusplus
 | 
					#ifdef  __cplusplus
 | 
				
			||||||
extern "C" {
 | 
					extern "C" {
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct wl_object;
 | 
					 | 
				
			||||||
struct wl_display;
 | 
					 | 
				
			||||||
struct wl_surface;
 | 
					 | 
				
			||||||
struct wl_visual;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define WL_DISPLAY_READABLE 0x01
 | 
					#define WL_DISPLAY_READABLE 0x01
 | 
				
			||||||
#define WL_DISPLAY_WRITABLE 0x02
 | 
					#define WL_DISPLAY_WRITABLE 0x02
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -70,18 +66,6 @@ wl_display_get_premultiplied_argb_visual(struct wl_display *display);
 | 
				
			||||||
struct wl_visual *
 | 
					struct wl_visual *
 | 
				
			||||||
wl_display_get_rgb_visual(struct wl_display *display);
 | 
					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 *
 | 
					struct wl_surface *
 | 
				
			||||||
wl_compositor_create_surface(struct wl_compositor *compositor);
 | 
					wl_compositor_create_surface(struct wl_compositor *compositor);
 | 
				
			||||||
void
 | 
					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_set_user_data(struct wl_surface *surface, void *user_data);
 | 
				
			||||||
void *wl_surface_get_user_data(struct wl_surface *surface);
 | 
					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
 | 
					int
 | 
				
			||||||
wl_output_add_listener(struct wl_output *output,
 | 
					wl_output_add_listener(struct wl_output *output,
 | 
				
			||||||
		       const struct wl_output_listener *listener,
 | 
							       const struct wl_output_listener *listener,
 | 
				
			||||||
		       void *data);
 | 
							       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
 | 
					int
 | 
				
			||||||
wl_input_device_add_listener(struct wl_input_device *input_device,
 | 
					wl_input_device_add_listener(struct wl_input_device *input_device,
 | 
				
			||||||
			     const struct wl_input_device_listener *listener,
 | 
								     const struct wl_input_device_listener *listener,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,104 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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,
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
| 
						 | 
					@ -1,79 +0,0 @@
 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * 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 <assert.h>
 | 
				
			||||||
#include <ffi.h>
 | 
					#include <ffi.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "wayland-protocol.h"
 | 
					 | 
				
			||||||
#include "wayland.h"
 | 
					#include "wayland.h"
 | 
				
			||||||
 | 
					#include "wayland-server-protocol.h"
 | 
				
			||||||
#include "connection.h"
 | 
					#include "connection.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct wl_client {
 | 
					struct wl_client {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										22
									
								
								wayland.h
									
										
									
									
									
								
							
							
						
						
									
										22
									
								
								wayland.h
									
										
									
									
									
								
							| 
						 | 
					@ -29,6 +29,7 @@ extern "C" {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <stdint.h>
 | 
					#include <stdint.h>
 | 
				
			||||||
#include "wayland-util.h"
 | 
					#include "wayland-util.h"
 | 
				
			||||||
 | 
					#include "wayland-server-protocol.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
enum {
 | 
					enum {
 | 
				
			||||||
	WL_EVENT_READABLE = 0x01,
 | 
						WL_EVENT_READABLE = 0x01,
 | 
				
			||||||
| 
						 | 
					@ -99,27 +100,6 @@ struct wl_surface {
 | 
				
			||||||
	struct wl_list link;
 | 
						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
 | 
					void
 | 
				
			||||||
wl_client_post_event(struct wl_client *client,
 | 
					wl_client_post_event(struct wl_client *client,
 | 
				
			||||||
		      struct wl_object *sender,
 | 
							      struct wl_object *sender,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue