.gitignore | 1 Makefile.am | 472 +- README | 146 clients/cliptest.c | 2 clients/confine.c | 531 +++ clients/desktop-shell.c | 8 clients/editor.c | 3 clients/eventdemo.c | 1 clients/ivi-shell-user-interface.c | 3 clients/keyboard.c | 43 clients/multi-resource.c | 10 clients/nested-client.c | 1 clients/nested.c | 13 clients/presentation-shm.c | 3 clients/resizor.c | 158 clients/scaler.c | 44 clients/simple-damage.c | 127 clients/simple-dmabuf-intel.c | 120 clients/simple-dmabuf-v4l.c | 123 clients/simple-egl.c | 122 clients/simple-shm.c | 96 clients/simple-touch.c | 3 clients/stacking.c | 1 clients/terminal.c | 74 clients/weston-info.c | 1 clients/weston-simple-im.c | 15 clients/window.c | 641 +++ clients/window.h | 67 compositor/cms-colord.c | 567 +++ compositor/cms-helper.c | 136 compositor/cms-helper.h | 75 compositor/cms-static.c | 119 compositor/main.c | 1791 ++++++++++ compositor/screen-share.c | 1129 ++++++ compositor/systemd-notify.c | 165 compositor/text-backend.c | 1085 ++++++ compositor/weston-screenshooter.c | 192 + compositor/weston.desktop | 5 compositor/weston.h | 73 compositor/weston.pc.in | 12 compositor/xwayland.c | 209 + configure.ac | 80 desktop-shell/exposay.c | 14 desktop-shell/input-panel.c | 19 desktop-shell/shell.c | 3264 ++++--------------- desktop-shell/shell.h | 16 fullscreen-shell/fullscreen-shell.c | 115 ivi-shell/hmi-controller.c | 18 ivi-shell/input-panel-ivi.c | 19 ivi-shell/ivi-layout-export.h | 11 ivi-shell/ivi-layout-private.h | 25 ivi-shell/ivi-layout-shell.h | 3 ivi-shell/ivi-layout-transition.c | 3 ivi-shell/ivi-layout.c | 300 + ivi-shell/ivi-shell.c | 42 ivi-shell/ivi-shell.h | 6 libweston-desktop/client.c | 212 + libweston-desktop/internal.h | 236 + libweston-desktop/libweston-desktop.c | 244 + libweston-desktop/libweston-desktop.h | 166 libweston-desktop/libweston-desktop.pc.in | 11 libweston-desktop/seat.c | 368 ++ libweston-desktop/surface.c | 810 ++++ libweston-desktop/wl-shell.c | 466 ++ libweston-desktop/xdg-shell-v5.c | 822 ++++ libweston-desktop/xdg-shell-v6.c | 1276 +++++++ libweston-desktop/xwayland.c | 375 ++ libweston/animation.c | 502 ++ libweston/bindings.c | 580 +++ libweston/clipboard.c | 307 + libweston/compositor-drm.c | 3285 +++++++++++++++++++ libweston/compositor-drm.h | 138 libweston/compositor-fbdev.c | 784 ++++ libweston/compositor-fbdev.h | 63 libweston/compositor-headless.c | 274 + libweston/compositor-headless.h | 56 libweston/compositor-rdp.c | 1346 +++++++ libweston/compositor-rdp.h | 54 libweston/compositor-wayland.c | 2361 +++++++++++++ libweston/compositor-wayland.h | 63 libweston/compositor-x11.c | 1745 ++++++++++ libweston/compositor-x11.h | 64 libweston/compositor.c | 5119 ++++++++++++++++++++++++++++++ libweston/compositor.h | 1820 ++++++++++ libweston/data-device.c | 1343 +++++++ libweston/dbus.c | 408 ++ libweston/dbus.h | 110 libweston/gl-renderer.c | 3191 ++++++++++++++++++ libweston/gl-renderer.h | 117 libweston/input.c | 4558 ++++++++++++++++++++++++++ libweston/launcher-direct.c | 315 + libweston/launcher-impl.h | 45 libweston/launcher-logind.c | 840 ++++ libweston/launcher-util.c | 118 libweston/launcher-util.h | 58 libweston/launcher-weston-launch.c | 286 + libweston/libbacklight.c | 318 + libweston/libbacklight.h | 79 libweston/libinput-device.c | 604 +++ libweston/libinput-device.h | 80 libweston/libinput-seat.c | 417 ++ libweston/libinput-seat.h | 72 libweston/libweston.pc.in | 11 libweston/linux-dmabuf.c | 498 ++ libweston/linux-dmabuf.h | 88 libweston/log.c | 98 libweston/noop-renderer.c | 122 libweston/pixman-renderer.c | 932 +++++ libweston/pixman-renderer.h | 40 libweston/plugin-registry.c | 156 libweston/plugin-registry.h | 55 libweston/screenshooter.c | 488 ++ libweston/spring-tool.c | 76 libweston/timeline-object.h | 55 libweston/timeline.c | 292 + libweston/timeline.h | 65 libweston/vaapi-recorder.c | 1161 ++++++ libweston/vaapi-recorder.h | 38 libweston/version.h.in | 50 libweston/vertex-clipping.c | 330 + libweston/vertex-clipping.h | 66 libweston/weston-egl-ext.h | 156 libweston/weston-launch.c | 782 ++++ libweston/weston-launch.h | 49 libweston/zoom.c | 178 + man/weston.ini.man | 1 protocol/scaler.xml | 208 - releasing.txt | 21 shared/config-parser.c | 60 shared/config-parser.h | 6 shared/frame.c | 1 shared/helpers.h | 11 shared/image-loader.c | 4 shared/option-parser.c | 14 shared/platform.h | 47 shared/string-helpers.h | 70 shared/xalloc.c | 6 shared/xalloc.h | 1 src/animation.c | 485 -- src/bindings.c | 579 --- src/clipboard.c | 306 - src/cms-colord.c | 568 --- src/cms-helper.c | 135 src/cms-helper.h | 75 src/cms-static.c | 118 src/compositor-drm.c | 3238 ------------------ src/compositor-drm.h | 127 src/compositor-fbdev.c | 851 ---- src/compositor-fbdev.h | 51 src/compositor-headless.c | 284 - src/compositor-headless.h | 53 src/compositor-rdp.c | 1324 ------- src/compositor-rdp.h | 54 src/compositor-rpi.c | 575 --- src/compositor-wayland.c | 2350 ------------- src/compositor-wayland.h | 61 src/compositor-x11.c | 1722 ---------- src/compositor-x11.h | 62 src/compositor.c | 5012 ----------------------------- src/compositor.h | 1732 ---------- src/data-device.c | 1340 ------- src/dbus.c | 407 -- src/dbus.h | 110 src/gl-renderer.c | 3157 ------------------ src/gl-renderer.h | 132 src/input.c | 2765 ---------------- src/launcher-direct.c | 315 - src/launcher-impl.h | 45 src/launcher-logind.c | 839 ---- src/launcher-util.c | 117 src/launcher-util.h | 58 src/launcher-weston-launch.c | 300 - src/libbacklight.c | 310 - src/libbacklight.h | 79 src/libinput-device.c | 620 --- src/libinput-device.h | 78 src/libinput-seat.c | 411 -- src/libinput-seat.h | 65 src/linux-dmabuf.c | 497 -- src/linux-dmabuf.h | 88 src/log.c | 143 src/main.c | 1487 -------- src/noop-renderer.c | 121 src/pixman-renderer.c | 931 ----- src/pixman-renderer.h | 40 src/rpi-bcm-stubs.h | 327 - src/rpi-renderer.c | 1830 ---------- src/rpi-renderer.h | 52 src/screen-share.c | 1127 ------ src/screenshooter.c | 634 --- src/spring-tool.c | 74 src/systemd-notify.c | 168 src/text-backend.c | 1082 ------ src/timeline-object.h | 55 src/timeline.c | 292 - src/timeline.h | 65 src/vaapi-recorder.c | 1161 ------ src/vaapi-recorder.h | 38 src/version.h.in | 50 src/vertex-clipping.c | 330 - src/vertex-clipping.h | 66 src/weston-egl-ext.h | 120 src/weston-launch.c | 770 ---- src/weston-launch.h | 49 src/weston.desktop | 5 src/weston.pc.in | 12 src/zoom.c | 177 - tests/buffer-count-test.c | 1 tests/config-parser-test.c | 186 + tests/event-test.c | 26 tests/internal-screenshot-test.c | 80 tests/ivi-test.h | 1 tests/ivi_layout-internal-test.c | 3 tests/ivi_layout-test-plugin.c | 49 tests/ivi_layout-test.c | 12 tests/keyboard-test.c | 2 tests/plugin-registry-test.c | 101 tests/presentation-test.c | 3 tests/string-test.c | 87 tests/surface-global-test.c | 3 tests/surface-screenshot.c | 1 tests/surface-test.c | 2 tests/text-test.c | 1 tests/vertex-clip-test.c | 2 tests/viewporter-test.c | 553 +++ tests/weston-test-client-helper.c | 588 ++- tests/weston-test-client-helper.h | 40 tests/weston-test.c | 26 tests/weston-tests-env | 4 wcap/wcap-decode.h | 2 xwayland/dnd.c | 1 xwayland/hash.c | 2 xwayland/hash.h | 2 xwayland/launcher.c | 282 - xwayland/selection.c | 1 xwayland/window-manager.c | 134 xwayland/xwayland-api.h | 176 + xwayland/xwayland-internal-interface.h | 62 xwayland/xwayland.h | 10 239 files changed, 53400 insertions(+), 46808 deletions(-)
New commits: commit a08dff5bce52804850595a5ff968336a60574f4f Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 20 12:22:46 2016 -0700 configure.ac: bump to version 1.12.0 for the official release diff --git a/configure.ac b/configure.ac index bd59725..619d3f6 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ m4_define([weston_major_version], [1]) -m4_define([weston_minor_version], [11]) -m4_define([weston_micro_version], [94]) +m4_define([weston_minor_version], [12]) +m4_define([weston_micro_version], [0]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) m4_define([libweston_major_version], [1]) -m4_define([libweston_minor_version], [11]) -m4_define([libweston_patch_version], [94]) +m4_define([libweston_minor_version], [12]) +m4_define([libweston_patch_version], [0]) AC_PREREQ([2.64]) AC_INIT([weston], @@ -14,7 +14,7 @@ AC_INIT([weston], [weston], [http://wayland.freedesktop.org]) -WAYLAND_PREREQ_VERSION="1.11.91" +WAYLAND_PREREQ_VERSION="1.12.0" AC_SUBST([WESTON_VERSION_MAJOR], [weston_major_version]) AC_SUBST([WESTON_VERSION_MINOR], [weston_minor_version]) commit a56b053ee154fd8c5b6782fa120ddc045e4e0147 Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Tue Sep 13 10:05:58 2016 +0200 libweston-desktop: Fix configure event for already well-sized surfaces Even if the surface size is already correct, we need to store the configured size in case some other state change triggers a configure event. Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Arnaud Vrac <av...@freebox.fr> diff --git a/libweston-desktop/wl-shell.c b/libweston-desktop/wl-shell.c index 74ce473..ded69f7 100644 --- a/libweston-desktop/wl-shell.c +++ b/libweston-desktop/wl-shell.c @@ -67,8 +67,8 @@ weston_desktop_wl_shell_surface_set_size(struct weston_desktop_surface *dsurface struct weston_surface *wsurface = weston_desktop_surface_get_surface(surface->surface); - if (wsurface->width == width && wsurface->height == height) - return; + if ((wsurface->width == width && wsurface->height == height) || + (width == 0 && height == 0)) wl_shell_surface_send_configure(surface->resource, WL_SHELL_SURFACE_RESIZE_NONE, diff --git a/libweston-desktop/xdg-shell-v5.c b/libweston-desktop/xdg-shell-v5.c index 83e5d30..14216b0 100644 --- a/libweston-desktop/xdg-shell-v5.c +++ b/libweston-desktop/xdg-shell-v5.c @@ -192,11 +192,13 @@ weston_desktop_xdg_surface_set_size(struct weston_desktop_surface *dsurface, struct weston_desktop_xdg_surface *surface = user_data; struct weston_surface *wsurface = weston_desktop_surface_get_surface(surface->surface); - if (wsurface->width == width && wsurface->height == height) - return; - surface->requested_size.width = width; surface->requested_size.height = height; + + if ((wsurface->width == width && wsurface->height == height) || + (width == 0 && height == 0)) + return; + weston_desktop_xdg_surface_schedule_configure(surface); } diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c index d4d0112..2afce81 100644 --- a/libweston-desktop/xdg-shell-v6.c +++ b/libweston-desktop/xdg-shell-v6.c @@ -607,11 +607,13 @@ weston_desktop_xdg_toplevel_set_size(struct weston_desktop_surface *dsurface, struct weston_surface *wsurface = weston_desktop_surface_get_surface(toplevel->base.desktop_surface); - if (wsurface->width == width && wsurface->height == height) - return; - toplevel->requested_size.width = width; toplevel->requested_size.height = height; + + if ((wsurface->width == width && wsurface->height == height) || + (width == 0 && height == 0)) + return; + weston_desktop_xdg_surface_schedule_configure(&toplevel->base); } commit 870f384d0eb364ba049a73f682cef981704c3385 Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 13 12:18:23 2016 -0700 configure.ac: bump to version 1.11.94 for the RC2 release diff --git a/configure.ac b/configure.ac index 076b336..bd59725 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ m4_define([weston_major_version], [1]) m4_define([weston_minor_version], [11]) -m4_define([weston_micro_version], [93]) +m4_define([weston_micro_version], [94]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) m4_define([libweston_major_version], [1]) m4_define([libweston_minor_version], [11]) -m4_define([libweston_patch_version], [93]) +m4_define([libweston_patch_version], [94]) AC_PREREQ([2.64]) AC_INIT([weston], commit 0abf8903cbdc95d1ddc464476efe0db4fd710f06 Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Sun Sep 11 11:34:47 2016 +0200 libweston-desktop/xdg_shell_v6: Raise errors on not-yet-possible requests These requests need a mapped surface, which can only happen after the initial configure event. Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Jonas Ådahl <jad...@gmail.com> diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c index fbf3e69..d4d0112 100644 --- a/libweston-desktop/xdg-shell-v6.c +++ b/libweston-desktop/xdg-shell-v6.c @@ -349,6 +349,13 @@ weston_desktop_xdg_toplevel_protocol_show_window_menu(struct wl_client *wl_clien struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + if (!toplevel->base.configured) { + wl_resource_post_error(toplevel->resource, + ZXDG_SURFACE_V6_ERROR_NOT_CONSTRUCTED, + "Surface has not been configured yet"); + return; + } + weston_desktop_api_show_window_menu(toplevel->base.desktop, dsurface, seat, x, y); } @@ -366,6 +373,13 @@ weston_desktop_xdg_toplevel_protocol_move(struct wl_client *wl_client, struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + if (!toplevel->base.configured) { + wl_resource_post_error(toplevel->resource, + ZXDG_SURFACE_V6_ERROR_NOT_CONSTRUCTED, + "Surface has not been configured yet"); + return; + } + weston_desktop_api_move(toplevel->base.desktop, dsurface, seat, serial); } @@ -383,6 +397,13 @@ weston_desktop_xdg_toplevel_protocol_resize(struct wl_client *wl_client, struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + if (!toplevel->base.configured) { + wl_resource_post_error(toplevel->resource, + ZXDG_SURFACE_V6_ERROR_NOT_CONSTRUCTED, + "Surface has not been configured yet"); + return; + } + weston_desktop_api_resize(toplevel->base.desktop, dsurface, seat, serial, edges); } commit 3d7e60798a23026d9397d5cff56127917998e78a Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Sun Sep 11 11:29:23 2016 +0200 libweston-desktop/xdg_shell_v6: Add surface as needed Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Jonas Ådahl <jad...@gmail.com> diff --git a/libweston-desktop/xdg-shell-v6.c b/libweston-desktop/xdg-shell-v6.c index 70e9132..fbf3e69 100644 --- a/libweston-desktop/xdg-shell-v6.c +++ b/libweston-desktop/xdg-shell-v6.c @@ -284,6 +284,18 @@ static void weston_desktop_xdg_surface_schedule_configure(struct weston_desktop_xdg_surface *surface); static void +weston_desktop_xdg_toplevel_ensure_added(struct weston_desktop_xdg_toplevel *toplevel) +{ + if (toplevel->added) + return; + + weston_desktop_api_surface_added(toplevel->base.desktop, + toplevel->base.desktop_surface); + weston_desktop_xdg_surface_schedule_configure(&toplevel->base); + toplevel->added = true; +} + +static void weston_desktop_xdg_toplevel_protocol_set_parent(struct wl_client *wl_client, struct wl_resource *resource, struct wl_resource *parent_resource) @@ -296,6 +308,8 @@ weston_desktop_xdg_toplevel_protocol_set_parent(struct wl_client *wl_client, if (parent_resource != NULL) parent = wl_resource_get_user_data(parent_resource); + + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_set_parent(toplevel->base.desktop, dsurface, parent); } @@ -416,6 +430,7 @@ weston_desktop_xdg_toplevel_protocol_set_maximized(struct wl_client *wl_client, struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_maximized_requested(toplevel->base.desktop, dsurface, true); } @@ -428,6 +443,7 @@ weston_desktop_xdg_toplevel_protocol_unset_maximized(struct wl_client *wl_client struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_maximized_requested(toplevel->base.desktop, dsurface, false); } @@ -445,6 +461,7 @@ weston_desktop_xdg_toplevel_protocol_set_fullscreen(struct wl_client *wl_client, if (output_resource != NULL) output = wl_resource_get_user_data(output_resource); + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_fullscreen_requested(toplevel->base.desktop, dsurface, true, output); } @@ -458,6 +475,7 @@ weston_desktop_xdg_toplevel_protocol_unset_fullscreen(struct wl_client *wl_clien struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_fullscreen_requested(toplevel->base.desktop, dsurface, false, NULL); } @@ -471,6 +489,7 @@ weston_desktop_xdg_toplevel_protocol_set_minimized(struct wl_client *wl_client, struct weston_desktop_xdg_toplevel *toplevel = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_toplevel_ensure_added(toplevel); weston_desktop_api_minimized_requested(toplevel->base.desktop, dsurface); } @@ -584,10 +603,7 @@ weston_desktop_xdg_toplevel_committed(struct weston_desktop_xdg_toplevel *toplev bool reconfigure = false; if (!wsurface->buffer_ref.buffer && !toplevel->added) { - weston_desktop_api_surface_added(toplevel->base.desktop, - toplevel->base.desktop_surface); - weston_desktop_xdg_surface_schedule_configure(&toplevel->base); - toplevel->added = true; + weston_desktop_xdg_toplevel_ensure_added(toplevel); return; } if (!wsurface->buffer_ref.buffer) commit e30b5fb2e7596dc033218d15e513a7c0ba182fc5 Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Fri Sep 9 19:53:38 2016 +0200 Revert "terminal: Fix crash due to race condition in init" This reverts commit 5c611d933f60f720db98331c9c1c6ed4420f9782. diff --git a/clients/terminal.c b/clients/terminal.c index 34bc2c9..6257cb7 100644 --- a/clients/terminal.c +++ b/clients/terminal.c @@ -2976,7 +2976,6 @@ terminal_create(struct display *display) cairo_surface_destroy(surface); terminal_resize(terminal, 20, 5); /* Set minimum size first */ - terminal_resize_cells(terminal, 20, 5); terminal_resize(terminal, 80, 25); wl_list_insert(terminal_list.prev, &terminal->link); commit 6967f0e2d25adca0a486404409aed18f51a6010c Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Thu Aug 18 15:51:38 2016 +0200 libweston-desktop/xdg_shell_v5: Add surface as needed This way we are sure the compositor is aware of a surface when we forward a request for said surface. Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Jonas Ådahl <jad...@gmail.com> diff --git a/libweston-desktop/xdg-shell-v5.c b/libweston-desktop/xdg-shell-v5.c index f8943ab..83e5d30 100644 --- a/libweston-desktop/xdg-shell-v5.c +++ b/libweston-desktop/xdg-shell-v5.c @@ -43,6 +43,7 @@ struct weston_desktop_xdg_surface { struct wl_resource *resource; struct weston_desktop_surface *surface; struct weston_desktop *desktop; + bool added; struct wl_event_source *add_idle; struct wl_event_source *configure_idle; uint32_t configure_serial; @@ -66,6 +67,19 @@ struct weston_desktop_xdg_popup { }; static void +weston_desktop_xdg_surface_ensure_added(struct weston_desktop_xdg_surface *surface) +{ + if (surface->added) + return; + + if (surface->add_idle != NULL) + wl_event_source_remove(surface->add_idle); + surface->add_idle = NULL; + weston_desktop_api_surface_added(surface->desktop, surface->surface); + surface->added = true; +} + +static void weston_desktop_xdg_surface_send_configure(void *data) { struct weston_desktop_xdg_surface *surface = data; @@ -210,12 +224,7 @@ weston_desktop_xdg_surface_committed(struct weston_desktop_surface *dsurface, surface->next_geometry); } - if (surface->add_idle != NULL) { - wl_event_source_remove(surface->add_idle); - surface->add_idle = NULL; - weston_desktop_api_surface_added(surface->desktop, - surface->surface); - } + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_committed(surface->desktop, surface->surface, sx, sy); } @@ -283,7 +292,9 @@ weston_desktop_xdg_surface_destroy(struct weston_desktop_surface *dsurface, { struct weston_desktop_xdg_surface *surface = user_data; - weston_desktop_api_surface_removed(surface->desktop, surface->surface); + if (surface->added) + weston_desktop_api_surface_removed(surface->desktop, + surface->surface); if (surface->add_idle != NULL) wl_event_source_remove(surface->add_idle); @@ -307,6 +318,8 @@ weston_desktop_xdg_surface_protocol_set_parent(struct wl_client *wl_client, if (parent_resource != NULL) parent = wl_resource_get_user_data(parent_resource); + + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_set_parent(surface->desktop, dsurface, parent); } @@ -346,6 +359,7 @@ weston_desktop_xdg_surface_protocol_show_window_menu(struct wl_client *wl_client struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_show_window_menu(surface->desktop, dsurface, seat, x, y); } @@ -362,6 +376,7 @@ weston_desktop_xdg_surface_protocol_move(struct wl_client *wl_client, struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_move(surface->desktop, dsurface, seat, serial); } @@ -379,6 +394,7 @@ weston_desktop_xdg_surface_protocol_resize(struct wl_client *wl_client, struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_resize(surface->desktop, dsurface, seat, serial, edges); } @@ -425,6 +441,7 @@ weston_desktop_xdg_surface_protocol_set_maximized(struct wl_client *wl_client, struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_maximized_requested(surface->desktop, dsurface, true); } @@ -437,6 +454,7 @@ weston_desktop_xdg_surface_protocol_unset_maximized(struct wl_client *wl_client, struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_maximized_requested(surface->desktop, dsurface, false); } @@ -454,6 +472,7 @@ weston_desktop_xdg_surface_protocol_set_fullscreen(struct wl_client *wl_client, if (output_resource != NULL) output = wl_resource_get_user_data(output_resource); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_fullscreen_requested(surface->desktop, dsurface, true, output); } @@ -467,6 +486,7 @@ weston_desktop_xdg_surface_protocol_unset_fullscreen(struct wl_client *wl_client struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_fullscreen_requested(surface->desktop, dsurface, false, NULL); } @@ -480,6 +500,7 @@ weston_desktop_xdg_surface_protocol_set_minimized(struct wl_client *wl_client, struct weston_desktop_xdg_surface *surface = weston_desktop_surface_get_implementation_data(dsurface); + weston_desktop_xdg_surface_ensure_added(surface); weston_desktop_api_minimized_requested(surface->desktop, dsurface); } @@ -578,11 +599,12 @@ weston_desktop_xdg_shell_protocol_use_unstable_version(struct wl_client *wl_clie } static void -weston_desktop_xdg_surface_add(void *user_data) +weston_desktop_xdg_surface_add_idle_callback(void *user_data) { struct weston_desktop_xdg_surface *surface = user_data; + surface->add_idle = NULL; - weston_desktop_api_surface_added(surface->desktop, surface->surface); + weston_desktop_xdg_surface_ensure_added(surface); } static void @@ -632,7 +654,7 @@ weston_desktop_xdg_shell_protocol_get_xdg_surface(struct wl_client *wl_client, surface->add_idle = wl_event_loop_add_idle(loop, - weston_desktop_xdg_surface_add, + weston_desktop_xdg_surface_add_idle_callback, surface); } commit 920cf048f36b1aa5bb121de809ac37b900baf3e0 Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Tue Aug 16 14:26:20 2016 +0200 desktop-shell: Add back the saved position and rotation for fullscreen/maximized Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Jonas Ådahl <jad...@gmail.com> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 35dbbaa..a43c2e2 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -1950,14 +1950,13 @@ unset_fullscreen(struct shell_surface *shsurf) shsurf->saved_x, shsurf->saved_y); else weston_view_set_initial_position(shsurf->view, shsurf->shell); + shsurf->saved_position_valid = false; if (shsurf->saved_rotation_valid) { wl_list_insert(&shsurf->view->geometry.transformation_list, &shsurf->rotation.transform.link); shsurf->saved_rotation_valid = false; } - - /* Layer is updated in set_surface_type(). */ } static void @@ -1974,14 +1973,13 @@ unset_maximized(struct shell_surface *shsurf) shsurf->saved_x, shsurf->saved_y); else weston_view_set_initial_position(shsurf->view, shsurf->shell); + shsurf->saved_position_valid = false; if (shsurf->saved_rotation_valid) { wl_list_insert(&shsurf->view->geometry.transformation_list, &shsurf->rotation.transform.link); shsurf->saved_rotation_valid = false; } - - /* Layer is updated in set_surface_type(). */ } static void @@ -2490,6 +2488,20 @@ desktop_surface_committed(struct weston_desktop_surface *desktop_surface, if (was_maximized) unset_maximized(shsurf); + if ((shsurf->state.fullscreen || shsurf->state.maximized) && + !shsurf->saved_position_valid) { + shsurf->saved_x = shsurf->view->geometry.x; + shsurf->saved_y = shsurf->view->geometry.y; + shsurf->saved_position_valid = true; + + if (!wl_list_empty(&shsurf->rotation.transform.link)) { + wl_list_remove(&shsurf->rotation.transform.link); + wl_list_init(&shsurf->rotation.transform.link); + weston_view_geometry_dirty(shsurf->view); + shsurf->saved_rotation_valid = true; + } + } + if (shsurf->state.fullscreen) { shell_configure_fullscreen(shsurf); } else if (shsurf->state.maximized) { commit 18a81acc17f7d8e49db3ab3f4827252114a4899a Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Tue Aug 16 14:26:03 2016 +0200 desktop-shell: Unset fullscreen/maximized state on commit This only stores the current state, as libweston-desktop is still in charge of double-buffering it. Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Jonas Ådahl <jad...@gmail.com> diff --git a/desktop-shell/shell.c b/desktop-shell/shell.c index 653e85b..35dbbaa 100644 --- a/desktop-shell/shell.c +++ b/desktop-shell/shell.c @@ -129,6 +129,8 @@ struct shell_surface { struct weston_output *output; struct surface_state { + bool fullscreen; + bool maximized; bool lowered; } state; @@ -2404,10 +2406,10 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf, struct weston_seat *seat; /* initial positioning, see also configure() */ - if (weston_desktop_surface_get_fullscreen(shsurf->desktop_surface)) { + if (shsurf->state.fullscreen) { center_on_output(shsurf->view, shsurf->fullscreen_output); shell_map_fullscreen(shsurf); - } else if (weston_desktop_surface_get_maximized(shsurf->desktop_surface)) { + } else if (shsurf->state.maximized) { set_maximized_position(shell, shsurf); } else { weston_view_set_initial_position(shsurf->view, shell); @@ -2418,7 +2420,7 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf, weston_view_update_transform(shsurf->view); shsurf->view->is_mapped = true; - if (weston_desktop_surface_get_maximized(shsurf->desktop_surface)) { + if (shsurf->state.maximized) { surface->output = shsurf->output; shsurf->view->output = shsurf->output; } @@ -2429,8 +2431,7 @@ map(struct desktop_shell *shell, struct shell_surface *shsurf, WESTON_ACTIVATE_FLAG_CONFIGURE); } - if (!weston_desktop_surface_get_maximized(shsurf->desktop_surface) && - !weston_desktop_surface_get_fullscreen(shsurf->desktop_surface)) { + if (!shsurf->state.fullscreen && !shsurf->state.maximized) { switch (shell->win_animation_type) { case ANIMATION_FADE: weston_fade_run(shsurf->view, 0.0, 1.0, 300.0, NULL, NULL); @@ -2455,10 +2456,20 @@ desktop_surface_committed(struct weston_desktop_surface *desktop_surface, weston_desktop_surface_get_surface(desktop_surface); struct weston_view *view = shsurf->view; struct desktop_shell *shell = data; + bool was_fullscreen; + bool was_maximized; if (surface->width == 0) return; + was_fullscreen = shsurf->state.fullscreen; + was_maximized = shsurf->state.maximized; + + shsurf->state.fullscreen = + weston_desktop_surface_get_fullscreen(desktop_surface); + shsurf->state.maximized = + weston_desktop_surface_get_maximized(desktop_surface); + if (!weston_surface_is_mapped(surface)) { map(shell, shsurf, sx, sy); surface->is_mapped = true; @@ -2469,12 +2480,19 @@ desktop_surface_committed(struct weston_desktop_surface *desktop_surface, if (sx == 0 && sy == 0 && shsurf->last_width == surface->width && - shsurf->last_height == surface->height) + shsurf->last_height == surface->height && + was_fullscreen == shsurf->state.fullscreen && + was_maximized == shsurf->state.maximized) return; - if (weston_desktop_surface_get_fullscreen(desktop_surface)) + if (was_fullscreen) + unset_fullscreen(shsurf); + if (was_maximized) + unset_maximized(shsurf); + + if (shsurf->state.fullscreen) { shell_configure_fullscreen(shsurf); - else if (weston_desktop_surface_get_maximized(desktop_surface)) { + } else if (shsurf->state.maximized) { set_maximized_position(shell, shsurf); surface->output = shsurf->output; } else { @@ -2531,8 +2549,6 @@ set_fullscreen(struct shell_surface *shsurf, bool fullscreen, width = shsurf->output->width; height = shsurf->output->height; - } else { - unset_fullscreen(shsurf); } weston_desktop_surface_set_fullscreen(desktop_surface, fullscreen); weston_desktop_surface_set_size(desktop_surface, width, height); @@ -2632,8 +2648,6 @@ set_maximized(struct shell_surface *shsurf, bool maximized) width = area.width; height = area.height; - } else { - unset_maximized(shsurf); } weston_desktop_surface_set_maximized(desktop_surface, maximized); weston_desktop_surface_set_size(desktop_surface, width, height); commit 631560790e260d40ba3d81c2b0b042fa89a080b1 Author: Bryce Harrington <br...@osg.samsung.com> Date: Tue Sep 6 14:47:33 2016 -0700 configure.ac: bump to version 1.11.93 for the RC1 release diff --git a/configure.ac b/configure.ac index 3d4b700..076b336 100644 --- a/configure.ac +++ b/configure.ac @@ -1,11 +1,11 @@ m4_define([weston_major_version], [1]) m4_define([weston_minor_version], [11]) -m4_define([weston_micro_version], [92]) +m4_define([weston_micro_version], [93]) m4_define([weston_version], [weston_major_version.weston_minor_version.weston_micro_version]) m4_define([libweston_major_version], [1]) m4_define([libweston_minor_version], [11]) -m4_define([libweston_patch_version], [92]) +m4_define([libweston_patch_version], [93]) AC_PREREQ([2.64]) AC_INIT([weston], commit 85571a300206efbffdd12f550f1dbc2d59ac005e Author: Emmanuel Gil Peyrot <emmanuel.pey...@collabora.com> Date: Thu Sep 1 15:19:46 2016 +0100 compositor-wayland: Only destroy the egl_window when using GLES. This prevents a segfault when unplugging an output when using pixman. Signed-off-by: Emmanuel Gil Peyrot <emmanuel.pey...@collabora.com> Reviewed-by: Derek Foreman <der...@osg.samsung.com> Reviewed-by: Quentin Glidic <sardemff7+...@sardemff7.net> diff --git a/libweston/compositor-wayland.c b/libweston/compositor-wayland.c index 7c12b4c..c223baa 100644 --- a/libweston/compositor-wayland.c +++ b/libweston/compositor-wayland.c @@ -627,9 +627,9 @@ wayland_output_destroy(struct weston_output *output_base) pixman_renderer_output_destroy(output_base); } else { gl_renderer->output_destroy(output_base); + wl_egl_window_destroy(output->gl.egl_window); } - wl_egl_window_destroy(output->gl.egl_window); wl_surface_destroy(output->parent.surface); if (output->parent.shell_surface) wl_shell_surface_destroy(output->parent.shell_surface); commit 1714f01e0cfcc6b71946d5c8d9898a2eaba86fac Author: Quentin Glidic <sardemff7+...@sardemff7.net> Date: Thu Aug 18 16:45:30 2016 +0200 libweston-desktop/xwayland: Do not over-destroy the view With this weston_view_destroy() call, Xwayland popups make Weston freeze in a busy-loop (probably corrupted wl_list). Signed-off-by: Quentin Glidic <sardemff7+...@sardemff7.net> Reviewed-by: Bryce Harrington <br...@osg.samsung.com> diff --git a/libweston-desktop/xwayland.c b/libweston-desktop/xwayland.c index cb08323..bd68bc6 100644 --- a/libweston-desktop/xwayland.c +++ b/libweston-desktop/xwayland.c @@ -152,13 +152,11 @@ weston_desktop_xwayland_surface_destroy(struct weston_desktop_surface *dsurface, wl_list_remove(&surface->resource_destroy_listener.link); weston_desktop_surface_unset_relative_to(surface->surface); - if (surface->added) { + if (surface->added) weston_desktop_api_surface_removed(surface->desktop, surface->surface); - } else if (surface->state == XWAYLAND) { + else if (surface->state == XWAYLAND) weston_desktop_surface_unlink_view(surface->view); - weston_view_destroy(surface->view); - } free(surface); } commit 5c611d933f60f720db98331c9c1c6ed4420f9782 Author: Bryce Harrington <br...@osg.samsung.com> Date: Mon Aug 29 16:28:08 2016 -0700 terminal: Fix crash due to race condition in init weston-terminal intermittently crashes on startup. This occurs because some parameters in the weston_terminal structure such as data_pitch, don't get set to non-zero until the resize_handler() callback gets triggered. That callback makes a call to terminal_resize_cells(), to calculate the proper values for these parameters.