Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Pekka Paalanen
On Thu, 23 Feb 2012 11:57:31 +0200
Tiago Vignatti tiago.vigna...@linux.intel.com wrote:

 On 02/23/2012 07:58 AM, Peter Hutterer wrote:
  Includes rudimentary styling only.
 
  Signed-off-by: Peter Huttererpeter.hutte...@who-t.net
  ---
  A few things to note:
  - I'm not a designer
  - Having a html version of the protocol makes it a lot easier to read, and
 it certainly reveals missing bits of documentation in the protocol

IIRC there was a plan to make wayland-scanner require protocol
documentation, once all protocol was documented.

  - the .css file is the one from wayland.freedesktop.org, someone could
 easily fix it to prettify the result a bit.
 
 I concur we need a prettier way to read the protocol. But what do you 
 think about the idea of dumping the whole protocol in a separate section 
 of main.tex instead?
 
 http://lists.freedesktop.org/archives/wayland-devel/2012-February/002168.html
 
 the protocol could be printed out there verbatim or with more 
 descriptions instead; depends what we want. My point is, given we have 
 already to maintain main.tex, then we should try to centralize the 
 documentation and not have another document just hanging around.

Were there plans to convert documentation to docbook or something? I
recall someone at least mentioning docbook once.

In the XSLT approach I like the TOC with links approach, easily gives
an overview of the protocol. In LaTeX you would use hyperref to achieve
that.

I've been using QXmlEdit with the attached style file for reading the
protocol XML files.


Thanks,
pq


wayland.style
Description: Binary data
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Peter Hutterer

On 23/02/12 19:57 , Tiago Vignatti wrote:

On 02/23/2012 07:58 AM, Peter Hutterer wrote:

Includes rudimentary styling only.

Signed-off-by: Peter Huttererpeter.hutte...@who-t.net
---
A few things to note:
- I'm not a designer
- Having a html version of the protocol makes it a lot easier to read,
and
it certainly reveals missing bits of documentation in the protocol
- the .css file is the one from wayland.freedesktop.org, someone could
easily fix it to prettify the result a bit.


I concur we need a prettier way to read the protocol. But what do you
think about the idea of dumping the whole protocol in a separate section
of main.tex instead?


largely depends on what you expect the canonical source to be. shouldn't 
be that hard to knock up another xslt that converts the xml into latex.



http://lists.freedesktop.org/archives/wayland-devel/2012-February/002168.html


the protocol could be printed out there verbatim or with more
descriptions instead; depends what we want. My point is, given we have
already to maintain main.tex, then we should try to centralize the
documentation and not have another document just hanging around.


note that the xslt is just the conversion, the html would be read-only 
and re-generated whenever the protocol changes. I'm definitely not 
suggesting that the html be a source.


Cheers,
  Peter
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH 1/2] shell: don't assign output for surface of type none

2012-02-23 Thread Ander Conselvan de Oliveira
If map is called with a surface of type none it will call
weston_surface_assign_output, even though the surface will
not be mapped.
---
 src/shell.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/shell.c b/src/shell.c
index 3d5dfd9..8628462 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1427,6 +1427,7 @@ map(struct weston_shell *base, struct weston_surface 
*surface,
do_configure = 0;
break;
case SHELL_SURFACE_NONE:
+   do_configure = 0;
break;
default:
/* everything else just below the panel */
-- 
1.7.5.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH 2/2] compositor: assign output to drag surfaces

2012-02-23 Thread Ander Conselvan de Oliveira
Otherwise we endup with a surface that is mapped but with outtup nil.
---
 src/compositor.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/compositor.c b/src/compositor.c
index 5a424fa..97f7c3e 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -1797,6 +1797,7 @@ weston_input_update_drag_surface(struct wl_input_device 
*input_device,
device-drag_surface-buffer) {
wl_list_insert(weston_compositor_top(device-compositor),
   device-drag_surface-link);
+   weston_surface_assign_output(device-drag_surface);
}
 
if (!dx  !dy)
-- 
1.7.5.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[RFC] Cursor sprites as regular surfaces

2012-02-23 Thread Ander Conselvan de Oliveira
Here's an RFC for implementing the cursor sprites as regular surfaces
change we have been talking about. This removes the input_device.attach
request and adds two new ones: set_pointer_surface and set_hotspot.

Each client can set a pointer surface that is displayed when it has
pointer focus. The position of this surface will be the cursor location
offset by the hotspot set by set_hotspot. For now surface transformation
is ignored.

surface_attach has the same behavior as with regular surfaces, i.e., sx
and sy are relative to the surfaces top-left corner. The hotspot is
updated though, so that the cursor position does not move.

One of the changes to clients/window.c is done to test surface_attachs
to a pointer surface with sx,sy != 0 and is not really necessary.

This set does not implement these changes on wayland backend. It does
include the two fixes I just sent to the list.

Protocol changes:
-

Ander Conselvan de Oliveira (1):
  protocol: make pointer images regular surfaces

 protocol/wayland.xml |   27 ++-
 1 files changed, 18 insertions(+), 9 deletions(-)

Weston Changes:
---

Ander Conselvan de Oliveira (3):
  shell: don't assign output for surface of type none
  compositor: assign output to drag surfaces
  compositor: implement new pointer surface protocol

 clients/window.c |   25 +++-
 src/compositor.c |  181 --
 src/compositor.h |   10 +++
 src/shell.c  |1 +
 4 files changed, 181 insertions(+), 36 deletions(-)

-- 
1.7.5.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH] protocol: make pointer images regular surfaces

2012-02-23 Thread Ander Conselvan de Oliveira
Replace the input_device.attach request with requests for setting
a pointer surface and a hotspot. This surface is client specific and
will be showed as the cursor sprite when one of the clients surfaces
has pointer focus.
---
 protocol/wayland.xml |   27 ++-
 1 files changed, 18 insertions(+), 9 deletions(-)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index a40e4b0..c72bf62 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -579,17 +579,26 @@
   pointer_focus.
 /description
 
-request name=attach
-  description summary=set the pointer image
-   Set the pointer's image.  This request only takes effect if
-   the pointer focus for this device is one of the requesting
-   clients surfaces.
+request name=set_pointer_surface
+  description summary=set the surface containing the pointer image
+   Set the supplied client surface as the pointer surface for the
+   requesting client. When the pointer focus is on one of the
+   requesting clients surface, this pointer surface will be
+   displayed at the cursor location, offset by a hotspot that
+   may be set with the set_hotspot request.
   /description
 
-  arg name=time type=uint/
-  arg name=buffer type=object interface=wl_buffer/
-  arg name=hotspot_x type=int/
-  arg name=hotspot_y type=int/
+  arg name=surface type=object interface=wl_surface/
+/request
+
+request name=set_hotspot
+  description summary=set the pointer surface hotspot
+   When this surface is displayed at the cursor location, its
+   position will be displaced by -x, -y.
+  /description
+
+  arg name=x type=int/
+  arg name=y type=int/
 /request
 
 event name=motion
-- 
1.7.5.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH 2/4] shell: don't assign output for surface of type none

2012-02-23 Thread Ander Conselvan de Oliveira
If map is called with a surface of type none it will call
weston_surface_assign_output, even though the surface will
not be mapped.
---
 src/shell.c |1 +
 1 files changed, 1 insertions(+), 0 deletions(-)

diff --git a/src/shell.c b/src/shell.c
index 3d5dfd9..8628462 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -1427,6 +1427,7 @@ map(struct weston_shell *base, struct weston_surface 
*surface,
do_configure = 0;
break;
case SHELL_SURFACE_NONE:
+   do_configure = 0;
break;
default:
/* everything else just below the panel */
-- 
1.7.5.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH 4/4] compositor: implement new pointer surface protocol

2012-02-23 Thread Ander Conselvan de Oliveira
---
 clients/window.c |   25 +++-
 src/compositor.c |  180 --
 src/compositor.h |   10 +++
 3 files changed, 179 insertions(+), 36 deletions(-)

diff --git a/clients/window.c b/clients/window.c
index ac26f52..e503182 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -159,6 +159,7 @@ struct input {
struct wl_input_device *input_device;
struct window *pointer_focus;
struct window *keyboard_focus;
+   struct wl_surface *pointer_surface;
uint32_t current_pointer_image;
uint32_t modifiers;
int32_t sx, sy;
@@ -1875,10 +1876,12 @@ input_set_pointer_image(struct input *input, uint32_t 
time, int pointer)
struct display *display = input-display;
struct wl_buffer *buffer;
cairo_surface_t *surface;
+   int old_pointer;
 
if (pointer == input-current_pointer_image)
return;
 
+   old_pointer = input-current_pointer_image;
input-current_pointer_image = pointer;
surface = display-pointer_surfaces[pointer];
 
@@ -1886,9 +1889,20 @@ input_set_pointer_image(struct input *input, uint32_t 
time, int pointer)
return;
 
buffer = display_get_buffer_for_surface(display, surface);
-   wl_input_device_attach(input-input_device, time, buffer,
-  pointer_images[pointer].hotspot_x,
-  pointer_images[pointer].hotspot_y);
+   if (old_pointer == POINTER_UNSET) {
+   wl_input_device_set_hotspot(input-input_device,
+   pointer_images[pointer].hotspot_x,
+   pointer_images[pointer].hotspot_y);
+   wl_surface_attach(input-pointer_surface, buffer, 0, 0);
+   }
+   else {
+   int dx = pointer_images[old_pointer].hotspot_x -
+   pointer_images[pointer].hotspot_x;
+   int dy = pointer_images[old_pointer].hotspot_y -
+   pointer_images[pointer].hotspot_y;
+
+   wl_surface_attach(input-pointer_surface, buffer, dx, dy);
+   }
 }
 
 struct wl_data_device *
@@ -2650,6 +2664,11 @@ display_add_input(struct display *d, uint32_t id)
   input-input_device);
wl_data_device_add_listener(input-data_device,
data_device_listener, input);
+
+   input-current_pointer_image = POINTER_UNSET;
+   input-pointer_surface = wl_compositor_create_surface(d-compositor);
+   wl_input_device_set_pointer_surface(input-input_device,
+   input-pointer_surface);
 }
 
 static void
diff --git a/src/compositor.c b/src/compositor.c
index 97f7c3e..a84f52f 100644
--- a/src/compositor.c
+++ b/src/compositor.c
@@ -929,6 +929,7 @@ weston_output_repaint(struct weston_output *output, int 
msecs)
overlap, surface_overlap;
int32_t width, height;
 
+   weston_compositor_update_cursor_sprites(ec);
weston_compositor_update_drag_surfaces(ec);
 
width = output-current-width +
@@ -1107,15 +1108,23 @@ weston_surface_assign_output(struct weston_surface *es)
}
 }
 
+static struct weston_pointer_surface *
+device_client_pointer_surface(struct weston_input_device *device,
+ struct wl_client *client);
+
 static void
 surface_attach(struct wl_client *client,
   struct wl_resource *resource,
   struct wl_resource *buffer_resource, int32_t sx, int32_t sy)
 {
struct weston_surface *es = resource-data;
+   struct weston_input_device *device = (struct weston_input_device *)
+   es-compositor-input_device;
struct weston_shell *shell = es-compositor-shell;
struct wl_buffer *buffer;
 
+   struct weston_pointer_surface *ps;
+
if (!buffer_resource  !es-output)
return;
 
@@ -1152,6 +1161,17 @@ surface_attach(struct wl_client *client,
 buffer-width, buffer-height);
}
 
+   ps = device_client_pointer_surface(device, client);
+   if (ps  es == ps-surface) {
+   ps-hotspot_x -= sx;
+   ps-hotspot_y -= sy;
+
+   if (ps-surface == device-sprite) {
+   device-hotspot_x = ps-hotspot_x;
+   device-hotspot_y = ps-hotspot_y;
+   }
+   }
+
weston_buffer_attach(buffer, es-surface);
 }
 
@@ -1666,47 +1686,74 @@ notify_touch(struct wl_input_device *device, uint32_t 
time, int touch_id,
 }
 
 static void
-input_device_attach(struct wl_client *client,
-   struct wl_resource *resource,
-   uint32_t time,
-   struct wl_resource *buffer_resource, int32_t x, int32_t y)
+pointer_surface_destroy(struct weston_pointer_surface *ps)
+{
+   if (!ps)
+   return;

Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Michael Hasselmann
On Thu, 2012-02-23 at 21:20 +1000, Peter Hutterer wrote:
 On 23/02/12 19:57 , Tiago Vignatti wrote:
  On 02/23/2012 07:58 AM, Peter Hutterer wrote:
  Includes rudimentary styling only.
 
  Signed-off-by: Peter Huttererpeter.hutte...@who-t.net
  ---
  A few things to note:
  - I'm not a designer
  - Having a html version of the protocol makes it a lot easier to read,
  and
  it certainly reveals missing bits of documentation in the protocol
  - the .css file is the one from wayland.freedesktop.org, someone could
  easily fix it to prettify the result a bit.
 
  I concur we need a prettier way to read the protocol. But what do you
  think about the idea of dumping the whole protocol in a separate section
  of main.tex instead?
 
 largely depends on what you expect the canonical source to be. shouldn't 
 be that hard to knock up another xslt that converts the xml into latex.

I would prefer HTML over Latex. Especially if the resulting HTML is
hosted as some form of online documentation.

regards,
Michael

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: Touch events

2012-02-23 Thread Bill Spitzak

Chase Douglas wrote:


The client won't see the third finger if it touches outside its window.
In the wayland case, only the WM has all the info needed to determine if
a touch is part of a global gesture. The WM needs to make the decision,
not the client.


I'm pretty certain all touch events *MUST* go to the same surface until 
all touches are released. Otherwise it will be quite impossible to do 
gestures reliably, like the user could not do them to objects near the 
edge of a window.


If the clients can look at things first, this would allow the compositor 
to do things like one finger can be used to change desktops if the 
underlying program does not use it.


That would be bad UI design because then global gestures would fire only
sometimes. Further, it would break global gestures if touches occur over
a broken application.


I consider it bad design that global actions are complex (like needing 
3 fingers) or global shortcuts require lots of shift keys held down, 
just to avoid collisions with applications.


I also think you are making up user confusion that does not exist in 
the real world to make an excuse for this. Users will find it pretty 
obvious if the same action that scrolls a document also scrolls the 
entire screen if you don't touch a document, IMHO.



I think we can look at other OSes as case studies. iOS and OS X employ
effective global gestures imo, and they take precedence over the
application receiving touch or gesture events.


I think it is pretty clear that what other OS's do is not always what 
Wayland wants to do. Most of them copied ideas from X.

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: Touch events

2012-02-23 Thread Chase Douglas

On 02/23/2012 12:22 PM, Bill Spitzak wrote:

Chase Douglas wrote:


The client won't see the third finger if it touches outside its window.
In the wayland case, only the WM has all the info needed to determine if
a touch is part of a global gesture. The WM needs to make the decision,
not the client.


I'm pretty certain all touch events *MUST* go to the same surface until
all touches are released. Otherwise it will be quite impossible to do
gestures reliably, like the user could not do them to objects near the
edge of a window.


No? I'm not sure what to say other than this is plainly incorrect. For a 
touchscreen device, the user may be interacting with two separate 
applications at the same time. Imagine you have your web browser open on 
the left side of the screen, and you have your spreadsheet open on the 
right side. You then want to scroll both side by side as you compare 
numbers. To do this, you need to send touch events to each client 
separately.


I'm fairly certain that no window system in major use behaves as you 
suggest.



If the clients can look at things first, this would allow the compositor
to do things like one finger can be used to change desktops if the
underlying program does not use it.


That would be bad UI design because then global gestures would fire only
sometimes. Further, it would break global gestures if touches occur over
a broken application.


I consider it bad design that global actions are complex (like needing
3 fingers) or global shortcuts require lots of shift keys held down,
just to avoid collisions with applications.


My belief is that it is considered, universally (meaning 95% of 
people), that global gestures should behave consistently across 
applications, and should not be inhibited by broken applications.


I also believe that 3 or more finger global gestures are not bad design, 
especially since the iPad uses them. Maybe individuals like yourself 
don't like them, but very many do.


I'm not trying to start an argument about what is the best design of 
global gestures. However, I think it is a requirement that the window 
system allows for consistent global gesture behavior, and that three or 
more touch gestures are valid for global gestures.



I also think you are making up user confusion that does not exist in
the real world to make an excuse for this. Users will find it pretty
obvious if the same action that scrolls a document also scrolls the
entire screen if you don't touch a document, IMHO.


How would it not be confusing if you have a global alt-tab gesture 
work when performed over your spreadsheet but not your browser?



I think we can look at other OSes as case studies. iOS and OS X employ
effective global gestures imo, and they take precedence over the
application receiving touch or gesture events.


I think it is pretty clear that what other OS's do is not always what
Wayland wants to do. Most of them copied ideas from X.


That's why I said we should look at them as case studies...

-- Chase
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Kristian Hoegsberg
On Thu, Feb 23, 2012 at 03:58:37PM +1000, Peter Hutterer wrote:
 Includes rudimentary styling only.
 
 Signed-off-by: Peter Hutterer peter.hutte...@who-t.net
 ---
 A few things to note:
 - I'm not a designer
 - Having a html version of the protocol makes it a lot easier to read, and
   it certainly reveals missing bits of documentation in the protocol
 - the .css file is the one from wayland.freedesktop.org, someone could
   easily fix it to prettify the result a bit.

That is very nice.  As part of 1.0, we need to figure out a way to
combine the protocol and the spec document into something like docbook
and make pdf and html versions.  I don't think we want to stick with latex.

Anyway, for now, this is great and definitely highlights the missing
documentation.  Committed, and I'll try to setup a push hook to put
the html on the web site.

thanks,
Kristian

  Makefile.am   |2 +-
  configure.ac  |6 +-
  protocol/Makefile.am  |7 ++
  protocol/protocol.xsl |  204 
 +
  protocol/wayland.css  |   41 ++
  5 files changed, 258 insertions(+), 2 deletions(-)
  create mode 100644 protocol/Makefile.am
  create mode 100644 protocol/protocol.xsl
  create mode 100644 protocol/wayland.css
 
 diff --git a/Makefile.am b/Makefile.am
 index 4461e48..016bb76 100644
 --- a/Makefile.am
 +++ b/Makefile.am
 @@ -1,4 +1,4 @@
 -SUBDIRS = src
 +SUBDIRS = src protocol
  
  ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
  
 diff --git a/configure.ac b/configure.ac
 index a1c9d2a..fc623e8 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -48,9 +48,13 @@ if test x$enable_scanner = xyes; then
   AC_SUBST(EXPAT_LIBS)
  fi
  
 +AC_PATH_PROG(XSLTPROC, xsltproc)
 +AM_CONDITIONAL([HAVE_XSLTPROC], [test $XSLTPROC != ])
 +
  AC_CONFIG_FILES([Makefile
wayland-scanner.m4
src/Makefile
src/wayland-server.pc
 -  src/wayland-client.pc])
 +  src/wayland-client.pc
 +  protocol/Makefile])
  AC_OUTPUT
 diff --git a/protocol/Makefile.am b/protocol/Makefile.am
 new file mode 100644
 index 000..9b57441
 --- /dev/null
 +++ b/protocol/Makefile.am
 @@ -0,0 +1,7 @@
 +if HAVE_XSLTPROC
 +doc_DATA = wayland.html wayland.css
 +
 +wayland.html: wayland.xml protocol.xsl
 + $(AM_V_GEN)$(XSLTPROC) protocol.xsl wayland.xml  $@
 +
 +endif
 diff --git a/protocol/protocol.xsl b/protocol/protocol.xsl
 new file mode 100644
 index 000..b2867f0
 --- /dev/null
 +++ b/protocol/protocol.xsl
 @@ -0,0 +1,204 @@
 +?xml version=1.0 ?
 +xsl:stylesheet version=1.0 
 xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
 +xsl:output method=html indent=yes encoding=UTF-8/
 +xsl:preserve-space elements=copyright/
 +xsl:template match=/
 +html
 +  head
 +meta http-equiv=Content-Type content=text/html;charset=utf-8 /
 +link href=wayland.css rel=stylesheet type=text/css /
 +titleWayland/title
 +  /head
 +  body
 +h1img src=wayland.png alt=Wayland logo //h1
 +h1Wayland Protocol Specification/h1
 +
 +!-- Copyright blurb --
 +xsl:apply-templates select=protocol/copyright/
 +
 +!-- TOC --
 +xsl:apply-templates select=protocol mode=toc /
 +
 +!-- Interface descriptions --
 +xsl:apply-templates select=protocol/interface 
 mode=interface_description /
 +
 +  /body
 +/html
 +/xsl:template
 +
 +!-- Copyright blurb --
 +xsl:template match=copyright
 +  div
 +pre class=copyright
 +  xsl:value-of select=. disable-output-escaping=yes/
 +/pre
 +  /div
 +/xsl:template
 +
 +!-- TOC --
 +xsl:template match=protocol mode=toc
 +  div class=toc
 +h2Table of Contents/h2
 +ul
 +  xsl:apply-templates select=interface mode=toc /
 +/ul
 +  /div
 +/xsl:template
 +
 +!-- interface in TOC --
 +xsl:template match=interface mode=toc
 +  li
 +xsl:call-template name=link
 +  xsl:with-param name=which select='href' /
 +/xsl:call-template
 +
 +!-- request list --
 +xsl:if test=request
 +  div
 + Requests:
 + ul
 +   xsl:apply-templates select=request mode=toc/
 + /ul
 +  /div
 +/xsl:if
 +
 +!-- event list --
 +xsl:if test=event
 +  div
 + Events:
 + ul
 +   xsl:apply-templates select=event mode=toc/
 + /ul
 +  /div
 +/xsl:if
 +
 +!-- enum list --
 +xsl:if test=enum
 +  div
 + Enums:
 + ul
 +   xsl:apply-templates select=enum mode=toc/
 + /ul
 +  /div
 +/xsl:if
 +  /li
 +/xsl:template
 +
 +!--
 +  Template to create a a tag in the form
 +#interfacename-request|event-request/event name
 +  the '#' prefix is added if $which is 'href'
 +  $which decides which attribute name (href or name) of a to set
 +--
 +xsl:template name=link 
 +  xsl:param name=which /
 +  a
 +xsl:attribute name={$which}
 +  xsl:if test=$which = 'href'#/xsl:if
 +  xsl:value-of select=../@name/
 +  xsl:text-/xsl:text !-- xsl:text needed to avoid whitespace --
 +  xsl:value-of 

Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Kristian Høgsberg
On Thu, Feb 23, 2012 at 4:26 PM, Kristian Hoegsberg hoegsb...@gmail.com wrote:
 On Thu, Feb 23, 2012 at 03:58:37PM +1000, Peter Hutterer wrote:
 Includes rudimentary styling only.

 Signed-off-by: Peter Hutterer peter.hutte...@who-t.net
 ---
 A few things to note:
 - I'm not a designer
 - Having a html version of the protocol makes it a lot easier to read, and
   it certainly reveals missing bits of documentation in the protocol
 - the .css file is the one from wayland.freedesktop.org, someone could
   easily fix it to prettify the result a bit.

 That is very nice.  As part of 1.0, we need to figure out a way to
 combine the protocol and the spec document into something like docbook
 and make pdf and html versions.  I don't think we want to stick with latex.

 Anyway, for now, this is great and definitely highlights the missing
 documentation.  Committed, and I'll try to setup a push hook to put
 the html on the web site.

I put it here:

  http://wayland.freedesktop.org/protocol.html

Kristian

 thanks,
 Kristian

  Makefile.am           |    2 +-
  configure.ac          |    6 +-
  protocol/Makefile.am  |    7 ++
  protocol/protocol.xsl |  204 
 +
  protocol/wayland.css  |   41 ++
  5 files changed, 258 insertions(+), 2 deletions(-)
  create mode 100644 protocol/Makefile.am
  create mode 100644 protocol/protocol.xsl
  create mode 100644 protocol/wayland.css

 diff --git a/Makefile.am b/Makefile.am
 index 4461e48..016bb76 100644
 --- a/Makefile.am
 +++ b/Makefile.am
 @@ -1,4 +1,4 @@
 -SUBDIRS = src
 +SUBDIRS = src protocol

  ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}

 diff --git a/configure.ac b/configure.ac
 index a1c9d2a..fc623e8 100644
 --- a/configure.ac
 +++ b/configure.ac
 @@ -48,9 +48,13 @@ if test x$enable_scanner = xyes; then
       AC_SUBST(EXPAT_LIBS)
  fi

 +AC_PATH_PROG(XSLTPROC, xsltproc)
 +AM_CONDITIONAL([HAVE_XSLTPROC], [test $XSLTPROC != ])
 +
  AC_CONFIG_FILES([Makefile
                wayland-scanner.m4
                src/Makefile
                src/wayland-server.pc
 -              src/wayland-client.pc])
 +              src/wayland-client.pc
 +              protocol/Makefile])
  AC_OUTPUT
 diff --git a/protocol/Makefile.am b/protocol/Makefile.am
 new file mode 100644
 index 000..9b57441
 --- /dev/null
 +++ b/protocol/Makefile.am
 @@ -0,0 +1,7 @@
 +if HAVE_XSLTPROC
 +doc_DATA = wayland.html wayland.css
 +
 +wayland.html: wayland.xml protocol.xsl
 +     $(AM_V_GEN)$(XSLTPROC) protocol.xsl wayland.xml  $@
 +
 +endif
 diff --git a/protocol/protocol.xsl b/protocol/protocol.xsl
 new file mode 100644
 index 000..b2867f0
 --- /dev/null
 +++ b/protocol/protocol.xsl
 @@ -0,0 +1,204 @@
 +?xml version=1.0 ?
 +xsl:stylesheet version=1.0 
 xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
 +xsl:output method=html indent=yes encoding=UTF-8/
 +xsl:preserve-space elements=copyright/
 +xsl:template match=/
 +html
 +  head
 +    meta http-equiv=Content-Type content=text/html;charset=utf-8 /
 +    link href=wayland.css rel=stylesheet type=text/css /
 +    titleWayland/title
 +  /head
 +  body
 +    h1img src=wayland.png alt=Wayland logo //h1
 +    h1Wayland Protocol Specification/h1
 +
 +    !-- Copyright blurb --
 +    xsl:apply-templates select=protocol/copyright/
 +
 +    !-- TOC --
 +    xsl:apply-templates select=protocol mode=toc /
 +
 +    !-- Interface descriptions --
 +    xsl:apply-templates select=protocol/interface 
 mode=interface_description /
 +
 +  /body
 +/html
 +/xsl:template
 +
 +!-- Copyright blurb --
 +xsl:template match=copyright
 +  div
 +    pre class=copyright
 +      xsl:value-of select=. disable-output-escaping=yes/
 +    /pre
 +  /div
 +/xsl:template
 +
 +!-- TOC --
 +xsl:template match=protocol mode=toc
 +  div class=toc
 +    h2Table of Contents/h2
 +    ul
 +      xsl:apply-templates select=interface mode=toc /
 +    /ul
 +  /div
 +/xsl:template
 +
 +!-- interface in TOC --
 +xsl:template match=interface mode=toc
 +  li
 +    xsl:call-template name=link
 +      xsl:with-param name=which select='href' /
 +    /xsl:call-template
 +
 +    !-- request list --
 +    xsl:if test=request
 +      div
 +     Requests:
 +     ul
 +       xsl:apply-templates select=request mode=toc/
 +     /ul
 +      /div
 +    /xsl:if
 +
 +    !-- event list --
 +    xsl:if test=event
 +      div
 +     Events:
 +     ul
 +       xsl:apply-templates select=event mode=toc/
 +     /ul
 +      /div
 +    /xsl:if
 +
 +    !-- enum list --
 +    xsl:if test=enum
 +      div
 +     Enums:
 +     ul
 +       xsl:apply-templates select=enum mode=toc/
 +     /ul
 +      /div
 +    /xsl:if
 +  /li
 +/xsl:template
 +
 +!--
 +  Template to create a a tag in the form
 +    #interfacename-request|event-request/event name
 +  the '#' prefix is added if $which is 'href'
 +  $which decides which attribute name (href or name) of a to set
 +--
 +xsl:template name=link 
 +  xsl:param name=which /
 +  a
 +    xsl:attribute name={$which}
 +      xsl:if 

Re: [PATCH] Fix pointer position clipping.

2012-02-23 Thread Kristian Hoegsberg
On Wed, Feb 22, 2012 at 01:57:51PM -0700, Scott Moreau wrote:

Yup, good fix, applied.

Kristian

 ---
  src/compositor.c |8 
  1 files changed, 4 insertions(+), 4 deletions(-)
 
 diff --git a/src/compositor.c b/src/compositor.c
 index 5a424fa..1963322 100644
 --- a/src/compositor.c
 +++ b/src/compositor.c
 @@ -1304,10 +1304,10 @@ notify_motion(struct wl_input_device *device, 
 uint32_t time, int x, int y)
   weston_compositor_activity(ec);
  
   wl_list_for_each(output, ec-output_list, link) {
 - if (output-x = x  x = output-x + output-current-width)
 + if (output-x = x  x  output-x + output-current-width)
   x_valid = 1;
  
 - if (output-y = y  y = output-y + output-current-height)
 + if (output-y = y  y  output-y + output-current-height)
   y_valid = 1;
  
   /* FIXME: calculate this only on output addition/deletion */
 @@ -1317,9 +1317,9 @@ notify_motion(struct wl_input_device *device, uint32_t 
 time, int x, int y)
   min_y = output-y;
  
   if (output-x + output-current-width  max_x)
 - max_x = output-x + output-current-width;
 + max_x = output-x + output-current-width - 1;
   if (output-y + output-current-height  max_y)
 - max_y = output-y + output-current-height;
 + max_y = output-y + output-current-height - 1;
   }
   
   if (!x_valid) {
 -- 
 1.7.4.1
 
 ___
 wayland-devel mailing list
 wayland-devel@lists.freedesktop.org
 http://lists.freedesktop.org/mailman/listinfo/wayland-devel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: Touch events

2012-02-23 Thread Daniel Stone
Hi,

On 23 February 2012 20:22, Bill Spitzak spit...@gmail.com wrote:
 Chase Douglas wrote:
 The client won't see the third finger if it touches outside its window.
 In the wayland case, only the WM has all the info needed to determine if
 a touch is part of a global gesture. The WM needs to make the decision,
 not the client.

 I'm pretty certain all touch events *MUST* go to the same surface until all
 touches are released. Otherwise it will be quite impossible to do gestures
 reliably, like the user could not do them to objects near the edge of a
 window.

On touchpads, yes.  On touchscreens, no.

 That would be bad UI design because then global gestures would fire only
 sometimes. Further, it would break global gestures if touches occur over
 a broken application.


 I consider it bad design that global actions are complex (like needing 3
 fingers) or global shortcuts require lots of shift keys held down, just to
 avoid collisions with applications.

Needing three fingers isn't complex.  My grandparents can understand
it, and regularly use three-finger gestures.

 I think we can look at other OSes as case studies. iOS and OS X employ
 effective global gestures imo, and they take precedence over the
 application receiving touch or gesture events.

 I think it is pretty clear that what other OS's do is not always what
 Wayland wants to do. Most of them copied ideas from X.

Not really.  X's input system is pretty unique (and pretty uniquely
broken), and I think it's safe to say that no-one -- least of all iOS
-- has copied it.

Cheers,
Daniel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH] Fix pointer position clipping.

2012-02-23 Thread Scott Moreau
On Thu, Feb 23, 2012 at 3:47 PM, Kristian Hoegsberg hoegsb...@gmail.comwrote:

 On Wed, Feb 22, 2012 at 01:57:51PM -0700, Scott Moreau wrote:

 Yup, good fix, applied.

 Kristian


Applied but not pushed? I don't see it in the current weston log history.
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [RFC v4] Introduce output zoom.

2012-02-23 Thread Scott Moreau
On Thu, Feb 23, 2012 at 3:54 PM, Kristian Hoegsberg hoegsb...@gmail.comwrote:

 On Wed, Feb 22, 2012 at 02:21:41PM -0700, Scott Moreau wrote:
  Ideally, we would want to use modifier+Scroll binding but that will
 have
  to wait for axis events. For now we just use keybindings. Zoom in/out
 with
  Super+Up/Down.

 Applied with a minor edit to really fix the code-before-declaration
 thing.  With your change we still end up with

 weston_output_update_zoom(struct weston_output *output, int x, int y)
 {
 if (output-zoom.level = 0)
 return;

float ratio;
...

 That is, the ratio variable is declared after the if statement.
 That's what we don't want.


Ah ok. So all declarations should come before code. Clearly I didn't pay
attention to the meaning of code-before-declaration.



 Anyway, enough nit-picking, it works well where, but we need to fix
 the binding issue.  We need to swallow the key press that triggers the
 binding and we also need to swallow the corresponding key up.  What
 I've been thinking is that we could let the binding handler return a
 value to indicate whether or not to swallow the event.  The tricky
 part is going to be swallowing the release event, since that may come
 many key events later.  We could just maintain a per-device list of
 keys that are down, and we need to swallow the release event, but
 that's kinda gross.  I don't really think there's a nicer way though.
 And all this applies to pointer buttons as well.

 Kristian


Yes, this is a problem with all keybindings currently. I was thinking the
same about eating the actual keybinding when the pressed/clicked but I
hadn't given much thought about the corresponding release event(s). It does
seem like we'd need some kind of state tracking for this. I haven't looked
into it yet but maybe when a binding is detected, we could set something
(possibly on the binding list or similar?) to listen for release of the
events involved. I haven't given much thought to this nor have I looked
into it yet but will do so.

Also, is this a blocker? I don't see the patch in weston yet.


Thanks,

Scott
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH] Restructure output zoom key handling.

2012-02-23 Thread Scott Moreau
This effectively eats the keybinding events, as we don't want them sent to 
clients.
---
 src/shell.c |   60 +++---
 1 files changed, 40 insertions(+), 20 deletions(-)

diff --git a/src/shell.c b/src/shell.c
index ee71dcc..d949d0c 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -119,6 +119,10 @@ struct weston_move_grab {
int32_t dx, dy;
 };
 
+struct weston_zoom_grab {
+   struct wl_keyboard_grab grab;
+};
+
 struct rotate_grab {
struct wl_pointer_grab grab;
struct shell_surface *surface;
@@ -1035,18 +1039,36 @@ resize_binding(struct wl_input_device *device, uint32_t 
time,
 }
 
 static void
-zoom_in_binding(struct wl_input_device *device, uint32_t time,
-  uint32_t key, uint32_t button, uint32_t state, void *data)
+zoom_grab_key(struct wl_keyboard_grab *grab,
+   uint32_t time, uint32_t key, int32_t state)
 {
+   struct wl_input_device *device = grab-input_device;
struct weston_input_device *wd = (struct weston_input_device *) device;
struct weston_compositor *compositor = wd-compositor;
struct weston_output *output;
+   struct weston_zoom_grab *zoom;
+
+   if (!(wd-modifier_state  MODIFIER_SUPER)) {
+   zoom = container_of(grab, struct weston_zoom_grab, grab);
+   wl_input_device_end_keyboard_grab(device, time);
+   free(zoom);
+   return;
+   }
 
wl_list_for_each(output, compositor-output_list, link) {
if (pixman_region32_contains_point(output-region,
device-x, device-y, NULL)) {
-   output-zoom.active = 1;
-   output-zoom.level -= output-zoom.increment;
+   if (state  key == KEY_UP) {
+   output-zoom.active = 1;
+   output-zoom.level -= output-zoom.increment;
+   }
+   if (state  key == KEY_DOWN)
+   output-zoom.level += output-zoom.increment;
+
+   if (output-zoom.level = 1.0) {
+   output-zoom.active = 0;
+   output-zoom.level = 1.0;
+   }
 
if (output-zoom.level  output-zoom.increment)
output-zoom.level = output-zoom.increment;
@@ -1056,26 +1078,24 @@ zoom_in_binding(struct wl_input_device *device, 
uint32_t time,
}
 }
 
+static const struct wl_keyboard_grab_interface zoom_grab = {
+   zoom_grab_key,
+};
+
 static void
-zoom_out_binding(struct wl_input_device *device, uint32_t time,
+zoom_binding(struct wl_input_device *device, uint32_t time,
   uint32_t key, uint32_t button, uint32_t state, void *data)
 {
struct weston_input_device *wd = (struct weston_input_device *) device;
-   struct weston_compositor *compositor = wd-compositor;
-   struct weston_output *output;
+   struct weston_zoom_grab *zoom;
 
-   wl_list_for_each(output, compositor-output_list, link) {
-   if (pixman_region32_contains_point(output-region,
-   device-x, device-y, NULL)) {
-   output-zoom.level += output-zoom.increment;
-   if (output-zoom.level = 1.0) {
-   output-zoom.active = 0;
-   output-zoom.level = 1.0;
-   }
+   zoom = malloc(sizeof *zoom);
+   if (!zoom)
+   return;
 
-   weston_output_update_zoom(output, device-x, device-y);
-   }
-   }
+   zoom-grab.interface = zoom_grab;
+
+   wl_input_device_start_keyboard_grab(wd-input_device, zoom-grab, 
time);
 }
 
 static void
@@ -1878,9 +1898,9 @@ shell_init(struct weston_compositor *ec)
weston_compositor_add_binding(ec, 0, BTN_LEFT, 0,
click_to_activate_binding, ec);
weston_compositor_add_binding(ec, KEY_UP, 0, MODIFIER_SUPER,
-   zoom_in_binding, shell);
+   zoom_binding, shell);
weston_compositor_add_binding(ec, KEY_DOWN, 0, MODIFIER_SUPER,
-   zoom_out_binding, shell);
+   zoom_binding, shell);
weston_compositor_add_binding(ec, 0, BTN_LEFT,
  MODIFIER_SUPER | MODIFIER_ALT,
  rotate_binding, NULL);
-- 
1.7.4.1

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH RFC] protocol: add xslt stylesheet to prettify the protocol

2012-02-23 Thread Peter Hutterer
On Thu, Feb 23, 2012 at 04:26:23PM -0500, Kristian Hoegsberg wrote:
 On Thu, Feb 23, 2012 at 03:58:37PM +1000, Peter Hutterer wrote:
  Includes rudimentary styling only.
  
  Signed-off-by: Peter Hutterer peter.hutte...@who-t.net
  ---
  A few things to note:
  - I'm not a designer
  - Having a html version of the protocol makes it a lot easier to read, and
it certainly reveals missing bits of documentation in the protocol
  - the .css file is the one from wayland.freedesktop.org, someone could
easily fix it to prettify the result a bit.
 
 That is very nice.  As part of 1.0, we need to figure out a way to
 combine the protocol and the spec document into something like docbook
 and make pdf and html versions.  I don't think we want to stick with latex.

I've played around a bit today and the result is this:
http://people.freedesktop.org/~whot/Wayland/tmp/en-US/html/

I've copied over the Wayland Architecture page from the current website just
to have a proper chapter in there, the protocol documentation generated from
a modification of the xsl. 

The whole lot is generated with publican, I've been assured that publican
can also produce pdf, epub, etc. And the source was relatively trivial, even
for someone with little docbook experience.

With a bit of targeted styling, I think this could become quite useful but
before I invest any more time in this I'd like to hear a yay/nay.

Cheers,
  Peter
 
 Anyway, for now, this is great and definitely highlights the missing
 documentation.  Committed, and I'll try to setup a push hook to put
 the html on the web site.
 
 thanks,
 Kristian
 
   Makefile.am   |2 +-
   configure.ac  |6 +-
   protocol/Makefile.am  |7 ++
   protocol/protocol.xsl |  204 
  +
   protocol/wayland.css  |   41 ++
   5 files changed, 258 insertions(+), 2 deletions(-)
   create mode 100644 protocol/Makefile.am
   create mode 100644 protocol/protocol.xsl
   create mode 100644 protocol/wayland.css
  
  diff --git a/Makefile.am b/Makefile.am
  index 4461e48..016bb76 100644
  --- a/Makefile.am
  +++ b/Makefile.am
  @@ -1,4 +1,4 @@
  -SUBDIRS = src
  +SUBDIRS = src protocol
   
   ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
   
  diff --git a/configure.ac b/configure.ac
  index a1c9d2a..fc623e8 100644
  --- a/configure.ac
  +++ b/configure.ac
  @@ -48,9 +48,13 @@ if test x$enable_scanner = xyes; then
  AC_SUBST(EXPAT_LIBS)
   fi
   
  +AC_PATH_PROG(XSLTPROC, xsltproc)
  +AM_CONDITIONAL([HAVE_XSLTPROC], [test $XSLTPROC != ])
  +
   AC_CONFIG_FILES([Makefile
   wayland-scanner.m4
   src/Makefile
   src/wayland-server.pc
  -src/wayland-client.pc])
  +src/wayland-client.pc
  +protocol/Makefile])
   AC_OUTPUT
  diff --git a/protocol/Makefile.am b/protocol/Makefile.am
  new file mode 100644
  index 000..9b57441
  --- /dev/null
  +++ b/protocol/Makefile.am
  @@ -0,0 +1,7 @@
  +if HAVE_XSLTPROC
  +doc_DATA = wayland.html wayland.css
  +
  +wayland.html: wayland.xml protocol.xsl
  +   $(AM_V_GEN)$(XSLTPROC) protocol.xsl wayland.xml  $@
  +
  +endif
  diff --git a/protocol/protocol.xsl b/protocol/protocol.xsl
  new file mode 100644
  index 000..b2867f0
  --- /dev/null
  +++ b/protocol/protocol.xsl
  @@ -0,0 +1,204 @@
  +?xml version=1.0 ?
  +xsl:stylesheet version=1.0 
  xmlns:xsl=http://www.w3.org/1999/XSL/Transform;
  +xsl:output method=html indent=yes encoding=UTF-8/
  +xsl:preserve-space elements=copyright/
  +xsl:template match=/
  +html
  +  head
  +meta http-equiv=Content-Type content=text/html;charset=utf-8 /
  +link href=wayland.css rel=stylesheet type=text/css /
  +titleWayland/title
  +  /head
  +  body
  +h1img src=wayland.png alt=Wayland logo //h1
  +h1Wayland Protocol Specification/h1
  +
  +!-- Copyright blurb --
  +xsl:apply-templates select=protocol/copyright/
  +
  +!-- TOC --
  +xsl:apply-templates select=protocol mode=toc /
  +
  +!-- Interface descriptions --
  +xsl:apply-templates select=protocol/interface 
  mode=interface_description /
  +
  +  /body
  +/html
  +/xsl:template
  +
  +!-- Copyright blurb --
  +xsl:template match=copyright
  +  div
  +pre class=copyright
  +  xsl:value-of select=. disable-output-escaping=yes/
  +/pre
  +  /div
  +/xsl:template
  +
  +!-- TOC --
  +xsl:template match=protocol mode=toc
  +  div class=toc
  +h2Table of Contents/h2
  +ul
  +  xsl:apply-templates select=interface mode=toc /
  +/ul
  +  /div
  +/xsl:template
  +
  +!-- interface in TOC --
  +xsl:template match=interface mode=toc
  +  li
  +xsl:call-template name=link
  +  xsl:with-param name=which select='href' /
  +/xsl:call-template
  +
  +!-- request list --
  +xsl:if test=request
  +  div
  +   Requests:
  +   ul
  + xsl:apply-templates select=request mode=toc/
  +   /ul
  +  /div
  +/xsl:if
  +
  +!-- event