[PATCH libinput 3/8] Add libinput_device_suspend() and libinput_device_resume()

2014-08-19 Thread Peter Hutterer
Does what it says on the box, preventing events from the device without actually
dropping the device from the context.

Signed-off-by: Peter Hutterer 
---
See my notes in the coverletter. For the T440 case I specifically did not
mention that _suspend() closes the file descriptors.

 src/evdev.c| 23 +++
 src/evdev.h|  3 +++
 src/libinput.c | 16 
 src/libinput.h | 45 +
 4 files changed, 87 insertions(+)

diff --git a/src/evdev.c b/src/evdev.c
index d4a4a07..78d9985 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1082,6 +1082,29 @@ evdev_device_suspend(struct evdev_device *device)
return 0;
 }
 
+int
+evdev_device_resume(struct evdev_device *device)
+{
+   struct libinput *libinput = device->base.seat->libinput;
+   int fd;
+
+   if (device->fd != -1)
+   return 0;
+
+   fd = open_restricted(libinput, device->devnode, O_RDWR | O_NONBLOCK);
+
+   if (fd < 0)
+   return fd;
+
+   device->fd = fd;
+   device->source =
+   libinput_add_fd(libinput, fd, evdev_device_dispatch, device);
+   if (!device->source)
+   return -ENOMEM;
+
+   return 0;
+}
+
 void
 evdev_device_remove(struct evdev_device *device)
 {
diff --git a/src/evdev.h b/src/evdev.h
index 05125b7..b4749b6 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -182,6 +182,9 @@ evdev_device_transform_y(struct evdev_device *device,
 int
 evdev_device_suspend(struct evdev_device *device);
 
+int
+evdev_device_resume(struct evdev_device *device);
+
 void
 evdev_keyboard_notify_key(struct evdev_device *device,
  uint32_t time,
diff --git a/src/libinput.c b/src/libinput.c
index 90b6a13..d18d9b8 100644
--- a/src/libinput.c
+++ b/src/libinput.c
@@ -1142,6 +1142,22 @@ libinput_suspend(struct libinput *libinput)
libinput->interface_backend->suspend(libinput);
 }
 
+LIBINPUT_EXPORT int
+libinput_device_suspend(struct libinput_device *device)
+{
+   struct evdev_device *dev = (struct evdev_device*)device;
+
+   return evdev_device_suspend(dev);
+}
+
+LIBINPUT_EXPORT int
+libinput_device_resume(struct libinput_device *device)
+{
+   struct evdev_device *dev = (struct evdev_device*)device;
+
+   return evdev_device_resume(dev);
+}
+
 LIBINPUT_EXPORT void
 libinput_device_set_user_data(struct libinput_device *device, void *user_data)
 {
diff --git a/src/libinput.h b/src/libinput.h
index 9296a35..338a08f 100644
--- a/src/libinput.h
+++ b/src/libinput.h
@@ -1226,6 +1226,51 @@ libinput_device_unref(struct libinput_device *device);
 /**
  * @ingroup device
  *
+ * Suspend the device but do not remove the device from the context.
+ * Suspending a device stops the device from generating events until it is
+ * either resumed with libinput_device_resume() or removed from the context.
+ * Suspending a device does not generate a @ref
+ * LIBINPUT_EVENT_DEVICE_REMOVED event.
+ *
+ * Events already received and processed from this device are unaffected and
+ * will be passed to the caller on the next call to libinput_get_event().
+ * When the device is suspended, it may generate events to reset it into a
+ * neutral state (e.g. releasing currently pressed buttons).
+ *
+ * If the device is already suspended, this function does nothing.
+ *
+ * @param device A previously obtained device
+ * @return 0 on success or a negative errno on failure
+ *
+ * @see libinput_device_resume
+ */
+int
+libinput_device_suspend(struct libinput_device *device);
+
+/**
+ * @ingroup device
+ *
+ * Resume a previously suspended device. Events from this device will be
+ * processed in the next call of libinput_dispatch().
+ * Resuming a device does not generate a @ref LIBINPUT_EVENT_DEVICE_ADDED
+ * event.
+ *
+ * When the device is resumed, it may generate events to match the logical
+ * state with the current physical state of the device.
+ *
+ * If the device is not currently suspended, this function does nothing.
+ *
+ * @param device A previously suspended device
+ * @return 0 on success or a negative errno on failure
+ *
+ * @see libinput_device_suspend
+ */
+int
+libinput_device_resume(struct libinput_device *device);
+
+/**
+ * @ingroup device
+ *
  * Set caller-specific data associated with this input device. libinput does
  * not manage, look at, or modify this data. The caller must ensure the
  * data is valid.
-- 
1.9.3

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


[PATCH libinput 4/8] evdev: don't resume a removed device

2014-08-19 Thread Peter Hutterer
A device may disappear and a new device may re-appear with the same device
node while the original device is suspended. Prevent a device resume to open
the wrong device.

In a path context, a changing syspath is the only indicator we get of the
device changing.
In a udev context, if the device was removed and libinput_dispatch() was
called, we can short-cut the syspath comparison by setting it to NULL.

Signed-off-by: Peter Hutterer 
---
 src/evdev.c | 48 +++-
 src/evdev.h |  4 +++-
 src/path.c  |  9 ++---
 src/udev-seat.c |  4 +++-
 4 files changed, 59 insertions(+), 6 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 78d9985..74632c8 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -861,7 +861,8 @@ evdev_configure_device(struct evdev_device *device)
 struct evdev_device *
 evdev_device_create(struct libinput_seat *seat,
const char *devnode,
-   const char *sysname)
+   const char *sysname,
+   const char *syspath)
 {
struct libinput *libinput = seat->libinput;
struct evdev_device *device;
@@ -897,6 +898,7 @@ evdev_device_create(struct libinput_seat *seat,
device->mtdev = NULL;
device->devnode = strdup(devnode);
device->sysname = strdup(sysname);
+   device->syspath = strdup(syspath);
device->rel.dx = 0;
device->rel.dy = 0;
device->abs.seat_slot = -1;
@@ -1082,6 +1084,36 @@ evdev_device_suspend(struct evdev_device *device)
return 0;
 }
 
+static int
+evdev_device_compare_syspath(struct evdev_device *device, int fd)
+{
+   struct udev *udev = NULL;
+   struct udev_device *udev_device = NULL;
+   const char *syspath;
+   struct stat st;
+   int rc = 1;
+
+   udev = udev_new();
+   if (!udev)
+   goto out;
+
+   if (fstat(fd, &st) < 0)
+   goto out;
+
+   udev_device = udev_device_new_from_devnum(udev, 'c', st.st_rdev);
+   if (!device)
+   goto out;
+
+   syspath = udev_device_get_syspath(udev_device);
+   rc = strcmp(syspath, device->syspath);
+out:
+   if (udev_device)
+   udev_device_unref(udev_device);
+   if (udev)
+   udev_unref(udev);
+   return rc;
+}
+
 int
 evdev_device_resume(struct evdev_device *device)
 {
@@ -1091,11 +1123,19 @@ evdev_device_resume(struct evdev_device *device)
if (device->fd != -1)
return 0;
 
+   if (device->syspath == NULL)
+   return -ENODEV;
+
fd = open_restricted(libinput, device->devnode, O_RDWR | O_NONBLOCK);
 
if (fd < 0)
return fd;
 
+   if (evdev_device_compare_syspath(device, fd)) {
+   close_restricted(libinput, fd);
+   return -ENODEV;
+   }
+
device->fd = fd;
device->source =
libinput_add_fd(libinput, fd, evdev_device_dispatch, device);
@@ -1110,6 +1150,11 @@ evdev_device_remove(struct evdev_device *device)
 {
evdev_device_suspend(device);
 
+   /* A device may be removed while suspended. Free the syspath to
+* skip re-opening a different device with the same node */
+   free(device->syspath);
+   device->syspath = NULL;
+
list_remove(&device->base.link);
 
notify_removed_device(&device->base);
@@ -1131,5 +1176,6 @@ evdev_device_destroy(struct evdev_device *device)
free(device->mt.slots);
free(device->devnode);
free(device->sysname);
+   free(device->syspath);
free(device);
 }
diff --git a/src/evdev.h b/src/evdev.h
index b4749b6..55fae4c 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -63,6 +63,7 @@ struct evdev_device {
char *output_name;
char *devnode;
char *sysname;
+   char *syspath;
const char *devname;
int fd;
struct {
@@ -126,7 +127,8 @@ struct evdev_dispatch {
 struct evdev_device *
 evdev_device_create(struct libinput_seat *seat,
const char *devnode,
-   const char *sysname);
+   const char *sysname,
+   const char *syspath);
 
 struct evdev_dispatch *
 evdev_touchpad_create(struct evdev_device *device);
diff --git a/src/path.c b/src/path.c
index e9c0ee8..3752751 100644
--- a/src/path.c
+++ b/src/path.c
@@ -112,6 +112,7 @@ path_seat_get_named(struct path_input *input,
 static int
 path_get_udev_properties(const char *path,
 char **sysname,
+char **syspath,
 char **seat_name,
 char **seat_logical_name)
 {
@@ -133,6 +134,7 @@ path_get_udev_properties(const char *path,
goto out;
 
*sysname = strdup(udev_device_get_sysname(device));
+   *syspath = strdup(udev_device_get_syspath(device));
 
seat = udev_device_get_property_value(device, "ID_SEAT");
*seat_name = strdup(seat

[PATCH libinput 6/8] evdev: drop the button count when releasing keys on remove

2014-08-19 Thread Peter Hutterer
We only called this function before device removal, so failing to update the
button state didn't matter. To make this function generic for the upcoming
device suspend/resume, we need to keep track of the button/key count properly.

Signed-off-by: Peter Hutterer 
---
 src/evdev.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 74632c8..6bbea92 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1042,15 +1042,15 @@ release_pressed_keys(struct evdev_device *device)
case EVDEV_KEY_TYPE_NONE:
break;
case EVDEV_KEY_TYPE_KEY:
-   keyboard_notify_key(
-   &device->base,
+   evdev_keyboard_notify_key(
+   device,
time,
code,
LIBINPUT_KEY_STATE_RELEASED);
break;
case EVDEV_KEY_TYPE_BUTTON:
-   pointer_notify_button(
-   &device->base,
+   evdev_pointer_notify_button(
+   device,
time,
code,
LIBINPUT_BUTTON_STATE_RELEASED);
-- 
1.9.3

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


[PATCH libinput 7/8] evdev: ignore excessive releases of a button or key

2014-08-19 Thread Peter Hutterer
When we're suspending a touchpad, several events triggered by timers may still
be waiting in the background. We still need to release all buttons/keys
immediately though so we get an uneven number of release events: one from
release_pressed_keys() and one when the timers expire and send the release
event through the normal channels.

Don't assert if we're already on a press-count of 0, simply ignore it and
discard the event.

Signed-off-by: Peter Hutterer 
---
I'm not 100% sure on this one. It's the easy solution, but until we know the
general direction I didn't want to implement the full solution.
What's needed here are hooks for suspending/resuming in the dispatch structs
so that the touchpad code can cancel anything currently happening and reset
the state. For the normal fallback_dispatch the hooks can just release keys
and touches.

 src/evdev.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 6bbea92..755e7a1 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -74,8 +74,10 @@ update_key_down_count(struct evdev_device *device, int code, 
int pressed)
if (pressed) {
key_count = ++device->key_count[code];
} else {
-   assert(device->key_count[code] > 0);
-   key_count = --device->key_count[code];
+   if (device->key_count[code] > 0)
+   key_count = --device->key_count[code];
+   else
+   return -1;
}
 
if (key_count > 32) {
-- 
1.9.3

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


[PATCH libinput 8/8] test: test for release events on device suspend

2014-08-19 Thread Peter Hutterer
Signed-off-by: Peter Hutterer 
---
 test/device.c | 149 ++
 1 file changed, 149 insertions(+)

diff --git a/test/device.c b/test/device.c
index 25e119e..2367fd6 100644
--- a/test/device.c
+++ b/test/device.c
@@ -30,6 +30,7 @@
 #include 
 
 #include "litest.h"
+#include "libinput-util.h"
 
 static int open_restricted(const char *path, int flags, void *data)
 {
@@ -238,6 +239,151 @@ START_TEST(device_resume_invalid_device_removed)
 }
 END_TEST
 
+START_TEST(device_suspend_release_buttons)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+   struct libinput_event *event;
+   struct libinput_event_pointer *ptrevent;
+
+   device = dev->libinput_device;
+
+   litest_button_click(dev, BTN_LEFT, true);
+   litest_drain_events(li);
+   litest_assert_empty_queue(li);
+
+   libinput_device_suspend(device);
+
+   libinput_dispatch(li);
+   while ((event = libinput_get_event(li)) == NULL)
+   libinput_dispatch(li);
+
+   ck_assert_int_eq(libinput_event_get_type(event),
+LIBINPUT_EVENT_POINTER_BUTTON);
+   ptrevent = libinput_event_get_pointer_event(event);
+   ck_assert_int_eq(libinput_event_pointer_get_button(ptrevent),
+BTN_LEFT);
+   ck_assert_int_eq(libinput_event_pointer_get_button_state(ptrevent),
+LIBINPUT_BUTTON_STATE_RELEASED);
+
+   libinput_event_destroy(event);
+   litest_assert_empty_queue(li);
+
+   /* double-suspend for good measure, make sure we don't get
+* the button events again */
+   libinput_device_suspend(device);
+   libinput_dispatch(li);
+   litest_assert_empty_queue(li);
+}
+END_TEST
+
+START_TEST(device_suspend_release_keys)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+   struct libinput_event *event;
+   struct libinput_event_keyboard *kbdevent;
+
+   device = dev->libinput_device;
+
+   litest_button_click(dev, KEY_A, true);
+   litest_drain_events(li);
+   litest_assert_empty_queue(li);
+
+   libinput_device_suspend(device);
+
+   libinput_dispatch(li);
+   while ((event = libinput_get_event(li)) == NULL)
+   libinput_dispatch(li);
+
+   ck_assert_int_eq(libinput_event_get_type(event),
+LIBINPUT_EVENT_KEYBOARD_KEY);
+   kbdevent = libinput_event_get_keyboard_event(event);
+   ck_assert_int_eq(libinput_event_keyboard_get_key(kbdevent),
+KEY_A);
+   ck_assert_int_eq(libinput_event_keyboard_get_key_state(kbdevent),
+LIBINPUT_KEY_STATE_RELEASED);
+
+   libinput_event_destroy(event);
+   litest_assert_empty_queue(li);
+
+   /* double-suspend for good measure, make sure we don't get
+* the key events again */
+   libinput_device_suspend(device);
+   libinput_dispatch(li);
+   litest_assert_empty_queue(li);
+}
+END_TEST
+
+START_TEST(device_suspend_release_tap)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+   struct libinput_event *event;
+   struct libinput_event_pointer *ptrevent;
+
+   device = dev->libinput_device;
+
+   libinput_device_config_tap_set_enabled(device,
+  LIBINPUT_CONFIG_TAP_ENABLED);
+
+   litest_drain_events(li);
+
+   litest_touch_down(dev, 0, 50, 50);
+   litest_touch_up(dev, 0);
+
+   libinput_dispatch(li);
+
+   libinput_device_suspend(device);
+   /* tap happened before suspending, so we still expect the event */
+
+   msleep(300); /* tap-n-drag timeout */
+
+   libinput_dispatch(li);
+   while ((event = libinput_get_event(li)) == NULL)
+   libinput_dispatch(li);
+
+   ck_assert_int_eq(libinput_event_get_type(event),
+LIBINPUT_EVENT_POINTER_BUTTON);
+   ptrevent = libinput_event_get_pointer_event(event);
+   ck_assert_int_eq(libinput_event_pointer_get_button(ptrevent),
+BTN_LEFT);
+   ck_assert_int_eq(libinput_event_pointer_get_button_state(ptrevent),
+LIBINPUT_BUTTON_STATE_PRESSED);
+
+   libinput_event_destroy(event);
+
+   while ((event = libinput_get_event(li)) == NULL)
+   libinput_dispatch(li);
+
+   ck_assert_int_eq(libinput_event_get_type(event),
+LIBINPUT_EVENT_POINTER_BUTTON);
+   ptrevent = libinput_event_get_pointer_event(event);
+   ck_assert_int_eq(libinput_event_pointer_get_button(ptrevent),
+BTN_LEFT);
+   ck_assert_int_eq(libinput_event_pointer_get_button_state(ptrevent),
+ 

[PATCH libinput 5/8] test: add test for device suspend/resume

2014-08-19 Thread Peter Hutterer
Signed-off-by: Peter Hutterer 
---
 test/Makefile.am |   7 +-
 test/device.c| 250 +++
 2 files changed, 256 insertions(+), 1 deletion(-)
 create mode 100644 test/device.c

diff --git a/test/Makefile.am b/test/Makefile.am
index 76d4e8c..4602f9f 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -34,7 +34,8 @@ run_tests = \
test-log \
test-touchpad \
test-misc \
-   test-keyboard
+   test-keyboard \
+   test-device
 build_tests = \
test-build-cxx \
test-build-linker \
@@ -78,6 +79,10 @@ test_keyboard_SOURCES = keyboard.c
 test_keyboard_LDADD = $(TEST_LIBS)
 test_keyboard_LDFLAGS = -no-install
 
+test_device_SOURCES = device.c
+test_device_LDADD = $(TEST_LIBS)
+test_device_LDFLAGS = -no-install
+
 # build-test only
 test_build_pedantic_c99_SOURCES = build-pedantic.c
 test_build_pedantic_c99_CFLAGS = -std=c99 -pedantic -Werror
diff --git a/test/device.c b/test/device.c
new file mode 100644
index 000..25e119e
--- /dev/null
+++ b/test/device.c
@@ -0,0 +1,250 @@
+/*
+ * Copyright © 2014 Red Hat, Inc.
+ *
+ * Permission to use, copy, modify, distribute, and sell this software and
+ * its documentation for any purpose is hereby granted without fee, provided
+ * that the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation, and that the name of the copyright holders not be used in
+ * advertising or publicity pertaining to distribution of the software
+ * without specific, written prior permission.  The copyright holders make
+ * no representations about the suitability of this software for any
+ * purpose.  It is provided "as is" without express or implied warranty.
+ *
+ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
+ * SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
+ * SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
+ * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
+ * CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
+ * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+ */
+
+#include 
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "litest.h"
+
+static int open_restricted(const char *path, int flags, void *data)
+{
+   int fd;
+   fd = open(path, flags);
+   return fd < 0 ? -errno : fd;
+}
+static void close_restricted(int fd, void *data)
+{
+   close(fd);
+}
+
+const struct libinput_interface simple_interface = {
+   .open_restricted = open_restricted,
+   .close_restricted = close_restricted,
+};
+
+
+START_TEST(device_suspend)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+
+   device = dev->libinput_device;
+
+   litest_drain_events(li);
+
+   /* no event from suspending */
+   libinput_device_suspend(device);
+   litest_assert_empty_queue(li);
+
+   /* no event from suspended device */
+   litest_event(dev, EV_REL, REL_X, 10);
+   litest_event(dev, EV_SYN, SYN_REPORT, 0);
+   litest_assert_empty_queue(li);
+
+   /* no event from resuming */
+   libinput_device_resume(device);
+   litest_assert_empty_queue(li);
+}
+END_TEST
+
+START_TEST(device_double_suspend)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+
+   device = dev->libinput_device;
+
+   litest_drain_events(li);
+
+   libinput_device_suspend(device);
+   libinput_device_suspend(device);
+
+   litest_assert_empty_queue(li);
+}
+END_TEST
+
+START_TEST(device_double_resume)
+{
+   struct litest_device *dev = litest_current_device();
+   struct libinput *li = dev->libinput;
+   struct libinput_device *device;
+
+   device = dev->libinput_device;
+
+   litest_drain_events(li);
+
+   libinput_device_suspend(device);
+   libinput_device_resume(device);
+   libinput_device_resume(device);
+
+   litest_assert_empty_queue(li);
+}
+END_TEST
+
+START_TEST(device_resume_invalid_syspath_changed)
+{
+   struct libinput *li;
+   struct libinput_device *device;
+   struct libevdev *evdev;
+   struct libevdev_uinput *uinput;
+   int rc;
+   char *devnode;
+
+   evdev = libevdev_new();
+   ck_assert_notnull(evdev);
+
+   libevdev_set_name(evdev, "litest device");
+   libevdev_enable_event_code(evdev, EV_KEY, BTN_LEFT, NULL);
+   libevdev_enable_event_code(evdev, EV_KEY, BTN_RIGHT, NULL);
+   libevdev_enable_event_code(evdev, EV_REL, REL_X, NULL);
+   libevdev_enable_event_code(evdev, EV_REL, REL_Y, NULL);
+
+   rc = libevdev_uinput_create_from_device(evdev,
+

[PATCH libinput 2/8] evdev: prevent double-suspending a device

2014-08-19 Thread Peter Hutterer
Signed-off-by: Peter Hutterer 
---
Could be merged with 1/8, but two patches for easier review.

 src/evdev.c | 15 +++
 1 file changed, 11 insertions(+), 4 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index 8b154a3..d4a4a07 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1061,16 +1061,23 @@ release_pressed_keys(struct evdev_device *device)
 int
 evdev_device_suspend(struct evdev_device *device)
 {
-   if (device->source)
+   if (device->source) {
libinput_remove_source(device->base.seat->libinput,
   device->source);
+   device->source = NULL;
+   }
 
release_pressed_keys(device);
 
-   if (device->mtdev)
+   if (device->mtdev) {
mtdev_close_delete(device->mtdev);
-   close_restricted(device->base.seat->libinput, device->fd);
-   device->fd = -1;
+   device->mtdev = NULL;
+   }
+
+   if (device->fd != -1) {
+   close_restricted(device->base.seat->libinput, device->fd);
+   device->fd = -1;
+   }
 
return 0;
 }
-- 
1.9.3

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


[PATCH libinput 1/8] evdev: factor out closing a device into evdev_suspend()

2014-08-19 Thread Peter Hutterer
No functional changes, just prep work for an upcoming patch

Signed-off-by: Peter Hutterer 
---
 src/evdev.c | 13 +++--
 src/evdev.h |  2 ++
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/src/evdev.c b/src/evdev.c
index b9f635d..8b154a3 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -1058,8 +1058,8 @@ release_pressed_keys(struct evdev_device *device)
}
 }
 
-void
-evdev_device_remove(struct evdev_device *device)
+int
+evdev_device_suspend(struct evdev_device *device)
 {
if (device->source)
libinput_remove_source(device->base.seat->libinput,
@@ -1071,6 +1071,15 @@ evdev_device_remove(struct evdev_device *device)
mtdev_close_delete(device->mtdev);
close_restricted(device->base.seat->libinput, device->fd);
device->fd = -1;
+
+   return 0;
+}
+
+void
+evdev_device_remove(struct evdev_device *device)
+{
+   evdev_device_suspend(device);
+
list_remove(&device->base.link);
 
notify_removed_device(&device->base);
diff --git a/src/evdev.h b/src/evdev.h
index f1ccdc2..05125b7 100644
--- a/src/evdev.h
+++ b/src/evdev.h
@@ -179,6 +179,8 @@ double
 evdev_device_transform_y(struct evdev_device *device,
 double y,
 uint32_t height);
+int
+evdev_device_suspend(struct evdev_device *device);
 
 void
 evdev_keyboard_notify_key(struct evdev_device *device,
-- 
1.9.3

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


[PATCH libinput 0/8] Add libinput_device_suspend() to disable devices

2014-08-19 Thread Peter Hutterer


This patchset adds two new API hooks, libinput_device_suspend() and
libinput_device_resume() which do what it says on the box. No special event
is sent when suspending or resuming, so this is really the hook to ignore a
specific device.

The main idea here is two-fold:
some devices simply shouldn't send events, in which case suspending them
means fewer wakeup calls. The other use-case is touchpads. GNOME and other
DE's provide hooks to disable the touchpad altogether - suspending it
achieves that.

Now, there are some issues that we should discuss:
* the touchpad use-case seems to be mainly caused by bad palm detection in
  the synaptics driver. Presumably having near-perfect palm detection
  would remove the need for that toggle (except on the
  devices that have that magic "disable touchpad button" on the touchpad
  itself). So there's an argument that we don't necessarily need this, but I
  don't know yet how good palm detection can be.

* the second problem: I don't think we provide enough information to
  callers to identify which device we don't need. Short of name matching
  there is no way currently to a touchpad before disabling it. Same goes for
  identifying any other device we don't care about.
  To allow that, we'd need some sort of device identification system beyond
  simple capabilities.

* the third problem: the T440s. Users want to disable the touchpad but allow
  the top software buttons need to continue to work. That would be fairly
  trivial to implement in libinput, but we'd have to send the top software
  buttons through the trackstick device. And to be consistent here, we'd
  have to do that in the non-suspended state too, which opens a can of
  worms.

discuss, because I'm rather stuck now.

Cheers,
  Peter

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


[PATCH libinput] test: avoid erroneous devices to be passed into the test suites

2014-08-19 Thread Peter Hutterer
The litest features overlap with the litest device specifiers, so it's easy to
pass in LITEST_MOUSE where LITEST_POINTER should be passed in, and vice versa.
Lacking proper type checking the best we can do here is simply move the
devices into the negative range and check for that.

Signed-off-by: Peter Hutterer 
---
 test/litest.c |  5 +
 test/litest.h | 18 +-
 2 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/test/litest.c b/test/litest.c
index 00db464..0341e9a 100644
--- a/test/litest.c
+++ b/test/litest.c
@@ -157,6 +157,9 @@ litest_add_tcase(struct suite *suite, void *func,
 {
struct litest_test_device **dev = devices;
 
+   assert(required >= LITEST_DISABLE_DEVICE);
+   assert(excluded >= LITEST_DISABLE_DEVICE);
+
if (required == LITEST_DISABLE_DEVICE &&
excluded == LITEST_DISABLE_DEVICE) {
litest_add_tcase_no_device(suite, func);
@@ -221,6 +224,8 @@ litest_add_for_device(const char *name,
struct suite *s;
struct litest_test_device **dev = devices;
 
+   assert(type < LITEST_NO_DEVICE);
+
s = get_suite(name);
while (*dev) {
if ((*dev)->type == type) {
diff --git a/test/litest.h b/test/litest.h
index 2dcb7b2..aac71e4 100644
--- a/test/litest.h
+++ b/test/litest.h
@@ -35,15 +35,15 @@
 
 enum litest_device_type {
LITEST_NO_DEVICE = -1,
-   LITEST_SYNAPTICS_CLICKPAD,
-   LITEST_SYNAPTICS_TOUCHPAD,
-   LITEST_SYNAPTICS_TOPBUTTONPAD,
-   LITEST_BCM5974,
-   LITEST_KEYBOARD,
-   LITEST_TRACKPOINT,
-   LITEST_MOUSE,
-   LITEST_WACOM_TOUCH,
-   LITEST_ALPS_SEMI_MT,
+   LITEST_SYNAPTICS_CLICKPAD = -2,
+   LITEST_SYNAPTICS_TOUCHPAD = -3,
+   LITEST_SYNAPTICS_TOPBUTTONPAD = -4,
+   LITEST_BCM5974 = -5,
+   LITEST_KEYBOARD = -6,
+   LITEST_TRACKPOINT = -7,
+   LITEST_MOUSE = -8,
+   LITEST_WACOM_TOUCH = -9,
+   LITEST_ALPS_SEMI_MT = -10,
 };
 
 enum litest_device_feature {
-- 
1.9.3

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


[PATCH V2 3/3] image: don't print redundant error

2014-08-19 Thread Bill Spitzak
This error is printed by load_image() now
---
 clients/image.c |1 -
 1 file changed, 1 deletion(-)

diff --git a/clients/image.c b/clients/image.c
index 573117c..aee8112 100644
--- a/clients/image.c
+++ b/clients/image.c
@@ -373,7 +373,6 @@ image_create(struct display *display, const char *filename,
image->image = load_cairo_surface(filename);
 
if (!image->image) {
-   fprintf(stderr, "could not find the image %s!\n", b);
free(image->filename);
free(image);
return NULL;
-- 
1.7.9.5

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


[PATCH V2] fixes to parse_options, help info

2014-08-19 Thread Bill Spitzak
This replaces the two unpushed patches from my previous set.
Includes changes based on Pekka's comments:

Removed merging of 1-letter boolean switches

Fixed the error message for image files less than 4 bytes long

Style fixes.

Split patch for library from patch to demo program.
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH V2 2/3] load_image: always print a message on failure if filename is not empty

2014-08-19 Thread Bill Spitzak
It was rather inconsistent before. This may help users figure out why
backgrounds and icons don't show up. A better api where the error can
be queried might be nice, but this seems sufficient for current Weston use.
---
 shared/image-loader.c |   14 --
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/shared/image-loader.c b/shared/image-loader.c
index 35dadd3..0d04b03 100644
--- a/shared/image-loader.c
+++ b/shared/image-loader.c
@@ -23,6 +23,7 @@
 
 #include "config.h"
 
+#include 
 #include 
 #include 
 #include 
@@ -374,12 +375,18 @@ load_image(const char *filename)
FILE *fp;
unsigned int i;
 
+   if (!filename || !*filename)
+   return NULL;
+
fp = fopen(filename, "rb");
-   if (fp == NULL)
+   if (!fp) {
+   fprintf(stderr, "%s: %s\n", filename, strerror(errno));
return NULL;
+   }
 
if (fread(header, sizeof header, 1, fp) != 1) {
fclose(fp);
+   fprintf(stderr, "%s: unable to read file header\n", filename);
return NULL;
}
 
@@ -395,10 +402,13 @@ load_image(const char *filename)
fclose(fp);
 
if (i == ARRAY_LENGTH(loaders)) {
-   fprintf(stderr, "unrecognized file header for %s: "
+   fprintf(stderr, "%s: unrecognized file header "
"0x%02x 0x%02x 0x%02x 0x%02x\n",
filename, header[0], header[1], header[2], header[3]);
image = NULL;
+   } else if (!image) {
+   /* load probably printed something, but just in case */
+   fprintf(stderr, "%s: error reading image\n", filename);
}
 
return image;
-- 
1.7.9.5

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


[PATCH V2 1/3] parse_options: fail on more malformed options

2014-08-19 Thread Bill Spitzak
Fail on trailing text after numbers, such as --width=100mm

Fail on any text after booleans, such as --flag=false

Also fixed reading of memory after the null terminator of a long
option with no = sign in it.
---
 shared/option-parser.c |   89 +---
 1 file changed, 61 insertions(+), 28 deletions(-)

diff --git a/shared/option-parser.c b/shared/option-parser.c
index c00349a..b8e7394 100644
--- a/shared/option-parser.c
+++ b/shared/option-parser.c
@@ -30,53 +30,86 @@
 
 #include "config-parser.h"
 
-static void
+static int
 handle_option(const struct weston_option *option, char *value)
 {
+   char* p;
+
switch (option->type) {
case WESTON_OPTION_INTEGER:
-   * (int32_t *) option->data = strtol(value, NULL, 0);
-   return;
+   * (int32_t *) option->data = strtol(value, &p, 0);
+   return *value && !*p;
case WESTON_OPTION_UNSIGNED_INTEGER:
-   * (uint32_t *) option->data = strtoul(value, NULL, 0);
-   return;
+   * (uint32_t *) option->data = strtoul(value, &p, 0);
+   return *value && !*p;
case WESTON_OPTION_STRING:
* (char **) option->data = strdup(value);
-   return;
-   case WESTON_OPTION_BOOLEAN:
-   * (int32_t *) option->data = 1;
-   return;
+   return 1;
default:
assert(0);
}
 }
 
+static int
+long_option(const struct weston_option *options, int count, char* arg)
+{
+   int k, len;
+
+   for (k = 0; k < count; k++) {
+   if (!options[k].name)
+   continue;
+   len = strlen(options[k].name);
+   if (strncmp(options[k].name, arg + 2, len) != 0)
+   continue;
+   if (options[k].type == WESTON_OPTION_BOOLEAN) {
+   if (!arg[len + 2]) {
+   * (int32_t *) options[k].data = 1;
+   return 1;
+   }
+   } else if (arg[len+2] == '=') {
+   return handle_option(options + k, arg + len + 3);
+   }
+   }
+   return 0;
+}
+
+static int
+short_option(const struct weston_option *options, int count, char* arg)
+{
+   int k;
+
+   if (!arg[1])
+   return 0;
+   for (k = 0; k < count; k++) {
+   if (options[k].short_name != arg[1])
+   continue;
+   if (options[k].type == WESTON_OPTION_BOOLEAN) {
+   if (!arg[2]) {
+   * (int32_t *) options[k].data = 1;
+   return 1;
+   }
+   } else {
+   return handle_option(options + k, arg + 2);
+   }
+   }
+   return 0;
+}
+
 int
 parse_options(const struct weston_option *options,
  int count, int *argc, char *argv[])
 {
-   int i, j, k, len = 0;
+   int i, j;
 
for (i = 1, j = 1; i < *argc; i++) {
-   for (k = 0; k < count; k++) {
-   if (options[k].name)
-   len = strlen(options[k].name);
-   if (options[k].name &&
-   argv[i][0] == '-' &&
-   argv[i][1] == '-' &&
-   strncmp(options[k].name, &argv[i][2], len) == 0 &&
-   (argv[i][len + 2] == '=' || argv[i][len + 2] == 
'\0')) {
-   handle_option(&options[k], &argv[i][len + 3]);
-   break;
-   } else if (options[k].short_name &&
-  argv[i][0] == '-' &&
-  options[k].short_name == argv[i][1]) {
-   handle_option(&options[k], &argv[i][2]);
-   break;
-   }
+   if (argv[i][0] == '-') {
+   if (argv[i][1] == '-') {
+   if (long_option(options, count, argv[i]))
+   continue;
+   } else if (short_option(options, count, argv[i]))
+   continue;
}
-   if (k == count)
-   argv[j++] = argv[i];
+   argv[j++] = argv[i];
}
argv[j] = NULL;
*argc = j;
-- 
1.7.9.5

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


Re: [PATCH libinput] evdev: allow weird multitouch device without slots

2014-08-19 Thread Peter Hutterer
On Tue, Aug 19, 2014 at 06:44:25PM +0300, Leonid Borisenko wrote:
> 2014-08-19 10:02 GMT+03:00 Peter Hutterer :
> 
> > On Tue, Aug 19, 2014 at 06:29:40AM +0300, Leonid Borisenko wrote:
> > > HID device 'USB HID v1.11 Mouse' provided by Microsoft Wireless Optical
> > > Desktop=C2=AE 2.20 (connected to USB and identified as vendor 0x45e, pr=
> oduct
> > > 0xe3, version 0x111) is reported as supporting EV_ABS event with
> > ABS_MT_SLOT
> > > code, but nevertheless libevdev_get_num_slots returns -1.
> >
> > yeah, that's intentional. libevdev detects those devices (through
> > guesswork,
> > but still...) and returns -1 as slot number.
> >
> > > Furthermore, all connected devices (mouse and keyboard) don't produce a=
> ny
> > > EV_ABS events for that HID Mouse device in tests with evtest.
> > >
> > > Before this fix mouse didn't work in Weston (but worked in X.Org).
> > >
> > > As partially explained by LKML message [1] (Message-Id [2]):
> > >
> > > The root of the problem comes from hid-input, which maps unknown ax=
> is
> > > to ABS_MISC. However, when an event code is already in use, hid-inp=
> ut
> > > uses the one after, leading to uses of ABS_MISC + N, where N is the
> > > number of unknown axis.
> > >
> > > We are encountering a problem with the multitouch protocol here
> > because
> > > if a device has more than 7 unknown axis (which is the case for the
> > PS3
> > > Sixaxis controller), then the unknown axis get maps to ABS_MT_SLOT
> > and
> > > beyond.
> > >
> > > [1] https://lkml.org/lkml/2013/11/20/515
> > > [2] 1384983141-31019-1-git-send-email-benjamin.tissoi...@redhat.com
> > >
> > > [...]
> >
> > so, as I said above the libevdev behaviour is intentional and our
> > indicator
> > that this isn't a MT device after all. We should integrate that knowledge
> > better so that we don't label a device as touch device when it isn't, and
> > so
> > that we process events from those axes as normal ABS events instead of MT
> > events.
> 
> Unfortunately, my device (that Wireless Optical Desktop) doesn't produce
> any events with the questionable codes, so if I would try to change
> libinput behavior for these events to produce visible reaction, I'll not be
> able to test changes for sanity.

look at all the stuff in test/, it's fairly trivial to add your device (look
at litest-synaptics.c for example) and send events for any axis using
litest_event() or directly with libevdev_uinput_write_event().

plus, having a test makes sure we don't accidentally break things in the
future.

> I understand that my patch isn't general enough. It fixes my problem.
> though, making mouse working in Weston. Current libinput code isn't
> forgiving enough in handling of similar devices, so it cripples experience.
> I'm not complaining, it's v0.5, so missing functionality is acceptable, but
> it's frustrating.
> 
> I will file a bug report in hope that someone will propose more general fix=

You're pretty close with your fix already. In evdev_configure_device, check
for ABS_MT_SLOT and libevdev_get_num_slots() before setting device->is_mt.
If the number of slots is -1, don't set the mt flags and that's 80% of the
effort. so it's mostly just a bit of reshuffling.

> As a sidenote, cited LKML message says that "the axis currently mapped on
> ABS_MT_SLOT is a special case in the kernel,
> and it is not updated", so I think processing axes as normal ABS events
> will not work for the axis reported as ABS_MT_SLOT.

yeah, that's fine. but we should still handle all other axes correctly then.
at the very least, we should make sure that we don't crash if that happens.

Cheers,
   Peter

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


[PATCH weston 2/2] Don't protect xkb_*_unref from NULL

2014-08-19 Thread Ran Benita
Since xkbcommon-0.3.0, which is required by weston, a NULL argument
doesn't do anything.

Signed-off-by: Ran Benita 
---
 src/compositor-wayland.c | 3 +--
 src/compositor-x11.c | 3 +--
 src/input.c  | 9 +++--
 src/screen-share.c   | 3 +--
 4 files changed, 6 insertions(+), 12 deletions(-)

diff --git a/src/compositor-wayland.c b/src/compositor-wayland.c
index 57e850f..5f73c78 100644
--- a/src/compositor-wayland.c
+++ b/src/compositor-wayland.c
@@ -1464,8 +1464,7 @@ input_handle_keymap(void *data, struct wl_keyboard 
*keyboard, uint32_t format,
else
weston_seat_init_keyboard(&input->base, keymap);
 
-   if (keymap)
-   xkb_keymap_unref(keymap);
+   xkb_keymap_unref(keymap);
 
return;
 
diff --git a/src/compositor-x11.c b/src/compositor-x11.c
index 984d799..3494e34 100644
--- a/src/compositor-x11.c
+++ b/src/compositor-x11.c
@@ -322,8 +322,7 @@ x11_input_create(struct x11_compositor *c, int no_input)
keymap = x11_compositor_get_keymap(c);
if (weston_seat_init_keyboard(&c->core_seat, keymap) < 0)
return -1;
-   if (keymap)
-   xkb_keymap_unref(keymap);
+   xkb_keymap_unref(keymap);
 
x11_compositor_setup_xkb(c);
 
diff --git a/src/input.c b/src/input.c
index 2130789..975cd77 100644
--- a/src/input.c
+++ b/src/input.c
@@ -544,12 +544,10 @@ weston_keyboard_destroy(struct weston_keyboard *keyboard)
 
 #ifdef ENABLE_XKBCOMMON
if (keyboard->seat->compositor->use_xkbcommon) {
-   if (keyboard->xkb_state.state != NULL)
-   xkb_state_unref(keyboard->xkb_state.state);
+   xkb_state_unref(keyboard->xkb_state.state);
if (keyboard->xkb_info)
weston_xkb_info_destroy(keyboard->xkb_info);
-   if (keyboard->pending_keymap)
-   xkb_keymap_unref(keyboard->pending_keymap);
+   xkb_keymap_unref(keyboard->pending_keymap);
}
 #endif
 
@@ -1869,8 +1867,7 @@ weston_xkb_info_destroy(struct weston_xkb_info *xkb_info)
if (--xkb_info->ref_count > 0)
return;
 
-   if (xkb_info->keymap)
-   xkb_keymap_unref(xkb_info->keymap);
+   xkb_keymap_unref(xkb_info->keymap);
 
if (xkb_info->keymap_area)
munmap(xkb_info->keymap_area, xkb_info->keymap_size);
diff --git a/src/screen-share.c b/src/screen-share.c
index 9e81ef9..524a0ca 100644
--- a/src/screen-share.c
+++ b/src/screen-share.c
@@ -214,8 +214,7 @@ ss_seat_handle_keymap(void *data, struct wl_keyboard 
*keyboard,
else
weston_seat_init_keyboard(&seat->base, keymap);
 
-   if (keymap)
-   xkb_keymap_unref(keymap);
+   xkb_keymap_unref(keymap);
 
return;
 
-- 
2.0.4

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


[PATCH weston 1/2] Replace deprecated xkbcommon symbols with current names

2014-08-19 Thread Ran Benita
These symbols (xkb_map_* and others) were replaced in xkbcommon with more
consistent names. See the header xkbcommon/xkbcommon-compat.h for how
the old names map to the new.

The new names have been available since the first stable xkbcommon
release (0.2.0).

Signed-off-by: Ran Benita 
---
 clients/weston-simple-im.c | 22 
 clients/window.c   | 24 -
 src/compositor-wayland.c   | 10 +++
 src/compositor-x11.c   |  4 +--
 src/input.c| 66 --
 src/screen-share.c | 10 +++
 6 files changed, 70 insertions(+), 66 deletions(-)

diff --git a/clients/weston-simple-im.c b/clients/weston-simple-im.c
index ded6a04..787782f 100644
--- a/clients/weston-simple-im.c
+++ b/clients/weston-simple-im.c
@@ -187,10 +187,10 @@ input_method_keyboard_keymap(void *data,
}
 
keyboard->keymap =
-   xkb_map_new_from_string(keyboard->xkb_context,
-   map_str,
-   XKB_KEYMAP_FORMAT_TEXT_V1,
-   0);
+   xkb_keymap_new_from_string(keyboard->xkb_context,
+  map_str,
+  XKB_KEYMAP_FORMAT_TEXT_V1,
+  0);
 
munmap(map_str, size);
close(fd);
@@ -203,16 +203,16 @@ input_method_keyboard_keymap(void *data,
keyboard->state = xkb_state_new(keyboard->keymap);
if (!keyboard->state) {
fprintf(stderr, "failed to create XKB state\n");
-   xkb_map_unref(keyboard->keymap);
+   xkb_keymap_unref(keyboard->keymap);
return;
}
 
keyboard->control_mask =
-   1 << xkb_map_mod_get_index(keyboard->keymap, "Control");
+   1 << xkb_keymap_mod_get_index(keyboard->keymap, "Control");
keyboard->alt_mask =
-   1 << xkb_map_mod_get_index(keyboard->keymap, "Mod1");
+   1 << xkb_keymap_mod_get_index(keyboard->keymap, "Mod1");
keyboard->shift_mask =
-   1 << xkb_map_mod_get_index(keyboard->keymap, "Shift");
+   1 << xkb_keymap_mod_get_index(keyboard->keymap, "Shift");
 }
 
 static void
@@ -234,7 +234,7 @@ input_method_keyboard_key(void *data,
return;
 
code = key + 8;
-   num_syms = xkb_key_get_syms(keyboard->state, code, &syms);
+   num_syms = xkb_state_key_get_syms(keyboard->state, code, &syms);
 
sym = XKB_KEY_NoSymbol;
if (num_syms == 1)
@@ -261,8 +261,8 @@ input_method_keyboard_modifiers(void *data,
xkb_state_update_mask(keyboard->state, mods_depressed,
  mods_latched, mods_locked, 0, 0, group);
mask = xkb_state_serialize_mods(keyboard->state,
-   XKB_STATE_DEPRESSED |
-   XKB_STATE_LATCHED);
+   XKB_STATE_MODS_DEPRESSED |
+   XKB_STATE_MODS_LATCHED);
 
keyboard->modifiers = 0;
if (mask & keyboard->control_mask)
diff --git a/clients/window.c b/clients/window.c
index a8bc260..90f45d3 100644
--- a/clients/window.c
+++ b/clients/window.c
@@ -2749,10 +2749,10 @@ keyboard_handle_keymap(void *data, struct wl_keyboard 
*keyboard,
return;
}
 
-   keymap = xkb_map_new_from_string(input->display->xkb_context,
-map_str,
-XKB_KEYMAP_FORMAT_TEXT_V1,
-0);
+   keymap = xkb_keymap_new_from_string(input->display->xkb_context,
+   map_str,
+   XKB_KEYMAP_FORMAT_TEXT_V1,
+   0);
munmap(map_str, size);
close(fd);
 
@@ -2764,7 +2764,7 @@ keyboard_handle_keymap(void *data, struct wl_keyboard 
*keyboard,
state = xkb_state_new(keymap);
if (!state) {
fprintf(stderr, "failed to create XKB state\n");
-   xkb_map_unref(keymap);
+   xkb_keymap_unref(keymap);
return;
}
 
@@ -2774,11 +2774,11 @@ keyboard_handle_keymap(void *data, struct wl_keyboard 
*keyboard,
input->xkb.state = state;
 
input->xkb.control_mask =
-   1 << xkb_map_mod_get_index(input->xkb.keymap, "Control");
+   1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Control");
input->xkb.alt_mask =
-   1 << xkb_map_mod_get_index(input->xkb.keymap, "Mod1");
+   1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Mod1");
input->xkb.shift_mask =
-   1 << xkb_map_mod_get_index(input->xkb.keymap, "Shift");
+   1 << xkb_keymap_mod_get_index(input->xkb.keymap, "Shift");
 

Re: [PATCH wayland v2] protocol: define the concept of wl_surface role

2014-08-19 Thread Bill Spitzak

On 08/19/2014 12:29 AM, Pekka Paalanen wrote:


+  Often, this
+  request also creates a new protocol object that represents the
+  role and adds additional functionality to wl_surface. When a
+  client wants to destroy a wl_surface, they must destroy this 'role
+  object' before the wl_surface.


Destroying the last protocol object for the role does not remove the 
role, correct? The client can recreate a new protocol object for that 
role and it still works?



+  Losing a role means losing all the role-specific state.


I'm not sure what you are saying here. I think maybe you are talking 
about a surface that was used for drag & drop when the drag & drop ends?


I thought in that case the surface must be destroyed: ie once a surface 
"loses a role" it cannot be assigned any role, including the same one. 
But in that case the "state" is irrelevant.


Are you allowed to reuse the drag & drop surface for another drag & 
drop? If the creation request also sets some state it is obvious that 
portion of the state is not preserved. But it seems a lot easier on both 
clients and compositors if other state is allowed to be preserved.


In any case I find this sentence really confusing. Also it might help if 
there was a concrete example of a surface "losing a role".

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


[PATCH weston] weston.ini.man: Add libinput section

2014-08-19 Thread Jonas Ådahl
Signed-off-by: Jonas Ådahl 
---
 man/weston.ini.man | 14 ++
 1 file changed, 14 insertions(+)

diff --git a/man/weston.ini.man b/man/weston.ini.man
index fbcec81..4be752b 100644
--- a/man/weston.ini.man
+++ b/man/weston.ini.man
@@ -70,6 +70,7 @@ The section headers are:
 .RS 4
 .nf
 .BR "core   " "The core modules"
+.BR "libinput   " "Input device configuration"
 .BR "shell  " "Desktop customization"
 .BR "launcher   " "Add launcher to the panel"
 .BR "screensaver" "Screensaver selection"
@@ -144,6 +145,19 @@ By default, xrgb is used.
 .RS
 .PP
 
+.SH "LIBINPUT SECTION"
+The
+.B libinput
+section is used to configure input devices when using the libinput input device
+backend.
+.PP
+Available configuration are:
+.TP 7
+.BI "enable_tap=" true
+enables tap to click on touchpad devices
+.RS
+.PP
+
 .SH "SHELL SECTION"
 The
 .B shell
-- 
1.8.5.1

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


Re: [PATCH 01/12] Fixes to parse_options

2014-08-19 Thread Bill Spitzak


On 08/19/2014 02:18 AM, Pekka Paalanen wrote:


Multiple single-letter booleans in one switch allowed, ie
-xyz is the same as -x -y -z. For wayland modules they all have
to belong to the same module.


This was not accepted before, right? It is confusing that one needs to
know that they are from the same module, so I'd rather just not accept
combined single letter booleans at all.


It may have been suggested by somebody else? And then rejected? I'll 
remove this, it's not a big deal.



Previous version could use text after the null at the end of
an argv entry. Now requires the = sign.


What does this mean? I mean, how could one have ever used the old
behaviour? Nothing comes to my mind, so I suppose that is ok.


The old code basically did *(string+strlen(string)+1) if the string did 
not have an = sign in it, passing that pointer to the argument parser.
Probably this always fails parsing without a segfault but technically it 
is wrong, it could segfault, or it could get some text at that point 
that actually parses, producing an unexpected value.



There are some style issues. First is the patch subject, it should be
prefixed with the component the patch is touching. To get a feeling
what the components are, look at the git-log of the file your are
changing, and there should be a pattern.


I see, there is a "name:" at the start of the description line. I missed 
that, I was only adding the git repository if it was not weston to 
[PATCH repository]. Also looks like things like V2 should be between the 
square brackets.



Though, I see that option-parser.c doesn't really have any pattern. Oh
well, "shared:" should do then.


Or the demo programs, or startup.


More style issues below.


Will try to address these.
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH 1/2] evdev: turn off all the leds at startup

2014-08-19 Thread Giulio Camuffo
the internal state in xkbcommon is off for all the three leds, so
make them be in sync.
---
 src/evdev.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/src/evdev.c b/src/evdev.c
index 888dfbd..a46ed87 100644
--- a/src/evdev.c
+++ b/src/evdev.c
@@ -581,6 +581,7 @@ evdev_configure_device(struct evdev_device *device)
device->seat_caps |= EVDEV_SEAT_KEYBOARD;
weston_log("input device %s, %s is a keyboard\n",
   device->devname, device->devnode);
+   evdev_led_update(device, 0);
}
if (has_touch && !has_button) {
weston_seat_init_touch(device->seat);
-- 
2.0.4

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


[PATCH 2/2] compositor: add a way to change the keyboard leds

2014-08-19 Thread Giulio Camuffo
This adds a function weston_keyboard_set_leds() which can be used
to change the state of the num lock and the caps lock leds.
Only the evdev backend supports this, since it doesn't make sense
for embedded sessions.
---
 src/compositor.h |  3 +++
 src/input.c  | 43 +++
 2 files changed, 46 insertions(+)

diff --git a/src/compositor.h b/src/compositor.h
index c0fc0a6..0c5c98a 100644
--- a/src/compositor.h
+++ b/src/compositor.h
@@ -393,6 +393,9 @@ weston_keyboard_start_grab(struct weston_keyboard *device,
   struct weston_keyboard_grab *grab);
 void
 weston_keyboard_end_grab(struct weston_keyboard *keyboard);
+int
+weston_keyboard_set_leds(struct weston_keyboard *keyboard,
+enum weston_led leds, enum weston_led active);
 
 struct weston_touch *
 weston_touch_create(void);
diff --git a/src/input.c b/src/input.c
index 1ab55ce..d0637b8 100644
--- a/src/input.c
+++ b/src/input.c
@@ -1064,6 +1064,49 @@ notify_axis(struct weston_seat *seat, uint32_t time, 
uint32_t axis,
 value);
 }
 
+WL_EXPORT int
+weston_keyboard_set_leds(struct weston_keyboard *keyboard,
+enum weston_led leds, enum weston_led active)
+{
+   /* We don't want the leds to go out of sync with the actual state
+* so if the backend has no way to change the leds don't try to
+* change the state */
+   if (!keyboard->seat->led_update)
+   return -1;
+
+   uint32_t mods_depressed, mods_latched, mods_locked, group;
+   uint32_t serial;
+   int num, caps;
+   mods_depressed = xkb_state_serialize_mods(keyboard->xkb_state.state,
+   XKB_STATE_DEPRESSED);
+   mods_latched = xkb_state_serialize_mods(keyboard->xkb_state.state,
+   XKB_STATE_LATCHED);
+   mods_locked = xkb_state_serialize_mods(keyboard->xkb_state.state,
+   XKB_STATE_LOCKED);
+   group = xkb_state_serialize_group(keyboard->xkb_state.state,
+  XKB_STATE_EFFECTIVE);
+
+   num = (1 << keyboard->xkb_info->mod2_mod);
+   caps = (1 << keyboard->xkb_info->caps_mod);
+   if (leds & LED_NUM_LOCK)
+   mods_locked = (active & LED_NUM_LOCK) ? mods_locked | num
+ : mods_locked & ~num;
+   if (leds & LED_CAPS_LOCK)
+   mods_locked = (active & LED_CAPS_LOCK) ? mods_locked | caps
+  : mods_locked & ~caps;
+   if (leds & LED_SCROLL_LOCK)
+   weston_log("Changing the LED_SCROLL_LOCK value is not 
supported.");
+
+   xkb_state_update_mask(keyboard->xkb_state.state, mods_depressed,
+ mods_latched, mods_locked, 0, 0, group);
+
+   serial = wl_display_next_serial(
+   keyboard->seat->compositor->wl_display);
+   notify_modifiers(keyboard->seat, serial);
+
+   return 0;
+}
+
 #ifdef ENABLE_XKBCOMMON
 WL_EXPORT void
 notify_modifiers(struct weston_seat *seat, uint32_t serial)
-- 
2.0.4

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


[ANNOUNCE] libxkbcommon 0.4.3

2014-08-19 Thread Ran Benita
A new release of libxkbcommon, containing mostly bug-fixes.

libxkbcommon 0.4.3 - 2014-08-19
==

- Fixed a bug which caused xkb_x11_keymap_new_from_device() to misrepresent
  modifiers for some keymaps.

  https://github.com/xkbcommon/libxkbcommon/issues/9

- Fixed a bug which caused xkb_x11_keymap_new_from_device() to ignore XKB
  PrivateAction's.

- Modifiers are now always fully resolved after xkb_state_update_mask().
  Previously the given state components were used as-is, without
  considering virtual modifier mappings.
  Note: this only affects non-standard uses of xkb_state_update_mask().

- Added a test for xkbcommon-x11, "x11comp". The test uses the system's
  Xvfb server and xkbcomp. If they do not exist or fail, the test is
  skipped.

- Fixed memory leaks after parse errors in the XKB yacc parser.
  The fix required changes which are currently incompatible with byacc.

  https://github.com/xkbcommon/libxkbcommon/issues/8


Tarballs:


git tag: xkbcommon-0.4.3

http://xkbcommon.org/download/libxkbcommon-0.4.3.tar.xz
MD5:  26c57ff21438ed45de2a4ca609177db9  libxkbcommon-0.4.3.tar.xz
SHA1: 2251adc7425c816ec7af4f1c3776a619a53293b6 libxkbcommon-0.4.3.tar.xz

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


Re: [PATCH weston] configure.ac: use libinput by default

2014-08-19 Thread Jonas Ådahl
On Tue, Aug 19, 2014 at 09:46:55AM -0700, Jason Ekstrand wrote:
> Reviewed-by: Jason Ekstrand 
> 

Acked-by: Jonas Ådahl 

> 
> On Tue, Aug 19, 2014 at 3:13 AM, Pekka Paalanen  wrote:
> 
> > From: Pekka Paalanen 
> >
> > Libinput is stabilizing soon, so let's flip the default switch now. The
> > old input code will still be carried as an option for a while.
> >
> > Cc: Peter Hutterer 
> > Cc: Jonas Ådahl 
> > Signed-off-by: Pekka Paalanen 
> > ---
> >  configure.ac | 4 ++--
> >  1 file changed, 2 insertions(+), 2 deletions(-)
> >
> > diff --git a/configure.ac b/configure.ac
> > index 354db14..bc5c88a 100644
> > --- a/configure.ac
> > +++ b/configure.ac
> > @@ -155,8 +155,8 @@ if test x$enable_drm_compositor = xyes; then
> >  fi
> >
> >
> > -AC_ARG_ENABLE(libinput-backend, [  --enable-libinput-backend],,
> > - enable_libinput_backend=no)
> > +AC_ARG_ENABLE(libinput-backend, [  --disable-libinput-backend],,
> > + enable_libinput_backend=yes)
> >  AM_CONDITIONAL([ENABLE_LIBINPUT_BACKEND], [test x$enable_libinput_backend
> > = xyes])
> >  if test x$enable_libinput_backend = xyes; then
> >AC_DEFINE([BUILD_LIBINPUT_BACKEND], [1], [Build the libinput input
> > device backend])
> > --
> > 1.8.5.5
> >
> > ___
> > 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: [PATCH wayland v2] protocol: define the concept of wl_surface role

2014-08-19 Thread Jason Ekstrand
Pekka,
I have one nitpick below.  However, if we can't find a good solution, I'm
ok with pushing as-is.

Reviewed-by: Jason Ekstrand 


On Tue, Aug 19, 2014 at 1:41 AM, Pekka Paalanen  wrote:

> On Tue, 19 Aug 2014 10:29:21 +0300
> Pekka Paalanen  wrote:
>
> > From: Pekka Paalanen 
> >
> > Define what a role is, and what restrictions there are.
> >
> > A change to existing behaviour is that a role cannot be changed at all
> > once set. However, this is unlikely to cause problems, as there is no
> > reason to re-use wl_surfaces in clients.
> >
> > v2: give more concrete examples of roles, define losing a role, Jasper
> > rewrote the paragraph on how a role is set.
> >
> > Signed-off-by: Pekka Paalanen 
> > ---
> >  protocol/wayland.xml | 26 --
> >  1 file changed, 24 insertions(+), 2 deletions(-)
> >
> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> > index 2d57f69..d3fcaec 100644
> > --- a/protocol/wayland.xml
> > +++ b/protocol/wayland.xml
> > @@ -973,8 +973,30 @@
> >local coordinates of the pixel content, in case a buffer_transform
> >or a buffer_scale is used.
> >
> > -  Surfaces are also used for some special purposes, e.g. as
> > -  cursor images for pointers, drag icons, etc.
> > +  A surface without a "role" is fairly useless, a compositor does
> > +  not know where, when or how to present it. The role is the
> > +  purpose of a wl_surface. Examples of roles are a cursor for a
> > +  pointer (as set by wl_pointer.set_cursor), a drag icon
> > +  (wl_data_device.start_drag), a sub-surface
> > +  (wl_subcompositor.get_subsurface), and a window as defined by a
> > +  shell protocol (e.g. wl_shell.get_shell_surface).
> > +
> > +  A surface can have only one role at a time. Initially a
> > +  wl_surface does not have a role. Once a wl_surface is given a
> > +  role, it can never be given a different role again, even if the
> > +  wl_surface loses the role in between.
>

I don't really like the term "looses its role".  Once a surface is a
"cursor surface" it is always a cursor surface, it just might not be the
*current* currsor surface.  How about:

"A surface can only have one role in its lifetime.  Even if the surface
stops being actively used in its role, it can never be used in any other
role.  For instance, once you call wl_pointer.set_cursor on a surface, the
surface is now a "cursor surface".  Even if it stops being the active
cursor, the wl_surface object retains the "cursor" role cannot be used in a
different role."

Thoughts?


> > +
> > +  Surface roles are set by requests in other interfaces such as
>
> Bah... forgot to save one tiny change:
>
> "Surface roles are given by ..."
> ---^
>
> Thanks,
> pq
>
> > +  wl_pointer.set_cursor. The request should explicitly mention
> > +  that this request gives a role to a wl_surface. Often, this
> > +  request also creates a new protocol object that represents the
> > +  role and adds additional functionality to wl_surface. When a
> > +  client wants to destroy a wl_surface, they must destroy this 'role
> > +  object' before the wl_surface.
> > +
> > +  A wl_surface may lose its role as specified in the interface
> > +  that gave it the role or in the interface of the role object.
> > +  Losing a role means losing all the role-specific state.
> >  
> >
> >  
>
> ___
> 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: [PATCH weston] configure.ac: use libinput by default

2014-08-19 Thread Jason Ekstrand
Reviewed-by: Jason Ekstrand 


On Tue, Aug 19, 2014 at 3:13 AM, Pekka Paalanen  wrote:

> From: Pekka Paalanen 
>
> Libinput is stabilizing soon, so let's flip the default switch now. The
> old input code will still be carried as an option for a while.
>
> Cc: Peter Hutterer 
> Cc: Jonas Ådahl 
> Signed-off-by: Pekka Paalanen 
> ---
>  configure.ac | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/configure.ac b/configure.ac
> index 354db14..bc5c88a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -155,8 +155,8 @@ if test x$enable_drm_compositor = xyes; then
>  fi
>
>
> -AC_ARG_ENABLE(libinput-backend, [  --enable-libinput-backend],,
> - enable_libinput_backend=no)
> +AC_ARG_ENABLE(libinput-backend, [  --disable-libinput-backend],,
> + enable_libinput_backend=yes)
>  AM_CONDITIONAL([ENABLE_LIBINPUT_BACKEND], [test x$enable_libinput_backend
> = xyes])
>  if test x$enable_libinput_backend = xyes; then
>AC_DEFINE([BUILD_LIBINPUT_BACKEND], [1], [Build the libinput input
> device backend])
> --
> 1.8.5.5
>
> ___
> 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: [PATCH wayland] client: add a public function to make a roundtrip on a custom queue

2014-08-19 Thread Jason Ekstrand
On Tue, Aug 19, 2014 at 3:58 AM, Pekka Paalanen  wrote:

> On Wed, 16 Jul 2014 11:13:06 +0300
> Giulio Camuffo  wrote:
>
> > 2014-07-15 20:39 GMT+03:00 Daniel Stone :
> > > Hi,
> > >
> > >
> > > On Tuesday, July 15, 2014, Giulio Camuffo 
> wrote:
> > >>
> > >> 2014-07-14 22:31 GMT+03:00 Jason Ekstrand :
> > >> > Guilio,
> > >> > Would it be better to name it wl_event_queue_roundtrip and just
> have it
> > >> > take
> > >> > the wl_event_queue?  I guess it is sort-of a wl_display operation,
> but
> > >> > you
> > >> > could argue it either way.  Thoughts?
> > >>
> > >> You have a point here, it makes more sense.
> > >
> > >
> > > TBH I'd rather steer clear of that nomenclature, since the 'queue' in
> an
> > > immediate request context implies delayed dispatch, rather than on a
> queue.
> >
> > I didn't realize you could read it as "queue a roundtrip on a
> > wl_event". I think that the meaning is quite obvious once you know
> > that there is a wl_event_queue type in Wayland.
>
> Hi,
>
> hm, that's a tricky one. Yes, the name wl_event_queue_roundtrip() is
> confusing when out of context, but as the argument is a wl_event_queue,
> that name is the logical and unfortunate result.
>
> Another problem with wl_display_roundtrip_queue() is that it gets both
> wl_display and wl_event_queue as arguments. Therefore the function
> would need to check that the wl_event_queue indeed belongs to the given
> wl_display. It's just a thing one can get wrong, and it has no benefits
> that I see.
>
> wl_display_roundtrip_queue() taking only wl_event_queue as an argument
> would be strange, because the name implies a wl_display method.
>
> (Up until this point, I would have agreed with Giulio and Jason...)
>
> But, now I see, that we already have:
>
> int wl_display_dispatch_queue(struct wl_display *display,
>   struct wl_event_queue *queue);
> int wl_display_dispatch_queue_pending(struct wl_display *display,
>   struct wl_event_queue *queue);
> int wl_display_prepare_read_queue(struct wl_display *display,
>   struct wl_event_queue *queue);
>
> So there is precendent, that redundant arguments are ok, and
> wl_display_roundtrip_queue() would indeed follow the existing scheme.
>
> Btw. I do not see anywhere, where the libwayland-client code would be
> checking that the wl_display and the wl_event_queue would actually be
> related. Would be a good thing to add more checks to the public API
> functions for that.
>
> I think I would go with wl_display_roundtrip_queue() here. Would you
> agree?
>

Yeah, you've convinced me.  I don't like the name (and, by extension, don't
like the others) but it goes better with the current API.  Let's go with
that.
--Jason


>
>
> Thanks,
> pq
>
> > >> > On Mon, Jul 14, 2014 at 7:15 AM, Giulio Camuffo
> > >> > 
> > >> > wrote:
> > >> >>
> > >> >> wl_display_roundtrip() works on the default queue. Add a parallel
> > >> >> wl_display_roundtrip_queue().
> > >> >> ---
> > >> >>
> > >> >> v3: fixed dispatch call in place of dispatch_queue
> > >> >> documented the queue parameter
> > >> >>  src/wayland-client.c | 24 +---
> > >> >>  src/wayland-client.h |  2 ++
> > >> >>  2 files changed, 23 insertions(+), 3 deletions(-)
> > >> >>
> > >> >> diff --git a/src/wayland-client.c b/src/wayland-client.c
> > >> >> index e8aab7e..d2c1b5c 100644
> > >> >> --- a/src/wayland-client.c
> > >> >> +++ b/src/wayland-client.c
> > >> >> @@ -834,15 +834,16 @@ static const struct wl_callback_listener
> > >> >> sync_listener = {
> > >> >>  /** Block until all pending request are processed by the server
> > >> >>   *
> > >> >>   * \param display The display context object
> > >> >> + * \param queue The queue on which to run the roundtrip
> > >> >>   * \return The number of dispatched events on success or -1 on
> failure
> > >> >>   *
> > >> >>   * Blocks until the server process all currently issued requests
> and
> > >> >> - * sends out pending events on all event queues.
> > >> >> + * sends out pending events on the event queue.
> > >> >>   *
> > >> >>   * \memberof wl_display
> > >> >>   */
> > >> >>  WL_EXPORT int
> > >> >> -wl_display_roundtrip(struct wl_display *display)
> > >> >> +wl_display_roundtrip_queue(struct wl_display *display, struct
> > >> >> wl_event_queue *queue)
> > >> >>  {
> > >> >> struct wl_callback *callback;
> > >> >> int done, ret = 0;
> > >> >> @@ -851,9 +852,10 @@ wl_display_roundtrip(struct wl_display
> *display)
> > >> >> callback = wl_display_sync(display);
> > >> >> if (callback == NULL)
> > >> >> return -1;
> > >> >> +   wl_proxy_set_queue(callback, queue);
> > >> >> wl_callback_add_listener(callback, &sync_listener, &done);
> > >> >> while (!done && ret >= 0)
> > >> >> -   ret = wl_display_dispatch(display);
> > >> >> +   ret = wl_display_dispatch_queue(display, queue);
> > >> >>
> > >> 

RE: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Eoff, Ullysses A
> -Original Message-
> From: Pekka Paalanen [mailto:ppaala...@gmail.com]
> Sent: Monday, August 18, 2014 4:36 AM
> To: wayland-devel@lists.freedesktop.org; krh@
> Cc: Eoff, Ullysses A; Peter Hutterer; Jasper St. Pierre
> Subject: The road to Wayland/Weston 1.6 and 1.5.1
> 
> Hi all,
> 
> in the release announcement of 1.5.0[1] it was said that the alpha
> release towards 1.6 should come out mid-August. That time is now, so
> how about we target Friday, Aug 22nd (European time)?
> 

Just wanted you to know I'm still following the project, albeit quite
silently these days due to other tasks ;).  Nonetheless, my test team is
ready to ramp up our usual manual testing for this 1.6 release cycle.
Our in-house automated builds and tests have still been running and
continue to run without issue.

I want to make sure we stay synced up during each phase of this
release cycle.  As you know, it takes us about 3-4 days to complete a
manual test run... this includes execution, reflection, and reporting.
As long as you plan to continue the usual 1 week phases for each
alpha (1.5.91), beta 1 (1.5.92) and beta 2 (1.5.93) then we should be
able to keep up.

We don't have plans to add any new test cases to our manual test
set this time.  So our testing will only be regression testing, essentially.
Also, our testing only covers the DRM (w/libinput) and X11 backends
using the Desktop shell (w/cairo-glesv2) on specific Intel-based
hardware.  If there are new features and/or other recipes (hardware,
backends, etc.) then I trust others will cover those.

Cheers :),

U. Artie
Intel Open Source Technology Center

> I know the review process has been lagging behind badly, and we
> probably won't see e.g. IVI-shell merged for 1.6, but I try to do what
> I can. What major features have been forgotten on the mailing list
> unmerged, that you would like to see included in 1.6?
> 
> I can't promise anything, and I know at least none of my new features
> (Presentation extension, new repaint scheduling algorithm, repaint
> timeline logging, DRM universal planes & nuclear pageflip support,
> linux_dmabuf protocol sketch, and some smaller things) brewing in my
> personal 'next' branch will not make it.
> 
> Obviously a stable first version of xdg_shell would be great to see in
> 1.6, but we shall see if we can beat it into shape in time. When I
> reviewed the XML spec not long ago, it was close but not ready in my
> opinion.
> 
> When xdg_shell does stabilize, we will move xdg_shell.xml into Wayland
> repository and it will be installed, but all build-time users of it must
> generate their own wrappers with wayland-scanner or equivalent. This
> means that libwayland-client will not contain any xdg_shell symbols or
> headers pre-generated. I asked Kristian and he was ok with this plan,
> and I have also talked a little on #wayland-devel, that maybe this
> would be a good idea. If this turns out a bad idea, we can always fix
> it later. Doing it the other way around would be near impossible.
> 
> Should we make libinput the default for 1.6, so that in 1.7 we can
> remove the old input code, or is libinput API still too much in flux?
> 
> 
> Also, it was said that 1.5.1 should have come out in "a few weeks" and
> it has been 3 months now. I will try and check the patches already in
> 'master' of both Wayland and Weston and pick them to the 1.5 branches,
> but if you know of patches that should be in stable, especially ones
> without review or not in 'master', let me know and I try do something.
> My selection, especially for Wayland, will probably be very
> conservative, though, as my priority is 1.6.
> 
> 
> Thanks,
> pq
> 
> [1]
> http://lists.freedesktop.org/archives/wayland-devel/2014-May/014955.html
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH libinput] evdev: allow weird multitouch device without slots

2014-08-19 Thread Leonid Borisenko
2014-08-19 10:02 GMT+03:00 Peter Hutterer :

> On Tue, Aug 19, 2014 at 06:29:40AM +0300, Leonid Borisenko wrote:
> > HID device 'USB HID v1.11 Mouse' provided by Microsoft Wireless Optical
> > Desktop=C2=AE 2.20 (connected to USB and identified as vendor 0x45e, pr=
oduct
> > 0xe3, version 0x111) is reported as supporting EV_ABS event with
> ABS_MT_SLOT
> > code, but nevertheless libevdev_get_num_slots returns -1.
>
> yeah, that's intentional. libevdev detects those devices (through
> guesswork,
> but still...) and returns -1 as slot number.
>
> > Furthermore, all connected devices (mouse and keyboard) don't produce a=
ny
> > EV_ABS events for that HID Mouse device in tests with evtest.
> >
> > Before this fix mouse didn't work in Weston (but worked in X.Org).
> >
> > As partially explained by LKML message [1] (Message-Id [2]):
> >
> > The root of the problem comes from hid-input, which maps unknown ax=
is
> > to ABS_MISC. However, when an event code is already in use, hid-inp=
ut
> > uses the one after, leading to uses of ABS_MISC + N, where N is the
> > number of unknown axis.
> >
> > We are encountering a problem with the multitouch protocol here
> because
> > if a device has more than 7 unknown axis (which is the case for the
> PS3
> > Sixaxis controller), then the unknown axis get maps to ABS_MT_SLOT
> and
> > beyond.
> >
> > [1] https://lkml.org/lkml/2013/11/20/515
> > [2] 1384983141-31019-1-git-send-email-benjamin.tissoi...@redhat.com
> >
> > [...]
>
> so, as I said above the libevdev behaviour is intentional and our
> indicator
> that this isn't a MT device after all. We should integrate that knowledge
> better so that we don't label a device as touch device when it isn't, and
> so
> that we process events from those axes as normal ABS events instead of MT
> events.

Unfortunately, my device (that Wireless Optical Desktop) doesn't produce
any events with the questionable codes, so if I would try to change
libinput behavior for these events to produce visible reaction, I'll not be
able to test changes for sanity.

I understand that my patch isn't general enough. It fixes my problem.
though, making mouse working in Weston. Current libinput code isn't
forgiving enough in handling of similar devices, so it cripples experience.
I'm not complaining, it's v0.5, so missing functionality is acceptable, but
it's frustrating.

I will file a bug report in hope that someone will propose more general fix=
.
As a sidenote, cited LKML message says that "the axis currently mapped on
ABS_MT_SLOT is a special case in the kernel,
and it is not updated", so I think processing axes as normal ABS events
will not work for the axis reported as ABS_MT_SLOT.

[Peter, sorry for spamming with this message in personal mail, it was my
unintentional mistake in using Gmail UI.]
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH weston 2/2] xwm: check whether the picked seat can be NULL

2014-08-19 Thread Boyan Ding
On Tue, 2014-08-19 at 16:53 +0300, Pekka Paalanen wrote:
> I was not able to reproduce the crash without the patch, and using
> gnome-terminal, either.
Actually I'm also curious about how is the problem triggered, and I
reproduced it on my machine just now. And I'm even more astonished to
see this [1], though I can't reproduce it myself. It said that the
picked seat can be NULL even in weston_wm_handle_button! I guess
somewhere might be wrong in X (just a wild guess).

Cheers,
Boyan Ding
[1] https://bugs.archlinux.org/task/41456



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


[PATCH v2 1/2] Remove duplicated code from cliptest.c

2014-08-19 Thread Ondřej Majerech
Signed-off-by: Ondřej Majerech 
---
 Makefile.am|   2 +-
 clients/cliptest.c | 293 +
 2 files changed, 4 insertions(+), 291 deletions(-)

diff --git a/Makefile.am b/Makefile.am
index 191dcc9..8a27d44 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -476,7 +476,7 @@ weston_image_SOURCES = clients/image.c
 weston_image_LDADD = libtoytoolkit.la
 weston_image_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
 
-weston_cliptest_SOURCES = clients/cliptest.c
+weston_cliptest_SOURCES = clients/cliptest.c src/vertex-clipping.c
 weston_cliptest_CFLAGS = $(AM_CFLAGS) $(CLIENT_CFLAGS)
 weston_cliptest_LDADD = libtoytoolkit.la
 
diff --git a/clients/cliptest.c b/clients/cliptest.c
index 907c5d4..af7bff1 100644
--- a/clients/cliptest.c
+++ b/clients/cliptest.c
@@ -49,6 +49,7 @@
 #include 
 #include 
 
+#include "src/vertex-clipping.h"
 #include "window.h"
 
 typedef float GLfloat;
@@ -81,269 +82,6 @@ weston_surface_to_global_float(struct weston_surface 
*surface,
*y = -g->s * sx + g->c * sy;
 }
 
-/* -- copied begins ---*/
-
-struct polygon8 {
-   GLfloat x[8];
-   GLfloat y[8];
-   int n;
-};
-
-struct clip_context {
-   struct {
-   GLfloat x;
-   GLfloat y;
-   } prev;
-
-   struct {
-   GLfloat x1, y1;
-   GLfloat x2, y2;
-   } clip;
-
-   struct {
-   GLfloat *x;
-   GLfloat *y;
-   } vertices;
-};
-
-static GLfloat
-float_difference(GLfloat a, GLfloat b)
-{
-   /* 
http://www.altdevblogaday.com/2012/02/22/comparing-floating-point-numbers-2012-edition/
 */
-   static const GLfloat max_diff = 4.0f * FLT_MIN;
-   static const GLfloat max_rel_diff = 4.0e-5;
-   GLfloat diff = a - b;
-   GLfloat adiff = fabsf(diff);
-
-   if (adiff <= max_diff)
-   return 0.0f;
-
-   a = fabsf(a);
-   b = fabsf(b);
-   if (adiff <= (a > b ? a : b) * max_rel_diff)
-   return 0.0f;
-
-   return diff;
-}
-
-/* A line segment (p1x, p1y)-(p2x, p2y) intersects the line x = x_arg.
- * Compute the y coordinate of the intersection.
- */
-static GLfloat
-clip_intersect_y(GLfloat p1x, GLfloat p1y, GLfloat p2x, GLfloat p2y,
-GLfloat x_arg)
-{
-   GLfloat a;
-   GLfloat diff = float_difference(p1x, p2x);
-
-   /* Practically vertical line segment, yet the end points have already
-* been determined to be on different sides of the line. Therefore
-* the line segment is part of the line and intersects everywhere.
-* Return the end point, so we use the whole line segment.
-*/
-   if (diff == 0.0f)
-   return p2y;
-
-   a = (x_arg - p2x) / diff;
-   return p2y + (p1y - p2y) * a;
-}
-
-/* A line segment (p1x, p1y)-(p2x, p2y) intersects the line y = y_arg.
- * Compute the x coordinate of the intersection.
- */
-static GLfloat
-clip_intersect_x(GLfloat p1x, GLfloat p1y, GLfloat p2x, GLfloat p2y,
-GLfloat y_arg)
-{
-   GLfloat a;
-   GLfloat diff = float_difference(p1y, p2y);
-
-   /* Practically horizontal line segment, yet the end points have already
-* been determined to be on different sides of the line. Therefore
-* the line segment is part of the line and intersects everywhere.
-* Return the end point, so we use the whole line segment.
-*/
-   if (diff == 0.0f)
-   return p2x;
-
-   a = (y_arg - p2y) / diff;
-   return p2x + (p1x - p2x) * a;
-}
-
-enum path_transition {
-   PATH_TRANSITION_OUT_TO_OUT = 0,
-   PATH_TRANSITION_OUT_TO_IN = 1,
-   PATH_TRANSITION_IN_TO_OUT = 2,
-   PATH_TRANSITION_IN_TO_IN = 3,
-};
-
-static void
-clip_append_vertex(struct clip_context *ctx, GLfloat x, GLfloat y)
-{
-   *ctx->vertices.x++ = x;
-   *ctx->vertices.y++ = y;
-}
-
-static enum path_transition
-path_transition_left_edge(struct clip_context *ctx, GLfloat x, GLfloat y)
-{
-   return ((ctx->prev.x >= ctx->clip.x1) << 1) | (x >= ctx->clip.x1);
-}
-
-static enum path_transition
-path_transition_right_edge(struct clip_context *ctx, GLfloat x, GLfloat y)
-{
-   return ((ctx->prev.x < ctx->clip.x2) << 1) | (x < ctx->clip.x2);
-}
-
-static enum path_transition
-path_transition_top_edge(struct clip_context *ctx, GLfloat x, GLfloat y)
-{
-   return ((ctx->prev.y >= ctx->clip.y1) << 1) | (y >= ctx->clip.y1);
-}
-
-static enum path_transition
-path_transition_bottom_edge(struct clip_context *ctx, GLfloat x, GLfloat y)
-{
-   return ((ctx->prev.y < ctx->clip.y2) << 1) | (y < ctx->clip.y2);
-}
-
-static void
-clip_polygon_leftright(struct clip_context *ctx,
-  enum path_transition transition,
-  GLfloat x, GLfloat y, GLfloat clip_x)
-{
-   GLfloat yi;
-
-   switch (transition) {
-   case PATH_TRANSITION_IN_TO_IN:
-   clip_append_vertex(ctx, x, y);

[PATCH v2 2/2] Don't underrun the vertex array of empty polygons

2014-08-19 Thread Ondřej Majerech
This silences the following warning:
  src/vertex-clipping.c:196:22: warning: array subscript is below array
  bounds [-Warray-bounds]
ctx->prev.x = src->x[src->n - 1];

Signed-off-by: Ondřej Majerech 
---
 src/vertex-clipping.c | 12 
 1 file changed, 12 insertions(+)

diff --git a/src/vertex-clipping.c b/src/vertex-clipping.c
index db527e1..2bb8c0a 100644
--- a/src/vertex-clipping.c
+++ b/src/vertex-clipping.c
@@ -206,6 +206,9 @@ clip_polygon_left(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n < 2)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_left_edge(ctx, src->x[i], src->y[i]);
@@ -222,6 +225,9 @@ clip_polygon_right(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n < 2)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_right_edge(ctx, src->x[i], src->y[i]);
@@ -238,6 +244,9 @@ clip_polygon_top(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n < 2)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_top_edge(ctx, src->x[i], src->y[i]);
@@ -254,6 +263,9 @@ clip_polygon_bottom(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n < 2)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_bottom_edge(ctx, src->x[i], src->y[i]);
-- 
2.0.4

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


Re: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Pekka Paalanen
On Mon, 18 Aug 2014 20:55:52 +0800
Boyan Ding  wrote:

> Hi,
> 
> On Mon, 2014-08-18 at 14:35 +0300, Pekka Paalanen wrote:
> > Hi all,
> > 
> > in the release announcement of 1.5.0[1] it was said that the alpha
> > release towards 1.6 should come out mid-August. That time is now, so
> > how about we target Friday, Aug 22nd (European time)?
> > 
> [...]
> > 
> > Also, it was said that 1.5.1 should have come out in "a few weeks" and
> > it has been 3 months now. I will try and check the patches already in
> > 'master' of both Wayland and Weston and pick them to the 1.5 branches,
> > but if you know of patches that should be in stable, especially ones
> > without review or not in 'master', let me know and I try do something.
> > My selection, especially for Wayland, will probably be very
> > conservative, though, as my priority is 1.6.
> 
> There are two patches for xwayland part in weston that has stood for
> quite a while:
> http://lists.freedesktop.org/archives/wayland-devel/2014-July/015885.html
> http://lists.freedesktop.org/archives/wayland-devel/2014-July/015886.html
> with the first one being a little feature and the second one
> a simple bugfix.
> 
> Also another patch that doesn't got reviewed but quite important:
> http://lists.freedesktop.org/archives/wayland-devel/2014-August/016307.html
> It should follow c4902124 and 9c5aedff in master (and also in 1.5
> branch) but I left that out then.

All three adressed, I think.

Feel free to poke me again when I start asking about what I forgot from
the stable branches. I'd like to let things live a bit in master, if at
all possible.


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


Re: [PATCH weston 00/19] Basic tablet support in Weston

2014-08-19 Thread Pekka Paalanen
On Tue, 19 Aug 2014 13:21:54 +0200
Jonas Ådahl  wrote:

> On Tue, Aug 19, 2014 at 01:03:52PM +0300, Pekka Paalanen wrote:
> > On Wed,  6 Aug 2014 19:07:50 -0400
> > Stephen Chandler Paul  wrote:
> > 
> > > Hi! As some of you have been aware, I have been working on implementing 
> > > tablet
> > > ssupport in libinput, the wayland protocol and weston. This patchset adds 
> > > basic
> > > tablet support to weston, along with support in the shell and the window
> > > manager. It should be noted that these patches rely on one of the earlier
> > > patches to libinput that I posted on the mailing list: "tablet: Add
> > > libinput_tablet_has_axis()", along with the tablet-support branch in the 
> > > git repository for libinput.
> > > 
> > > As of right now, the following things are still missing/haven't been 
> > > finished
> > > yet:
> > > * Tablet objects don't ever send a removed event, right now it's up to the
> > >   clients to free the resources for each tool object.
> > > * Tablet tool objects should be separate for each tablet connected that 
> > > doesn't
> > >   report serial numbers. Right now tablet objects are shared by all 
> > > tablets
> > >   connected to the system unconditionally.
> > > * The tablet cursor disappears occasionally when moving a window and 
> > > causing
> > >   the mouse pointer to change images, but reappears the next time a 
> > > client sets
> > >   a cursor image.
> > > * weston-flower can crash the shell for some reason. It seems that if a 
> > > tablet
> > >   is turned on, and the first surface the tool comes into focus on 
> > > belongs to a
> > >   weston-flower instance, the desktop-shell runs into an error and exits. 
> > > I
> > >   haven't noticed this with anything other then weston-flower though.
> > > * Held down buttons are released when the tool changes focus from one 
> > > surface
> > >   to another, instead of being held down until they're released.
> > > * Some of the declarations for structs in my code might need to be moved
> > >   around, I'm not sure what the expected guidelines for this in weston's 
> > > code
> > >   are though.
> > > * A surface argument needs to be added to the proximity_out event, so we 
> > > can
> > >   tell if the tablet tool is leaving proximity to switch focus to another
> > >   surface, or if it's just exiting proximity.
> > > 
> > > Review/critique would be appreciated, thank you! ^^
> > > 
> > > Cheers,
> > >   Lyude
> > > 
> > > Stephen Chandler Paul (19):
> > >   tablet: Add XML for wl_tablet and wl_tablet_manager
> > >   tablet: Add initial tablet support to weston
> > >   client: Add support for handling motion events in toytoolkit
> > >   client: Add support for handling proximity_in/out events in
> > > libtoytoolkit
> > >   tablet: Add support for setting/changing the tablet cursor in weston
> > >   client: Add tablet cursor support into libtoytoolkit
> > >   tablet: Add support for tablet tool objects
> > >   client: Add support for tool objects in libtoytoolkit
> > >   client: Add support for tablet cursor motion to window frames in
> > > libtoytoolkit
> > >   tablet: Add support for button presses to weston
> > >   client: Add support for handling button presses to libtoytoolkit
> > >   tablet: Add support for up/down events to weston
> > >   client: Add up/down event support into libtoytoolkit
> > >   tablet: Add support for moving windows around using the stylus
> > >   tablet: Add support for reporting pressure, distance, and tilt in
> > > weston
> > >   client: Add support for pressure, distance, and tilt into
> > > libtoytoolkit
> > >   tablet: Add tablet support to the top panel of the desktop shell
> > >   tablet: Add binding to activate surfaces using the tablet tool
> > >   tablet: Add demo application for tablets
> > > 
> > >  .gitignore  |   1 +
> > >  Makefile.am |  23 +-
> > >  clients/desktop-shell.c |  55 
> > >  clients/tablet.c| 341 
> > >  clients/window.c| 607 
> > >  clients/window.h| 102 ++
> > >  desktop-shell/shell.c   | 282 +
> > >  protocol/wayland-tablet.xml | 310 +++
> > >  shared/cairo-util.h |   4 +
> > >  shared/frame.c  |  38 +++
> > >  src/bindings.c  |  37 +++
> > >  src/compositor.c|   1 +
> > >  src/compositor.h| 171 ++
> > >  src/input.c | 736 
> > > 
> > >  src/libinput-device.c   | 317 +++
> > >  src/libinput-device.h   |   4 +-
> > >  16 files changed, 3024 insertions(+), 5 deletions(-)
> > >  create mode 100644 clients/tablet.c
> > >  create mode 100644 protocol/wayland-tablet.xml
> > > 
> > 
> > Hi,
> > 
> > just a heads-up, do I get the right impression that this is not yet in
> > a shape to merge into Weston, so won't be included in 1.6?
> 

Re: [PATCH weston 2/2] xwm: check whether the picked seat can be NULL

2014-08-19 Thread Pekka Paalanen
On Sun,  6 Jul 2014 11:44:58 +0800
Boyan Ding  wrote:

> The seat picked in weston_wm_window_handle_moveresize can sometimes
> be NULL when it is (somehow) triggered with all buttons released.
> 
> This patch checks whether the seat is NULL to avoid NULL dereference.
> 
> Fixes: https://bugs.freedesktop.org/show_bug.cgi?id=80837
> Signed-off-by: Boyan Ding 
> ---
>  xwayland/window-manager.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c
> index f64ef94..6e74b89 100644
> --- a/xwayland/window-manager.c
> +++ b/xwayland/window-manager.c
> @@ -1250,8 +1250,8 @@ weston_wm_window_handle_moveresize(struct 
> weston_wm_window *window,
>   struct weston_shell_interface *shell_interface =
>   &wm->server->compositor->shell_interface;
>  
> - if (seat->pointer->button_count != 1 || !window->view
> - || seat->pointer->focus != window->view)
> + if (seat == NULL || seat->pointer->button_count != 1
> + || !window->view || seat->pointer->focus != window->view)
>   return;
>  
>   detail = client_message->data.data32[2];

Shouldn't hurt and I accidentally already pushed this. :-P

I was not able to reproduce the crash without the patch, and using
gnome-terminal, either.


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


Re: [PATCH weston] cairo-util: Draw solid titlebar for frames with only buttons

2014-08-19 Thread Pekka Paalanen
On Tue,  5 Aug 2014 15:22:04 +0800
Boyan Ding  wrote:

> Previously geometry was changed to leave space for titlebar if a frame
> has only buttons but no title. This patch fixes theme_render_frame to
> avoid transparent titlebar.
> 
> Signed-off-by: Boyan Ding 
> ---
>  shared/cairo-util.c | 8 +---
>  shared/cairo-util.h | 5 -
>  shared/frame.c  | 2 +-
>  3 files changed, 10 insertions(+), 5 deletions(-)
> 
> diff --git a/shared/cairo-util.c b/shared/cairo-util.c
> index 2a33249..26286c5 100644
> --- a/shared/cairo-util.c
> +++ b/shared/cairo-util.c
> @@ -28,6 +28,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include "cairo-util.h"
>  
> @@ -413,7 +414,8 @@ theme_destroy(struct theme *t)
>  void
>  theme_render_frame(struct theme *t,
>  cairo_t *cr, int width, int height,
> -const char *title, uint32_t flags)
> +const char *title, struct wl_list *buttons,
> +uint32_t flags)
>  {
>   cairo_text_extents_t extents;
>   cairo_font_extents_t font_extents;
> @@ -439,7 +441,7 @@ theme_render_frame(struct theme *t,
>   else
>   source = t->inactive_frame;
>  
> - if (title)
> + if (title || !wl_list_empty(buttons))
>   top_margin = t->titlebar_height;
>   else
>   top_margin = t->width;
> @@ -449,7 +451,7 @@ theme_render_frame(struct theme *t,
>   width - margin * 2, height - margin * 2,
>   t->width, top_margin);
>  
> - if (title) {
> + if (title || !wl_list_empty(buttons)) {
>   cairo_rectangle (cr, margin + t->width, margin,
>width - (margin + t->width) * 2,
>t->titlebar_height - t->width);
> diff --git a/shared/cairo-util.h b/shared/cairo-util.h
> index 4493b0d..fb25c34 100644
> --- a/shared/cairo-util.h
> +++ b/shared/cairo-util.h
> @@ -26,6 +26,8 @@
>  #include 
>  #include 
>  
> +#include 
> +
>  void
>  surface_flush_device(cairo_surface_t *surface);
>  
> @@ -69,7 +71,8 @@ theme_set_background_source(struct theme *t, cairo_t *cr, 
> uint32_t flags);
>  void
>  theme_render_frame(struct theme *t, 
>  cairo_t *cr, int width, int height,
> -const char *title, uint32_t flags);
> +const char *title, struct wl_list *buttons,
> +uint32_t flags);
>  
>  enum theme_location {
>   THEME_LOCATION_INTERIOR = 0,
> diff --git a/shared/frame.c b/shared/frame.c
> index 53f3f5f..5ea0e12 100644
> --- a/shared/frame.c
> +++ b/shared/frame.c
> @@ -853,7 +853,7 @@ frame_repaint(struct frame *frame, cairo_t *cr)
>  
>   cairo_save(cr);
>   theme_render_frame(frame->theme, cr, frame->width, frame->height,
> -frame->title, flags);
> +frame->title, &frame->buttons, flags);
>   cairo_restore(cr);
>  
>   wl_list_for_each(button, &frame->buttons, link)

Not sure how I'd test it, but it looks okay to me... pushed.


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


Re: [PATCH weston 1/2] xwm: Use cursor theme and size in weston.ini

2014-08-19 Thread Pekka Paalanen
On Sun,  6 Jul 2014 11:44:57 +0800
Boyan Ding  wrote:

> to make it consistent with native wayland apps
> 
> Signed-off-by: Boyan Ding 
> ---
>  xwayland/window-manager.c | 19 +++
>  1 file changed, 11 insertions(+), 8 deletions(-)
> 
> diff --git a/xwayland/window-manager.c b/xwayland/window-manager.c
> index 2fb65b1..f64ef94 100644
> --- a/xwayland/window-manager.c
> +++ b/xwayland/window-manager.c
> @@ -38,6 +38,7 @@
>  
>  #include "cairo-util.h"
>  #include "compositor.h"
> +#include "config-parser.h"
>  #include "hash.h"
>  
>  struct wm_size_hints {
> @@ -269,22 +270,24 @@ xcb_cursor_images_load_cursor(struct weston_wm *wm, 
> const XcursorImages *images)
>  static xcb_cursor_t
>  xcb_cursor_library_load_cursor(struct weston_wm *wm, const char *file)
>  {
> + struct weston_config *config;
> + struct weston_config_section *s;
>   xcb_cursor_t cursor;
>   XcursorImages *images;
> - char *v = NULL;
> + char *theme = NULL;
>   int size = 0;
>  
>   if (!file)
>   return 0;
>  
> - v = getenv ("XCURSOR_SIZE");
> - if (v)
> - size = atoi(v);
> + config = weston_config_parse("weston.ini");
> + s = weston_config_get_section(config, "shell", NULL, NULL);
> + weston_config_section_get_string(s, "cursor-theme", &theme, NULL);
> + weston_config_section_get_int(s, "cursor-size", &size, 32);
> + weston_config_destroy(config);
>  
> - if (!size)
> - size = 32;
> -
> - images = XcursorLibraryLoadImages (file, NULL, size);
> + images = XcursorLibraryLoadImages (file, theme, size);
> + free(theme);
>   if (!images)
>   return -1;
>  

Hi,

looks ok, but could you re-spin this so that you do not call
weston_config_parse() but use the already parsed
weston_compositor::config?

For an example, see 673a889fd88a70a9308d29bd6574f7c8c67da68d.


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


Re: [PATCH] cliptest: Don't underrun the vertex array of empty polygons.

2014-08-19 Thread Ondrej Majerech
On 19 August 2014 14:16, Pekka Paalanen  wrote:
> On Tue, 19 Aug 2014 13:10:55 +0200
> Ondřej Majerech  wrote:
>
>> This silences the following warning:
>>
>>   clients/cliptest.c:277:22: warning: array subscript is below array
>>   bounds [-Warray-bounds]
>> ctx->prev.x = src->x[src->n - 1];
>
> Hi,
>
> seems like I would need something more recent than gcc 4.6.4 to get
> these warnings, right?

I'm using GCC 4.9.1, so presumably yes. :)

>
> Do you not get these warnings from src/vertex-clipping.c too?

Ah, yes. Fresh rebuild gives me warnings from src/vertex-clipping.c as well.

>
> At minimum, could you patch both clients/cliptest.c and
> src/vertex-clipping.c in the same patch, and check that the duplicated
> code is identical.
>
> An even better alternative would be to just drop the duplicate code
> from cliptest.c, and make it somehow just use src/vertex-clipping.c
> and .h. I'm not sure how the build system would cope with that, but
> that would be excellent. So first remove duplication, then fix the
> issues.

indeed. I'll see what I can do about the duplication.

>
> Also, I think the correct condition would be:
> if (src->n < 2)
> return 0;
>
> Because if a polygon has less than 2 points, it's not a polygon that
> could even theoretically be clipped. The 2 points case also is
> denegerate, but least it has two lines that can be clipped.

You're right -- I was thinking more about buffers than geometry. :)

>
>
> Thanks,
> pq
>
>>
>> Signed-off-by: Ondřej Majerech 
>> ---
>>  clients/cliptest.c | 12 
>>  1 file changed, 12 insertions(+)
>>
>> diff --git a/clients/cliptest.c b/clients/cliptest.c
>> index 907c5d4..20b3776 100644
>> --- a/clients/cliptest.c
>> +++ b/clients/cliptest.c
>> @@ -287,6 +287,9 @@ clip_polygon_left(struct clip_context *ctx, const struct 
>> polygon8 *src,
>>   enum path_transition trans;
>>   int i;
>>
>> + if (src->n == 0)
>> + return 0;
>> +
>>   clip_context_prepare(ctx, src, dst_x, dst_y);
>>   for (i = 0; i < src->n; i++) {
>>   trans = path_transition_left_edge(ctx, src->x[i], src->y[i]);
>> @@ -303,6 +306,9 @@ clip_polygon_right(struct clip_context *ctx, const 
>> struct polygon8 *src,
>>   enum path_transition trans;
>>   int i;
>>
>> + if (src->n == 0)
>> + return 0;
>> +
>>   clip_context_prepare(ctx, src, dst_x, dst_y);
>>   for (i = 0; i < src->n; i++) {
>>   trans = path_transition_right_edge(ctx, src->x[i], src->y[i]);
>> @@ -319,6 +325,9 @@ clip_polygon_top(struct clip_context *ctx, const struct 
>> polygon8 *src,
>>   enum path_transition trans;
>>   int i;
>>
>> + if (src->n == 0)
>> + return 0;
>> +
>>   clip_context_prepare(ctx, src, dst_x, dst_y);
>>   for (i = 0; i < src->n; i++) {
>>   trans = path_transition_top_edge(ctx, src->x[i], src->y[i]);
>> @@ -335,6 +344,9 @@ clip_polygon_bottom(struct clip_context *ctx, const 
>> struct polygon8 *src,
>>   enum path_transition trans;
>>   int i;
>>
>> + if (src->n == 0)
>> + return 0;
>> +
>>   clip_context_prepare(ctx, src, dst_x, dst_y);
>>   for (i = 0; i < src->n; i++) {
>>   trans = path_transition_bottom_edge(ctx, src->x[i], src->y[i]);
>
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH] cliptest: Don't underrun the vertex array of empty polygons.

2014-08-19 Thread Pekka Paalanen
On Tue, 19 Aug 2014 13:10:55 +0200
Ondřej Majerech  wrote:

> This silences the following warning:
> 
>   clients/cliptest.c:277:22: warning: array subscript is below array
>   bounds [-Warray-bounds]
> ctx->prev.x = src->x[src->n - 1];

Hi,

seems like I would need something more recent than gcc 4.6.4 to get
these warnings, right?

Do you not get these warnings from src/vertex-clipping.c too?

At minimum, could you patch both clients/cliptest.c and
src/vertex-clipping.c in the same patch, and check that the duplicated
code is identical.

An even better alternative would be to just drop the duplicate code
from cliptest.c, and make it somehow just use src/vertex-clipping.c
and .h. I'm not sure how the build system would cope with that, but
that would be excellent. So first remove duplication, then fix the
issues.

Also, I think the correct condition would be:
if (src->n < 2)
return 0;

Because if a polygon has less than 2 points, it's not a polygon that
could even theoretically be clipped. The 2 points case also is
denegerate, but least it has two lines that can be clipped.


Thanks,
pq

> 
> Signed-off-by: Ondřej Majerech 
> ---
>  clients/cliptest.c | 12 
>  1 file changed, 12 insertions(+)
> 
> diff --git a/clients/cliptest.c b/clients/cliptest.c
> index 907c5d4..20b3776 100644
> --- a/clients/cliptest.c
> +++ b/clients/cliptest.c
> @@ -287,6 +287,9 @@ clip_polygon_left(struct clip_context *ctx, const struct 
> polygon8 *src,
>   enum path_transition trans;
>   int i;
>  
> + if (src->n == 0)
> + return 0;
> +
>   clip_context_prepare(ctx, src, dst_x, dst_y);
>   for (i = 0; i < src->n; i++) {
>   trans = path_transition_left_edge(ctx, src->x[i], src->y[i]);
> @@ -303,6 +306,9 @@ clip_polygon_right(struct clip_context *ctx, const struct 
> polygon8 *src,
>   enum path_transition trans;
>   int i;
>  
> + if (src->n == 0)
> + return 0;
> +
>   clip_context_prepare(ctx, src, dst_x, dst_y);
>   for (i = 0; i < src->n; i++) {
>   trans = path_transition_right_edge(ctx, src->x[i], src->y[i]);
> @@ -319,6 +325,9 @@ clip_polygon_top(struct clip_context *ctx, const struct 
> polygon8 *src,
>   enum path_transition trans;
>   int i;
>  
> + if (src->n == 0)
> + return 0;
> +
>   clip_context_prepare(ctx, src, dst_x, dst_y);
>   for (i = 0; i < src->n; i++) {
>   trans = path_transition_top_edge(ctx, src->x[i], src->y[i]);
> @@ -335,6 +344,9 @@ clip_polygon_bottom(struct clip_context *ctx, const 
> struct polygon8 *src,
>   enum path_transition trans;
>   int i;
>  
> + if (src->n == 0)
> + return 0;
> +
>   clip_context_prepare(ctx, src, dst_x, dst_y);
>   for (i = 0; i < src->n; i++) {
>   trans = path_transition_bottom_edge(ctx, src->x[i], src->y[i]);

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


[PATCH] Added destructor protocol to wl_data_device interface

2014-08-19 Thread kabeer . khan
From: "kabeer.khan" 

This is a fix to Bug# 81745

Signed-off-by: kabeer 
---
 protocol/wayland.xml |9 +++--
 1 file changed, 7 insertions(+), 2 deletions(-)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 2d57f69..c3a9f28 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -569,8 +569,13 @@
   
   
 
-
-
+   
+  
+Destroy the data device.
+  
+
+   
+   
   
The data_offer event introduces a new wl_data_offer object,
which will subsequently be used in either the
-- 
1.7.9.5

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


Re: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Giulio Camuffo
2014-08-19 14:50 GMT+03:00 Daniel Stone :
> Hi,
>
> On 18 August 2014 13:14, Pekka Paalanen  wrote:
>>
>> On Mon, 18 Aug 2014 14:57:37 +0300
>> Giulio Camuffo  wrote:
>> > 2014-08-18 14:35 GMT+03:00 Pekka Paalanen :
>> > > had these patches which I'd like to see going in:
>> >
>> > http://lists.freedesktop.org/archives/wayland-devel/2013-December/012589.html
>>
>> This one looks pretty simple, and I can confirm the problem with
>> CapsLock, so yes, I'd like to take this. Could you rebase it?
>
>
> This is a good start, yes. It's either that or go through the keymap state
> trying to work out the modifier state to accompany the LEDs, which is doable
> but a bit fiddly.
>
>>
>> >
>> > http://lists.freedesktop.org/archives/wayland-devel/2013-December/012590.html
>> >
>> > http://lists.freedesktop.org/archives/wayland-devel/2013-December/012591.html
>>
>> Of these two, the first needs the second to be used at all, right? The
>> follow-up comment is true, I would not want NumLock be on by default on
>> my laptop, so I think this needs more work, like you have identified.
>
>
> Yes, definitely not on by default please. As for the second patch, I'm a
> little hesitant to add it to X11 in particular: why should we be telling the
> host server what the modifier state for the entire session (which is larger
> than the nested compositor) should be?
>
> evdev requires LEDs to be driven because in that situation, we are the
> lowest-level input consumer, and thus calculate our own state (i.e. call
> xkb_state_update_key). In nested environments (compositor-{x11,wayland}), we
> never calculate our own state, but receive the state from the host display
> server. If the host display server isn't keeping the state sent to its
> clients in sync with the state of its input devices, then that's a bug.

That makes sense, and I don't remember why i wrote that
"x11_compositor_led_update()" honestly.
I'll reply with a patch just adding the weston_keyboard_set_leds API,
without the X11 code.

--
Giulio

>
> (tl;dr: NAK)
>
> Cheers,
> Daniel
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH 3/3] tests: add one more test for event-loop signal source

2014-08-19 Thread Marek Chalupa
On 19 August 2014 13:37, Pekka Paalanen  wrote:

> On Tue, 19 Aug 2014 12:37:53 +0200
> Marek Chalupa  wrote:
>
> > On 18 August 2014 12:23, Marek Chalupa  wrote:
> >
> > > Hi,
> > >
> > > thanks for reviewing.
> > >
> > > The failure you got is not introduced by this patch, I reported it some
> > > time ago here:
> > > https://bugs.freedesktop.org/show_bug.cgi?id=80594
> > >
> >
> > I put a patch for this bug into bugzilla:
> >
> > https://bugs.freedesktop.org/show_bug.cgi?id=80594
>
> Hi,
>
> ok, I picked them up from bugzilla, but I would really prefer email to
> the list, because I can't review bugzilla attachments on the mailing
> list, and it is much much easier for me to apply patches from email.
>

Ok :)



> So the essence of the test is to get two timers fire so, that they will
> both be dispatched on the same wl_event_loop_dispatch() call. What it
> actually tests is that the timerfd handler won't get stuck because the
> handler that runs first modifies the second.
>

Yes.


> I believe your patch should fix it, so I pushed them. I try to remember
> to leave a 'make check' loop running over night.
>
>
I had it running in a loop for some time and I hope it fixed it. It was not
a whole night, though :)


>
> Thanks,
> pq
>

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


Re: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Daniel Stone
Hi,

On 18 August 2014 13:14, Pekka Paalanen  wrote:

> On Mon, 18 Aug 2014 14:57:37 +0300
> Giulio Camuffo  wrote:
> > 2014-08-18 14:35 GMT+03:00 Pekka Paalanen :
> > > had these patches which I'd like to see going in:
> >
> http://lists.freedesktop.org/archives/wayland-devel/2013-December/012589.html
>
> This one looks pretty simple, and I can confirm the problem with
> CapsLock, so yes, I'd like to take this. Could you rebase it?
>

This is a good start, yes. It's either that or go through the keymap state
trying to work out the modifier state to accompany the LEDs, which is
doable but a bit fiddly.


> >
> http://lists.freedesktop.org/archives/wayland-devel/2013-December/012590.html
> >
> http://lists.freedesktop.org/archives/wayland-devel/2013-December/012591.html
>
> Of these two, the first needs the second to be used at all, right? The
> follow-up comment is true, I would not want NumLock be on by default on
> my laptop, so I think this needs more work, like you have identified.
>

Yes, definitely not on by default please. As for the second patch, I'm a
little hesitant to add it to X11 in particular: why should we be telling
the host server what the modifier state for the entire session (which is
larger than the nested compositor) should be?

evdev requires LEDs to be driven because in that situation, we are the
lowest-level input consumer, and thus calculate our own state (i.e. call
xkb_state_update_key). In nested environments (compositor-{x11,wayland}),
we never calculate our own state, but receive the state from the host
display server. If the host display server isn't keeping the state sent to
its clients in sync with the state of its input devices, then that's a bug.

(tl;dr: NAK)

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


Re: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Daniel Stone
Hi,

On 19 August 2014 07:54, Peter Hutterer  wrote:

> On Mon, Aug 18, 2014 at 02:35:49PM +0300, Pekka Paalanen wrote:
> > Should we make libinput the default for 1.6, so that in 1.7 we can
> > remove the old input code, or is libinput API still too much in flux?
>
> I don't think it'll change much and Jonas and I have been talking about
> declaring it stable soon anyway. I've got two more changes that are
> somewhat
> urgent, both would be additive.
>
> So yes, I think switching to libinput by default would be good.
>

+1 from me. Even if it does still have problems, it's a damn sight better
than what came before it, and I'd like to bin the latter as soon as
possible. So if we can agree a sensible libinput release for dependencies,
we should absolutely do this.

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


Re: [PATCH 3/3] tests: add one more test for event-loop signal source

2014-08-19 Thread Pekka Paalanen
On Tue, 19 Aug 2014 12:37:53 +0200
Marek Chalupa  wrote:

> On 18 August 2014 12:23, Marek Chalupa  wrote:
> 
> > Hi,
> >
> > thanks for reviewing.
> >
> > The failure you got is not introduced by this patch, I reported it some
> > time ago here:
> > https://bugs.freedesktop.org/show_bug.cgi?id=80594
> >
> 
> I put a patch for this bug into bugzilla:
> 
> https://bugs.freedesktop.org/show_bug.cgi?id=80594

Hi,

ok, I picked them up from bugzilla, but I would really prefer email to
the list, because I can't review bugzilla attachments on the mailing
list, and it is much much easier for me to apply patches from email.

So the essence of the test is to get two timers fire so, that they will
both be dispatched on the same wl_event_loop_dispatch() call. What it
actually tests is that the timerfd handler won't get stuck because the
handler that runs first modifies the second.

I believe your patch should fix it, so I pushed them. I try to remember
to leave a 'make check' loop running over night.


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


Re: [PATCH weston 00/19] Basic tablet support in Weston

2014-08-19 Thread Jonas Ådahl
On Tue, Aug 19, 2014 at 01:03:52PM +0300, Pekka Paalanen wrote:
> On Wed,  6 Aug 2014 19:07:50 -0400
> Stephen Chandler Paul  wrote:
> 
> > Hi! As some of you have been aware, I have been working on implementing 
> > tablet
> > ssupport in libinput, the wayland protocol and weston. This patchset adds 
> > basic
> > tablet support to weston, along with support in the shell and the window
> > manager. It should be noted that these patches rely on one of the earlier
> > patches to libinput that I posted on the mailing list: "tablet: Add
> > libinput_tablet_has_axis()", along with the tablet-support branch in the 
> > git repository for libinput.
> > 
> > As of right now, the following things are still missing/haven't been 
> > finished
> > yet:
> > * Tablet objects don't ever send a removed event, right now it's up to the
> >   clients to free the resources for each tool object.
> > * Tablet tool objects should be separate for each tablet connected that 
> > doesn't
> >   report serial numbers. Right now tablet objects are shared by all tablets
> >   connected to the system unconditionally.
> > * The tablet cursor disappears occasionally when moving a window and causing
> >   the mouse pointer to change images, but reappears the next time a client 
> > sets
> >   a cursor image.
> > * weston-flower can crash the shell for some reason. It seems that if a 
> > tablet
> >   is turned on, and the first surface the tool comes into focus on belongs 
> > to a
> >   weston-flower instance, the desktop-shell runs into an error and exits. I
> >   haven't noticed this with anything other then weston-flower though.
> > * Held down buttons are released when the tool changes focus from one 
> > surface
> >   to another, instead of being held down until they're released.
> > * Some of the declarations for structs in my code might need to be moved
> >   around, I'm not sure what the expected guidelines for this in weston's 
> > code
> >   are though.
> > * A surface argument needs to be added to the proximity_out event, so we can
> >   tell if the tablet tool is leaving proximity to switch focus to another
> >   surface, or if it's just exiting proximity.
> > 
> > Review/critique would be appreciated, thank you! ^^
> > 
> > Cheers,
> > Lyude
> > 
> > Stephen Chandler Paul (19):
> >   tablet: Add XML for wl_tablet and wl_tablet_manager
> >   tablet: Add initial tablet support to weston
> >   client: Add support for handling motion events in toytoolkit
> >   client: Add support for handling proximity_in/out events in
> > libtoytoolkit
> >   tablet: Add support for setting/changing the tablet cursor in weston
> >   client: Add tablet cursor support into libtoytoolkit
> >   tablet: Add support for tablet tool objects
> >   client: Add support for tool objects in libtoytoolkit
> >   client: Add support for tablet cursor motion to window frames in
> > libtoytoolkit
> >   tablet: Add support for button presses to weston
> >   client: Add support for handling button presses to libtoytoolkit
> >   tablet: Add support for up/down events to weston
> >   client: Add up/down event support into libtoytoolkit
> >   tablet: Add support for moving windows around using the stylus
> >   tablet: Add support for reporting pressure, distance, and tilt in
> > weston
> >   client: Add support for pressure, distance, and tilt into
> > libtoytoolkit
> >   tablet: Add tablet support to the top panel of the desktop shell
> >   tablet: Add binding to activate surfaces using the tablet tool
> >   tablet: Add demo application for tablets
> > 
> >  .gitignore  |   1 +
> >  Makefile.am |  23 +-
> >  clients/desktop-shell.c |  55 
> >  clients/tablet.c| 341 
> >  clients/window.c| 607 
> >  clients/window.h| 102 ++
> >  desktop-shell/shell.c   | 282 +
> >  protocol/wayland-tablet.xml | 310 +++
> >  shared/cairo-util.h |   4 +
> >  shared/frame.c  |  38 +++
> >  src/bindings.c  |  37 +++
> >  src/compositor.c|   1 +
> >  src/compositor.h| 171 ++
> >  src/input.c | 736 
> > 
> >  src/libinput-device.c   | 317 +++
> >  src/libinput-device.h   |   4 +-
> >  16 files changed, 3024 insertions(+), 5 deletions(-)
> >  create mode 100644 clients/tablet.c
> >  create mode 100644 protocol/wayland-tablet.xml
> > 
> 
> Hi,
> 
> just a heads-up, do I get the right impression that this is not yet in
> a shape to merge into Weston, so won't be included in 1.6?

Yes. The libinput side of tablet support still live on a separate branch,
so merging this series is not an option for 1.6 IMHO.


Jonas

> 
> Could an input person review this and suggest whether this should in
> his opinion get merged for 1.6 and is it reasonable to assume, that all

[PATCH] cliptest: Don't underrun the vertex array of empty polygons.

2014-08-19 Thread Ondřej Majerech
This silences the following warning:

  clients/cliptest.c:277:22: warning: array subscript is below array
  bounds [-Warray-bounds]
ctx->prev.x = src->x[src->n - 1];

Signed-off-by: Ondřej Majerech 
---
 clients/cliptest.c | 12 
 1 file changed, 12 insertions(+)

diff --git a/clients/cliptest.c b/clients/cliptest.c
index 907c5d4..20b3776 100644
--- a/clients/cliptest.c
+++ b/clients/cliptest.c
@@ -287,6 +287,9 @@ clip_polygon_left(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n == 0)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_left_edge(ctx, src->x[i], src->y[i]);
@@ -303,6 +306,9 @@ clip_polygon_right(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n == 0)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_right_edge(ctx, src->x[i], src->y[i]);
@@ -319,6 +325,9 @@ clip_polygon_top(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n == 0)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_top_edge(ctx, src->x[i], src->y[i]);
@@ -335,6 +344,9 @@ clip_polygon_bottom(struct clip_context *ctx, const struct 
polygon8 *src,
enum path_transition trans;
int i;
 
+   if (src->n == 0)
+   return 0;
+
clip_context_prepare(ctx, src, dst_x, dst_y);
for (i = 0; i < src->n; i++) {
trans = path_transition_bottom_edge(ctx, src->x[i], src->y[i]);
-- 
2.0.4

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


Re: [PATCH wayland] client: add a public function to make a roundtrip on a custom queue

2014-08-19 Thread Pekka Paalanen
On Wed, 16 Jul 2014 11:13:06 +0300
Giulio Camuffo  wrote:

> 2014-07-15 20:39 GMT+03:00 Daniel Stone :
> > Hi,
> >
> >
> > On Tuesday, July 15, 2014, Giulio Camuffo  wrote:
> >>
> >> 2014-07-14 22:31 GMT+03:00 Jason Ekstrand :
> >> > Guilio,
> >> > Would it be better to name it wl_event_queue_roundtrip and just have it
> >> > take
> >> > the wl_event_queue?  I guess it is sort-of a wl_display operation, but
> >> > you
> >> > could argue it either way.  Thoughts?
> >>
> >> You have a point here, it makes more sense.
> >
> >
> > TBH I'd rather steer clear of that nomenclature, since the 'queue' in an
> > immediate request context implies delayed dispatch, rather than on a queue.
> 
> I didn't realize you could read it as "queue a roundtrip on a
> wl_event". I think that the meaning is quite obvious once you know
> that there is a wl_event_queue type in Wayland.

Hi,

hm, that's a tricky one. Yes, the name wl_event_queue_roundtrip() is
confusing when out of context, but as the argument is a wl_event_queue,
that name is the logical and unfortunate result.

Another problem with wl_display_roundtrip_queue() is that it gets both
wl_display and wl_event_queue as arguments. Therefore the function
would need to check that the wl_event_queue indeed belongs to the given
wl_display. It's just a thing one can get wrong, and it has no benefits
that I see.

wl_display_roundtrip_queue() taking only wl_event_queue as an argument
would be strange, because the name implies a wl_display method.

(Up until this point, I would have agreed with Giulio and Jason...)

But, now I see, that we already have:

int wl_display_dispatch_queue(struct wl_display *display,
  struct wl_event_queue *queue);
int wl_display_dispatch_queue_pending(struct wl_display *display,
  struct wl_event_queue *queue);
int wl_display_prepare_read_queue(struct wl_display *display,
  struct wl_event_queue *queue);

So there is precendent, that redundant arguments are ok, and
wl_display_roundtrip_queue() would indeed follow the existing scheme.

Btw. I do not see anywhere, where the libwayland-client code would be
checking that the wl_display and the wl_event_queue would actually be
related. Would be a good thing to add more checks to the public API
functions for that.

I think I would go with wl_display_roundtrip_queue() here. Would you
agree?


Thanks,
pq

> >> > On Mon, Jul 14, 2014 at 7:15 AM, Giulio Camuffo
> >> > 
> >> > wrote:
> >> >>
> >> >> wl_display_roundtrip() works on the default queue. Add a parallel
> >> >> wl_display_roundtrip_queue().
> >> >> ---
> >> >>
> >> >> v3: fixed dispatch call in place of dispatch_queue
> >> >> documented the queue parameter
> >> >>  src/wayland-client.c | 24 +---
> >> >>  src/wayland-client.h |  2 ++
> >> >>  2 files changed, 23 insertions(+), 3 deletions(-)
> >> >>
> >> >> diff --git a/src/wayland-client.c b/src/wayland-client.c
> >> >> index e8aab7e..d2c1b5c 100644
> >> >> --- a/src/wayland-client.c
> >> >> +++ b/src/wayland-client.c
> >> >> @@ -834,15 +834,16 @@ static const struct wl_callback_listener
> >> >> sync_listener = {
> >> >>  /** Block until all pending request are processed by the server
> >> >>   *
> >> >>   * \param display The display context object
> >> >> + * \param queue The queue on which to run the roundtrip
> >> >>   * \return The number of dispatched events on success or -1 on failure
> >> >>   *
> >> >>   * Blocks until the server process all currently issued requests and
> >> >> - * sends out pending events on all event queues.
> >> >> + * sends out pending events on the event queue.
> >> >>   *
> >> >>   * \memberof wl_display
> >> >>   */
> >> >>  WL_EXPORT int
> >> >> -wl_display_roundtrip(struct wl_display *display)
> >> >> +wl_display_roundtrip_queue(struct wl_display *display, struct
> >> >> wl_event_queue *queue)
> >> >>  {
> >> >> struct wl_callback *callback;
> >> >> int done, ret = 0;
> >> >> @@ -851,9 +852,10 @@ wl_display_roundtrip(struct wl_display *display)
> >> >> callback = wl_display_sync(display);
> >> >> if (callback == NULL)
> >> >> return -1;
> >> >> +   wl_proxy_set_queue(callback, queue);
> >> >> wl_callback_add_listener(callback, &sync_listener, &done);
> >> >> while (!done && ret >= 0)
> >> >> -   ret = wl_display_dispatch(display);
> >> >> +   ret = wl_display_dispatch_queue(display, queue);
> >> >>
> >> >> if (ret == -1 && !done)
> >> >> wl_callback_destroy(callback);
> >> >> @@ -861,6 +863,22 @@ wl_display_roundtrip(struct wl_display *display)
> >> >> return ret;
> >> >>  }
> >> >>
> >> >> +/** Block until all pending request are processed by the server
> >> >> + *
> >> >> + * \param display The display context object
> >> >> + * \return The number of dispatched events on success or -1 on failure
> >> >> + *
> >> >> + * Bloc

Re: [PATCH 3/3] tests: add one more test for event-loop signal source

2014-08-19 Thread Marek Chalupa
On 18 August 2014 12:23, Marek Chalupa  wrote:

> Hi,
>
> thanks for reviewing.
>
> The failure you got is not introduced by this patch, I reported it some
> time ago here:
> https://bugs.freedesktop.org/show_bug.cgi?id=80594
>

I put a patch for this bug into bugzilla:

https://bugs.freedesktop.org/show_bug.cgi?id=80594



>
>
>
> On 18 August 2014 12:18, Pekka Paalanen  wrote:
>
>> On Tue, 12 Aug 2014 11:35:07 +0200
>> Marek Chalupa  wrote:
>>
>> > Test if when we get a signal, all signal sources for that signal
>> > get dispatched.
>> >
>> > Signed-off-by: Marek Chalupa 
>> > ---
>> >  tests/event-loop-test.c | 38 ++
>> >  1 file changed, 38 insertions(+)
>> >
>> > diff --git a/tests/event-loop-test.c b/tests/event-loop-test.c
>> > index e327a66..1709a1a 100644
>> > --- a/tests/event-loop-test.c
>> > +++ b/tests/event-loop-test.c
>> > @@ -173,6 +173,44 @@ TEST(event_loop_signal)
>> >   wl_event_loop_destroy(loop);
>> >  }
>> >
>> > +TEST(event_loop_multiple_same_signals)
>> > +{
>> > + struct wl_event_loop *loop = wl_event_loop_create();
>> > + struct wl_event_source *s1, *s2;
>> > + int calls_no = 0;
>> > + int i;
>> > +
>> > + s1 = wl_event_loop_add_signal(loop, SIGUSR1,
>> > +   signal_callback, &calls_no);
>> > + assert(s1);
>> > +
>> > + s2 = wl_event_loop_add_signal(loop, SIGUSR1,
>> > +   signal_callback, &calls_no);
>> > + assert(s2);
>> > +
>> > + assert(wl_event_loop_dispatch(loop, 0) == 0);
>> > + assert(!calls_no);
>> > +
>> > + /* Try it more times */
>> > + for (i = 0; i < 5; ++i) {
>> > + calls_no = 0;
>> > + kill(getpid(), SIGUSR1);
>> > + assert(wl_event_loop_dispatch(loop, 0) == 0);
>> > + assert(calls_no == 2);
>> > + }
>> > +
>> > + wl_event_source_remove(s1);
>> > +
>> > + /* Try it again  with one source */
>> > + calls_no = 0;
>> > + kill(getpid(), SIGUSR1);
>> > + assert(wl_event_loop_dispatch(loop, 0) == 0);
>> > + assert(calls_no == 1);
>> > +
>> > + wl_event_source_remove(s2);
>> > +
>> > + wl_event_loop_destroy(loop);
>> > +}
>> >
>> >  static int
>> >  timer_callback(void *data)
>>
>> The first two of the three patches pushed. We have an explicit configure
>> check from SFD_CLOEXEC, but I suppose we don't need to add one for
>> SFD_NONBLOCK, because the two were supposedly introduced at the same
>> time in glibc.
>>
>> I did not push this third patch, because in my testing, the test failed
>> once. It was very hard, but I did manage to trigger it a second time
>> too, by having lots of CPU and IO load on the machine and running the
>> test in loop until it failed:
>>
>> test "event_loop_destroy":  exit status 0, pass.
>> event-loop-test: tests/event-loop-test.c:298: event_loop_timer_updates:
>> Assertion `context.count == 2' failed.
>> test "event_loop_timer_updates":signal 6, fail.
>> test "event_loop_timer":exit status 0, pass.
>> test "event_loop_multiple_same_signals":exit status 0, pass.
>> test "event_loop_signal":   exit status 0, pass.
>> test "event_loop_free_source_with_data":exit status 0, pass.
>> test "event_loop_post_dispatch_check":  exit status 0, pass.
>> 7 tests, 6 pass, 1 fail
>>
>> I would like to see some fix on that, even if only theoretical, before
>> I push this one.
>>
>> Or an ack from someone else that we should just push this and wait for
>> the fallout if any.
>>
>>
>> Thanks,
>> pq
>>
>
> Regards,
> Marek
>

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


[PATCH weston] configure.ac: use libinput by default

2014-08-19 Thread Pekka Paalanen
From: Pekka Paalanen 

Libinput is stabilizing soon, so let's flip the default switch now. The
old input code will still be carried as an option for a while.

Cc: Peter Hutterer 
Cc: Jonas Ådahl 
Signed-off-by: Pekka Paalanen 
---
 configure.ac | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/configure.ac b/configure.ac
index 354db14..bc5c88a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -155,8 +155,8 @@ if test x$enable_drm_compositor = xyes; then
 fi
 
 
-AC_ARG_ENABLE(libinput-backend, [  --enable-libinput-backend],,
- enable_libinput_backend=no)
+AC_ARG_ENABLE(libinput-backend, [  --disable-libinput-backend],,
+ enable_libinput_backend=yes)
 AM_CONDITIONAL([ENABLE_LIBINPUT_BACKEND], [test x$enable_libinput_backend = 
xyes])
 if test x$enable_libinput_backend = xyes; then
   AC_DEFINE([BUILD_LIBINPUT_BACKEND], [1], [Build the libinput input device 
backend])
-- 
1.8.5.5

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


Re: [PATCH weston 00/19] Basic tablet support in Weston

2014-08-19 Thread Pekka Paalanen
On Wed,  6 Aug 2014 19:07:50 -0400
Stephen Chandler Paul  wrote:

> Hi! As some of you have been aware, I have been working on implementing tablet
> ssupport in libinput, the wayland protocol and weston. This patchset adds 
> basic
> tablet support to weston, along with support in the shell and the window
> manager. It should be noted that these patches rely on one of the earlier
> patches to libinput that I posted on the mailing list: "tablet: Add
> libinput_tablet_has_axis()", along with the tablet-support branch in the git 
> repository for libinput.
> 
> As of right now, the following things are still missing/haven't been finished
> yet:
> * Tablet objects don't ever send a removed event, right now it's up to the
>   clients to free the resources for each tool object.
> * Tablet tool objects should be separate for each tablet connected that 
> doesn't
>   report serial numbers. Right now tablet objects are shared by all tablets
>   connected to the system unconditionally.
> * The tablet cursor disappears occasionally when moving a window and causing
>   the mouse pointer to change images, but reappears the next time a client 
> sets
>   a cursor image.
> * weston-flower can crash the shell for some reason. It seems that if a tablet
>   is turned on, and the first surface the tool comes into focus on belongs to 
> a
>   weston-flower instance, the desktop-shell runs into an error and exits. I
>   haven't noticed this with anything other then weston-flower though.
> * Held down buttons are released when the tool changes focus from one surface
>   to another, instead of being held down until they're released.
> * Some of the declarations for structs in my code might need to be moved
>   around, I'm not sure what the expected guidelines for this in weston's code
>   are though.
> * A surface argument needs to be added to the proximity_out event, so we can
>   tell if the tablet tool is leaving proximity to switch focus to another
>   surface, or if it's just exiting proximity.
> 
> Review/critique would be appreciated, thank you! ^^
> 
> Cheers,
>   Lyude
> 
> Stephen Chandler Paul (19):
>   tablet: Add XML for wl_tablet and wl_tablet_manager
>   tablet: Add initial tablet support to weston
>   client: Add support for handling motion events in toytoolkit
>   client: Add support for handling proximity_in/out events in
> libtoytoolkit
>   tablet: Add support for setting/changing the tablet cursor in weston
>   client: Add tablet cursor support into libtoytoolkit
>   tablet: Add support for tablet tool objects
>   client: Add support for tool objects in libtoytoolkit
>   client: Add support for tablet cursor motion to window frames in
> libtoytoolkit
>   tablet: Add support for button presses to weston
>   client: Add support for handling button presses to libtoytoolkit
>   tablet: Add support for up/down events to weston
>   client: Add up/down event support into libtoytoolkit
>   tablet: Add support for moving windows around using the stylus
>   tablet: Add support for reporting pressure, distance, and tilt in
> weston
>   client: Add support for pressure, distance, and tilt into
> libtoytoolkit
>   tablet: Add tablet support to the top panel of the desktop shell
>   tablet: Add binding to activate surfaces using the tablet tool
>   tablet: Add demo application for tablets
> 
>  .gitignore  |   1 +
>  Makefile.am |  23 +-
>  clients/desktop-shell.c |  55 
>  clients/tablet.c| 341 
>  clients/window.c| 607 
>  clients/window.h| 102 ++
>  desktop-shell/shell.c   | 282 +
>  protocol/wayland-tablet.xml | 310 +++
>  shared/cairo-util.h |   4 +
>  shared/frame.c  |  38 +++
>  src/bindings.c  |  37 +++
>  src/compositor.c|   1 +
>  src/compositor.h| 171 ++
>  src/input.c | 736 
> 
>  src/libinput-device.c   | 317 +++
>  src/libinput-device.h   |   4 +-
>  16 files changed, 3024 insertions(+), 5 deletions(-)
>  create mode 100644 clients/tablet.c
>  create mode 100644 protocol/wayland-tablet.xml
> 

Hi,

just a heads-up, do I get the right impression that this is not yet in
a shape to merge into Weston, so won't be included in 1.6?

Could an input person review this and suggest whether this should in
his opinion get merged for 1.6 and is it reasonable to assume, that all
the remaining known bugs can be sufficiently fixed within the couple
of weeks or so that our alpha and RC phase lasts?

I still haven't read the latest protocol discussion thread, so I'm not
sure where the design is atm.

Personally I cannot even test this, since I don't have a tablet device
here.


Thanks,
pq
___
wayland-devel mailing list
wayland-devel@lists.freedesktop

Re: [PATCH] cliptest: Avoid use of uninitialized memory when regions don't intersect

2014-08-19 Thread Pekka Paalanen
On Mon, 18 Aug 2014 16:13:41 -0500
Derek Foreman  wrote:

> Prevent attempting to draw the intersection polygon when it contains no
> vertices.
> 
> Signed-off-by: Derek Foreman 
> ---
>  clients/cliptest.c | 12 +++-
>  1 file changed, 7 insertions(+), 5 deletions(-)
> 
> diff --git a/clients/cliptest.c b/clients/cliptest.c
> index a1928f4..dd0ea5c 100644
> --- a/clients/cliptest.c
> +++ b/clients/cliptest.c
> @@ -570,12 +570,14 @@ draw_geometry(cairo_t *cr, struct weston_surface
> *surface,

Hi Derek,

looks like your email client decided to wrap the patch and it didn't
apply, so I fixed it and applied.

>   cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 0.4);
>   cairo_fill(cr);
> 
> - draw_polygon_closed(cr, ex, ey, n);
> - cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
> - cairo_stroke(cr);
> + if (n) {
> + draw_polygon_closed(cr, ex, ey, n);
> + cairo_set_source_rgb(cr, 0.0, 1.0, 0.0);
> + cairo_stroke(cr);
> 
> - cairo_set_source_rgba(cr, 0.0, 1.0, 0.0, 0.5);
> - draw_polygon_labels(cr, ex, ey, n);
> + cairo_set_source_rgba(cr, 0.0, 1.0, 0.0, 0.5);
> + draw_polygon_labels(cr, ex, ey, n);
> + }
>  }
> 
>  static void

Looks good, pushed.


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


Re: [PATCH] Fixes to parse_options, help info from display

2014-08-19 Thread Pekka Paalanen
On Fri,  8 Aug 2014 12:59:49 -0700
Bill Spitzak  wrote:

> These are a series of changes, you can pick and choose from them if you don't 
> like them all.
> 
> There are fixes to the parser so that "x=5mm" and "bool=false" and other 
> constucts are errors
> rather than doing unintuitive things.
> 
> Also I tried to get most of the weston demo programs to print some help if -h 
> is given or
> if there is an error in the command line. The eventdemo one in particular, 
> since the web
> page for building claims --help will give you some help. Note this is just 
> done quickly
> without extensive rewrite, so in most cases it does not distinguish -h from 
> errors and
> returns an error code in both cases. I don't think it is necessary to 
> complicate the
> demo programs more than this.

Hi,

comments on the patches I did not apply have already been sent: 1, 12v2.

Patches 7 and 8 I amended to fix minor style issues.

Patch 2 should really have been split into two, a separate one to
fix the erroneous -0 option, but I let it in.

Patches 2-11 pushed.


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


Re: [PATCH 01/12] Fixes to parse_options

2014-08-19 Thread Pekka Paalanen
On Fri,  8 Aug 2014 12:59:50 -0700
Bill Spitzak  wrote:

> Fail on malformed numbers, such as --width=100mm

Good.

> Fail on = after booleans, such as --flag=false

Okay.

> Multiple single-letter booleans in one switch allowed, ie
> -xyz is the same as -x -y -z. For wayland modules they all have
> to belong to the same module.

This was not accepted before, right? It is confusing that one needs to
know that they are from the same module, so I'd rather just not accept
combined single letter booleans at all.

> Previous version could use text after the null at the end of
> an argv entry. Now requires the = sign.

What does this mean? I mean, how could one have ever used the old
behaviour? Nothing comes to my mind, so I suppose that is ok.

There are some style issues. First is the patch subject, it should be
prefixed with the component the patch is touching. To get a feeling
what the components are, look at the git-log of the file your are
changing, and there should be a pattern.

Though, I see that option-parser.c doesn't really have any pattern. Oh
well, "shared:" should do then.

More style issues below.

> ---
>  shared/option-parser.c |   82 
> +++-
>  1 file changed, 53 insertions(+), 29 deletions(-)
> 
> diff --git a/shared/option-parser.c b/shared/option-parser.c
> index c00349a..22bcf2f 100644
> --- a/shared/option-parser.c
> +++ b/shared/option-parser.c
> @@ -30,53 +30,77 @@
>  
>  #include "config-parser.h"
>  
> -static void
> +static int
>  handle_option(const struct weston_option *option, char *value)
>  {
> + char* p;

Need empty line between declarations and code.

>   switch (option->type) {
>   case WESTON_OPTION_INTEGER:
> - * (int32_t *) option->data = strtol(value, NULL, 0);
> - return;
> + * (int32_t *) option->data = strtol(value, &p, 0);
> + return p > value && !*p;

Took me a couple of times to read this return statement.
How about:
return *value != '\0' && *p == '\0';

Just a suggestion, doesn't matter.

>   case WESTON_OPTION_UNSIGNED_INTEGER:
> - * (uint32_t *) option->data = strtoul(value, NULL, 0);
> - return;
> + * (uint32_t *) option->data = strtoul(value, &p, 0);
> + return p > value && !*p;
>   case WESTON_OPTION_STRING:
>   * (char **) option->data = strdup(value);
> - return;
> - case WESTON_OPTION_BOOLEAN:
> - * (int32_t *) option->data = 1;
> - return;
> + return 1;
>   default:
>   assert(0);
>   }
>  }
>  
> +static int
> +long_option(const struct weston_option *options, int count, char* arg)
> +{
> + int k, len;

Need empty line between declarations and code.

> + for (k = 0; k < count; k++) {
> + if (! options[k].name) continue;

No space after in (! options[k].name).

'continue' should be on a new line

> + len = strlen(options[k].name);
> + if (strncmp(options[k].name, arg+2, len) != 0) continue;

add spaces: arg + 2

'continue' should be on a new line

> + if (options[k].type == WESTON_OPTION_BOOLEAN) {
> + if (! arg[len+2]) {

Extra space.

> + * (int32_t *) options[k].data = 1;
> + return 1;
> + }
> + } else if (arg[len+2] == '=') {

spaces: len + 2

> + return handle_option(options+k, arg+len+3);

spaces: options + k, arg + len + 3

> + }
> + }
> + return 0;
> +}
> +
> +static int
> +short_option(const struct weston_option *options, int count, char* arg)
> +{
> + int i, k;

Need empty line between declarations and code.

> + for (i = 1; arg[i]; i++) {
> + for (k = 0; ; k++) {
> + if (k >= count) return 0;

'return' to a new line.

> + if (options[k].short_name == arg[i]) break;

'break' to a new line.

> + }
> + if (options[k].type == WESTON_OPTION_BOOLEAN)
> + * (int32_t *) options[k].data = 1;
> + else
> + return handle_option(options+k, arg+i+1);

missing spaces

> + }
> + return arg[1]; /* error on just '-' */

Implicit cast to a "boolean" is kind of surprising, a comparison would
be more obvious:
return arg[1] != '\0';

Or better yet, just exit the function in the first lines, if arg[1] ==
'\0'.

> +}
> +
> +
>  int
>  parse_options(const struct weston_option *options,
> int count, int *argc, char *argv[])
>  {
> - int i, j, k, len = 0;
> -
> + int i, j;

Need empty line between declarations and code.

>   for (i = 1, j = 1; i < *argc; i++) {
> - for (k = 0; k < count; k++) {
> - if (options[k].name)
> - len = strlen(options[k].name);
> - if (options[k].na

Re: [PATCH] V2: load_image always prints a message on failure if filename is not empty

2014-08-19 Thread Pekka Paalanen
On Mon, 11 Aug 2014 14:28:38 -0700
Bill Spitzak  wrote:

> Small change to remove the trailing whitespace error.
> 
> It was rather inconsistent before. This may help users figure out why
> backgrounds and icons don't show up. A better api where the error can
> be queried might be nice, but this seems sufficient for current Weston use.
> ---
>  clients/image.c   |1 -
>  shared/image-loader.c |   11 +--
>  2 files changed, 9 insertions(+), 3 deletions(-)
> 
> diff --git a/clients/image.c b/clients/image.c
> index 573117c..aee8112 100644
> --- a/clients/image.c
> +++ b/clients/image.c
> @@ -373,7 +373,6 @@ image_create(struct display *display, const char 
> *filename,
>   image->image = load_cairo_surface(filename);
>  
>   if (!image->image) {
> - fprintf(stderr, "could not find the image %s!\n", b);

This is an unrelated change, and needs to be in a different patch.

>   free(image->filename);
>   free(image);
>   return NULL;
> diff --git a/shared/image-loader.c b/shared/image-loader.c
> index 35dadd3..f04fb48 100644
> --- a/shared/image-loader.c
> +++ b/shared/image-loader.c
> @@ -23,6 +23,7 @@
>  
>  #include "config.h"
>  
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -374,12 +375,15 @@ load_image(const char *filename)
>   FILE *fp;
>   unsigned int i;
>  
> + if (! filename || ! *filename) return NULL;

Extra spaces, needs new line for 'return'.

> +
>   fp = fopen(filename, "rb");
> - if (fp == NULL)
> - return NULL;
> + if (fp == NULL) goto ERROR;

Needs new line for 'goto'.

>  
>   if (fread(header, sizeof header, 1, fp) != 1) {
>   fclose(fp);
> + ERROR:

Jump into a block? Looks nasty, usually we do this like

return ...;

foofoo:
fclose();

foobar:
fprintf(...);
return NULL;
}

> + fprintf(stderr, "%s: %s\n", filename, strerror(errno));
>   return NULL;
>   }
>  
> @@ -399,6 +403,9 @@ load_image(const char *filename)
>   "0x%02x 0x%02x 0x%02x 0x%02x\n",
>   filename, header[0], header[1], header[2], header[3]);
>   image = NULL;
> + } else if (!image) {
> + /* load probably printed something, but just in case */
> + fprintf(stderr, "error reading image file %s!\n", filename);
>   }
>  
>   return image;


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


Re: [PATCH wayland v2] protocol: define the concept of wl_surface role

2014-08-19 Thread Pekka Paalanen
On Tue, 19 Aug 2014 10:29:21 +0300
Pekka Paalanen  wrote:

> From: Pekka Paalanen 
> 
> Define what a role is, and what restrictions there are.
> 
> A change to existing behaviour is that a role cannot be changed at all
> once set. However, this is unlikely to cause problems, as there is no
> reason to re-use wl_surfaces in clients.
> 
> v2: give more concrete examples of roles, define losing a role, Jasper
> rewrote the paragraph on how a role is set.
> 
> Signed-off-by: Pekka Paalanen 
> ---
>  protocol/wayland.xml | 26 --
>  1 file changed, 24 insertions(+), 2 deletions(-)
> 
> diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> index 2d57f69..d3fcaec 100644
> --- a/protocol/wayland.xml
> +++ b/protocol/wayland.xml
> @@ -973,8 +973,30 @@
>local coordinates of the pixel content, in case a buffer_transform
>or a buffer_scale is used.
>  
> -  Surfaces are also used for some special purposes, e.g. as
> -  cursor images for pointers, drag icons, etc.
> +  A surface without a "role" is fairly useless, a compositor does
> +  not know where, when or how to present it. The role is the
> +  purpose of a wl_surface. Examples of roles are a cursor for a
> +  pointer (as set by wl_pointer.set_cursor), a drag icon
> +  (wl_data_device.start_drag), a sub-surface
> +  (wl_subcompositor.get_subsurface), and a window as defined by a
> +  shell protocol (e.g. wl_shell.get_shell_surface).
> +
> +  A surface can have only one role at a time. Initially a
> +  wl_surface does not have a role. Once a wl_surface is given a
> +  role, it can never be given a different role again, even if the
> +  wl_surface loses the role in between.
> +
> +  Surface roles are set by requests in other interfaces such as

Bah... forgot to save one tiny change:

"Surface roles are given by ..."
---^

Thanks,
pq

> +  wl_pointer.set_cursor. The request should explicitly mention
> +  that this request gives a role to a wl_surface. Often, this
> +  request also creates a new protocol object that represents the
> +  role and adds additional functionality to wl_surface. When a
> +  client wants to destroy a wl_surface, they must destroy this 'role
> +  object' before the wl_surface.
> +
> +  A wl_surface may lose its role as specified in the interface
> +  that gave it the role or in the interface of the role object.
> +  Losing a role means losing all the role-specific state.
>  
>  
>  

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


Re: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Pekka Paalanen
On Tue, 19 Aug 2014 16:38:42 +0900
"Tanibata, Nobuhiko \(ADITJ/SWG\)"  wrote:

> > -Original Message-
> > From: wayland-devel
> [mailto:wayland-devel-boun...@lists.freedesktop.org]
> > On Behalf Of Pekka Paalanen
> > Sent: Monday, August 18, 2014 8:36 PM
> > To: wayland-devel@lists.freedesktop.org; k...@bitplanet.net
> > Cc: Jasper St. Pierre; U. Artie Eoff
> > Subject: The road to Wayland/Weston 1.6 and 1.5.1
> > 
> > Hi all,
> > 
> > in the release announcement of 1.5.0[1] it was said that the alpha
> release
> > towards 1.6 should come out mid-August. That time is now, so how about
> we
> > target Friday, Aug 22nd (European time)?
> > 
> > I know the review process has been lagging behind badly, and we
> probably won't
> > see e.g. IVI-shell merged for 1.6, but I try to do what I can. What
> major
> > features have been forgotten on the mailing list unmerged, that you
> would
> > like to see included in 1.6?
> [ntanibata] Hi pq,
> Thank you for notification. Patches of ivi-shell were improved with your
> comment and the latest patch set is sent to the mailing list.
> http://lists.freedesktop.org/archives/wayland-devel/2014-June/015616.htm
> l
> http://lists.freedesktop.org/archives/wayland-devel/2014-July/015968.htm
> l
> http://lists.freedesktop.org/archives/wayland-devel/2014-July/015969.htm
> l
> http://lists.freedesktop.org/archives/wayland-devel/2014-July/015970.htm
> l
> I will try to verify them on 
> 
> Trankyo, Manuel, provides them in his github for trial as well:
> https://github.com/Tarnyko/weston-ivi-shell
> These ones are reviewed in upstream branch of TIZEN gerrit and verified.
> This would be good opportunity to merge them to 1.6.
> I am also working enabling ivi-shell support with efl and Qt, getting
> help with Manuel and his colleges.

Thanks for keeping up. For the record, I am deliberately keeping your
IVI-shell comments and patches marked in my inbox with the hope that
one day I get back to it. :-)

I think there are still some things that need fixing, but my review has
to wait as I need to prioritize. Sorry.


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


RE: The road to Wayland/Weston 1.6 and 1.5.1

2014-08-19 Thread Tanibata, Nobuhiko (ADITJ/SWG)
> -Original Message-
> From: wayland-devel
[mailto:wayland-devel-boun...@lists.freedesktop.org]
> On Behalf Of Pekka Paalanen
> Sent: Monday, August 18, 2014 8:36 PM
> To: wayland-devel@lists.freedesktop.org; k...@bitplanet.net
> Cc: Jasper St. Pierre; U. Artie Eoff
> Subject: The road to Wayland/Weston 1.6 and 1.5.1
> 
> Hi all,
> 
> in the release announcement of 1.5.0[1] it was said that the alpha
release
> towards 1.6 should come out mid-August. That time is now, so how about
we
> target Friday, Aug 22nd (European time)?
> 
> I know the review process has been lagging behind badly, and we
probably won't
> see e.g. IVI-shell merged for 1.6, but I try to do what I can. What
major
> features have been forgotten on the mailing list unmerged, that you
would
> like to see included in 1.6?
[ntanibata] Hi pq,
Thank you for notification. Patches of ivi-shell were improved with your
comment and the latest patch set is sent to the mailing list.
http://lists.freedesktop.org/archives/wayland-devel/2014-June/015616.htm
l
http://lists.freedesktop.org/archives/wayland-devel/2014-July/015968.htm
l
http://lists.freedesktop.org/archives/wayland-devel/2014-July/015969.htm
l
http://lists.freedesktop.org/archives/wayland-devel/2014-July/015970.htm
l
I will try to verify them on 

Trankyo, Manuel, provides them in his github for trial as well:
https://github.com/Tarnyko/weston-ivi-shell
These ones are reviewed in upstream branch of TIZEN gerrit and verified.
This would be good opportunity to merge them to 1.6.
I am also working enabling ivi-shell support with efl and Qt, getting
help with Manuel and his colleges.

BR,
Nobuhiko Tanibata

> 
> I can't promise anything, and I know at least none of my new features
> (Presentation extension, new repaint scheduling algorithm, repaint
timeline
> logging, DRM universal planes & nuclear pageflip support, linux_dmabuf
> protocol sketch, and some smaller things) brewing in my personal
'next' branch
> will not make it.
> 
> Obviously a stable first version of xdg_shell would be great to see in
1.6,
> but we shall see if we can beat it into shape in time. When I reviewed
the
> XML spec not long ago, it was close but not ready in my opinion.
> 
> When xdg_shell does stabilize, we will move xdg_shell.xml into Wayland
> repository and it will be installed, but all build-time users of it
must
> generate their own wrappers with wayland-scanner or equivalent. This
means
> that libwayland-client will not contain any xdg_shell symbols or
headers
> pre-generated. I asked Kristian and he was ok with this plan, and I
have also
> talked a little on #wayland-devel, that maybe this would be a good
idea. If
> this turns out a bad idea, we can always fix it later. Doing it the
other
> way around would be near impossible.
> 
> Should we make libinput the default for 1.6, so that in 1.7 we can
remove
> the old input code, or is libinput API still too much in flux?
> 
> 
> Also, it was said that 1.5.1 should have come out in "a few weeks" and
it
> has been 3 months now. I will try and check the patches already in
'master'
> of both Wayland and Weston and pick them to the 1.5 branches, but if
you know
> of patches that should be in stable, especially ones without review or
not
> in 'master', let me know and I try do something.
> My selection, especially for Wayland, will probably be very
conservative,
> though, as my priority is 1.6.
> 
> 
> Thanks,
> pq
> 
> [1]
>
http://lists.freedesktop.org/archives/wayland-devel/2014-May/014955.html
> ___
> 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


[PATCH wayland v2] protocol: define the concept of wl_surface role

2014-08-19 Thread Pekka Paalanen
From: Pekka Paalanen 

Define what a role is, and what restrictions there are.

A change to existing behaviour is that a role cannot be changed at all
once set. However, this is unlikely to cause problems, as there is no
reason to re-use wl_surfaces in clients.

v2: give more concrete examples of roles, define losing a role, Jasper
rewrote the paragraph on how a role is set.

Signed-off-by: Pekka Paalanen 
---
 protocol/wayland.xml | 26 --
 1 file changed, 24 insertions(+), 2 deletions(-)

diff --git a/protocol/wayland.xml b/protocol/wayland.xml
index 2d57f69..d3fcaec 100644
--- a/protocol/wayland.xml
+++ b/protocol/wayland.xml
@@ -973,8 +973,30 @@
   local coordinates of the pixel content, in case a buffer_transform
   or a buffer_scale is used.
 
-  Surfaces are also used for some special purposes, e.g. as
-  cursor images for pointers, drag icons, etc.
+  A surface without a "role" is fairly useless, a compositor does
+  not know where, when or how to present it. The role is the
+  purpose of a wl_surface. Examples of roles are a cursor for a
+  pointer (as set by wl_pointer.set_cursor), a drag icon
+  (wl_data_device.start_drag), a sub-surface
+  (wl_subcompositor.get_subsurface), and a window as defined by a
+  shell protocol (e.g. wl_shell.get_shell_surface).
+
+  A surface can have only one role at a time. Initially a
+  wl_surface does not have a role. Once a wl_surface is given a
+  role, it can never be given a different role again, even if the
+  wl_surface loses the role in between.
+
+  Surface roles are set by requests in other interfaces such as
+  wl_pointer.set_cursor. The request should explicitly mention
+  that this request gives a role to a wl_surface. Often, this
+  request also creates a new protocol object that represents the
+  role and adds additional functionality to wl_surface. When a
+  client wants to destroy a wl_surface, they must destroy this 'role
+  object' before the wl_surface.
+
+  A wl_surface may lose its role as specified in the interface
+  that gave it the role or in the interface of the role object.
+  Losing a role means losing all the role-specific state.
 
 
 
-- 
1.8.5.5

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


Re: [Help]Question about graphics architecture for weson/wayland

2014-08-19 Thread The Rasterman
On Tue, 19 Aug 2014 06:59:22 + Yang Andy  said:

> Hi Pekka
> 
> Thank you very much for your reply.
> 
> > If you have a DRM kernel driver supporting KMS, use Weston's drm-backend
> > but pass --use-pixman on the command line.
> 
> DRM kernel driver is for display device? Not for GPU?
> 
> In other words,i can use drm-backend even though i have no GPU device.

you may not have a drm driver for your hardware, but nothing stops you having
fdrm and kms drivers even without a 3d gpu. you may havd 2d accel hardware that
you want to manage or just simply buffer allocation/management (a lot of older
hardware requires display buffers to be in linear/physical (not virtual) memory
and thus requires a specialized allocator. some requires it to be in specific
physical memory ranges (an older soc i know requires all gfx buffers for
display and 2d accel to be inside the first physical 16mb of ram - on even
older hardware before my linux days all gfx primitives, sprites, cursors,
audio data, fb scanout control commands and floppy disk i/o data had to reside
in the same 512kb and if it didn't it was the cpu's job to get it to/from
there).

if clients software rendered, but used drm buffers to render into, then it
might be possible for the compositor (eg weston) if it knows it can, to program
hardware layers or fbs to point directly to these buffers to scan-out from.
this is how you get truly zero-copy display/output, but it would require that
client uses drm directly to allocate buffers, use software to render (or
whatever it likes actually), then sends compositor drm buffers.

as such this is on a "eventually we will do this" plan for efl, but as it is
not easy to support drm in a universal way to allocate buffers for
scanout/display (not the last time i looked), we've got that on the back-burner.

if one day there are api's we could use where we can allocate "drm buffers" an
d ensure they are linear (or of a specific format) or query them for the
layouts we do support (tiled vs linear), and can request properties on
allocation - eg "can scan out" "can be used as pointer" "can be used as
texture" etc. then that'd be awesome and we'd use it for our software rendering
(and have a wayland_software_drm engine or something - or maybe make the shm
engine detect this if it is available and auto use if it works). but we don't
have that today because last i looked.. no such thing exists that we can use -
someone correct me if something has changed... please! :)

> Andy
> > Date: Tue, 19 Aug 2014 09:44:14 +0300
> > From: ppaala...@gmail.com
> > To: williamyan...@hotmail.com
> > CC: ras...@rasterman.com; wayland-devel@lists.freedesktop.org
> > Subject: Re: [Help]Question about graphics architecture for weson/wayland
> > 
> > On Tue, 19 Aug 2014 02:20:58 +
> > Yang Andy  wrote:
> > 
> > > My senario is that my target device do not support hardware
> > > accelerate.(do not use gpu) But i have to use EFL to develop
> > > application in wayland/weston platform.
> > > 
> > > In order to achieve my task,how do i setup weston?
> > 
> > Oh, so this was your real question.
> > 
> > If you have a DRM kernel driver supporting KMS, use Weston's drm-backend
> > but pass --use-pixman on the command line.
> > 
> > If you do not have a DRM driver, but you do have /dev/fb0, use Weston's
> > fbdev-backend.
> > 
> > 
> > Thanks,
> > pq
> 

-- 
- Codito, ergo sum - "I code, therefore I am" --
The Rasterman (Carsten Haitzler)ras...@rasterman.com

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


Re: [PATCH wayland] protocol: define the concept of wl_surface role

2014-08-19 Thread Pekka Paalanen
On Mon, 18 Aug 2014 10:32:28 -0400
"Jasper St. Pierre"  wrote:

> On Mon, Aug 18, 2014 at 10:14 AM, Pekka Paalanen 
> wrote:
> 
> > From: Pekka Paalanen 
> >
> > Define what a role is, and what restrictions there are.
> >
> > A change to existing behaviour is that a role cannot be changed at all
> > once set. However, this is unlikely to cause problems, as there is no
> > reason to re-use wl_surfaces in clients.
> >
> 
> Thanks for this. I was going to add it in the Publican docs, but those are
> significantly out of date and I spent more time laughing at them than
> writing things in them. We should fix that. :(

Yeah...

> Looks good overall. I'm going to be a terrible person and nitpick your
> grammar. Sorry about that in advance!

Ha! Good that someone cares about that once in a while. :-)

> > Signed-off-by: Pekka Paalanen 
> > ---
> >  protocol/wayland.xml | 20 ++--
> >  1 file changed, 18 insertions(+), 2 deletions(-)
> >
> > diff --git a/protocol/wayland.xml b/protocol/wayland.xml
> > index 2d57f69..39af61f 100644
> > --- a/protocol/wayland.xml
> > +++ b/protocol/wayland.xml
> > @@ -973,8 +973,24 @@
> >local coordinates of the pixel content, in case a buffer_transform
> >or a buffer_scale is used.
> >
> > -  Surfaces are also used for some special purposes, e.g. as
> > -  cursor images for pointers, drag icons, etc.
> > +  A surface without a "role" is fairly useless, a compositor does not
> > +  know where, when or how to present it. The role is the purpose of a
> > +  wl_surface. Examples of roles are a cursor for a pointer, a drag
> > icon,
> > +  a sub-surface, and a window as defined by a shell protocol.
> >
> 
> I'd give more concrete examples. "Examples of surface roles include the
> pointer icon (as set by wl_pointer.set_cursor), a drag icon (as set by
> wl_data_device.start_drag), ..."

I actually though of that but didn't bother, will add.

> +  A surface can have only one role at a time. Initially a wl_surface
> > +  does not have a role. Once a role is set, it can never be set to a
> > +  different role again.
> >
> 
> There is an important clarification here. If I have two surfaces like
> "pointer cursor", "I-beam cursor", I can call wl_pointer.set_cursor on
> either of them in succession. I could imagine someone being confused that
> "the pointer icon" role is a singleton, and when the I-beam cursor gains
> it, the pointer cursor loses it, and she might think that you would have to
> create a new wl_surface since it's illegal to set the wl_pointer.set_cursor
> role on the pointer cursor surface again.

Hmm, I thought the "different" was enough to say that. Roles are not
singletons either.

> What we're trying to do is prevent surface reuse, so you can't transform
> something that was once a pointer cursor into a wl_subsurface or anything
> like that.

Exactly.

> I'm not really sure how to describe this, though. I'm not too happy with
> this, but it's the best I came up with.
> 
> "A surface can only have one role at a time. When you first make a request
> to set a surface's role, the surface can then only have that role forever,
> even if it loses the role. For instance, if somebody sets the 'subsurface'
> role on a wl_surface, then it can only ever be a subsurface, even if you
> destroy the associated wl_subsurface object"
> 
> We should probably describe the concept of "losing the role" from e.g.
> wl_subsurface.destroy, wl_pointer.set_cursor above.

I'll think about it.

> +  A role is set by a request in another interface than wl_surface
> > +  itself. The protocol specification of the other interface
> > +  defines, that the request gives a specific role to a wl_surface.
> > +  Often, this request also creates a new protocol object, that
> > +  represents the role and extends the interface to the wl_surface.
> > +  If such a new protocol object is created, clients are
> > +  recommended to destroy it before they destroy the wl_surface.
> > +  Whether destroying the wl_surface first is legal, depends on the
> > +  protocol interface related to the role.
> >
> 
> I know you're a non-native speaker, so I won't bash your grammar in-depth.
> I'll just offer a replacement paragraph with everything fixed up. I'm also
> going to strengthen up the wording here a bit.
> 
> "Surface roles are set by requests in other interfaces such as
> wl_pointer.set_cursor. The request should explicitly mention that this
> request gives a role to a wl_surface. Often, this request also creates a
> new protocol object that represents the role and adds additional
> functionality to wl_surface. When clients want to destroy a surface, they
> must destroy this 'role object' before the wl_surface, except when
> specified otherwise."

Okay, that is also compatible with both wl_subsurface and
wl_shell_surface.

> We should also change the description of wl_subsurface to say that
> destroying the wl_surface bef

Re: [PATCH libinput] evdev: allow weird multitouch device without slots

2014-08-19 Thread Peter Hutterer
On Tue, Aug 19, 2014 at 06:29:40AM +0300, Leonid Borisenko wrote:
> HID device 'USB HID v1.11 Mouse' provided by Microsoft Wireless Optical
> Desktop® 2.20 (connected to USB and identified as vendor 0x45e, product
> 0xe3, version 0x111) is reported as supporting EV_ABS event with ABS_MT_SLOT
> code, but nevertheless libevdev_get_num_slots returns -1.

yeah, that's intentional. libevdev detects those devices (through guesswork,
but still...) and returns -1 as slot number.

> Furthermore, all connected devices (mouse and keyboard) don't produce any
> EV_ABS events for that HID Mouse device in tests with evtest.
> 
> Before this fix mouse didn't work in Weston (but worked in X.Org).
> 
> As partially explained by LKML message [1] (Message-Id [2]):
> 
> The root of the problem comes from hid-input, which maps unknown axis
> to ABS_MISC. However, when an event code is already in use, hid-input
> uses the one after, leading to uses of ABS_MISC + N, where N is the
> number of unknown axis.
> 
> We are encountering a problem with the multitouch protocol here because
> if a device has more than 7 unknown axis (which is the case for the PS3
> Sixaxis controller), then the unknown axis get maps to ABS_MT_SLOT and
> beyond.
> 
> [1] https://lkml.org/lkml/2013/11/20/515
> [2] 1384983141-31019-1-git-send-email-benjamin.tissoi...@redhat.com
> 
> Signed-off-by: Leonid Borisenko 
> ---
>  src/evdev.c | 16 +---
>  1 file changed, 13 insertions(+), 3 deletions(-)
> 
> diff --git a/src/evdev.c b/src/evdev.c
> index a125510..d6a14b7 100644
> --- a/src/evdev.c
> +++ b/src/evdev.c
> @@ -144,7 +144,7 @@ evdev_flush_pending_event(struct evdev_device *device, 
> uint64_t time)
>   pointer_notify_motion(base, time, motion.dx, motion.dy);
>   break;
>   case EVDEV_ABSOLUTE_MT_DOWN:
> - if (!(device->seat_caps & EVDEV_DEVICE_TOUCH))
> + if (slot == -1 || !(device->seat_caps & EVDEV_DEVICE_TOUCH))
>   break;
>  
>   if (device->mt.slots[slot].seat_slot != -1) {
> @@ -167,7 +167,7 @@ evdev_flush_pending_event(struct evdev_device *device, 
> uint64_t time)
>   touch_notify_touch_down(base, time, slot, seat_slot, x, y);
>   break;
>   case EVDEV_ABSOLUTE_MT_MOTION:
> - if (!(device->seat_caps & EVDEV_DEVICE_TOUCH))
> + if (slot == -1 || !(device->seat_caps & EVDEV_DEVICE_TOUCH))
>   break;
>  
>   seat_slot = device->mt.slots[slot].seat_slot;
> @@ -180,7 +180,7 @@ evdev_flush_pending_event(struct evdev_device *device, 
> uint64_t time)
>   touch_notify_touch_motion(base, time, slot, seat_slot, x, y);
>   break;
>   case EVDEV_ABSOLUTE_MT_UP:
> - if (!(device->seat_caps & EVDEV_DEVICE_TOUCH))
> + if (slot == -1 || !(device->seat_caps & EVDEV_DEVICE_TOUCH))
>   break;
>  
>   seat_slot = device->mt.slots[slot].seat_slot;
> @@ -680,6 +680,16 @@ evdev_configure_device(struct evdev_device *device)
>   active_slot = libevdev_get_current_slot(evdev);
>   }
>  
> + if (num_slots <= 0) {
> + log_bug_kernel(libinput,
> +"multitouch input device %s "
> +"has %s slots\n",
> +device->devnode,
> +num_slots == 0 ? "0" : "no");
> + num_slots = 0;
> + active_slot = -1;
> + }
> +

so, as I said above the libevdev behaviour is intentional and our indicator
that this isn't a MT device after all. We should integrate that knowledge
better so that we don't label a device as touch device when it isn't, and so
that we process events from those axes as normal ABS events instead of MT
events.

Cheers,
   Peter



>   slots = calloc(num_slots, sizeof(struct mt_slot));
>   if (!slots)
>   return -1;
> -- 
> 2.1.0.rc1
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


RE: [Help]Question about graphics architecture for weson/wayland

2014-08-19 Thread Yang Andy
Hi Pekka

Thank you very much for your reply.

> If you have a DRM kernel driver supporting KMS, use Weston's drm-backend
> but pass --use-pixman on the command line.

DRM kernel driver is for display device? Not for GPU?

In other words,i can use drm-backend even though i have no GPU device.

Andy
> Date: Tue, 19 Aug 2014 09:44:14 +0300
> From: ppaala...@gmail.com
> To: williamyan...@hotmail.com
> CC: ras...@rasterman.com; wayland-devel@lists.freedesktop.org
> Subject: Re: [Help]Question about graphics architecture for weson/wayland
> 
> On Tue, 19 Aug 2014 02:20:58 +
> Yang Andy  wrote:
> 
> > My senario is that my target device do not support hardware
> > accelerate.(do not use gpu) But i have to use EFL to develop
> > application in wayland/weston platform.
> > 
> > In order to achieve my task,how do i setup weston?
> 
> Oh, so this was your real question.
> 
> If you have a DRM kernel driver supporting KMS, use Weston's drm-backend
> but pass --use-pixman on the command line.
> 
> If you do not have a DRM driver, but you do have /dev/fb0, use Weston's
> fbdev-backend.
> 
> 
> Thanks,
> pq
  ___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel