first draft 35/41135/1
authorBoram Park <boram1288.park@samsung.com>
Thu, 4 Jun 2015 08:49:43 +0000 (17:49 +0900)
committerBoram Park <boram1288.park@samsung.com>
Thu, 11 Jun 2015 08:44:19 +0000 (17:44 +0900)
Change-Id: If0af48762ede77964d58e80f0486b82a806bcfae

19 files changed:
.gitignore [new file with mode: 0644]
COPYING [new file with mode: 0644]
Makefile.am [new file with mode: 0644]
autogen.sh [new file with mode: 0755]
configure.ac [new file with mode: 0644]
packaging/wayland-extension.manifest [new file with mode: 0644]
packaging/wayland-extension.spec [new file with mode: 0644]
protocol/.gitignore [new file with mode: 0644]
protocol/fullscreen-shell.xml [new file with mode: 0644]
protocol/input-method.xml [new file with mode: 0644]
protocol/scaler.xml [new file with mode: 0644]
protocol/screenshooter.xml [new file with mode: 0644]
protocol/text-cursor-position.xml [new file with mode: 0644]
protocol/text.xml [new file with mode: 0644]
protocol/xdg-shell.xml [new file with mode: 0644]
src/.gitignore [new file with mode: 0644]
src/template-client.pc.in [new file with mode: 0644]
src/template-server.pc.in [new file with mode: 0644]
src/wayland-extension-version.h.in [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..4a7974a
--- /dev/null
@@ -0,0 +1,40 @@
+*.deps
+*.jpg
+*.la
+*.lo
+*.o
+*.pc
+*.so
+*.swp
+*.3
+*.7
+*.log
+*.trs
+*.tar.xz
+*~
+.libs
+.dirstamp
+cscope.out
+ctags
+/aclocal.m4
+/autom4te.cache
+/compile
+/config.guess
+/config.h
+/config.h.in
+/config.log
+/config.mk
+/config.status
+/config.sub
+/configure
+/depcomp
+/install-sh
+/libtool
+/ltmain.sh
+/missing
+/stamp-h1
+/test-driver
+Makefile
+Makefile.in
+protocol/*.[ch]
+wayland-extension-version.h
diff --git a/COPYING b/COPYING
new file mode 100644 (file)
index 0000000..7b7522c
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,23 @@
+Copyright © 2008-2012 Kristian Høgsberg
+Copyright © 2010-2012 Intel Corporation
+Copyright © 2011 Benjamin Franzke
+Copyright © 2012 Collabora, Ltd.
+Copyright © 2015 Samsung Electronics co., Ltd. All Rights Reserved.
+
+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.
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..8db26ba
--- /dev/null
@@ -0,0 +1,114 @@
+INCLUDES = -I$(top_builddir)/protocol -I$(top_srcdir)/src
+
+pkgconfigdir = $(libdir)/pkgconfig
+protocoldir = $(libdir)/wayland-extension
+protocolincludedir = $(includedir)/wayland-extension
+
+pkgconfig_DATA =
+protocolinclude_HEADERS = src/wayland-extension-version.h
+protocol_LTLIBRARIES =
+
+### protocol.[ch]
+protocol/%-protocol.c : $(top_srcdir)/protocol/%.xml
+       $(wayland_scanner) code < $< > $@
+protocol/%-server-protocol.h : $(top_srcdir)/protocol/%.xml
+       $(wayland_scanner) server-header < $< > $@
+protocol/%-client-protocol.h : $(top_srcdir)/protocol/%.xml
+       $(wayland_scanner) client-header < $< > $@
+
+### protocol.pc
+src/%-server.pc : $(top_srcdir)/src/template-server.pc
+       $(cp) $< $@ && $(perl) -pi -e 's|template|$*|g' $@
+src/%-client.pc : $(top_srcdir)/src/template-client.pc
+       $(cp) $< $@ && $(perl) -pi -e 's|template|$*|g' $@
+
+### xdg-shell
+protocol_LTLIBRARIES += \
+       libxdg-shell-server.la \
+       libxdg-shell-client.la
+pkgconfig_DATA += \
+       src/xdg-shell-server.pc \
+       src/xdg-shell-client.pc
+protocolinclude_HEADERS += \
+       protocol/xdg-shell-server-protocol.h \
+       protocol/xdg-shell-client-protocol.h
+libxdg_shell_server_la_SOURCES = protocol/xdg-shell-protocol.c
+libxdg_shell_client_la_SOURCES = protocol/xdg-shell-protocol.c
+
+### input-method
+protocol_LTLIBRARIES += \
+       libinput-method-server.la \
+       libinput-method-client.la
+pkgconfig_DATA += \
+       src/input-method-server.pc \
+       src/input-method-client.pc
+protocolinclude_HEADERS += \
+       protocol/input-method-server-protocol.h \
+       protocol/input-method-client-protocol.h
+libinput_method_server_la_SOURCES = protocol/input-method-protocol.c
+libinput_method_client_la_SOURCES = protocol/input-method-protocol.c
+
+### fullscreen-shell
+protocol_LTLIBRARIES += \
+       libfullscreen-shell-server.la \
+       libfullscreen-shell-client.la
+pkgconfig_DATA += \
+       src/fullscreen-shell-server.pc \
+       src/fullscreen-shell-client.pc
+protocolinclude_HEADERS += \
+       protocol/fullscreen-shell-server-protocol.h \
+       protocol/fullscreen-shell-client-protocol.h
+libfullscreen_shell_server_la_SOURCES = protocol/fullscreen-shell-protocol.c
+libfullscreen_shell_client_la_SOURCES = protocol/fullscreen-shell-protocol.c
+
+### scaler
+protocol_LTLIBRARIES += \
+       libscaler-server.la \
+       libscaler-client.la
+pkgconfig_DATA += \
+       src/scaler-server.pc \
+       src/scaler-client.pc
+protocolinclude_HEADERS += \
+       protocol/scaler-server-protocol.h \
+       protocol/scaler-client-protocol.h
+libscaler_server_la_SOURCES = protocol/scaler-protocol.c
+libscaler_client_la_SOURCES = protocol/scaler-protocol.c
+
+### screenshooter
+protocol_LTLIBRARIES += \
+       libscreenshooter-server.la \
+       libscreenshooter-client.la
+pkgconfig_DATA += \
+       src/screenshooter-server.pc \
+       src/screenshooter-client.pc
+protocolinclude_HEADERS += \
+       protocol/screenshooter-server-protocol.h \
+       protocol/screenshooter-client-protocol.h
+libscreenshooter_server_la_SOURCES = protocol/screenshooter-protocol.c
+libscreenshooter_client_la_SOURCES = protocol/screenshooter-protocol.c
+
+### text-cursor-position
+protocol_LTLIBRARIES += \
+       libtext-cursor-position-server.la \
+       libtext-cursor-position-client.la
+pkgconfig_DATA += \
+       src/text-cursor-position-server.pc \
+       src/text-cursor-position-client.pc
+protocolinclude_HEADERS += \
+       protocol/text-cursor-position-server-protocol.h \
+       protocol/text-cursor-position-client-protocol.h
+libtext_cursor_position_server_la_SOURCES = protocol/text-cursor-position-protocol.c
+libtext_cursor_position_client_la_SOURCES = protocol/text-cursor-position-protocol.c
+
+### text
+protocol_LTLIBRARIES += \
+       libtext-server.la \
+       libtext-client.la
+pkgconfig_DATA += \
+       src/text-server.pc \
+       src/text-client.pc
+protocolinclude_HEADERS += \
+       protocol/text-server-protocol.h \
+       protocol/text-client-protocol.h
+libtext_server_la_SOURCES = protocol/text-protocol.c
+libtext_client_la_SOURCES = protocol/text-protocol.c
diff --git a/autogen.sh b/autogen.sh
new file mode 100755 (executable)
index 0000000..916169a
--- /dev/null
@@ -0,0 +1,9 @@
+#! /bin/sh
+
+test -n "$srcdir" || srcdir=`dirname "$0"`
+test -n "$srcdir" || srcdir=.
+(
+  cd "$srcdir" &&
+  autoreconf --force -v --install
+) || exit
+test -n "$NOCONFIGURE" || "$srcdir/configure" "$@"
diff --git a/configure.ac b/configure.ac
new file mode 100644 (file)
index 0000000..f4de317
--- /dev/null
@@ -0,0 +1,65 @@
+AC_PREREQ([2.64])
+
+m4_define([wayland_extension_major_version], [0])
+m4_define([wayland_extension_minor_version], [0])
+m4_define([wayland_extension_micro_version], [1])
+m4_define([wayland_extension_version],
+          [wayland_extension_major_version.wayland_extension_minor_version.wayland_extension_micro_version])
+
+AC_INIT([wayland-extension],
+        [wayland_extension_version],
+        [https://bugs.tizen.org/jira],
+        [wayland-extension])
+
+AC_SUBST([WAYLAND_EXTENSION_VERSION_MAJOR], [wayland_extension_major_version])
+AC_SUBST([WAYLAND_EXTENSION_VERSION_MINOR], [wayland_extension_minor_version])
+AC_SUBST([WAYLAND_EXTENSION_VERSION_MICRO], [wayland_extension_micro_version])
+AC_SUBST([WAYLAND_EXTENSION_VERSION], [wayland_extension_version])
+
+AC_CONFIG_HEADERS([config.h])
+#AC_CONFIG_MACRO_DIR([m4])
+
+AM_INIT_AUTOMAKE([1.11 foreign no-dist-gzip dist-xz subdir-objects])
+
+AM_SILENT_RULES([yes])
+
+# Check for programs
+AC_PROG_CC
+AC_PROG_CXX
+#AC_PROG_GREP
+AC_PATH_PROG([wayland_scanner], [wayland-scanner])
+if test x$wayland_scanner = x; then
+   AC_MSG_ERROR([wayland-scanner is needed to compile])
+fi
+AC_PATH_PROG([cp], [cp])
+if test x$cp = x; then
+   AC_MSG_ERROR([cp is needed to compile])
+fi
+AC_PATH_PROG([perl], [perl])
+if test x$perl = x; then
+   AC_MSG_ERROR([perl is needed to compile])
+fi
+
+# Initialize libtool
+LT_PREREQ([2.2])
+LT_INIT
+
+PKG_PROG_PKG_CONFIG()
+
+PKG_CHECK_MODULES(WAYLAND_SERVER, wayland-server >= 1.7.0)
+AC_SUBST(WAYLAND_SERVER_CFLAGS)
+AC_SUBST(WAYLAND_SERVER_LIBS)
+
+PKG_CHECK_MODULES(WAYLAND_CLIENT, wayland-client >= 1.7.0)
+AC_SUBST(WAYLAND_CLIENT_CFLAGS)
+AC_SUBST(WAYLAND_CLIENT_LIBS)
+
+PKG_CHECK_MODULES(WAYLAND_SCANNER, wayland-scanner >= 1.7.0)
+
+AC_CONFIG_FILES([
+       Makefile
+       src/wayland-extension-version.h
+       src/template-server.pc
+       src/template-client.pc
+])
+AC_OUTPUT
diff --git a/packaging/wayland-extension.manifest b/packaging/wayland-extension.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
diff --git a/packaging/wayland-extension.spec b/packaging/wayland-extension.spec
new file mode 100644 (file)
index 0000000..215150f
--- /dev/null
@@ -0,0 +1,82 @@
+Name:          wayland-extension
+Version:       0.0.1
+Release:       0
+Summary:       Wayland Extension Protocol
+License:       MIT
+Group:         Graphics & UI Framework/Wayland Window System
+URL:           http://www.tizen.org/
+Source:                %name-%version.tar.xz
+Source1001:    wayland-extension.manifest
+BuildRequires: autoconf >= 2.64, automake >= 1.11
+BuildRequires: libtool >= 2.2
+BuildRequires: pkgconfig
+BuildRequires:  pkgconfig(wayland-server)
+BuildRequires:  pkgconfig(wayland-client)
+
+%description
+wayland-extension is a protocol for tizen window system.
+
+%package -n libwayland-extension-client
+Group:         Graphics & UI Framework/Wayland Window System
+Summary:       Wayland Extension client library
+Requires:   libwayland-client
+
+%description -n libwayland-extension-client
+wayland-extension is a protocol for tizen window system.
+
+%package -n libwayland-extension-server
+Group:         Graphics & UI Framework/Wayland Window System
+Summary:       Wayland Extension server library
+Requires:   libwayland-server
+
+%description -n libwayland-extension-server
+wayland-extension is a protocol for tizen window system.
+
+%package devel
+Summary:       Development files for the Wayland Extension Protocol
+Group:         Graphics & UI Framework/Development
+Requires:      libwayland-extension-client = %version
+Requires:      libwayland-extension-server = %version
+
+%description devel
+wayland-extension is a protocol for tizen window system.
+This package contains all necessary include files and libraries needed
+to develop applications that require these.
+
+%prep
+%setup -q
+cp %{SOURCE1001} .
+
+%build
+export CFLAGS+=" -Wall -Werror"
+%reconfigure --disable-static
+make %{?_smp_mflags}
+
+%install
+%make_install
+
+%post -n libwayland-extension-client -p /sbin/ldconfig
+%postun -n libwayland-extension-client -p /sbin/ldconfig
+%post -n libwayland-extension-server -p /sbin/ldconfig
+%postun -n libwayland-extension-server -p /sbin/ldconfig
+
+%files -n libwayland-extension-client
+%manifest %{name}.manifest
+%license COPYING
+%defattr(-,root,root)
+%_libdir/wayland-extension/*-client.so.0*
+
+%files -n libwayland-extension-server
+%manifest %{name}.manifest
+%license COPYING
+%defattr(-,root,root)
+%_libdir/wayland-extension/*-server.so.0*
+
+%files devel
+%manifest %{name}.manifest
+%defattr(-,root,root)
+%_includedir/wayland-extension/*.h
+%_libdir/wayland-extension/*.so
+%_libdir/pkgconfig/*.pc
+
+%changelog
diff --git a/protocol/.gitignore b/protocol/.gitignore
new file mode 100644 (file)
index 0000000..78f49d2
--- /dev/null
@@ -0,0 +1,2 @@
+wayland.html
+.wayland.xml.valid
diff --git a/protocol/fullscreen-shell.xml b/protocol/fullscreen-shell.xml
new file mode 100644 (file)
index 0000000..8d7a87f
--- /dev/null
@@ -0,0 +1,206 @@
+<protocol name="fullscreen_shell">
+  <interface name="_wl_fullscreen_shell" version="1">
+    <description summary="Displays a single surface per output">
+      Displays a single surface per output.
+
+      This interface provides a mechanism for a single client to display
+      simple full-screen surfaces.  While there technically may be multiple
+      clients bound to this interface, only one of those clients should be
+      shown at a time.
+
+      To present a surface, the client uses either the present_surface or
+      present_surface_for_mode requests.  Presenting a surface takes effect
+      on the next wl_surface.commit.  See the individual requests for
+      details about scaling and mode switches.
+
+      The client can have at most one surface per output at any time.
+      Requesting a surface be presented on an output that already has a
+      surface replaces the previously presented surface.  Presenting a null
+      surface removes its content and effectively disables the output.
+      Exactly what happens when an output is "disabled" is
+      compositor-specific.  The same surface may be presented on multiple
+      outputs simultaneously.
+
+      Once a surface is presented on an output, it stays on that output
+      until either the client removes it or the compositor destroys the
+      output.  This way, the client can update the output's contents by
+      simply attaching a new buffer.
+    </description>
+
+    <request name="release" type="destructor">
+      <description summary="release the wl_fullscreen_shell interface">
+       Release the binding from the wl_fullscreen_shell interface
+
+       This destroys the server-side object and frees this binding.  If
+       the client binds to wl_fullscreen_shell multiple times, it may wish
+       to free some of those bindings.
+      </description>
+    </request>
+
+    <enum name="capability">
+      <description summary="capabilities advertised by the compositor">
+       Various capabilities that can be advertised by the compositor.  They
+       are advertised one-at-a-time when the wl_fullscreen_shell interface is
+       bound.  See the wl_fullscreen_shell.capability event for more details.
+
+       ARBITRARY_MODE:
+       This is a hint to the client that indicates that the compositor is
+       capable of setting practically any mode on its outputs.  If this
+       capability is provided, wl_fullscreen_shell.present_surface_for_mode
+       will almost never fail and clients should feel free to set whatever
+       mode they like.  If the compositor does not advertise this, it may
+       still support some modes that are not advertised through wl_global.mode
+       but it is less likely.
+
+       CURSOR_PLANE:
+       This is a hint to the client that indicates that the compositor can
+       handle a cursor surface from the client without actually compositing.
+       This may be because of a hardware cursor plane or some other mechanism.
+       If the compositor does not advertise this capability then setting
+       wl_pointer.cursor may degrade performance or be ignored entirely.  If
+       CURSOR_PLANE is not advertised, it is recommended that the client draw
+       its own cursor and set wl_pointer.cursor(NULL).
+      </description>
+      <entry name="arbitrary_modes" value="1" summary="compositor is capable of almost any output mode"/>
+      <entry name="cursor_plane" value="2" summary="compositor has a seperate cursor plane"/>
+    </enum>
+
+    <event name="capability">
+      <description summary="advertises a capability of the compositor">
+       Advertises a single capability of the compositor.
+
+       When the wl_fullscreen_shell interface is bound, this event is emitted
+       once for each capability advertised.  Valid capabilities are given by
+       the wl_fullscreen_shell.capability enum.  If clients want to take
+       advantage of any of these capabilities, they should use a
+       wl_display.sync request immediately after binding to ensure that they
+       receive all the capability events.
+      </description>
+      <arg name="capabilty" type="uint"/>
+    </event>
+
+    <enum name="present_method">
+      <description summary="different method to set the surface fullscreen">
+       Hints to indicate to the compositor how to deal with a conflict
+       between the dimensions of the surface and the dimensions of the
+       output. The compositor is free to ignore this parameter.
+      </description>
+      <entry name="default" value="0" summary="no preference, apply default policy"/>
+      <entry name="center" value="1" summary="center the surface on the output"/>
+      <entry name="zoom" value="2" summary="scale the surface, preserving aspect ratio, to the largest size that will fit on the output" />
+      <entry name="zoom_crop" value="3" summary="scale the surface, preserving aspect ratio, to fully fill the output cropping if needed" />
+      <entry name="stretch" value="4" summary="scale the surface to the size of the output ignoring aspect ratio" />
+    </enum>
+
+    <request name="present_surface">
+      <description summary="present surface for display">
+       Present a surface on the given output.
+
+       If the output is null, the compositor will present the surface on
+       whatever display (or displays) it thinks best.  In particular, this
+       may replace any or all surfaces currently presented so it should
+       not be used in combination with placing surfaces on specific
+       outputs.
+
+       The method parameter is a hint to the compositor for how the surface
+       is to be presented.  In particular, it tells the compositor how to
+       handle a size mismatch between the presented surface and the
+       output.  The compositor is free to ignore this parameter.
+
+       The "zoom", "zoom_crop", and "stretch" methods imply a scaling
+       operation on the surface.  This will override any kind of output
+       scaling, so the buffer_scale property of the surface is effectively
+       ignored.
+      </description>
+      <arg name="surface" type="object" interface="wl_surface" allow-null="true"/>
+      <arg name="method" type="uint"/>
+      <arg name="output" type="object" interface="wl_output" allow-null="true"/>
+    </request>
+
+    <request name="present_surface_for_mode">
+      <description summary="present surface for display at a particular mode">
+       Presents a surface on the given output for a particular mode.
+
+       If the current size of the output differs from that of the surface,
+       the compositor will attempt to change the size of the output to
+       match the surface.  The result of the mode-switch operation will be
+       returned via the provided wl_fullscreen_shell_mode_feedback object.
+
+       If the current output mode matches the one requested or if the
+       compositor successfully switches the mode to match the surface,
+       then the mode_successful event will be sent and the output will
+       contain the contents of the given surface.  If the compositor
+       cannot match the output size to the surface size, the mode_failed
+       will be sent and the output will contain the contents of the
+       previously presented surface (if any).  If another surface is
+       presented on the given output before either of these has a chance
+       to happen, the present_cancelled event will be sent.
+
+       Due to race conditions and other issues unknown to the client, no
+       mode-switch operation is guaranteed to succeed.  However, if the
+       mode is one advertised by wl_output.mode or if the compositor
+       advertises the ARBITRARY_MODES capability, then the client should
+       expect that the mode-switch operation will usually succeed.
+
+       If the size of the presented surface changes, the resulting output
+       is undefined.  The compositor may attempt to change the output mode
+       to compensate.  However, there is no guarantee that a suitable mode
+       will be found and the client has no way to be notified of success
+       or failure.
+
+       The framerate parameter specifies the desired framerate for the
+       output in mHz.  The compositor is free to ignore this parameter.  A
+       value of 0 indicates that the client has no preference.
+
+       If the value of wl_output.scale differs from wl_surface.buffer_scale,
+       then the compositor may choose a mode that matches either the buffer
+       size or the surface size.  In either case, the surface will fill the
+       output.
+      </description>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="framerate" type="int"/>
+      <arg name="feedback" type="new_id" interface="_wl_fullscreen_shell_mode_feedback"/>
+    </request>
+
+    <enum name="error">
+      <description summary="wl_fullscreen_shell error values">
+       These errors can be emitted in response to wl_fullscreen_shell requests
+      </description>
+      <entry name="invalid_method" value="0" summary="present_method is not known"/>
+    </enum>
+  </interface>
+
+  <interface name="_wl_fullscreen_shell_mode_feedback" version="1">
+    <event name="mode_successful">
+      <description summary="mode switch succeeded">
+       This event indicates that the attempted mode switch operation was
+       successful.  A surface of the size requested in the mode switch
+       will fill the output without scaling.
+
+       Upon receiving this event, the client should destroy the
+       wl_fullscreen_shell_mode_feedback object.
+      </description>
+    </event>
+    <event name="mode_failed">
+      <description summary="mode switch failed">
+       This event indicates that the attempted mode switch operation
+       failed. This may be because the requested output mode is not
+       possible or it may mean that the compositor does not want to allow it.
+
+       Upon receiving this event, the client should destroy the
+       wl_fullscreen_shell_mode_feedback object.
+      </description>
+    </event>
+    <event name="present_cancelled">
+      <description summary="mode switch cancelled">
+       This event indicates that the attempted mode switch operation was
+       cancelled.  Most likely this is because the client requested a
+       second mode switch before the first one completed.
+
+       Upon receiving this event, the client should destroy the
+       wl_fullscreen_shell_mode_feedback object.
+      </description>
+    </event>
+  </interface>
+</protocol>
diff --git a/protocol/input-method.xml b/protocol/input-method.xml
new file mode 100644 (file)
index 0000000..2f596f0
--- /dev/null
@@ -0,0 +1,273 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="input_method">
+  <copyright>
+    Copyright © 2012, 2013 Intel Corporation
+
+    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="wl_input_method_context" version="1">
+    <description summary="input method context">
+      Corresponds to a text model on input method side. An input method context
+      is created on text model activation on the input method side. It allows to
+      receive information about the text model from the application via events.
+      Input method contexts do not keep state after deactivation and should be
+      destroyed after deactivation is handled.
+
+      Text is generally UTF-8 encoded, indices and lengths are in bytes.
+
+      Serials are used to synchronize the state between the text input and
+      an input method. New serials are sent by the text input in the
+      commit_state request and are used by the input method to indicate
+      the known text input state in events like preedit_string, commit_string,
+      and keysym. The text input can then ignore events from the input method
+      which are based on an outdated state (for example after a reset).
+    </description>
+    <request name="destroy" type="destructor"/>
+    <request name="commit_string">
+      <description summary="commit string">
+        Send the commit string text for insertion to the application.
+
+        The text to commit could be either just a single character after a key
+        press or the result of some composing (pre-edit). It could be also an
+        empty text when some text should be removed (see
+        delete_surrounding_text) or when the input cursor should be moved (see
+        cursor_position).
+
+        Any previously set composing text will be removed.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="text" type="string"/>
+    </request>
+    <request name="preedit_string">
+      <description summary="pre-edit string">
+        Send the pre-edit string text to the application text input.
+
+        The commit text can be used to replace the preedit text on reset (for
+        example on unfocus).
+
+        Also previously sent preedit_style and preedit_cursor requests are
+        processed bt the text_input also.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="text" type="string"/>
+      <arg name="commit" type="string"/>
+    </request>
+    <request name="preedit_styling">
+      <description summary="pre-edit styling">
+        Sets styling information on composing text. The style is applied for
+       length in bytes from index relative to the beginning of
+       the composing text (as byte offset). Multiple styles can
+       be applied to a composing text.
+
+        This request should be sent before sending preedit_string request.
+      </description>
+      <arg name="index" type="uint"/>
+      <arg name="length" type="uint"/>
+      <arg name="style" type="uint"/>
+    </request>
+    <request name="preedit_cursor">
+      <description summary="pre-edit cursor">
+        Sets the cursor position inside the composing text (as byte offset)
+        relative to the start of the composing text.
+
+        When index is negative no cursor should be displayed.
+
+        This request should be sent before sending preedit_string request.
+      </description>
+      <arg name="index" type="int"/>
+    </request>
+    <request name="delete_surrounding_text">
+      <description summary="delete text">
+
+
+        This request will be handled on text_input side as part of a directly
+        following commit_string request.
+      </description>
+      <arg name="index" type="int"/>
+      <arg name="length" type="uint"/>
+    </request>
+    <request name="cursor_position">
+      <description summary="set cursor to a new position">
+        Sets the cursor and anchor to a new position. Index is the new cursor
+        position in bytes (when >= 0 relative to the end of inserted text
+        else relative to beginning of inserted text). Anchor is the new anchor
+        position in bytes (when >= 0 relative to the end of inserted text, else
+        relative to beginning of inserted text). When there should be no
+        selected text anchor should be the same as index.
+
+        This request will be handled on text_input side as part of a directly
+        following commit_string request.
+      </description>
+      <arg name="index" type="int"/>
+      <arg name="anchor" type="int"/>
+    </request>
+    <request name="modifiers_map">
+      <arg name="map" type="array"/>
+    </request>
+    <request name="keysym">
+      <description summary="keysym">
+        Notify when a key event was sent. Key events should not be used for
+        normal text input operations, which should be done with commit_string,
+        delete_surrounfing_text, etc. The key event follows the wl_keyboard key
+        event convention. Sym is a XKB keysym, state a wl_keyboard key_state.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="time" type="uint"/>
+      <arg name="sym" type="uint"/>
+      <arg name="state" type="uint"/>
+      <arg name="modifiers" type="uint"/>
+    </request>
+    <request name="grab_keyboard">
+      <description summary="grab hardware keyboard">
+        Allows an input method to receive hardware keyboard input and process
+        key events to generate text events (with pre-edit) over the wire. This
+        allows input methods which compose multiple key events for inputting
+        text like it is done for CJK languages.
+      </description>
+       <arg name="keyboard" type="new_id" interface="wl_keyboard"/>
+    </request>
+    <request name="key">
+      <description summary="forward key event">
+        Should be used when filtering key events with grab_keyboard.
+
+        When the wl_keyboard::key event is not processed by the input
+        method itself and should be sent to the client instead, forward it
+        with this request. The arguments should be the ones from the
+        wl_keyboard::key event.
+
+        For generating custom key events use the keysym request instead.
+      </description>
+      <arg name="serial" type="uint" summary="serial from wl_keyboard::key"/>
+      <arg name="time" type="uint" summary="time from wl_keyboard::key"/>
+      <arg name="key" type="uint" summary="key from wl_keyboard::key"/>
+      <arg name="state" type="uint" summary="state from wl_keyboard::key"/>
+    </request>
+    <request name="modifiers">
+      <description summary="forward modifiers event">
+        Should be used when filtering key events with grab_keyboard.
+
+        When the wl_keyboard::modifiers event should be also send to the
+        client, forward it with this request. The arguments should be the ones
+        from the wl_keyboard::modifiers event.
+      </description>
+      <arg name="serial" type="uint" summary="serial from wl_keyboard::modifiers"/>
+      <arg name="mods_depressed" type="uint" summary="mods_depressed from wl_keyboard::modifiers"/>
+      <arg name="mods_latched" type="uint" summary="mods_latched from wl_keyboard::modifiers"/>
+      <arg name="mods_locked" type="uint" summary="mods_locked from wl_keyboard::modifiers"/>
+      <arg name="group" type="uint" summary="group from wl_keyboard::modifiers"/>
+    </request>
+    <request name="language">
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="language" type="string"/>
+    </request>
+    <request name="text_direction">
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="direction" type="uint"/>
+    </request>
+    <event name="surrounding_text">
+      <description summary="surrounding text event">
+        The plain surrounding text around the input position. Cursor is the
+        position in bytes within the surrounding text relative to the beginning
+        of the text. Anchor is the position in bytes of the selection anchor
+        within the surrounding text relative to the beginning of the text. If
+        there is no selected text anchor is the same as cursor.
+      </description>
+      <arg name="text" type="string"/>
+      <arg name="cursor" type="uint"/>
+      <arg name="anchor" type="uint"/>
+    </event>
+    <event name="reset">
+    </event>
+    <event name="content_type">
+      <arg name="hint" type="uint"/>
+      <arg name="purpose" type="uint"/>
+    </event>
+    <event name="invoke_action">
+      <arg name="button" type="uint"/>
+      <arg name="index" type="uint"/>
+    </event>
+    <event name="commit_state">
+      <arg name="serial" type="uint" summary="serial of text input state"/>
+    </event>
+    <event name="preferred_language">
+      <arg name="language" type="string"/>
+    </event>
+  </interface>
+
+  <interface name="wl_input_method" version="1">
+    <description summary="input method">
+      An input method object is responsible to compose text in response to
+      input from hardware or virtual keyboards. There is one input method
+      object per seat. On activate there is a new input method context object
+      created which allows the input method to communicate with the text model.
+    </description>
+    <event name="activate">
+      <description summary="activate event">
+        A text model was activated. Creates an input method context object
+        which allows communication with the text model.
+      </description>
+      <arg name="id" type="new_id" interface="wl_input_method_context"/>
+    </event>
+    <event name="deactivate">
+      <description summary="deactivate event">
+        The text model corresponding to the context argument was deactivated.
+        The input method context should be destroyed after deactivation is
+        handled.
+      </description>
+      <arg name="context" type="object" interface="wl_input_method_context"/>
+    </event>
+  </interface>
+
+  <interface name="wl_input_panel" version="1">
+    <description summary="interface for implementing keyboards">
+      Only one client can bind this interface at a time.
+    </description>
+
+    <request name="get_input_panel_surface">
+      <arg name="id" type="new_id" interface="wl_input_panel_surface"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
+  </interface>
+
+  <interface name="wl_input_panel_surface" version="1">
+    <enum name="position">
+      <entry name="center_bottom" value="0"/>
+    </enum>
+
+    <request name="set_toplevel">
+      <description summary="set the surface type as a keyboard">
+       A keyboard surface is only shown, when a text model is active
+      </description>
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="position" type="uint"/>
+    </request>
+
+    <request name="set_overlay_panel">
+      <description summary="set the surface type as an overlay panel">
+        An overlay panel is shown near the input cursor above the application
+        window when a text model is active.
+      </description>
+    </request>
+  </interface>
+</protocol>
diff --git a/protocol/scaler.xml b/protocol/scaler.xml
new file mode 100644 (file)
index 0000000..9642af2
--- /dev/null
@@ -0,0 +1,210 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="scaler">
+
+  <copyright>
+    Copyright © 2013-2014 Collabora, Ltd.
+
+    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="wl_scaler" version="2">
+    <description summary="surface cropping and scaling">
+      The global interface exposing surface cropping and scaling
+      capabilities is used to instantiate an interface extension for a
+      wl_surface object. This extended interface will then allow
+      cropping and scaling the surface contents, effectively
+      disconnecting the direct relationship between the buffer and the
+      surface size.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="unbind from the cropping and scaling interface">
+       Informs the server that the client will not be using this
+       protocol object anymore. This does not affect any other objects,
+       wl_viewport objects included.
+      </description>
+    </request>
+
+    <enum name="error">
+      <entry name="viewport_exists" value="0"
+             summary="the surface already has a viewport object associated"/>
+    </enum>
+
+    <request name="get_viewport">
+      <description summary="extend surface interface for crop and scale">
+       Instantiate an interface extension for the given wl_surface to
+       crop and scale its content. If the given wl_surface already has
+       a wl_viewport object associated, the viewport_exists
+       protocol error is raised.
+      </description>
+
+      <arg name="id" type="new_id" interface="wl_viewport"
+           summary="the new viewport interface id"/>
+      <arg name="surface" type="object" interface="wl_surface"
+           summary="the surface"/>
+    </request>
+  </interface>
+
+  <interface name="wl_viewport" version="2">
+    <description summary="crop and scale interface to a wl_surface">
+      An additional interface to a wl_surface object, which allows the
+      client to specify the cropping and scaling of the surface
+      contents.
+
+      This interface allows to define the source rectangle (src_x,
+      src_y, src_width, src_height) from where to take the wl_buffer
+      contents, and scale that to destination size (dst_width,
+      dst_height). This state is double-buffered, and is applied on the
+      next wl_surface.commit.
+
+      The two parts of crop and scale state are independent: the source
+      rectangle, and the destination size. Initially both are unset, that
+      is, no scaling is applied. The whole of the current wl_buffer is
+      used as the source, and the surface size is as defined in
+      wl_surface.attach.
+
+      If the destination size is set, it causes the surface size to become
+      dst_width, dst_height. The source (rectangle) is scaled to exactly
+      this size. This overrides whatever the attached wl_buffer size is,
+      unless the wl_buffer is NULL. If the wl_buffer is NULL, the surface
+      has no content and therefore no size. Otherwise, the size is always
+      at least 1x1 in surface coordinates.
+
+      If the source rectangle is set, it defines what area of the
+      wl_buffer is taken as the source. If the source rectangle is set and
+      the destination size is not set, the surface size becomes the source
+      rectangle size rounded up to the nearest integer. If the source size
+      is already exactly integers, this results in cropping without scaling.
+
+      The coordinate transformations from buffer pixel coordinates up to
+      the surface-local coordinates happen in the following order:
+        1. buffer_transform (wl_surface.set_buffer_transform)
+        2. buffer_scale (wl_surface.set_buffer_scale)
+        3. crop and scale (wl_viewport.set*)
+      This means, that the source rectangle coordinates of crop and scale
+      are given in the coordinates after the buffer transform and scale,
+      i.e. in the coordinates that would be the surface-local coordinates
+      if the crop and scale was not applied.
+
+      If the source rectangle is partially or completely outside of the
+      wl_buffer, then the surface contents are undefined (not void), and
+      the surface size is still dst_width, dst_height.
+
+      The x, y arguments of wl_surface.attach are applied as normal to
+      the surface. They indicate how many pixels to remove from the
+      surface size from the left and the top. In other words, they are
+      still in the surface-local coordinate system, just like dst_width
+      and dst_height are.
+
+      If the wl_surface associated with the wl_viewport is destroyed,
+      the wl_viewport object becomes inert.
+
+      If the wl_viewport object is destroyed, the crop and scale
+      state is removed from the wl_surface. The change will be applied
+      on the next wl_surface.commit.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="remove scaling and cropping from the surface">
+       The associated wl_surface's crop and scale state is removed.
+       The change is applied on the next wl_surface.commit.
+      </description>
+    </request>
+
+    <enum name="error">
+      <entry name="bad_value" value="0"
+             summary="negative or zero values in width or height"/>
+    </enum>
+
+    <request name="set">
+      <description summary="set the crop and scale state">
+       Set both source rectangle and destination size of the associated
+       wl_surface. See wl_viewport for the description, and relation to
+       the wl_buffer size.
+
+       The bad_value protocol error is raised if src_width or
+       src_height is negative, or if dst_width or dst_height is not
+       positive.
+
+       The crop and scale state is double-buffered state, and will be
+       applied on the next wl_surface.commit.
+
+       Arguments dst_x and dst_y do not exist here, use the x and y
+       arguments to wl_surface.attach. The x, y, dst_width, and dst_height
+       define the surface-local coordinate system irrespective of the
+       attached wl_buffer size.
+      </description>
+
+      <arg name="src_x" type="fixed" summary="source rectangle x"/>
+      <arg name="src_y" type="fixed" summary="source rectangle y"/>
+      <arg name="src_width" type="fixed" summary="source rectangle width"/>
+      <arg name="src_height" type="fixed" summary="source rectangle height"/>
+      <arg name="dst_width" type="int" summary="surface width"/>
+      <arg name="dst_height" type="int" summary="surface height"/>
+    </request>
+
+    <request name="set_source" since="2">
+      <description summary="set the source rectangle for cropping">
+       Set the source rectangle of the associated wl_surface. See
+       wl_viewport for the description, and relation to the wl_buffer
+       size.
+
+       If width is -1.0 and height is -1.0, the source rectangle is unset
+       instead. Any other pair of values for width and height that
+       contains zero or negative values raises the bad_value protocol
+       error.
+
+       The crop and scale state is double-buffered state, and will be
+       applied on the next wl_surface.commit.
+      </description>
+
+      <arg name="x" type="fixed" summary="source rectangle x"/>
+      <arg name="y" type="fixed" summary="source rectangle y"/>
+      <arg name="width" type="fixed" summary="source rectangle width"/>
+      <arg name="height" type="fixed" summary="source rectangle height"/>
+    </request>
+
+    <request name="set_destination" since="2">
+      <description summary="set the surface size for scaling">
+       Set the destination size of the associated wl_surface. See
+       wl_viewport for the description, and relation to the wl_buffer
+       size.
+
+       If width is -1 and height is -1, the destination size is unset
+       instead. Any other pair of values for width and height that
+       contains zero or negative values raises the bad_value protocol
+       error.
+
+       The crop and scale state is double-buffered state, and will be
+       applied on the next wl_surface.commit.
+
+       Arguments x and y do not exist here, use the x and y arguments to
+       wl_surface.attach. The x, y, width, and height define the
+       surface-local coordinate system irrespective of the attached
+       wl_buffer size.
+      </description>
+
+      <arg name="width" type="int" summary="surface width"/>
+      <arg name="height" type="int" summary="surface height"/>
+    </request>
+  </interface>
+</protocol>
diff --git a/protocol/screenshooter.xml b/protocol/screenshooter.xml
new file mode 100644 (file)
index 0000000..76e3c85
--- /dev/null
@@ -0,0 +1,12 @@
+<protocol name="screenshooter">
+
+  <interface name="screenshooter" version="1">
+    <request name="shoot">
+      <arg name="output" type="object" interface="wl_output"/>
+      <arg name="buffer" type="object" interface="wl_buffer"/>
+    </request>
+    <event name="done">
+    </event>
+  </interface>
+
+</protocol>
diff --git a/protocol/text-cursor-position.xml b/protocol/text-cursor-position.xml
new file mode 100644 (file)
index 0000000..0fbc54e
--- /dev/null
@@ -0,0 +1,11 @@
+<protocol name="text_cursor_position">
+
+  <interface name="text_cursor_position" version="1">
+    <request name="notify">
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="x" type="fixed"/>
+      <arg name="y" type="fixed"/>
+    </request>
+  </interface>
+
+</protocol>
diff --git a/protocol/text.xml b/protocol/text.xml
new file mode 100644 (file)
index 0000000..abaaeb0
--- /dev/null
@@ -0,0 +1,346 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="text">
+
+  <copyright>
+    Copyright © 2012, 2013 Intel Corporation
+
+    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="wl_text_input" version="1">
+    <description summary="text input">
+      An object used for text input. Adds support for text input and input
+      methods to applications. A text-input object is created from a
+      wl_text_input_manager and corresponds typically to a text entry in an
+      application.
+      Requests are used to activate/deactivate the text-input object and set
+      state information like surrounding and selected text or the content type.
+      The information about entered text is sent to the text-input object via
+      the pre-edit and commit events. Using this interface removes the need
+      for applications to directly process hardware key events and compose text
+      out of them.
+
+      Text is generally UTF-8 encoded, indices and lengths are in bytes.
+
+      Serials are used to synchronize the state between the text input and
+      an input method. New serials are sent by the text input in the
+      commit_state request and are used by the input method to indicate
+      the known text input state in events like preedit_string, commit_string,
+      and keysym. The text input can then ignore events from the input method
+      which are based on an outdated state (for example after a reset).
+    </description>
+    <request name="activate">
+      <description summary="request activation">
+        Requests the text-input object to be activated (typically when the
+        text entry gets focus).
+        The seat argument is a wl_seat which maintains the focus for this
+        activation. The surface argument is a wl_surface assigned to the
+        text-input object and tracked for focus lost. The enter event
+        is emitted on successful activation.
+      </description>
+      <arg name="seat" type="object" interface="wl_seat"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
+    <request name="deactivate">
+      <description summary="request deactivation">
+        Requests the text-input object to be deactivated (typically when the
+        text entry lost focus). The seat argument is a wl_seat which was used
+        for activation.
+      </description>
+      <arg name="seat" type="object" interface="wl_seat"/>
+    </request>
+    <request name="show_input_panel">
+      <description summary="show input panels">
+        Requests input panels (virtual keyboard) to show.
+      </description>
+    </request>
+    <request name="hide_input_panel">
+      <description summary="hide input panels">
+        Requests input panels (virtual keyboard) to hide.
+      </description>
+    </request>
+    <request name="reset">
+      <description summary="reset">
+        Should be called by an editor widget when the input state should be
+        reset, for example after the text was changed outside of the normal
+        input method flow.
+      </description>
+    </request>
+    <request name="set_surrounding_text">
+      <description summary="sets the surrounding text">
+        Sets the plain surrounding text around the input position. Text is
+        UTF-8 encoded. Cursor is the byte offset within the
+        surrounding text. Anchor is the byte offset of the
+        selection anchor within the surrounding text. If there is no selected
+        text anchor is the same as cursor.
+      </description>
+      <arg name="text" type="string"/>
+      <arg name="cursor" type="uint"/>
+      <arg name="anchor" type="uint"/>
+    </request>
+    <enum name="content_hint">
+      <description summary="content hint">
+        Content hint is a bitmask to allow to modify the behavior of the text
+        input.
+      </description>
+      <entry name="none" value="0x0" summary="no special behaviour"/>
+      <entry name="default" value="0x7" summary="auto completion, correction and capitalization"/>
+      <entry name="password" value="0xc0" summary="hidden and sensitive text"/>
+      <entry name="auto_completion" value="0x1" summary="suggest word completions"/>
+      <entry name="auto_correction" value="0x2" summary="suggest word corrections"/>
+      <entry name="auto_capitalization" value="0x4" summary="switch to uppercase letters at the start of a sentence"/>
+      <entry name="lowercase" value="0x8" summary="prefer lowercase letters"/>
+      <entry name="uppercase" value="0x10" summary="prefer uppercase letters"/>
+      <entry name="titlecase" value="0x20" summary="prefer casing for titles and headings (can be language dependent)"/>
+      <entry name="hidden_text" value="0x40" summary="characters should be hidden"/>
+      <entry name="sensitive_data" value="0x80" summary="typed text should not be stored"/>
+      <entry name="latin" value="0x100" summary="just latin characters should be entered"/>
+      <entry name="multiline" value="0x200" summary="the text input is multiline"/>
+    </enum>
+    <enum name="content_purpose">
+      <description summary="content purpose">
+        The content purpose allows to specify the primary purpose of a text
+        input.
+
+        This allows an input method to show special purpose input panels with
+        extra characters or to disallow some characters.
+      </description>
+      <entry name="normal" value="0" summary="default input, allowing all characters"/>
+      <entry name="alpha" value="1" summary="allow only alphabetic characters"/>
+      <entry name="digits" value="2" summary="allow only digits"/>
+      <entry name="number" value="3" summary="input a number (including decimal separator and sign)"/>
+      <entry name="phone" value="4" summary="input a phone number"/>
+      <entry name="url" value="5" summary="input an URL"/>
+      <entry name="email" value="6" summary="input an email address"/>
+      <entry name="name" value="7" summary="input a name of a person"/>
+      <entry name="password" value="8" summary="input a password (combine with password or sensitive_data hint)"/>
+      <entry name="date" value="9" summary="input a date"/>
+      <entry name="time" value="10" summary="input a time"/>
+      <entry name="datetime" value="11" summary="input a date and time"/>
+      <entry name="terminal" value="12" summary="input for a terminal"/>
+    </enum>
+    <request name="set_content_type">
+      <description summary="set content purpose and hint">
+        Sets the content purpose and content hint. While the purpose is the
+        basic purpose of an input field, the hint flags allow to modify some
+        of the behavior.
+
+        When no content type is explicitly set, a normal content purpose with
+        default hints (auto completion, auto correction, auto capitalization)
+        should be assumed.
+      </description>
+      <arg name="hint" type="uint"/>
+      <arg name="purpose" type="uint"/>
+    </request>
+    <request name="set_cursor_rectangle">
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+    <request name="set_preferred_language">
+      <description summary="sets preferred language">
+        Sets a specific language. This allows for example a virtual keyboard to
+        show a language specific layout. The "language" argument is a RFC-3066
+       format language tag.
+
+       It could be used for example in a word processor to indicate language of
+       currently edited document or in an instant message application which tracks
+       languages of contacts.
+      </description>
+      <arg name="language" type="string"/>
+    </request>
+    <request name="commit_state">
+      <arg name="serial" type="uint" summary="used to identify the known state"/>
+    </request>
+    <request name="invoke_action">
+      <arg name="button" type="uint"/>
+      <arg name="index" type="uint"/>
+    </request>
+    <event name="enter">
+      <description summary="enter event">
+        Notify the text-input object when it received focus. Typically in
+        response to an activate request.
+      </description>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </event>
+    <event name="leave">
+      <description summary="leave event">
+        Notify the text-input object when it lost focus. Either in response
+        to a deactivate request or when the assigned surface lost focus or was
+        destroyed.
+      </description>
+    </event>
+    <event name="modifiers_map">
+      <description summary="modifiers map">
+        Transfer an array of 0-terminated modifiers names. The position in
+        the array is the index of the modifier as used in the modifiers
+        bitmask in the keysym event.
+      </description>
+      <arg name="map" type="array"/>
+    </event>
+    <event name="input_panel_state">
+      <description summary="state of the input panel">
+        Notify when the visibility state of the input panel changed.
+      </description>
+      <arg name="state" type="uint"/>
+    </event>
+    <event name="preedit_string">
+      <description summary="pre-edit">
+        Notify when a new composing text (pre-edit) should be set around the
+        current cursor position. Any previously set composing text should
+        be removed.
+
+        The commit text can be used to replace the preedit text on reset
+       (for example on unfocus).
+
+       The text input should also handle all preedit_style and preedit_cursor
+       events occurring directly before preedit_string.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="text" type="string"/>
+      <arg name="commit" type="string"/>
+    </event>
+    <enum name="preedit_style">
+      <entry name="default" value="0" summary="default style for composing text"/>
+      <entry name="none" value="1" summary="style should be the same as in non-composing text"/>
+      <entry name="active" value="2"/>
+      <entry name="inactive" value="3"/>
+      <entry name="highlight" value="4"/>
+      <entry name="underline" value="5"/>
+      <entry name="selection" value="6"/>
+      <entry name="incorrect" value="7"/>
+    </enum>
+    <event name="preedit_styling">
+      <description summary="pre-edit styling">
+        Sets styling information on composing text. The style is applied for
+       length bytes from index relative to the beginning of the composing
+       text (as byte offset). Multiple styles can
+        be applied to a composing text by sending multiple preedit_styling
+        events.
+
+        This event is handled as part of a following preedit_string event.
+      </description>
+      <arg name="index" type="uint"/>
+      <arg name="length" type="uint"/>
+      <arg name="style" type="uint"/>
+    </event>
+    <event name="preedit_cursor">
+      <description summary="pre-edit cursor">
+        Sets the cursor position inside the composing text (as byte
+        offset) relative to the start of the composing text. When index is a
+        negative number no cursor is shown.
+
+        This event is handled as part of a following preedit_string event.
+      </description>
+      <arg name="index" type="int"/>
+    </event>
+    <event name="commit_string">
+      <description summary="commit">
+        Notify when text should be inserted into the editor widget. The text to
+        commit could be either just a single character after a key press or the
+        result of some composing (pre-edit). It could be also an empty text
+        when some text should be removed (see delete_surrounding_text) or when
+        the input cursor should be moved (see cursor_position).
+
+        Any previously set composing text should be removed.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="text" type="string"/>
+    </event>
+    <event name="cursor_position">
+      <description summary="set cursor to new position">
+        Notify when the cursor or anchor position should be modified.
+
+        This event should be handled as part of a following commit_string
+        event.
+      </description>
+      <arg name="index" type="int"/>
+      <arg name="anchor" type="int"/>
+    </event>
+    <event name="delete_surrounding_text">
+      <description summary="delete surrounding text">
+        Notify when the text around the current cursor position should be
+        deleted.
+
+        Index is relative to the current cursor (in bytes).
+        Length is the length of deleted text (in bytes).
+
+        This event should be handled as part of a following commit_string
+        event.
+      </description>
+      <arg name="index" type="int"/>
+      <arg name="length" type="uint"/>
+    </event>
+    <event name="keysym">
+      <description summary="keysym">
+        Notify when a key event was sent. Key events should not be used
+        for normal text input operations, which should be done with
+        commit_string, delete_surrounding_text, etc. The key event follows
+        the wl_keyboard key event convention. Sym is a XKB keysym, state a
+        wl_keyboard key_state. Modifiers are a mask for effective modifiers
+        (where the modifier indices are set by the modifiers_map event)
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="time" type="uint"/>
+      <arg name="sym" type="uint"/>
+      <arg name="state" type="uint"/>
+      <arg name="modifiers" type="uint"/>
+    </event>
+    <event name="language">
+      <description summary="language">
+        Sets the language of the input text. The "language" argument is a RFC-3066
+        format language tag.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="language" type="string"/>
+    </event>
+    <enum name="text_direction">
+      <entry name="auto" value="0" summary="automatic text direction based on text and language"/>
+      <entry name="ltr" value="1" summary="left-to-right"/>
+      <entry name="rtl" value="2" summary="right-to-left"/>
+    </enum>
+    <event name="text_direction">
+      <description summary="text direction">
+        Sets the text direction of input text.
+
+        It is mainly needed for showing input cursor on correct side of the
+        editor when there is no input yet done and making sure neutral
+        direction text is laid out properly.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the latest known text input state"/>
+      <arg name="direction" type="uint"/>
+    </event>
+  </interface>
+
+  <interface name="wl_text_input_manager" version="1">
+    <description summary="text input manager">
+      A factory for text-input objects. This object is a global singleton.
+    </description>
+    <request name="create_text_input">
+      <description summary="create text input">
+        Creates a new text-input object.
+      </description>
+      <arg name="id" type="new_id" interface="wl_text_input"/>
+    </request>
+  </interface>
+</protocol>
diff --git a/protocol/xdg-shell.xml b/protocol/xdg-shell.xml
new file mode 100644 (file)
index 0000000..b0e4343
--- /dev/null
@@ -0,0 +1,424 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<protocol name="xdg_shell">
+
+  <copyright>
+    Copyright © 2008-2013 Kristian Høgsberg
+    Copyright © 2013      Rafael Antognolli
+    Copyright © 2013      Jasper St. Pierre
+    Copyright © 2010-2013 Intel Corporation
+
+    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="xdg_shell" version="1">
+    <description summary="create desktop-style surfaces">
+      This interface is implemented by servers that provide
+      desktop-style user interfaces.
+
+      It allows clients to associate a xdg_surface with
+      a basic surface.
+    </description>
+
+    <enum name="version">
+      <description summary="latest protocol version">
+       The 'current' member of this enum gives the version of the
+       protocol.  Implementations can compare this to the version
+       they implement using static_assert to ensure the protocol and
+       implementation versions match.
+      </description>
+      <entry name="current" value="4" summary="Always the latest version"/>
+    </enum>
+
+    <enum name="error">
+      <entry name="role" value="0" summary="given wl_surface has another role"/>
+    </enum>
+
+    <request name="use_unstable_version">
+      <description summary="enable use of this unstable version">
+       Negotiate the unstable version of the interface.  This
+       mechanism is in place to ensure client and server agree on the
+       unstable versions of the protocol that they speak or exit
+       cleanly if they don't agree.  This request will go away once
+       the xdg-shell protocol is stable.
+      </description>
+      <arg name="version" type="int"/>
+    </request>
+
+    <request name="get_xdg_surface">
+      <description summary="create a shell surface from a surface">
+       Create a shell surface for an existing surface.
+
+       This request gives the surface the role of xdg_surface. If the
+       surface already has another role, it raises a protocol error.
+
+       Only one shell or popup surface can be associated with a given
+       surface.
+      </description>
+      <arg name="id" type="new_id" interface="xdg_surface"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+    </request>
+
+    <request name="get_xdg_popup">
+      <description summary="create a shell surface from a surface">
+       Create a popup surface for an existing surface.
+
+       This request gives the surface the role of xdg_popup. If the
+       surface already has another role, it raises a protocol error.
+
+       Only one shell or popup surface can be associated with a given
+       surface.
+      </description>
+      <arg name="id" type="new_id" interface="xdg_popup"/>
+      <arg name="surface" type="object" interface="wl_surface"/>
+      <arg name="parent" type="object" interface="wl_surface"/>
+      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
+      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="flags" type="uint"/>
+    </request>
+
+    <event name="ping">
+      <description summary="check if the client is alive">
+        The ping event asks the client if it's still alive. Pass the
+        serial specified in the event back to the compositor by sending
+        a "pong" request back with the specified serial.
+
+        Compositors can use this to determine if the client is still
+        alive. It's unspecified what will happen if the client doesn't
+        respond to the ping request, or in what timeframe. Clients should
+        try to respond in a reasonable amount of time.
+      </description>
+      <arg name="serial" type="uint" summary="pass this to the callback"/>
+    </event>
+
+    <request name="pong">
+      <description summary="respond to a ping event">
+       A client must respond to a ping event with a pong request or
+       the client may be deemed unresponsive.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the ping event"/>
+    </request>
+  </interface>
+
+  <interface name="xdg_surface" version="1">
+
+    <description summary="desktop-style metadata interface">
+      An interface that may be implemented by a wl_surface, for
+      implementations that provide a desktop-style user interface.
+
+      It provides requests to treat surfaces like windows, allowing to set
+      properties like maximized, fullscreen, minimized, and to move and resize
+      them, and associate metadata like title and app id.
+
+      On the server side the object is automatically destroyed when
+      the related wl_surface is destroyed.  On client side,
+      xdg_surface.destroy() must be called before destroying
+      the wl_surface object.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="remove xdg_surface interface">
+       The xdg_surface interface is removed from the wl_surface object
+       that was turned into a xdg_surface with
+       xdg_shell.get_xdg_surface request. The xdg_surface properties,
+       like maximized and fullscreen, are lost. The wl_surface loses
+       its role as a xdg_surface. The wl_surface is unmapped.
+      </description>
+    </request>
+
+    <request name="set_parent">
+      <description summary="surface is a child of another surface">
+       Child surfaces are stacked above their parents, and will be
+       unmapped if the parent is unmapped too. They should not appear
+       on task bars and alt+tab.
+      </description>
+      <arg name="parent" type="object" interface="wl_surface" allow-null="true"/>
+    </request>
+
+    <request name="set_title">
+      <description summary="set surface title">
+       Set a short title for the surface.
+
+       This string may be used to identify the surface in a task bar,
+       window list, or other user interface elements provided by the
+       compositor.
+
+       The string must be encoded in UTF-8.
+      </description>
+      <arg name="title" type="string"/>
+    </request>
+
+    <request name="set_app_id">
+      <description summary="set surface class">
+       Set an id for the surface.
+
+       The app id identifies the general class of applications to which
+       the surface belongs.
+
+       It should be the ID that appears in the new desktop entry
+       specification, the interface name.
+      </description>
+      <arg name="app_id" type="string"/>
+    </request>
+
+    <request name="show_window_menu">
+      <description summary="show the window menu">
+        Clients implementing client-side decorations might want to show
+        a context menu when right-clicking on the decorations, giving the
+        user a menu that they can use to maximize or minimize the window.
+
+        This request asks the compositor to pop up such a window menu at
+        the given position, relative to the parent surface. There are
+        no guarantees as to what the window menu contains.
+
+        Your surface must have focus on the seat passed in to pop up the
+        window menu.
+      </description>
+
+      <arg name="seat" type="object" interface="wl_seat" summary="the seat to pop the window up on"/>
+      <arg name="serial" type="uint" summary="serial of the event to pop up the window for"/>
+      <arg name="x" type="int" summary="the x position to pop up the window menu at"/>
+      <arg name="y" type="int" summary="the y position to pop up the window menu at"/>
+    </request>
+
+    <request name="move">
+      <description summary="start an interactive move">
+       Start a pointer-driven move of the surface.
+
+       This request must be used in response to a button press event.
+       The server may ignore move requests depending on the state of
+       the surface (e.g. fullscreen or maximized).
+      </description>
+      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
+      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
+    </request>
+
+    <enum name="resize_edge">
+      <description summary="edge values for resizing">
+       These values are used to indicate which edge of a surface
+       is being dragged in a resize operation. The server may
+       use this information to adapt its behavior, e.g. choose
+       an appropriate cursor image.
+      </description>
+      <entry name="none" value="0"/>
+      <entry name="top" value="1"/>
+      <entry name="bottom" value="2"/>
+      <entry name="left" value="4"/>
+      <entry name="top_left" value="5"/>
+      <entry name="bottom_left" value="6"/>
+      <entry name="right" value="8"/>
+      <entry name="top_right" value="9"/>
+      <entry name="bottom_right" value="10"/>
+    </enum>
+
+    <request name="resize">
+      <description summary="start an interactive resize">
+       Start a pointer-driven resizing of the surface.
+
+       This request must be used in response to a button press event.
+       The server may ignore resize requests depending on the state of
+       the surface (e.g. fullscreen or maximized).
+      </description>
+      <arg name="seat" type="object" interface="wl_seat" summary="the wl_seat whose pointer is used"/>
+      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
+      <arg name="edges" type="uint" summary="which edge or corner is being dragged"/>
+    </request>
+
+    <enum name="state">
+      <description summary="types of state on the surface">
+        The different state values used on the surface. This is designed for
+        state values like maximized, fullscreen. It is paired with the
+        configure event to ensure that both the client and the compositor
+        setting the state can be synchronized.
+
+        States set in this way are double-buffered. They will get applied on
+        the next commit.
+
+        Desktop environments may extend this enum by taking up a range of
+        values and documenting the range they chose in this description.
+        They are not required to document the values for the range that they
+        chose. Ideally, any good extensions from a desktop environment should
+        make its way into standardization into this enum.
+
+        The current reserved ranges are:
+
+        0x0000 - 0x0FFF: xdg-shell core values, documented below.
+        0x1000 - 0x1FFF: GNOME
+      </description>
+      <entry name="maximized" value="1" summary="the surface is maximized">
+        The surface is maximized. The window geometry specified in the configure
+        event must be obeyed by the client.
+      </entry>
+      <entry name="fullscreen" value="2" summary="the surface is fullscreen">
+        The surface is fullscreen. The window geometry specified in the configure
+        event must be obeyed by the client.
+      </entry>
+      <entry name="resizing" value="3">
+        The surface is being resized. The window geometry specified in the
+        configure event is a maximum; the client cannot resize beyond it.
+        Clients that have aspect ratio or cell sizing configuration can use
+        a smaller size, however.
+      </entry>
+      <entry name="activated" value="4">
+        Client window decorations should be painted as if the window is
+        active. Do not assume this means that the window actually has
+        keyboard or pointer focus.
+      </entry>
+    </enum>
+
+    <event name="configure">
+      <description summary="suggest a surface change">
+       The configure event asks the client to resize its surface.
+
+       The width and height arguments specify a hint to the window
+        about how its surface should be resized in window geometry
+        coordinates. The states listed in the event specify how the
+        width/height arguments should be interpreted.
+
+        A client should arrange a new surface, and then send a
+        ack_configure request with the serial sent in this configure
+        event before attaching a new surface.
+
+       If the client receives multiple configure events before it
+        can respond to one, it is free to discard all but the last
+        event it received.
+      </description>
+
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+      <arg name="states" type="array"/>
+      <arg name="serial" type="uint"/>
+    </event>
+
+    <request name="ack_configure">
+      <description summary="ack a configure event">
+        When a configure event is received, a client should then ack it
+        using the ack_configure request to ensure that the compositor
+        knows the client has seen the event.
+
+        By this point, the state is confirmed, and the next attach should
+        contain the buffer drawn for the configure event you are acking.
+      </description>
+      <arg name="serial" type="uint" summary="a serial to configure for"/>
+    </request>
+
+    <request name="set_window_geometry">
+      <description summary="set the new window geometry">
+        The window geometry of a window is its "visible bounds" from the
+        user's perspective. Client-side decorations often have invisible
+        portions like drop-shadows which should be ignored for the
+        purposes of aligning, placing and constraining windows.
+
+        The default value is the full bounds of the surface, including any
+        subsurfaces. Once the window geometry of the surface is set once,
+        it is not possible to unset it, and it will remain the same until
+        set_window_geometry is called again, even if a new subsurface or
+        buffer is attached.
+
+        If responding to a configure event, the window geometry in here
+        must respect the sizing negotiations specified by the states in
+        the configure event.
+      </description>
+      <arg name="x" type="int"/>
+      <arg name="y" type="int"/>
+      <arg name="width" type="int"/>
+      <arg name="height" type="int"/>
+    </request>
+
+    <request name="set_maximized" />
+    <request name="unset_maximized" />
+
+    <request name="set_fullscreen">
+      <description summary="set the window as fullscreen on a monitor">
+       Make the surface fullscreen.
+
+        You can specify an output that you would prefer to be fullscreen.
+       If this value is NULL, it's up to the compositor to choose which
+        display will be used to map this surface.
+      </description>
+      <arg name="output" type="object" interface="wl_output" allow-null="true"/>
+    </request>
+    <request name="unset_fullscreen" />
+
+    <request name="set_minimized" />
+
+    <request name="needs_attention" />
+
+    <event name="close">
+      <description summary="surface wants to be closed">
+        The close event is sent by the compositor when the user
+        wants the surface to be closed. This should be equivalent to
+        the user clicking the close button in client-side decorations,
+        if your application has any...
+
+        This is only a request that the user intends to close your
+        window. The client may choose to ignore this request, or show
+        a dialog to ask the user to save their data...
+      </description>
+    </event>
+  </interface>
+
+  <interface name="xdg_popup" version="1">
+    <description summary="desktop-style metadata interface">
+      An interface that may be implemented by a wl_surface, for
+      implementations that provide a desktop-style popups/menus. A popup
+      surface is a transient surface with an added pointer grab.
+
+      An existing implicit grab will be changed to owner-events mode,
+      and the popup grab will continue after the implicit grab ends
+      (i.e. releasing the mouse button does not cause the popup to be
+      unmapped).
+
+      The popup grab continues until the window is destroyed or a mouse
+      button is pressed in any other clients window. A click in any of
+      the clients surfaces is reported as normal, however, clicks in
+      other clients surfaces will be discarded and trigger the callback.
+
+      The x and y arguments specify the locations of the upper left
+      corner of the surface relative to the upper left corner of the
+      parent surface, in surface local coordinates.
+
+      xdg_popup surfaces are always transient for another surface.
+    </description>
+
+    <request name="destroy" type="destructor">
+      <description summary="remove xdg_surface interface">
+       The xdg_surface interface is removed from the wl_surface object
+       that was turned into a xdg_surface with
+       xdg_shell.get_xdg_surface request. The xdg_surface properties,
+       like maximized and fullscreen, are lost. The wl_surface loses
+       its role as a xdg_surface. The wl_surface is unmapped.
+      </description>
+    </request>
+
+    <event name="popup_done">
+      <description summary="popup interaction is done">
+       The popup_done event is sent out when a popup grab is broken,
+       that is, when the users clicks a surface that doesn't belong
+       to the client owning the popup surface.
+      </description>
+      <arg name="serial" type="uint" summary="serial of the implicit grab on the pointer"/>
+    </event>
+
+  </interface>
+</protocol>
diff --git a/src/.gitignore b/src/.gitignore
new file mode 100644 (file)
index 0000000..4421b46
--- /dev/null
@@ -0,0 +1 @@
+/wayland-version.h
diff --git a/src/template-client.pc.in b/src/template-client.pc.in
new file mode 100644 (file)
index 0000000..d815cde
--- /dev/null
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
+pkgdatadir=@datadir@/@PACKAGE@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: template client
+Description: template client library
+Version: @WAYLAND_EXTENSION_VERSION@
+Requires: wayland-client
+Cflags: -I${includedir}/wayland-extension
+Libs: -L${libdir}/wayland-extension -ltemplate-client
diff --git a/src/template-server.pc.in b/src/template-server.pc.in
new file mode 100644 (file)
index 0000000..6e74ea2
--- /dev/null
@@ -0,0 +1,13 @@
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+datarootdir=@datarootdir@
+pkgdatadir=@datadir@/@PACKAGE@
+libdir=@libdir@
+includedir=@includedir@
+
+Name: template server
+Description: template server library
+Version: @WAYLAND_EXTENSION_VERSION@
+Requires: wayland-server
+Cflags: -I${includedir}/wayland-extension
+Libs: -L${libdir}/wayland-extension -ltemplate-server
diff --git a/src/wayland-extension-version.h.in b/src/wayland-extension-version.h.in
new file mode 100644 (file)
index 0000000..2deda9c
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright © 2012 Intel Corporation
+ * Copyright © 2015 Samsung Electronics co., Ltd. All Rights Reserved.
+ *
+ * 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_EXTENSION_VERSION_H
+#define WAYLAND_EXTENSION_VERSION_H
+
+#define WAYLAND_EXTENSION_VERSION_MAJOR @WAYLAND_EXTENSION_VERSION_MAJOR@
+#define WAYLAND_EXTENSION_VERSION_MINOR @WAYLAND_EXTENSION_VERSION_MINOR@
+#define WAYLAND_EXTENSION_VERSION_MICRO @WAYLAND_EXTENSION_VERSION_MICRO@
+#define WAYLAND_EXTENSION_VERSION "@WAYLAND_EXTENSION_VERSION@"
+
+#endif