Mir

Merge lp:~mir-team/mir/1.0-artful into lp:mir/ubuntu

Proposed by Alan Griffiths on 2017-10-08
Status: Merged
Approved by: Alan Griffiths on 2017-10-11
Approved revision: 4284
Merged at revision: 1306
Proposed branch: lp:~mir-team/mir/1.0-artful
Merge into: lp:mir/ubuntu
Diff against target: 71231 lines (+34525/-11921)
1961 files modified
.bzrignore (+2/-0)
CMakeLists.txt (+16/-6)
COPYING.GPL2 (+339/-0)
COPYING.LGPL2 (+481/-0)
HACKING.md (+1/-33)
README.md (+2/-2)
benchmarks/benchmark_multiplexing_dispatchable.cpp (+1/-1)
benchmarks/frame-uniformity/frame_uniformity_test.cpp (+1/-1)
benchmarks/frame-uniformity/frame_uniformity_test.h (+1/-1)
benchmarks/frame-uniformity/main.cpp (+1/-1)
benchmarks/frame-uniformity/touch_measuring_client.cpp (+1/-1)
benchmarks/frame-uniformity/touch_measuring_client.h (+1/-1)
benchmarks/frame-uniformity/touch_producing_server.cpp (+1/-1)
benchmarks/frame-uniformity/touch_producing_server.h (+1/-1)
benchmarks/frame-uniformity/touch_samples.cpp (+1/-1)
benchmarks/frame-uniformity/touch_samples.h (+1/-1)
benchmarks/frame-uniformity/vsync_simulating_graphics_platform.cpp (+1/-1)
benchmarks/frame-uniformity/vsync_simulating_graphics_platform.h (+1/-1)
cmake/FindPIL.cmake (+8/-0)
cmake/MirCommon.cmake (+1/-0)
debian/changelog (+58/-0)
debian/control (+44/-4)
debian/copyright (+28/-20)
debian/libmiral-dev.install (+3/-0)
debian/libmiral2.install (+1/-0)
debian/libmiral2.symbols (+399/-0)
debian/libmirclient-dev.install (+2/-0)
debian/libmirserver45.install (+1/-1)
debian/mir-demos.install (+9/-1)
debian/rules (+16/-7)
doc/Doxyfile.in (+10/-3)
doc/building_source_for_pc.md (+0/-101)
doc/demo_server_controls.md (+0/-69)
doc/demo_shell_controls.md (+0/-53)
doc/getting_and_using_mir.md (+106/-0)
doc/getting_involved_in_mir.md (+106/-0)
doc/installing_prebuilt_on_pc.md (+0/-8)
doc/introducing_the_miral_api.md (+25/-0)
doc/mainpage.md (+59/-97)
doc/using_mir_on_pc.md (+0/-91)
examples/CMakeLists.txt (+16/-46)
examples/animated_cursor_demo_client.c (+1/-1)
examples/as_render_target.h (+1/-1)
examples/basic.c (+6/-9)
examples/buffer_render_target.cpp (+1/-1)
examples/buffer_render_target.h (+1/-1)
examples/camera.c (+1/-1)
examples/chain_jumping_buffers.c (+1/-1)
examples/client_helpers.cpp (+7/-1)
examples/client_helpers.h (+1/-1)
examples/client_touch_validator.cpp (+1/-1)
examples/cursor-theme-dump.cpp (+0/-127)
examples/cursors_demo_client.c (+1/-1)
examples/demo_client_display_config.c (+107/-31)
examples/eglapp.c (+1/-1)
examples/eglapp.h (+1/-1)
examples/eglcounter.cpp (+1/-1)
examples/eglflash.c (+1/-1)
examples/eglplasma.c (+1/-1)
examples/eglsquare.cpp (+80/-75)
examples/eglstateswitcher.c (+1/-1)
examples/egltriangle.c (+1/-1)
examples/fingerpaint.c (+1/-1)
examples/flicker.c (+1/-1)
examples/glog_logger.cpp (+1/-1)
examples/glog_logger.h (+1/-1)
examples/graphics.h (+1/-1)
examples/graphics_utils.cpp (+1/-1)
examples/image_renderer.cpp (+1/-1)
examples/image_renderer.h (+1/-1)
examples/input_shapes.cpp (+1/-1)
examples/mir_demo_server_loader.cpp (+1/-1)
examples/mir_image.h (+1/-1)
examples/miral-kiosk/CMakeLists.txt (+12/-0)
examples/miral-kiosk/kiosk_main.cpp (+94/-0)
examples/miral-kiosk/kiosk_window_manager.cpp (+164/-0)
examples/miral-kiosk/kiosk_window_manager.h (+54/-0)
examples/miral-kiosk/sw_splash.cpp (+173/-0)
examples/miral-kiosk/sw_splash.h (+44/-0)
examples/miral-shell/CMakeLists.txt (+69/-0)
examples/miral-shell/decoration_provider.cpp (+666/-0)
examples/miral-shell/decoration_provider.h (+119/-0)
examples/miral-shell/desktop/CMakeLists.txt (+12/-0)
examples/miral-shell/desktop/miral-shell.desktop.in (+18/-0)
examples/miral-shell/desktop/ubuntu-logo.svg (+27/-0)
examples/miral-shell/floating_window_manager.cpp (+805/-0)
examples/miral-shell/floating_window_manager.h (+146/-0)
examples/miral-shell/miral-app.sh (+58/-0)
examples/miral-shell/miral-desktop.sh (+52/-0)
examples/miral-shell/miral-run.sh (+17/-0)
examples/miral-shell/miral-screencast.sh (+48/-0)
examples/miral-shell/miral-xrun.sh (+69/-0)
examples/miral-shell/shell_main.cpp (+98/-0)
examples/miral-shell/spinner/CMakeLists.txt (+67/-0)
examples/miral-shell/spinner/eglapp.cpp (+83/-0)
examples/miral-shell/spinner/eglapp.h (+33/-0)
examples/miral-shell/spinner/eglspinner.cpp (+372/-0)
examples/miral-shell/spinner/miregl.cpp (+239/-0)
examples/miral-shell/spinner/miregl.h (+67/-0)
examples/miral-shell/spinner/png2header.py (+87/-0)
examples/miral-shell/spinner/splash.h (+45/-0)
examples/miral-shell/tiling_window_manager.cpp (+692/-0)
examples/miral-shell/tiling_window_manager.h (+140/-0)
examples/miral-shell/titlebar_config.cpp (+38/-0)
examples/miral-shell/titlebar_config.h (+30/-0)
examples/multi_stream.cpp (+1/-1)
examples/multiwin.c (+1/-1)
examples/pointer_confinement.c (+1/-1)
examples/prerendered_frames.c (+1/-1)
examples/progressbar.c (+1/-1)
examples/prompt_session.c (+1/-1)
examples/release_at_exit.c (+1/-1)
examples/render_surface.cpp (+1/-1)
examples/render_surfaces.cpp (+0/-468)
examples/render_to_fb.cpp (+0/-108)
examples/screencast.cpp (+1/-1)
examples/scroll.cpp (+1/-1)
examples/server_example.cpp (+67/-84)
examples/server_example_adorning_compositor.cpp (+1/-1)
examples/server_example_adorning_compositor.h (+1/-1)
examples/server_example_basic_window_manager.cpp (+0/-328)
examples/server_example_basic_window_manager.h (+0/-264)
examples/server_example_canonical_window_manager.cpp (+0/-1005)
examples/server_example_canonical_window_manager.h (+0/-136)
examples/server_example_cursor_images.cpp (+0/-57)
examples/server_example_cursor_images.h (+0/-33)
examples/server_example_custom_compositor.cpp (+1/-1)
examples/server_example_custom_compositor.h (+1/-1)
examples/server_example_display_configuration_policy.cpp (+0/-115)
examples/server_example_display_configuration_policy.h (+0/-62)
examples/server_example_host_lifecycle_event.cpp (+1/-1)
examples/server_example_host_lifecycle_event_listener.h (+1/-1)
examples/server_example_input_device_config.cpp (+1/-1)
examples/server_example_input_device_config.h (+1/-1)
examples/server_example_input_event_filter.cpp (+1/-1)
examples/server_example_input_event_filter.h (+1/-1)
examples/server_example_input_filter.cpp (+1/-1)
examples/server_example_input_filter.h (+1/-1)
examples/server_example_log_options.cpp (+1/-1)
examples/server_example_log_options.h (+1/-1)
examples/server_example_test_client.cpp (+32/-19)
examples/server_example_test_client.h (+13/-9)
examples/server_example_window_management.cpp (+0/-149)
examples/server_example_window_management.h (+0/-33)
examples/server_minimal.cpp (+0/-39)
examples/target.c (+3/-2)
examples/tooltip.c (+1/-1)
examples/wayland_client.c (+391/-0)
examples/xcursor.c (+0/-973)
examples/xcursor.h (+0/-65)
examples/xcursor_loader.cpp (+0/-228)
examples/xcursor_loader.h (+0/-74)
include/client/mir/client/blob.h (+50/-0)
include/client/mir/client/connection.h (+54/-0)
include/client/mir/client/cookie.h (+50/-0)
include/client/mir/client/display_config.h (+78/-0)
include/client/mir/client/event.h (+54/-0)
include/client/mir/client/surface.h (+50/-0)
include/client/mir/client/window.h (+53/-0)
include/client/mir/client/window_id.h (+48/-0)
include/client/mir/client/window_spec.h (+253/-0)
include/client/mir/event_printer.h (+1/-1)
include/client/mir/events/event_builders.h (+1/-1)
include/client/mir_toolkit/client_types.h (+1/-1)
include/client/mir_toolkit/cursors.h (+1/-1)
include/client/mir_toolkit/debug/surface.h (+1/-1)
include/client/mir_toolkit/event.h (+1/-1)
include/client/mir_toolkit/events/event.h (+1/-1)
include/client/mir_toolkit/events/input/input_event.h (+1/-1)
include/client/mir_toolkit/events/input/keyboard_event.h (+1/-1)
include/client/mir_toolkit/events/input/pointer_event.h (+1/-1)
include/client/mir_toolkit/events/input/touch_event.h (+1/-1)
include/client/mir_toolkit/events/input_configuration_event.h (+1/-1)
include/client/mir_toolkit/events/input_device_state_event.h (+1/-1)
include/client/mir_toolkit/events/keymap_event.h (+1/-1)
include/client/mir_toolkit/events/orientation_event.h (+1/-1)
include/client/mir_toolkit/events/prompt_session_event.h (+1/-1)
include/client/mir_toolkit/events/resize_event.h (+1/-1)
include/client/mir_toolkit/events/surface_event.h (+1/-1)
include/client/mir_toolkit/events/surface_output_event.h (+1/-1)
include/client/mir_toolkit/events/surface_placement.h (+1/-1)
include/client/mir_toolkit/events/window_event.h (+1/-1)
include/client/mir_toolkit/events/window_output_event.h (+1/-1)
include/client/mir_toolkit/events/window_placement.h (+1/-1)
include/client/mir_toolkit/extensions/android_buffer.h (+1/-1)
include/client/mir_toolkit/extensions/android_egl.h (+1/-1)
include/client/mir_toolkit/extensions/drag_and_drop.h (+1/-1)
include/client/mir_toolkit/extensions/fenced_buffers.h (+1/-1)
include/client/mir_toolkit/extensions/gbm_buffer.h (+1/-1)
include/client/mir_toolkit/extensions/graphics_module.h (+1/-1)
include/client/mir_toolkit/extensions/hardware_buffer_stream.h (+1/-1)
include/client/mir_toolkit/extensions/mesa_drm_auth.h (+1/-1)
include/client/mir_toolkit/extensions/set_gbm_device.h (+1/-1)
include/client/mir_toolkit/extensions/window_coordinate_translation.h (+1/-1)
include/client/mir_toolkit/mir_blob.h (+1/-1)
include/client/mir_toolkit/mir_buffer.h (+3/-1)
include/client/mir_toolkit/mir_buffer_stream.h (+1/-1)
include/client/mir_toolkit/mir_client_library.h (+1/-1)
include/client/mir_toolkit/mir_connection.h (+1/-1)
include/client/mir_toolkit/mir_cookie.h (+1/-1)
include/client/mir_toolkit/mir_cursor_configuration.h (+1/-1)
include/client/mir_toolkit/mir_display_configuration.h (+5/-5)
include/client/mir_toolkit/mir_error.h (+1/-1)
include/client/mir_toolkit/mir_extension_core.h (+1/-1)
include/client/mir_toolkit/mir_input_device.h (+4/-4)
include/client/mir_toolkit/mir_persistent_id.h (+1/-1)
include/client/mir_toolkit/mir_platform_message.h (+1/-1)
include/client/mir_toolkit/mir_presentation_chain.h (+1/-1)
include/client/mir_toolkit/mir_prompt_session.h (+1/-1)
include/client/mir_toolkit/mir_screencast.h (+1/-1)
include/client/mir_toolkit/mir_surface.h (+1/-1)
include/client/mir_toolkit/mir_wait.h (+1/-1)
include/client/mir_toolkit/mir_window.h (+2/-2)
include/client/mir_toolkit/mir_window_id.h (+1/-1)
include/client/mir_toolkit/rs/mir_render_surface.h (+2/-2)
include/common/mir/assert_module_entry_point.h (+1/-1)
include/common/mir/cached_ptr.h (+1/-1)
include/common/mir/dispatch/action_queue.h (+1/-1)
include/common/mir/dispatch/dispatchable.h (+1/-1)
include/common/mir/dispatch/multiplexing_dispatchable.h (+1/-1)
include/common/mir/dispatch/readable_fd.h (+1/-1)
include/common/mir/dispatch/threaded_dispatcher.h (+1/-1)
include/common/mir/events/contact_state.h (+1/-1)
include/common/mir/events/input_device_state.h (+1/-1)
include/common/mir/extension_description.h (+1/-1)
include/common/mir/flags.h (+1/-1)
include/common/mir/frontend/buffer_stream_id.h (+1/-1)
include/common/mir/frontend/surface_id.h (+1/-1)
include/common/mir/graphics/native_buffer.h (+1/-1)
include/common/mir/input/device_capability.h (+1/-1)
include/common/mir/input/keymap.h (+1/-1)
include/common/mir/input/mir_input_config.h (+4/-2)
include/common/mir/input/mir_input_config_serialization.h (+1/-1)
include/common/mir/input/mir_keyboard_config.h (+1/-1)
include/common/mir/input/mir_pointer_config.h (+1/-1)
include/common/mir/input/mir_touchpad_config.h (+1/-1)
include/common/mir/input/mir_touchscreen_config.h (+1/-1)
include/common/mir/libname.h (+1/-1)
include/common/mir/log.h (+13/-2)
include/common/mir/logging/logger.h (+1/-1)
include/common/mir/module_deleter.h (+1/-1)
include/common/mir/posix_rw_mutex.h (+1/-1)
include/common/mir/raii.h (+1/-1)
include/common/mir/shared_library.h (+1/-1)
include/common/mir/time/posix_timestamp.h (+1/-1)
include/common/mir/time/types.h (+1/-1)
include/common/mir/uncaught.h (+1/-1)
include/cookie/mir/cookie/authority.h (+1/-1)
include/cookie/mir/cookie/cookie.h (+1/-1)
include/core/mir/abnormal_exit.h (+1/-1)
include/core/mir/anonymous_shm_file.h (+9/-27)
include/core/mir/fatal.h (+1/-1)
include/core/mir/fd.h (+1/-1)
include/core/mir/geometry/dimensions.h (+1/-1)
include/core/mir/geometry/displacement.h (+1/-1)
include/core/mir/geometry/forward.h (+1/-1)
include/core/mir/geometry/length.h (+1/-1)
include/core/mir/geometry/point.h (+1/-1)
include/core/mir/geometry/rectangle.h (+1/-1)
include/core/mir/geometry/rectangles.h (+1/-1)
include/core/mir/geometry/size.h (+5/-5)
include/core/mir/int_wrapper.h (+1/-1)
include/core/mir/optional_value.h (+1/-1)
include/core/mir/shm_file.h (+4/-10)
include/core/mir_toolkit/common.h (+1/-1)
include/core/mir_toolkit/deprecations.h (+1/-1)
include/core/mir_toolkit/mir_input_device_types.h (+1/-1)
include/core/mir_toolkit/mir_native_buffer.h (+1/-1)
include/core/mir_toolkit/mir_version_number.h (+1/-1)
include/miral/miral/active_outputs.h (+74/-0)
include/miral/miral/add_init_callback.h (+47/-0)
include/miral/miral/append_event_filter.h (+44/-0)
include/miral/miral/application.h (+42/-0)
include/miral/miral/application_authorizer.h (+103/-0)
include/miral/miral/application_info.h (+55/-0)
include/miral/miral/canonical_window_manager.h (+59/-0)
include/miral/miral/command_line_option.h (+114/-0)
include/miral/miral/cursor_theme.h (+44/-0)
include/miral/miral/debug_extension.h (+47/-0)
include/miral/miral/display_configuration_option.h (+30/-0)
include/miral/miral/internal_client.h (+88/-0)
include/miral/miral/keymap.h (+58/-0)
include/miral/miral/output.h (+113/-0)
include/miral/miral/runner.h (+74/-0)
include/miral/miral/set_command_line_handler.h (+50/-0)
include/miral/miral/set_terminator.h (+47/-0)
include/miral/miral/set_window_management_policy.h (+55/-0)
include/miral/miral/version.h (+67/-0)
include/miral/miral/window.h (+82/-0)
include/miral/miral/window_info.h (+130/-0)
include/miral/miral/window_management_options.h (+65/-0)
include/miral/miral/window_management_policy.h (+194/-0)
include/miral/miral/window_management_policy_addendum2.h (+70/-0)
include/miral/miral/window_management_policy_addendum3.h (+69/-0)
include/miral/miral/window_manager_tools.h (+254/-0)
include/miral/miral/window_specification.h (+134/-0)
include/miral/miral/workspace_policy.h (+88/-0)
include/platform/mir/client/client_buffer.h (+1/-1)
include/platform/mir/client/client_buffer_factory.h (+1/-1)
include/platform/mir/client/client_context.h (+1/-1)
include/platform/mir/client/client_platform.h (+1/-1)
include/platform/mir/client/client_platform_factory.h (+1/-1)
include/platform/mir/client/egl_native_display_container.h (+1/-1)
include/platform/mir/client/egl_native_surface.h (+1/-1)
include/platform/mir/emergency_cleanup_registry.h (+1/-1)
include/platform/mir/graphics/atomic_frame.h (+1/-1)
include/platform/mir/graphics/buffer.h (+1/-1)
include/platform/mir/graphics/buffer_basic.h (+1/-1)
include/platform/mir/graphics/buffer_id.h (+1/-1)
include/platform/mir/graphics/buffer_ipc_message.h (+1/-1)
include/platform/mir/graphics/buffer_properties.h (+1/-1)
include/platform/mir/graphics/cursor.h (+1/-1)
include/platform/mir/graphics/cursor_image.h (+1/-1)
include/platform/mir/graphics/display.h (+1/-1)
include/platform/mir/graphics/display_buffer.h (+1/-1)
include/platform/mir/graphics/display_configuration.h (+1/-1)
include/platform/mir/graphics/display_configuration_policy.h (+1/-1)
include/platform/mir/graphics/display_report.h (+1/-1)
include/platform/mir/graphics/egl_error.h (+1/-1)
include/platform/mir/graphics/egl_extensions.h (+12/-1)
include/platform/mir/graphics/egl_resources.h (+1/-1)
include/platform/mir/graphics/event_handler_register.h (+1/-1)
include/platform/mir/graphics/frame.h (+1/-1)
include/platform/mir/graphics/gamma_curves.h (+1/-1)
include/platform/mir/graphics/gl_config.h (+1/-1)
include/platform/mir/graphics/gl_format.h (+1/-1)
include/platform/mir/graphics/graphic_buffer_allocator.h (+1/-1)
include/platform/mir/graphics/platform.h (+2/-1)
include/platform/mir/graphics/platform_authentication.h (+1/-1)
include/platform/mir/graphics/platform_ipc_operations.h (+1/-1)
include/platform/mir/graphics/platform_ipc_package.h (+1/-1)
include/platform/mir/graphics/platform_operation_message.h (+1/-1)
include/platform/mir/graphics/renderable.h (+1/-1)
include/platform/mir/graphics/transformation.h (+1/-1)
include/platform/mir/graphics/virtual_output.h (+1/-1)
include/platform/mir/graphics/wayland_allocator.h (+45/-0)
include/platform/mir/input/event_builder.h (+1/-1)
include/platform/mir/input/input_device.h (+1/-1)
include/platform/mir/input/input_device_info.h (+1/-1)
include/platform/mir/input/input_device_registry.h (+1/-1)
include/platform/mir/input/input_report.h (+1/-1)
include/platform/mir/input/input_sink.h (+1/-1)
include/platform/mir/input/platform.h (+1/-1)
include/platform/mir/input/pointer_settings.h (+1/-1)
include/platform/mir/input/touchpad_settings.h (+1/-1)
include/platform/mir/input/touchscreen_settings.h (+1/-1)
include/platform/mir/mir_buffer.h (+1/-1)
include/platform/mir/mir_buffer_stream.h (+1/-1)
include/platform/mir/mir_render_surface.h (+1/-1)
include/platform/mir/module_properties.h (+1/-1)
include/platform/mir/options/option.h (+1/-1)
include/platform/mir/options/program_option.h (+1/-1)
include/platform/mir/renderer/sw/pixel_source.h (+1/-1)
include/platforms/mesa/mir_toolkit/mesa/native_display.h (+1/-1)
include/platforms/mesa/mir_toolkit/mesa/platform_operation.h (+1/-1)
include/renderer/mir/renderer/renderer.h (+1/-1)
include/renderer/mir/renderer/renderer_factory.h (+1/-1)
include/renderers/gl/mir/renderer/gl/context.h (+1/-1)
include/renderers/gl/mir/renderer/gl/context_source.h (+1/-1)
include/renderers/gl/mir/renderer/gl/egl_platform.h (+1/-1)
include/renderers/gl/mir/renderer/gl/render_target.h (+1/-1)
include/renderers/gl/mir/renderer/gl/texture_source.h (+1/-1)
include/renderers/gl/mir/renderer/gl/texture_target.h (+1/-1)
include/server/mir/compositor/compositor.h (+1/-1)
include/server/mir/compositor/compositor_id.h (+1/-1)
include/server/mir/compositor/compositor_report.h (+1/-1)
include/server/mir/compositor/display_buffer_compositor.h (+1/-1)
include/server/mir/compositor/display_buffer_compositor_factory.h (+1/-1)
include/server/mir/compositor/display_listener.h (+1/-1)
include/server/mir/compositor/scene.h (+1/-1)
include/server/mir/compositor/scene_element.h (+1/-5)
include/server/mir/executor.h (+1/-1)
include/server/mir/frontend/buffer_sink.h (+1/-2)
include/server/mir/frontend/buffer_stream.h (+3/-7)
include/server/mir/frontend/client_buffers.h (+0/-46)
include/server/mir/frontend/prompt_session.h (+1/-1)
include/server/mir/frontend/session.h (+1/-7)
include/server/mir/frontend/session_authorizer.h (+1/-1)
include/server/mir/frontend/session_credentials.h (+1/-1)
include/server/mir/frontend/session_mediator_observer.h (+1/-1)
include/server/mir/frontend/surface.h (+1/-1)
include/server/mir/graphics/default_display_configuration_policy.h (+1/-1)
include/server/mir/graphics/display_configuration_observer.h (+2/-2)
include/server/mir/input/composite_event_filter.h (+1/-1)
include/server/mir/input/cursor_images.h (+1/-1)
include/server/mir/input/cursor_listener.h (+1/-1)
include/server/mir/input/device.h (+1/-1)
include/server/mir/input/event_filter.h (+1/-1)
include/server/mir/input/input_device_hub.h (+1/-1)
include/server/mir/input/input_device_observer.h (+1/-1)
include/server/mir/input/input_dispatcher.h (+1/-1)
include/server/mir/input/input_manager.h (+1/-1)
include/server/mir/input/input_reception_mode.h (+1/-1)
include/server/mir/input/seat_observer.h (+1/-1)
include/server/mir/input/surface.h (+1/-1)
include/server/mir/input/touch_visualizer.h (+1/-1)
include/server/mir/lockable_callback.h (+1/-1)
include/server/mir/main_loop.h (+1/-1)
include/server/mir/observer_registrar.h (+1/-1)
include/server/mir/report_exception.h (+1/-1)
include/server/mir/scene/application_not_responding_detector.h (+1/-1)
include/server/mir/scene/application_not_responding_detector_wrapper.h (+1/-1)
include/server/mir/scene/buffer_stream_factory.h (+5/-7)
include/server/mir/scene/coordinate_translator.h (+1/-1)
include/server/mir/scene/null_session_listener.h (+1/-1)
include/server/mir/scene/null_surface_observer.h (+1/-1)
include/server/mir/scene/observer.h (+1/-1)
include/server/mir/scene/prompt_session.h (+1/-1)
include/server/mir/scene/prompt_session_creation_parameters.h (+1/-1)
include/server/mir/scene/prompt_session_listener.h (+1/-1)
include/server/mir/scene/prompt_session_manager.h (+1/-1)
include/server/mir/scene/session.h (+1/-7)
include/server/mir/scene/session_coordinator.h (+1/-1)
include/server/mir/scene/session_listener.h (+1/-1)
include/server/mir/scene/snapshot.h (+1/-1)
include/server/mir/scene/surface.h (+1/-2)
include/server/mir/scene/surface_creation_parameters.h (+1/-1)
include/server/mir/scene/surface_factory.h (+1/-1)
include/server/mir/scene/surface_observer.h (+1/-1)
include/server/mir/server.h (+1/-1)
include/server/mir/server_action_queue.h (+1/-1)
include/server/mir/server_status_listener.h (+1/-1)
include/server/mir/shell/abstract_shell.h (+1/-1)
include/server/mir/shell/display_configuration_controller.h (+1/-1)
include/server/mir/shell/display_layout.h (+1/-1)
include/server/mir/shell/focus_controller.h (+1/-1)
include/server/mir/shell/host_lifecycle_event_listener.h (+1/-1)
include/server/mir/shell/input_targeter.h (+1/-1)
include/server/mir/shell/persistent_surface_store.h (+1/-1)
include/server/mir/shell/shell.h (+1/-1)
include/server/mir/shell/shell_report.h (+1/-1)
include/server/mir/shell/shell_wrapper.h (+1/-1)
include/server/mir/shell/surface_ready_observer.h (+1/-1)
include/server/mir/shell/surface_specification.h (+1/-1)
include/server/mir/shell/surface_stack.h (+1/-1)
include/server/mir/shell/surface_stack_wrapper.h (+1/-1)
include/server/mir/shell/system_compositor_window_manager.h (+1/-1)
include/server/mir/shell/window_management_info.h (+6/-2)
include/server/mir/shell/window_manager.h (+1/-1)
include/server/mir/shell/window_manager_builder.h (+1/-1)
include/server/mir/terminate_with_current_exception.h (+1/-1)
include/server/mir/time/alarm.h (+1/-1)
include/server/mir/time/alarm_factory.h (+1/-1)
include/test/mir/test/auto_unblock_thread.h (+1/-1)
include/test/mir/test/cross_process_action.h (+1/-1)
include/test/mir/test/cross_process_sync.h (+1/-1)
include/test/mir/test/death.h (+1/-1)
include/test/mir/test/display_config_matchers.h (+1/-1)
include/test/mir/test/doubles/fake_display.h (+1/-1)
include/test/mir/test/doubles/mock_client_buffer.h (+1/-1)
include/test/mir/test/doubles/mock_client_context.h (+1/-1)
include/test/mir/test/doubles/mock_display_configuration.h (+1/-1)
include/test/mir/test/doubles/mock_egl.h (+8/-1)
include/test/mir/test/doubles/mock_egl_native_surface.h (+1/-1)
include/test/mir/test/doubles/mock_gl.h (+1/-1)
include/test/mir/test/doubles/mock_input_device_hub.h (+1/-1)
include/test/mir/test/doubles/mock_input_device_observer.h (+1/-1)
include/test/mir/test/doubles/mock_input_dispatcher.h (+1/-1)
include/test/mir/test/doubles/mock_platform_authentication.h (+1/-1)
include/test/mir/test/doubles/mock_prompt_session_listener.h (+1/-1)
include/test/mir/test/doubles/mock_seat_report.h (+1/-1)
include/test/mir/test/doubles/mock_window_manager.h (+1/-1)
include/test/mir/test/doubles/nested_mock_egl.h (+1/-1)
include/test/mir/test/doubles/null_display.h (+1/-1)
include/test/mir/test/doubles/null_display_buffer.h (+1/-1)
include/test/mir/test/doubles/null_display_buffer_compositor_factory.h (+1/-1)
include/test/mir/test/doubles/null_display_configuration.h (+1/-1)
include/test/mir/test/doubles/null_display_sync_group.h (+1/-1)
include/test/mir/test/doubles/null_gl_context.h (+1/-1)
include/test/mir/test/doubles/null_logger.h (+1/-1)
include/test/mir/test/doubles/null_platform.h (+1/-1)
include/test/mir/test/doubles/null_platform_ipc_operations.h (+1/-1)
include/test/mir/test/doubles/stub_cursor.h (+1/-1)
include/test/mir/test/doubles/stub_cursor_image.h (+1/-1)
include/test/mir/test/doubles/stub_display_buffer.h (+1/-1)
include/test/mir/test/doubles/stub_display_configuration.h (+1/-1)
include/test/mir/test/doubles/stub_input_device.h (+1/-1)
include/test/mir/test/doubles/stub_session.h (+1/-7)
include/test/mir/test/doubles/stub_session_authorizer.h (+1/-1)
include/test/mir/test/doubles/stub_surface.h (+1/-2)
include/test/mir/test/doubles/wrap_shell_to_track_latest_surface.h (+1/-1)
include/test/mir/test/empty_deleter.h (+1/-1)
include/test/mir/test/event_factory.h (+1/-1)
include/test/mir/test/event_matchers.h (+1/-1)
include/test/mir/test/fake_shared.h (+1/-1)
include/test/mir/test/pipe.h (+1/-1)
include/test/mir/test/popen.h (+1/-1)
include/test/mir/test/signal.h (+1/-1)
include/test/mir/test/spin_wait.h (+1/-1)
include/test/mir/test/validity_matchers.h (+1/-1)
include/test/mir_test_framework/any_surface.h (+1/-1)
include/test/mir_test_framework/async_server_runner.h (+14/-2)
include/test/mir_test_framework/canonical_window_manager_policy.h (+38/-0)
include/test/mir_test_framework/connected_client_headless_server.h (+1/-1)
include/test/mir_test_framework/connected_client_with_a_window.h (+1/-1)
include/test/mir_test_framework/declarative_placement_window_manage_policy.h (+9/-10)
include/test/mir_test_framework/detect_server.h (+1/-1)
include/test/mir_test_framework/executable_path.h (+1/-1)
include/test/mir_test_framework/fake_input_device.h (+1/-1)
include/test/mir_test_framework/headless_display_buffer_compositor_factory.h (+1/-1)
include/test/mir_test_framework/headless_in_process_server.h (+1/-1)
include/test/mir_test_framework/headless_nested_server_runner.h (+1/-1)
include/test/mir_test_framework/headless_test.h (+1/-1)
include/test/mir_test_framework/in_process_server.h (+1/-1)
include/test/mir_test_framework/interprocess_client_server_test.h (+1/-1)
include/test/mir_test_framework/main.h (+3/-3)
include/test/mir_test_framework/observant_shell.h (+1/-1)
include/test/mir_test_framework/placement_applying_shell.h (+1/-1)
include/test/mir_test_framework/process.h (+1/-1)
include/test/mir_test_framework/server_runner.h (+1/-1)
include/test/mir_test_framework/stub_client_platform_options.h (+1/-1)
include/test/mir_test_framework/stub_graphics_platform_operation.h (+1/-1)
include/test/mir_test_framework/stub_platform_extension.h (+1/-1)
include/test/mir_test_framework/stub_platform_helpers.h (+1/-1)
include/test/mir_test_framework/stub_server_platform_factory.h (+1/-1)
include/test/mir_test_framework/temporary_environment_value.h (+1/-1)
include/test/mir_test_framework/visible_surface.h (+1/-1)
playground/CMakeLists.txt (+1/-21)
playground/demo-shell/CMakeLists.txt (+0/-19)
playground/demo-shell/demo_compositor.cpp (+0/-204)
playground/demo-shell/demo_compositor.h (+0/-79)
playground/demo-shell/demo_renderer.cpp (+0/-402)
playground/demo-shell/demo_renderer.h (+0/-90)
playground/demo-shell/demo_shell.cpp (+0/-120)
playground/demo-shell/typo/CMakeLists.txt (+0/-23)
playground/demo-shell/typo/typo_freetype_renderer.cpp (+0/-125)
playground/demo-shell/typo/typo_freetype_renderer.h (+0/-44)
playground/demo-shell/typo/typo_glcache.cpp (+0/-99)
playground/demo-shell/typo/typo_glcache.h (+0/-56)
playground/demo-shell/typo/typo_renderer.cpp (+0/-59)
playground/demo-shell/typo/typo_renderer.h (+0/-61)
playground/demo-shell/typo/typo_stub_renderer.cpp (+0/-47)
playground/demo-shell/typo/typo_stub_renderer.h (+0/-34)
playground/demo-shell/window_manager.cpp (+0/-611)
playground/demo-shell/window_manager.h (+0/-97)
playground/diamond.c (+1/-1)
playground/diamond.h (+1/-1)
playground/egldiamond_render_surface.c (+1/-1)
playground/mir_egl_platform_shim.c (+1/-1)
playground/mir_egl_platform_shim.h (+1/-1)
playground/server_configuration.cpp (+0/-86)
playground/server_configuration.h (+0/-49)
src/CMakeLists.txt (+7/-0)
src/capnproto/CMakeLists.txt (+1/-1)
src/capnproto/mir_event.capnp (+1/-1)
src/capnproto/mir_input_config.capnp (+1/-1)
src/client/CMakeLists.txt (+14/-0)
src/client/atomic_callback.h (+1/-1)
src/client/buffer.cpp (+1/-1)
src/client/buffer.h (+1/-1)
src/client/buffer_factory.cpp (+1/-1)
src/client/buffer_factory.h (+1/-1)
src/client/buffer_stream.cpp (+1/-1)
src/client/buffer_stream.h (+1/-1)
src/client/buffer_stream_configuration.cpp (+1/-1)
src/client/buffer_stream_configuration.h (+1/-1)
src/client/buffer_vault.cpp (+64/-9)
src/client/buffer_vault.h (+2/-1)
src/client/connection_configuration.h (+1/-1)
src/client/connection_surface_map.cpp (+2/-2)
src/client/connection_surface_map.h (+1/-1)
src/client/cursor_configuration.h (+1/-1)
src/client/default_connection_configuration.cpp (+2/-2)
src/client/default_connection_configuration.h (+1/-1)
src/client/display_configuration.cpp (+1/-1)
src/client/display_configuration.h (+1/-1)
src/client/display_configuration_api.cpp (+1/-1)
src/client/drag_and_drop.cpp (+1/-1)
src/client/drag_and_drop.h (+1/-1)
src/client/error_buffer.cpp (+1/-1)
src/client/error_buffer.h (+1/-1)
src/client/error_connections.cpp (+1/-1)
src/client/error_connections.h (+1/-1)
src/client/error_handler.h (+1/-1)
src/client/error_render_surface.cpp (+1/-1)
src/client/error_render_surface.h (+1/-1)
src/client/error_stream.cpp (+1/-1)
src/client/error_stream.h (+1/-1)
src/client/event.cpp (+1/-1)
src/client/event_distributor.h (+1/-1)
src/client/event_handler_register.h (+1/-1)
src/client/event_printer.cpp (+1/-1)
src/client/event_sink.h (+1/-1)
src/client/events/CMakeLists.txt (+1/-1)
src/client/events/event_builders.cpp (+1/-1)
src/client/frame_clock.cpp (+1/-1)
src/client/frame_clock.h (+1/-1)
src/client/handle_event_exception.h (+1/-1)
src/client/input/CMakeLists.txt (+1/-1)
src/client/input/input_devices.cpp (+1/-1)
src/client/input/input_event.cpp (+1/-1)
src/client/input/xkb_mapper.cpp (+1/-1)
src/client/lifecycle_control.h (+1/-1)
src/client/logging/input_receiver_report.cpp (+1/-1)
src/client/logging/input_receiver_report.h (+1/-1)
src/client/logging/perf_report.cpp (+1/-1)
src/client/logging/perf_report.h (+1/-1)
src/client/logging/rpc_report.cpp (+1/-1)
src/client/logging/rpc_report.h (+1/-1)
src/client/lttng/client_tracepoint_provider.cpp (+1/-1)
src/client/lttng/client_tracepoint_provider.h (+1/-1)
src/client/lttng/input_receiver_report.cpp (+1/-1)
src/client/lttng/input_receiver_report.h (+1/-1)
src/client/lttng/input_receiver_report_tp.h (+1/-1)
src/client/lttng/perf_report.cpp (+1/-1)
src/client/lttng/perf_report.h (+1/-1)
src/client/lttng/perf_report_tp.h (+1/-1)
src/client/lttng/rpc_report.cpp (+1/-1)
src/client/lttng/rpc_report.h (+1/-1)
src/client/lttng/rpc_report_tp.h (+1/-1)
src/client/lttng/shared_library_prober_report.cpp (+1/-1)
src/client/lttng/shared_library_prober_report.h (+1/-1)
src/client/lttng/shared_library_prober_report_tp.h (+1/-1)
src/client/make_protobuf_object.h (+1/-1)
src/client/mir_blob.cpp (+1/-1)
src/client/mir_buffer_api.cpp (+1/-1)
src/client/mir_buffer_stream_api.cpp (+1/-1)
src/client/mir_connection.cpp (+13/-15)
src/client/mir_connection.h (+1/-1)
src/client/mir_connection_api.cpp (+1/-1)
src/client/mir_cookie.cpp (+1/-1)
src/client/mir_cookie.h (+1/-1)
src/client/mir_cursor_api.cpp (+1/-1)
src/client/mir_debug_api.cpp (+1/-1)
src/client/mir_error.cpp (+1/-1)
src/client/mir_error.h (+1/-1)
src/client/mir_error_api.cpp (+1/-1)
src/client/mir_event_distributor.cpp (+1/-1)
src/client/mir_event_distributor.h (+1/-1)
src/client/mir_extension_core.cpp (+1/-1)
src/client/mir_input_device_api.cpp (+1/-1)
src/client/mir_platform_message_api.cpp (+1/-1)
src/client/mir_presentation_chain.h (+1/-1)
src/client/mir_presentation_chain_api.cpp (+1/-1)
src/client/mir_prompt_session.cpp (+1/-1)
src/client/mir_prompt_session.h (+1/-1)
src/client/mir_prompt_session_api.cpp (+1/-1)
src/client/mir_render_surface_api.cpp (+1/-1)
src/client/mir_screencast.cpp (+1/-1)
src/client/mir_screencast.h (+1/-1)
src/client/mir_screencast_api.cpp (+1/-1)
src/client/mir_surface.cpp (+1/-1)
src/client/mir_surface.h (+1/-1)
src/client/mir_surface_api.cpp (+1/-1)
src/client/mir_wait_api.cpp (+1/-1)
src/client/mir_wait_handle.cpp (+1/-1)
src/client/mir_wait_handle.h (+1/-1)
src/client/mirclientcpp.pc.in (+7/-0)
src/client/no_tls_future-inl.h (+1/-1)
src/client/perf_report.h (+1/-1)
src/client/periodic_perf_report.cpp (+1/-1)
src/client/periodic_perf_report.h (+1/-1)
src/client/ping_handler.h (+1/-1)
src/client/presentation_chain.cpp (+1/-1)
src/client/presentation_chain.h (+1/-1)
src/client/protobuf_to_native_buffer.cpp (+1/-1)
src/client/protobuf_to_native_buffer.h (+1/-1)
src/client/render_surface.cpp (+1/-1)
src/client/render_surface.h (+1/-1)
src/client/rpc/make_rpc_channel.h (+7/-1)
src/client/rpc/make_socket_rpc_channel.cpp (+3/-2)
src/client/rpc/mir_basic_rpc_channel.cpp (+1/-1)
src/client/rpc/mir_basic_rpc_channel.h (+1/-1)
src/client/rpc/mir_display_server.cpp (+1/-1)
src/client/rpc/mir_display_server.h (+1/-1)
src/client/rpc/mir_display_server_debug.cpp (+1/-1)
src/client/rpc/mir_display_server_debug.h (+1/-1)
src/client/rpc/mir_protobuf_rpc_channel.cpp (+18/-4)
src/client/rpc/mir_protobuf_rpc_channel.h (+11/-1)
src/client/rpc/null_rpc_report.cpp (+1/-1)
src/client/rpc/null_rpc_report.h (+1/-1)
src/client/rpc/rpc_report.h (+1/-1)
src/client/rpc/stream_socket_transport.cpp (+1/-1)
src/client/rpc/stream_socket_transport.h (+1/-1)
src/client/rpc/stream_transport.h (+1/-1)
src/client/screencast_stream.cpp (+1/-1)
src/client/screencast_stream.h (+1/-1)
src/client/version.h.in (+1/-1)
src/common/dispatch/CMakeLists.txt (+1/-1)
src/common/dispatch/action_queue.cpp (+1/-1)
src/common/dispatch/multiplexing_dispatchable.cpp (+1/-1)
src/common/dispatch/readable_fd.cpp (+1/-1)
src/common/dispatch/threaded_dispatcher.cpp (+1/-1)
src/common/dispatch/utils.cpp (+1/-1)
src/common/dispatch/utils.h (+1/-1)
src/common/edid.cpp (+1/-1)
src/common/env/CMakeLists.txt (+1/-1)
src/common/env/default_configuration.cpp (+1/-1)
src/common/events/CMakeLists.txt (+1/-1)
src/common/events/close_surface_event.cpp (+1/-1)
src/common/events/event.cpp (+1/-1)
src/common/events/input_configuration_event.cpp (+1/-1)
src/common/events/input_device_state_event.cpp (+1/-1)
src/common/events/input_event.cpp (+1/-1)
src/common/events/keyboard_event.cpp (+1/-1)
src/common/events/keymap_event.cpp (+1/-1)
src/common/events/orientation_event.cpp (+1/-1)
src/common/events/pointer_event.cpp (+1/-1)
src/common/events/prompt_session_event.cpp (+1/-1)
src/common/events/resize_event.cpp (+1/-1)
src/common/events/surface_event.cpp (+1/-1)
src/common/events/surface_output_event.cpp (+1/-1)
src/common/events/surface_placement_event.cpp (+1/-1)
src/common/events/touch_event.cpp (+1/-1)
src/common/fd/CMakeLists.txt (+1/-2)
src/common/fd/fd_socket_transmission.cpp (+1/-1)
src/common/input/mir_input_config.cpp (+1/-1)
src/common/input/mir_input_config_serialization.cpp (+1/-1)
src/common/input/mir_keyboard_config.cpp (+1/-1)
src/common/input/mir_pointer_config.cpp (+1/-1)
src/common/input/mir_touchpad_config.cpp (+1/-1)
src/common/input/mir_touchscreen_config.cpp (+1/-1)
src/common/libname.cpp (+1/-1)
src/common/log.cpp (+36/-1)
src/common/logging/CMakeLists.txt (+1/-1)
src/common/logging/dumb_console_logger.cpp (+1/-1)
src/common/logging/input_timestamp.cpp (+1/-1)
src/common/logging/logger.cpp (+1/-1)
src/common/logging/shared_library_prober_report.cpp (+1/-1)
src/common/output_type_names.cpp (+1/-1)
src/common/posix_rw_mutex.cpp (+1/-1)
src/common/report/lttng/tracepoint_provider.cpp (+1/-1)
src/common/sharedlibrary/CMakeLists.txt (+1/-1)
src/common/sharedlibrary/module_deleter.cpp (+1/-1)
src/common/sharedlibrary/shared_library.cpp (+1/-1)
src/common/sharedlibrary/shared_library_prober.cpp (+1/-1)
src/common/symbols.map (+0/-5)
src/common/thread/CMakeLists.txt (+1/-1)
src/common/thread/recursive_read_write_mutex.cpp (+1/-1)
src/common/thread/signal_blocker.cpp (+1/-1)
src/common/thread/thread_name.cpp (+1/-1)
src/common/time/steady_clock.cpp (+1/-1)
src/cookie/authority.cpp (+1/-1)
src/cookie/format.h (+1/-1)
src/cookie/hmac_cookie.cpp (+1/-1)
src/cookie/hmac_cookie.h (+1/-1)
src/core/CMakeLists.txt (+11/-0)
src/core/anonymous_shm_file.cpp (+43/-35)
src/core/fatal.cpp (+1/-1)
src/core/fd.cpp (+1/-1)
src/core/geometry/ostream.cpp (+1/-1)
src/core/geometry/rectangle.cpp (+1/-1)
src/core/geometry/rectangles.cpp (+1/-1)
src/core/symbols.map (+25/-1)
src/gl/default_program_factory.cpp (+1/-1)
src/gl/program.cpp (+1/-1)
src/gl/recently_used_cache.cpp (+1/-1)
src/gl/recently_used_cache.h (+1/-1)
src/gl/tessellation_helpers.cpp (+1/-1)
src/gl/texture.cpp (+1/-1)
src/include/client/mir/client/surface_map.h (+1/-1)
src/include/client/mir/event_type_to_string.h (+1/-1)
src/include/client/mir/input/input_devices.h (+1/-1)
src/include/client/mir/platform_message.h (+1/-1)
src/include/client/mir_toolkit/mir_buffer_private.h (+1/-1)
src/include/common/mir/basic_observers.h (+1/-1)
src/include/common/mir/client_visible_error.h (+1/-1)
src/include/common/mir/default_configuration.h (+1/-1)
src/include/common/mir/events/close_surface_event.h (+1/-1)
src/include/common/mir/events/event.h (+1/-1)
src/include/common/mir/events/event_private.h (+1/-1)
src/include/common/mir/events/input_configuration_event.h (+1/-1)
src/include/common/mir/events/input_device_state_event.h (+1/-1)
src/include/common/mir/events/input_event.h (+1/-1)
src/include/common/mir/events/keyboard_event.h (+1/-1)
src/include/common/mir/events/keymap_event.h (+1/-1)
src/include/common/mir/events/orientation_event.h (+1/-1)
src/include/common/mir/events/pointer_event.h (+1/-1)
src/include/common/mir/events/prompt_session_event.h (+1/-1)
src/include/common/mir/events/resize_event.h (+1/-1)
src/include/common/mir/events/surface_event.h (+1/-1)
src/include/common/mir/events/surface_output_event.h (+1/-1)
src/include/common/mir/events/surface_placement_event.h (+1/-1)
src/include/common/mir/events/touch_event.h (+1/-1)
src/include/common/mir/fd_socket_transmission.h (+1/-1)
src/include/common/mir/frontend/client_constants.h (+1/-1)
src/include/common/mir/graphics/edid.h (+1/-1)
src/include/common/mir/input/input_receiver_report.h (+1/-1)
src/include/common/mir/input/key_mapper.h (+1/-1)
src/include/common/mir/input/null_input_receiver_report.h (+1/-1)
src/include/common/mir/input/xkb_mapper.h (+1/-1)
src/include/common/mir/logging/dumb_console_logger.h (+1/-1)
src/include/common/mir/logging/input_timestamp.h (+1/-1)
src/include/common/mir/logging/null_shared_library_prober_report.h (+1/-1)
src/include/common/mir/logging/shared_library_prober_report.h (+1/-1)
src/include/common/mir/output_type_names.h (+1/-1)
src/include/common/mir/protobuf/display_server.h (+1/-1)
src/include/common/mir/protobuf/display_server_debug.h (+1/-1)
src/include/common/mir/protobuf/protocol_version.h (+3/-3)
src/include/common/mir/recursive_read_write_mutex.h (+1/-1)
src/include/common/mir/report/lttng/mir_tracepoint.h (+1/-1)
src/include/common/mir/report/lttng/tracepoint_provider.h (+1/-1)
src/include/common/mir/require.h (+1/-1)
src/include/common/mir/shared_library_prober.h (+1/-1)
src/include/common/mir/shared_library_prober_report.h (+1/-1)
src/include/common/mir/signal_blocker.h (+1/-1)
src/include/common/mir/thread_name.h (+1/-1)
src/include/common/mir/thread_safe_list.h (+4/-4)
src/include/common/mir/time/clock.h (+1/-1)
src/include/common/mir/time/steady_clock.h (+1/-1)
src/include/common/mir/unwind_helpers.h (+1/-1)
src/include/common/mir/variable_length_array.h (+1/-1)
src/include/common/mir_blob.h (+1/-1)
src/include/cookie/mir/cookie/blob.h (+1/-1)
src/include/gl/mir/gl/default_program_factory.h (+1/-1)
src/include/gl/mir/gl/primitive.h (+1/-1)
src/include/gl/mir/gl/program.h (+1/-1)
src/include/gl/mir/gl/program_factory.h (+1/-1)
src/include/gl/mir/gl/tessellation_helpers.h (+1/-1)
src/include/gl/mir/gl/texture.h (+1/-1)
src/include/gl/mir/gl/texture_cache.h (+1/-1)
src/include/platform/mir/graphics/overlapping_output_grouping.h (+1/-1)
src/include/platform/mir/graphics/pixel_format_utils.h (+1/-1)
src/include/platform/mir/graphics/platform_authentication_wrapper.h (+1/-1)
src/include/platform/mir/graphics/platform_probe.h (+1/-1)
src/include/platform/mir/options/configuration.h (+2/-1)
src/include/platform/mir/options/default_configuration.h (+1/-1)
src/include/platform/mir/udev/wrapper.h (+1/-1)
src/include/server/mir/basic_callback.h (+1/-1)
src/include/server/mir/compositor/buffer_stream.h (+1/-2)
src/include/server/mir/compositor/decoration.h (+0/-38)
src/include/server/mir/default_server_configuration.h (+3/-1)
src/include/server/mir/default_server_status_listener.h (+1/-1)
src/include/server/mir/display_changer.h (+1/-1)
src/include/server/mir/display_server.h (+1/-1)
src/include/server/mir/emergency_cleanup.h (+1/-1)
src/include/server/mir/frontend/connection_context.h (+1/-1)
src/include/server/mir/frontend/connection_creator.h (+1/-1)
src/include/server/mir/frontend/connections.h (+1/-1)
src/include/server/mir/frontend/connector.h (+1/-1)
src/include/server/mir/frontend/connector_report.h (+2/-1)
src/include/server/mir/frontend/display_changer.h (+1/-1)
src/include/server/mir/frontend/event_sink.h (+1/-1)
src/include/server/mir/frontend/fd_sets.h (+1/-1)
src/include/server/mir/frontend/input_configuration_changer.h (+1/-1)
src/include/server/mir/frontend/message_processor.h (+1/-1)
src/include/server/mir/frontend/message_processor_report.h (+1/-1)
src/include/server/mir/frontend/protobuf_connection_creator.h (+1/-1)
src/include/server/mir/frontend/protobuf_message_sender.h (+1/-1)
src/include/server/mir/frontend/screencast.h (+1/-1)
src/include/server/mir/frontend/shell.h (+1/-1)
src/include/server/mir/frontend/template_protobuf_message_processor.h (+1/-1)
src/include/server/mir/glib_main_loop.h (+1/-1)
src/include/server/mir/glib_main_loop_sources.h (+1/-1)
src/include/server/mir/graphics/gl_extensions_base.h (+1/-1)
src/include/server/mir/graphics/surfaceless_egl_context.h (+1/-1)
src/include/server/mir/input/input_probe.h (+1/-1)
src/include/server/mir/input/legacy_input_dispatchable.h (+1/-1)
src/include/server/mir/input/scene.h (+1/-1)
src/include/server/mir/input/seat.h (+1/-1)
src/include/server/mir/input/validator.h (+1/-1)
src/include/server/mir/input/vt_filter.h (+1/-1)
src/include/server/mir/lockable_callback_wrapper.h (+1/-1)
src/include/server/mir/observer_multiplexer.h (+1/-1)
src/include/server/mir/run_mir.h (+1/-1)
src/include/server/mir/scene/legacy_scene_change_notification.h (+1/-1)
src/include/server/mir/scene/null_observer.h (+1/-1)
src/include/server/mir/scene/null_prompt_session_listener.h (+1/-1)
src/include/server/mir/scene/scene_report.h (+1/-1)
src/include/server/mir/scene/session_container.h (+1/-1)
src/include/server/mir/scene/session_event_handler_register.h (+4/-9)
src/include/server/mir/scene/session_event_sink.h (+1/-1)
src/include/server/mir/scene/surface_event_source.h (+1/-1)
src/include/server/mir/scene/surface_observers.h (+1/-1)
src/include/server/mir/server_configuration.h (+2/-1)
src/include/server/mir/thread/basic_thread_pool.h (+1/-1)
src/miral/CMakeLists.txt (+129/-0)
src/miral/active_outputs.cpp (+65/-0)
src/miral/add_init_callback.cpp (+33/-0)
src/miral/append_event_filter.cpp (+48/-0)
src/miral/application.cpp (+51/-0)
src/miral/application_authorizer.cpp (+129/-0)
src/miral/application_info.cpp (+99/-0)
src/miral/basic_window_manager.cpp (+2234/-0)
src/miral/basic_window_manager.h (+272/-0)
src/miral/both_versions.h (+33/-0)
src/miral/canonical_window_manager.cpp (+77/-0)
src/miral/command_line_option.cpp (+210/-0)
src/miral/coordinate_translator.cpp (+51/-0)
src/miral/coordinate_translator.h (+52/-0)
src/miral/cursor_theme.cpp (+62/-0)
src/miral/debug_extension.cpp (+51/-0)
src/miral/display_configuration_listeners.cpp (+121/-0)
src/miral/display_configuration_listeners.h (+67/-0)
src/miral/display_configuration_option.cpp (+115/-0)
src/miral/internal_client.cpp (+215/-0)
src/miral/join_client_threads.h (+24/-0)
src/miral/keymap.cpp (+173/-0)
src/miral/miral.pc.in (+9/-0)
src/miral/mru_window_list.cpp (+65/-0)
src/miral/mru_window_list.h (+46/-0)
src/miral/output.cpp (+117/-0)
src/miral/process_doxygen_xml.py (+655/-0)
src/miral/runner.cpp (+278/-0)
src/miral/set_command_line_handler.cpp (+33/-0)
src/miral/set_terminator.cpp (+33/-0)
src/miral/set_window_management_policy.cpp (+91/-0)
src/miral/symbols.map (+438/-0)
src/miral/version.h.in (+67/-0)
src/miral/window.cpp (+127/-0)
src/miral/window_info.cpp (+630/-0)
src/miral/window_info_defaults.h (+36/-0)
src/miral/window_management_options.cpp (+99/-0)
src/miral/window_management_policy.cpp (+37/-0)
src/miral/window_management_trace.cpp (+800/-0)
src/miral/window_management_trace.h (+146/-0)
src/miral/window_manager_tools.cpp (+141/-0)
src/miral/window_manager_tools_implementation.h (+108/-0)
src/miral/window_specification.cpp (+587/-0)
src/miral/workspace_policy.cpp (+29/-0)
src/miral/xcursor.c (+899/-0)
src/miral/xcursor.h (+62/-0)
src/miral/xcursor_loader.cpp (+215/-0)
src/miral/xcursor_loader.h (+66/-0)
src/platform/graphics/CMakeLists.txt (+1/-0)
src/platform/graphics/atomic_frame.cpp (+1/-1)
src/platform/graphics/buffer_basic.cpp (+1/-1)
src/platform/graphics/display_configuration.cpp (+1/-1)
src/platform/graphics/egl_error.cpp (+1/-1)
src/platform/graphics/egl_extensions.cpp (+35/-2)
src/platform/graphics/egl_resources.cpp (+1/-1)
src/platform/graphics/gamma_curves.cpp (+1/-1)
src/platform/graphics/overlapping_output_grouping.cpp (+1/-1)
src/platform/graphics/pixel_format_utils.cpp (+1/-1)
src/platform/graphics/platform_probe.cpp (+1/-1)
src/platform/options/default_configuration.cpp (+4/-1)
src/platform/options/program_option.cpp (+1/-1)
src/platform/symbols.map (+7/-0)
src/platform/udev/udev_wrapper.cpp (+1/-1)
src/platforms/common/client/mir/aging_buffer.cpp (+1/-1)
src/platforms/common/client/mir/aging_buffer.h (+1/-1)
src/platforms/common/client/mir/weak_egl.cpp (+1/-1)
src/platforms/common/client/mir/weak_egl.h (+1/-1)
src/platforms/common/server/CMakeLists.txt (+0/-2)
src/platforms/common/server/buffer_texture_binder.h (+1/-1)
src/platforms/common/server/kms-utils/drm_mode_resources.cpp (+1/-1)
src/platforms/common/server/kms-utils/drm_mode_resources.h (+1/-1)
src/platforms/common/server/kms-utils/kms_connector.cpp (+1/-1)
src/platforms/common/server/kms-utils/kms_connector.h (+1/-1)
src/platforms/common/server/platform_authentication_wrapper.cpp (+1/-1)
src/platforms/common/server/shm_buffer.cpp (+2/-2)
src/platforms/common/server/shm_buffer.h (+3/-2)
src/platforms/eglstream-kms/client/client_buffer.cpp (+1/-1)
src/platforms/eglstream-kms/client/client_buffer.h (+1/-1)
src/platforms/eglstream-kms/client/client_buffer_factory.cpp (+1/-1)
src/platforms/eglstream-kms/client/client_buffer_factory.h (+1/-1)
src/platforms/eglstream-kms/client/client_platform.cpp (+1/-1)
src/platforms/eglstream-kms/client/client_platform.h (+1/-1)
src/platforms/eglstream-kms/client/client_platform_factory.cpp (+1/-1)
src/platforms/eglstream-kms/include/native_buffer.h (+1/-1)
src/platforms/eglstream-kms/server/buffer_allocator.cpp (+3/-3)
src/platforms/eglstream-kms/server/buffer_allocator.h (+1/-1)
src/platforms/eglstream-kms/server/display.cpp (+1/-1)
src/platforms/eglstream-kms/server/display.h (+1/-1)
src/platforms/eglstream-kms/server/egl_output.cpp (+1/-1)
src/platforms/eglstream-kms/server/egl_output.h (+1/-1)
src/platforms/eglstream-kms/server/kms_display_configuration.cpp (+1/-1)
src/platforms/eglstream-kms/server/kms_display_configuration.h (+1/-1)
src/platforms/eglstream-kms/server/platform.cpp (+1/-1)
src/platforms/eglstream-kms/server/platform.h (+1/-1)
src/platforms/eglstream-kms/server/platform_symbols.cpp (+2/-2)
src/platforms/eglstream-kms/server/software_buffer.cpp (+3/-3)
src/platforms/eglstream-kms/server/software_buffer.h (+4/-6)
src/platforms/evdev/button_utils.cpp (+1/-1)
src/platforms/evdev/button_utils.h (+1/-1)
src/platforms/evdev/evdev_device_detection.cpp (+1/-1)
src/platforms/evdev/evdev_device_detection.h (+1/-1)
src/platforms/evdev/libinput_device.cpp (+1/-1)
src/platforms/evdev/libinput_device.h (+1/-1)
src/platforms/evdev/libinput_device_ptr.cpp (+1/-1)
src/platforms/evdev/libinput_device_ptr.h (+1/-1)
src/platforms/evdev/libinput_ptr.cpp (+1/-1)
src/platforms/evdev/libinput_ptr.h (+1/-1)
src/platforms/evdev/platform.cpp (+1/-1)
src/platforms/evdev/platform.h (+1/-1)
src/platforms/evdev/platform_factory.cpp (+1/-1)
src/platforms/mesa/client/buffer_file_ops.h (+1/-1)
src/platforms/mesa/client/client_buffer.cpp (+1/-1)
src/platforms/mesa/client/client_buffer.h (+1/-1)
src/platforms/mesa/client/client_buffer_factory.cpp (+1/-1)
src/platforms/mesa/client/client_buffer_factory.h (+1/-1)
src/platforms/mesa/client/client_platform.cpp (+1/-1)
src/platforms/mesa/client/client_platform.h (+1/-1)
src/platforms/mesa/client/client_platform_factory.cpp (+1/-1)
src/platforms/mesa/client/mesa_native_display_container.cpp (+1/-1)
src/platforms/mesa/client/mesa_native_display_container.h (+1/-1)
src/platforms/mesa/client/native_surface.cpp (+1/-1)
src/platforms/mesa/client/native_surface.h (+1/-1)
src/platforms/mesa/common/gbm_format_conversions.cpp (+1/-1)
src/platforms/mesa/include/gbm_format_conversions.h (+1/-1)
src/platforms/mesa/include/mesa_extensions.h (+1/-1)
src/platforms/mesa/include/native_buffer.h (+1/-1)
src/platforms/mesa/server/CMakeLists.txt (+2/-0)
src/platforms/mesa/server/buffer_allocator.cpp (+260/-3)
src/platforms/mesa/server/buffer_allocator.h (+10/-2)
src/platforms/mesa/server/display_helpers.cpp (+1/-1)
src/platforms/mesa/server/display_helpers.h (+1/-1)
src/platforms/mesa/server/drm_authentication.h (+1/-1)
src/platforms/mesa/server/drm_close_threadsafe.cpp (+1/-1)
src/platforms/mesa/server/drm_close_threadsafe.h (+1/-1)
src/platforms/mesa/server/drm_native_platform.cpp (+1/-1)
src/platforms/mesa/server/drm_native_platform.h (+1/-1)
src/platforms/mesa/server/gbm_buffer.cpp (+1/-1)
src/platforms/mesa/server/gbm_buffer.h (+1/-1)
src/platforms/mesa/server/gbm_platform.cpp (+1/-1)
src/platforms/mesa/server/gbm_platform.h (+1/-1)
src/platforms/mesa/server/ipc_operations.cpp (+1/-1)
src/platforms/mesa/server/ipc_operations.h (+1/-1)
src/platforms/mesa/server/kms/CMakeLists.txt (+2/-0)
src/platforms/mesa/server/kms/bypass.cpp (+1/-1)
src/platforms/mesa/server/kms/bypass.h (+1/-1)
src/platforms/mesa/server/kms/cursor.cpp (+116/-54)
src/platforms/mesa/server/kms/cursor.h (+12/-5)
src/platforms/mesa/server/kms/display.cpp (+12/-6)
src/platforms/mesa/server/kms/display.h (+1/-1)
src/platforms/mesa/server/kms/display_buffer.cpp (+1/-1)
src/platforms/mesa/server/kms/display_buffer.h (+1/-1)
src/platforms/mesa/server/kms/egl_helper.cpp (+1/-1)
src/platforms/mesa/server/kms/egl_helper.h (+1/-1)
src/platforms/mesa/server/kms/kms_display_configuration.h (+1/-1)
src/platforms/mesa/server/kms/kms_output.h (+1/-1)
src/platforms/mesa/server/kms/kms_output_container.h (+1/-1)
src/platforms/mesa/server/kms/kms_page_flipper.cpp (+1/-1)
src/platforms/mesa/server/kms/kms_page_flipper.h (+1/-1)
src/platforms/mesa/server/kms/linux_virtual_terminal.cpp (+1/-1)
src/platforms/mesa/server/kms/linux_virtual_terminal.h (+1/-1)
src/platforms/mesa/server/kms/mutex.h (+1/-1)
src/platforms/mesa/server/kms/page_flipper.h (+1/-1)
src/platforms/mesa/server/kms/platform.cpp (+15/-1)
src/platforms/mesa/server/kms/platform.h (+1/-1)
src/platforms/mesa/server/kms/platform_symbols.cpp (+1/-1)
src/platforms/mesa/server/kms/real_kms_display_configuration.cpp (+1/-1)
src/platforms/mesa/server/kms/real_kms_display_configuration.h (+1/-1)
src/platforms/mesa/server/kms/real_kms_output.cpp (+3/-3)
src/platforms/mesa/server/kms/real_kms_output.h (+1/-1)
src/platforms/mesa/server/kms/real_kms_output_container.cpp (+1/-1)
src/platforms/mesa/server/kms/real_kms_output_container.h (+1/-1)
src/platforms/mesa/server/kms/virtual_terminal.h (+1/-1)
src/platforms/mesa/server/nested_authentication.cpp (+1/-1)
src/platforms/mesa/server/nested_authentication.h (+1/-1)
src/platforms/mesa/server/platform_common.h (+1/-1)
src/platforms/mesa/server/software_buffer.cpp (+3/-3)
src/platforms/mesa/server/software_buffer.h (+4/-6)
src/platforms/mesa/server/x11/X11_resources.cpp (+1/-1)
src/platforms/mesa/server/x11/X11_resources.h (+1/-1)
src/platforms/mesa/server/x11/graphics/display.cpp (+11/-7)
src/platforms/mesa/server/x11/graphics/display.h (+1/-1)
src/platforms/mesa/server/x11/graphics/display_buffer.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/display_buffer.h (+1/-1)
src/platforms/mesa/server/x11/graphics/display_configuration.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/display_configuration.h (+1/-1)
src/platforms/mesa/server/x11/graphics/egl_helper.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/egl_helper.h (+1/-1)
src/platforms/mesa/server/x11/graphics/graphics.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/platform.cpp (+1/-1)
src/platforms/mesa/server/x11/graphics/platform.h (+1/-1)
src/platforms/mesa/server/x11/input/input.cpp (+1/-1)
src/platforms/mesa/server/x11/input/input_device.cpp (+1/-1)
src/platforms/mesa/server/x11/input/input_device.h (+1/-1)
src/platforms/mesa/server/x11/input/input_platform.cpp (+1/-1)
src/platforms/mesa/server/x11/input/input_platform.h (+1/-1)
src/protobuf/google_protobuf_guard.cpp (+1/-1)
src/protocol/CMakeLists.txt (+28/-0)
src/protocol/wrapper_generator.cpp (+547/-0)
src/renderers/gl/program_family.cpp (+1/-1)
src/renderers/gl/program_family.h (+1/-1)
src/renderers/gl/renderer.cpp (+1/-1)
src/renderers/gl/renderer.h (+1/-1)
src/renderers/gl/renderer_factory.cpp (+1/-1)
src/renderers/gl/renderer_factory.h (+1/-1)
src/server/CMakeLists.txt (+4/-1)
src/server/basic_callback.cpp (+1/-1)
src/server/compositor/CMakeLists.txt (+0/-2)
src/server/compositor/buffer_acquisition.h (+18/-3)
src/server/compositor/buffer_map.cpp (+0/-116)
src/server/compositor/buffer_map.h (+0/-65)
src/server/compositor/buffer_stream_factory.cpp (+6/-13)
src/server/compositor/buffer_stream_factory.h (+5/-6)
src/server/compositor/compositing_screencast.cpp (+1/-1)
src/server/compositor/compositing_screencast.h (+1/-1)
src/server/compositor/default_configuration.cpp (+1/-1)
src/server/compositor/default_display_buffer_compositor.cpp (+1/-1)
src/server/compositor/default_display_buffer_compositor.h (+1/-1)
src/server/compositor/default_display_buffer_compositor_factory.cpp (+1/-1)
src/server/compositor/default_display_buffer_compositor_factory.h (+1/-1)
src/server/compositor/dropping_schedule.cpp (+2/-23)
src/server/compositor/dropping_schedule.h (+2/-6)
src/server/compositor/multi_monitor_arbiter.cpp (+12/-71)
src/server/compositor/multi_monitor_arbiter.h (+2/-19)
src/server/compositor/multi_threaded_compositor.cpp (+1/-1)
src/server/compositor/multi_threaded_compositor.h (+1/-1)
src/server/compositor/occlusion.cpp (+1/-1)
src/server/compositor/occlusion.h (+1/-1)
src/server/compositor/queueing_schedule.cpp (+1/-8)
src/server/compositor/queueing_schedule.h (+1/-3)
src/server/compositor/schedule.h (+1/-4)
src/server/compositor/screencast_display_buffer.cpp (+1/-1)
src/server/compositor/screencast_display_buffer.h (+1/-1)
src/server/compositor/stream.cpp (+8/-67)
src/server/compositor/stream.h (+2/-9)
src/server/compositor/temporary_buffers.cpp (+0/-81)
src/server/compositor/temporary_buffers.h (+0/-74)
src/server/default_emergency_cleanup.cpp (+1/-1)
src/server/default_emergency_cleanup.h (+1/-1)
src/server/default_server_configuration.cpp (+1/-1)
src/server/display_server.cpp (+25/-27)
src/server/frontend/CMakeLists.txt (+2/-0)
src/server/frontend/authorizing_display_changer.cpp (+1/-1)
src/server/frontend/authorizing_display_changer.h (+1/-1)
src/server/frontend/authorizing_input_config_changer.cpp (+1/-1)
src/server/frontend/authorizing_input_config_changer.h (+1/-1)
src/server/frontend/connection_context.cpp (+1/-1)
src/server/frontend/default_configuration.cpp (+1/-1)
src/server/frontend/default_ipc_factory.cpp (+189/-2)
src/server/frontend/default_ipc_factory.h (+5/-1)
src/server/frontend/display_server.h (+1/-1)
src/server/frontend/event_sender.cpp (+1/-9)
src/server/frontend/event_sender.h (+1/-2)
src/server/frontend/event_sink_factory.h (+1/-1)
src/server/frontend/message_receiver.h (+1/-1)
src/server/frontend/message_sender.h (+1/-1)
src/server/frontend/no_prompt_shell.cpp (+1/-1)
src/server/frontend/no_prompt_shell.h (+1/-1)
src/server/frontend/protobuf_buffer_packer.cpp (+1/-1)
src/server/frontend/protobuf_buffer_packer.h (+1/-1)
src/server/frontend/protobuf_connection_creator.cpp (+1/-1)
src/server/frontend/protobuf_input_converter.cpp (+1/-1)
src/server/frontend/protobuf_input_converter.h (+1/-1)
src/server/frontend/protobuf_ipc_factory.h (+1/-1)
src/server/frontend/protobuf_message_processor.cpp (+9/-16)
src/server/frontend/protobuf_message_processor.h (+1/-1)
src/server/frontend/protobuf_responder.cpp (+1/-1)
src/server/frontend/protobuf_responder.h (+1/-1)
src/server/frontend/published_socket_connector.cpp (+55/-11)
src/server/frontend/published_socket_connector.h (+2/-2)
src/server/frontend/reordering_message_sender.cpp (+1/-1)
src/server/frontend/reordering_message_sender.h (+1/-1)
src/server/frontend/resource_cache.cpp (+1/-1)
src/server/frontend/resource_cache.h (+1/-1)
src/server/frontend/screencast_buffer_tracker.cpp (+1/-1)
src/server/frontend/screencast_buffer_tracker.h (+1/-1)
src/server/frontend/session_credentials.cpp (+1/-1)
src/server/frontend/session_mediator.cpp (+165/-49)
src/server/frontend/session_mediator.h (+12/-3)
src/server/frontend/session_mediator_observer_multiplexer.cpp (+1/-1)
src/server/frontend/session_mediator_observer_multiplexer.h (+1/-1)
src/server/frontend/shell_wrapper.cpp (+1/-1)
src/server/frontend/shell_wrapper.h (+1/-1)
src/server/frontend/socket_connection.cpp (+1/-1)
src/server/frontend/socket_connection.h (+1/-1)
src/server/frontend/socket_messenger.cpp (+1/-1)
src/server/frontend/socket_messenger.h (+1/-1)
src/server/frontend/unauthorized_screencast.cpp (+1/-1)
src/server/frontend/unauthorized_screencast.h (+1/-1)
src/server/frontend/wayland/CMakeLists.txt (+14/-0)
src/server/frontend/wayland/core_generated_interfaces.h (+1910/-0)
src/server/frontend/wayland/wayland_connector.cpp (+2182/-0)
src/server/frontend/wayland/wayland_connector.h (+86/-0)
src/server/frontend/wayland/wayland_default_configuration.cpp (+49/-0)
src/server/glib_main_loop.cpp (+1/-1)
src/server/glib_main_loop_sources.cpp (+1/-1)
src/server/graphics/default_configuration.cpp (+1/-1)
src/server/graphics/default_display_configuration_policy.cpp (+1/-1)
src/server/graphics/display_configuration_observer_multiplexer.cpp (+1/-1)
src/server/graphics/display_configuration_observer_multiplexer.h (+1/-1)
src/server/graphics/gl_extensions_base.cpp (+1/-1)
src/server/graphics/nested/buffer.cpp (+1/-1)
src/server/graphics/nested/buffer.h (+1/-1)
src/server/graphics/nested/cursor.cpp (+1/-1)
src/server/graphics/nested/cursor.h (+1/-1)
src/server/graphics/nested/display.cpp (+1/-1)
src/server/graphics/nested/display.h (+1/-1)
src/server/graphics/nested/display_buffer.cpp (+1/-1)
src/server/graphics/nested/display_buffer.h (+1/-1)
src/server/graphics/nested/host_buffer.cpp (+1/-1)
src/server/graphics/nested/host_buffer.h (+1/-1)
src/server/graphics/nested/host_chain.h (+1/-1)
src/server/graphics/nested/host_connection.h (+1/-1)
src/server/graphics/nested/host_stream.h (+1/-1)
src/server/graphics/nested/host_surface.h (+1/-1)
src/server/graphics/nested/host_surface_spec.h (+1/-1)
src/server/graphics/nested/input_platform.cpp (+1/-1)
src/server/graphics/nested/input_platform.h (+1/-1)
src/server/graphics/nested/ipc_operations.cpp (+1/-1)
src/server/graphics/nested/ipc_operations.h (+1/-1)
src/server/graphics/nested/mir_client_host_connection.cpp (+4/-4)
src/server/graphics/nested/mir_client_host_connection.h (+1/-1)
src/server/graphics/nested/native_buffer.h (+1/-1)
src/server/graphics/nested/nested_display_configuration.cpp (+1/-1)
src/server/graphics/nested/nested_display_configuration.h (+1/-1)
src/server/graphics/nested/passthrough_option.h (+1/-1)
src/server/graphics/nested/platform.cpp (+1/-1)
src/server/graphics/nested/platform.h (+1/-1)
src/server/graphics/offscreen/display.cpp (+1/-1)
src/server/graphics/offscreen/display.h (+1/-1)
src/server/graphics/offscreen/display_buffer.cpp (+1/-1)
src/server/graphics/offscreen/display_buffer.h (+1/-1)
src/server/graphics/offscreen/display_configuration.cpp (+1/-1)
src/server/graphics/offscreen/display_configuration.h (+1/-1)
src/server/graphics/software_cursor.cpp (+1/-1)
src/server/graphics/software_cursor.h (+1/-1)
src/server/graphics/surfaceless_egl_context.cpp (+1/-1)
src/server/input/basic_seat.cpp (+1/-1)
src/server/input/basic_seat.h (+1/-1)
src/server/input/builtin_cursor_images.cpp (+1/-1)
src/server/input/builtin_cursor_images.h (+1/-1)
src/server/input/config_changer.cpp (+27/-20)
src/server/input/config_changer.h (+3/-1)
src/server/input/cursor_controller.cpp (+1/-1)
src/server/input/cursor_controller.h (+1/-1)
src/server/input/default_configuration.cpp (+1/-1)
src/server/input/default_device.cpp (+1/-1)
src/server/input/default_device.h (+1/-1)
src/server/input/default_event_builder.cpp (+1/-1)
src/server/input/default_event_builder.h (+1/-1)
src/server/input/default_input_device_hub.cpp (+1/-1)
src/server/input/default_input_device_hub.h (+1/-1)
src/server/input/default_input_manager.cpp (+1/-1)
src/server/input/default_input_manager.h (+1/-1)
src/server/input/event_filter_chain_dispatcher.cpp (+1/-1)
src/server/input/event_filter_chain_dispatcher.h (+1/-1)
src/server/input/input_modifier_utils.cpp (+1/-1)
src/server/input/input_modifier_utils.h (+1/-1)
src/server/input/input_probe.cpp (+1/-1)
src/server/input/key_repeat_dispatcher.cpp (+1/-1)
src/server/input/key_repeat_dispatcher.h (+1/-1)
src/server/input/null_input_dispatcher.cpp (+1/-1)
src/server/input/null_input_dispatcher.h (+1/-1)
src/server/input/null_input_manager.h (+1/-1)
src/server/input/null_input_targeter.h (+1/-1)
src/server/input/seat_input_device_tracker.cpp (+1/-1)
src/server/input/seat_input_device_tracker.h (+1/-1)
src/server/input/seat_observer_multiplexer.cpp (+1/-1)
src/server/input/seat_observer_multiplexer.h (+1/-1)
src/server/input/surface_input_dispatcher.cpp (+1/-1)
src/server/input/surface_input_dispatcher.h (+1/-1)
src/server/input/touchspot_controller.cpp (+1/-1)
src/server/input/touchspot_controller.h (+1/-1)
src/server/input/validator.cpp (+1/-1)
src/server/input/vt_filter.cpp (+1/-1)
src/server/lockable_callback_wrapper.cpp (+1/-1)
src/server/report/default_server_configuration.cpp (+1/-1)
src/server/report/logging/compositor_report.cpp (+1/-1)
src/server/report/logging/compositor_report.h (+1/-1)
src/server/report/logging/connector_report.cpp (+9/-1)
src/server/report/logging/connector_report.h (+2/-1)
src/server/report/logging/display_configuration_report.cpp (+1/-1)
src/server/report/logging/display_configuration_report.h (+1/-1)
src/server/report/logging/display_report.cpp (+1/-1)
src/server/report/logging/display_report.h (+1/-1)
src/server/report/logging/input_report.cpp (+1/-1)
src/server/report/logging/input_report.h (+1/-1)
src/server/report/logging/logging_report_factory.cpp (+1/-1)
src/server/report/logging/message_processor_report.cpp (+1/-1)
src/server/report/logging/message_processor_report.h (+1/-1)
src/server/report/logging/scene_report.cpp (+1/-1)
src/server/report/logging/scene_report.h (+1/-1)
src/server/report/logging/seat_report.cpp (+1/-1)
src/server/report/logging/seat_report.h (+1/-1)
src/server/report/logging/session_mediator_report.cpp (+1/-1)
src/server/report/logging/session_mediator_report.h (+1/-1)
src/server/report/logging/shell_report.cpp (+1/-1)
src/server/report/logging/shell_report.h (+1/-1)
src/server/report/logging_report_factory.h (+1/-1)
src/server/report/lttng/compositor_report.cpp (+1/-1)
src/server/report/lttng/compositor_report.h (+1/-1)
src/server/report/lttng/compositor_report_tp.h (+1/-1)
src/server/report/lttng/connector_report.cpp (+6/-1)
src/server/report/lttng/connector_report.h (+3/-1)
src/server/report/lttng/connector_report_tp.h (+1/-1)
src/server/report/lttng/display_report.cpp (+1/-1)
src/server/report/lttng/display_report.h (+1/-1)
src/server/report/lttng/display_report_tp.h (+1/-1)
src/server/report/lttng/input_report.cpp (+1/-1)
src/server/report/lttng/input_report.h (+1/-1)
src/server/report/lttng/input_report_tp.h (+1/-1)
src/server/report/lttng/lttng_report_factory.cpp (+1/-1)
src/server/report/lttng/lttng_utils.h (+1/-1)
src/server/report/lttng/message_processor_report.cpp (+1/-1)
src/server/report/lttng/message_processor_report.h (+1/-1)
src/server/report/lttng/message_processor_report_tp.h (+1/-1)
src/server/report/lttng/scene_report.cpp (+1/-1)
src/server/report/lttng/scene_report.h (+1/-1)
src/server/report/lttng/scene_report_tp.h (+1/-1)
src/server/report/lttng/server_tracepoint_provider.cpp (+1/-1)
src/server/report/lttng/server_tracepoint_provider.h (+1/-1)
src/server/report/lttng/session_mediator_report.cpp (+1/-1)
src/server/report/lttng/session_mediator_report.h (+1/-1)
src/server/report/lttng/session_mediator_report_tp.h (+1/-1)
src/server/report/lttng/shared_library_prober_report.cpp (+1/-1)
src/server/report/lttng/shared_library_prober_report.h (+1/-1)
src/server/report/lttng/shared_library_prober_report_tp.h (+1/-1)
src/server/report/lttng_report_factory.h (+1/-1)
src/server/report/null/compositor_report.cpp (+1/-1)
src/server/report/null/compositor_report.h (+1/-1)
src/server/report/null/connector_report.cpp (+2/-1)
src/server/report/null/connector_report.h (+2/-1)
src/server/report/null/display_report.cpp (+1/-1)
src/server/report/null/display_report.h (+1/-1)
src/server/report/null/input_report.cpp (+1/-1)
src/server/report/null/input_report.h (+1/-1)
src/server/report/null/message_processor_report.cpp (+1/-1)
src/server/report/null/message_processor_report.h (+1/-1)
src/server/report/null/null_report_factory.cpp (+1/-1)
src/server/report/null/scene_report.cpp (+1/-1)
src/server/report/null/scene_report.h (+1/-1)
src/server/report/null/seat_report.cpp (+1/-1)
src/server/report/null/seat_report.h (+1/-1)
src/server/report/null/session_mediator_report.cpp (+1/-1)
src/server/report/null/session_mediator_report.h (+1/-1)
src/server/report/null/shell_report.cpp (+1/-1)
src/server/report/null/shell_report.h (+1/-1)
src/server/report/null_report_factory.h (+1/-1)
src/server/report/report_factory.h (+1/-1)
src/server/report/reports.cpp (+1/-1)
src/server/report/reports.h (+1/-1)
src/server/report_exception.cpp (+1/-1)
src/server/run_mir.cpp (+2/-2)
src/server/scene/application_not_responding_detector_wrapper.cpp (+1/-1)
src/server/scene/application_session.cpp (+2/-54)
src/server/scene/application_session.h (+1/-8)
src/server/scene/basic_surface.cpp (+12/-18)
src/server/scene/basic_surface.h (+2/-2)
src/server/scene/broadcasting_session_event_sink.cpp (+17/-60)
src/server/scene/broadcasting_session_event_sink.h (+11/-21)
src/server/scene/default_configuration.cpp (+1/-1)
src/server/scene/default_coordinate_translator.cpp (+1/-1)
src/server/scene/default_coordinate_translator.h (+1/-1)
src/server/scene/default_session_container.cpp (+1/-1)
src/server/scene/default_session_container.h (+1/-1)
src/server/scene/gl_pixel_buffer.cpp (+1/-1)
src/server/scene/gl_pixel_buffer.h (+1/-1)
src/server/scene/global_event_sender.cpp (+1/-5)
src/server/scene/global_event_sender.h (+1/-2)
src/server/scene/legacy_scene_change_notification.cpp (+1/-1)
src/server/scene/legacy_surface_change_notification.cpp (+1/-1)
src/server/scene/legacy_surface_change_notification.h (+1/-1)
src/server/scene/mediating_display_changer.cpp (+65/-36)
src/server/scene/mediating_display_changer.h (+6/-2)
src/server/scene/null_observer.cpp (+1/-1)
src/server/scene/null_surface_observer.cpp (+1/-1)
src/server/scene/output_properties_cache.cpp (+1/-1)
src/server/scene/output_properties_cache.h (+1/-1)
src/server/scene/pixel_buffer.h (+1/-1)
src/server/scene/prompt_session_container.cpp (+1/-1)
src/server/scene/prompt_session_container.h (+1/-1)
src/server/scene/prompt_session_impl.cpp (+1/-1)
src/server/scene/prompt_session_impl.h (+1/-1)
src/server/scene/prompt_session_manager_impl.cpp (+1/-1)
src/server/scene/prompt_session_manager_impl.h (+1/-1)
src/server/scene/rendering_tracker.cpp (+1/-1)
src/server/scene/rendering_tracker.h (+1/-1)
src/server/scene/session_manager.cpp (+2/-2)
src/server/scene/session_manager.h (+1/-1)
src/server/scene/snapshot_strategy.h (+1/-1)
src/server/scene/surface_allocator.cpp (+1/-1)
src/server/scene/surface_allocator.h (+1/-1)
src/server/scene/surface_creation_parameters.cpp (+1/-1)
src/server/scene/surface_event_source.cpp (+1/-1)
src/server/scene/surface_stack.cpp (+1/-12)
src/server/scene/surface_stack.h (+1/-1)
src/server/scene/threaded_snapshot_strategy.cpp (+1/-1)
src/server/scene/threaded_snapshot_strategy.h (+1/-1)
src/server/scene/timeout_application_not_responding_detector.cpp (+1/-1)
src/server/scene/timeout_application_not_responding_detector.h (+1/-1)
src/server/scene/unsupported_coordinate_translator.cpp (+1/-1)
src/server/scene/unsupported_coordinate_translator.h (+1/-1)
src/server/server.cpp (+1/-1)
src/server/shell/CMakeLists.txt (+0/-2)
src/server/shell/abstract_shell.cpp (+1/-1)
src/server/shell/default_configuration.cpp (+6/-8)
src/server/shell/default_persistent_surface_store.cpp (+3/-1)
src/server/shell/default_persistent_surface_store.h (+3/-1)
src/server/shell/frontend_shell.cpp (+1/-1)
src/server/shell/frontend_shell.h (+1/-1)
src/server/shell/graphics_display_layout.cpp (+1/-1)
src/server/shell/graphics_display_layout.h (+1/-1)
src/server/shell/null_host_lifecycle_event_listener.h (+1/-1)
src/server/shell/persistent_surface_store.cpp (+1/-1)
src/server/shell/shell_wrapper.cpp (+1/-1)
src/server/shell/surface_ready_observer.cpp (+1/-1)
src/server/shell/surface_specification.cpp (+1/-1)
src/server/shell/surface_stack_wrapper.cpp (+1/-1)
src/server/shell/system_compositor_window_manager.cpp (+1/-1)
src/server/shell/window_management_info.cpp (+14/-27)
src/server/symbols.map (+5/-30)
src/server/terminate_with_current_exception.cpp (+1/-1)
src/server/thread/basic_thread_pool.cpp (+1/-1)
src/server/version.h.in (+1/-1)
src/utils/backlight.sh (+1/-1)
src/utils/in.cpp (+1/-1)
src/utils/out.c (+1/-1)
src/utils/run.cpp (+1/-1)
src/utils/screencast.cpp (+1/-1)
src/utils/vanity.c (+1/-1)
src/wrapper.c (+1/-1)
tests/CMakeLists.txt (+6/-0)
tests/acceptance-tests/CMakeLists.txt (+0/-1)
tests/acceptance-tests/client_mediated_user_gestures.cpp (+21/-20)
tests/acceptance-tests/drag_and_drop.cpp (+1/-1)
tests/acceptance-tests/precompiled.hpp (+1/-1)
tests/acceptance-tests/server_configuration_options.cpp (+1/-1)
tests/acceptance-tests/server_configuration_wrapping.cpp (+1/-1)
tests/acceptance-tests/server_signal_handling.cpp (+1/-1)
tests/acceptance-tests/server_stop_callback.cpp (+1/-1)
tests/acceptance-tests/strict_close.cpp (+1/-1)
tests/acceptance-tests/test_application_not_responding_detection.cpp (+1/-1)
tests/acceptance-tests/test_buffer_stream_arrangement.cpp (+1/-1)
tests/acceptance-tests/test_buffer_stream_arrangement1.cpp (+1/-1)
tests/acceptance-tests/test_client_authorization.cpp (+1/-1)
tests/acceptance-tests/test_client_cookie.cpp (+1/-1)
tests/acceptance-tests/test_client_cursor_api.cpp (+2/-12)
tests/acceptance-tests/test_client_extensions.cpp (+1/-1)
tests/acceptance-tests/test_client_focus_notification.cpp (+1/-1)
tests/acceptance-tests/test_client_header_version.cpp (+1/-1)
tests/acceptance-tests/test_client_input.cpp (+1/-1)
tests/acceptance-tests/test_client_library.cpp (+1/-1)
tests/acceptance-tests/test_client_library_callbacks.cpp (+1/-1)
tests/acceptance-tests/test_client_library_errors.cpp (+1/-1)
tests/acceptance-tests/test_client_library_old.cpp (+1/-1)
tests/acceptance-tests/test_client_logging.cpp (+1/-1)
tests/acceptance-tests/test_client_scaling.cpp (+1/-1)
tests/acceptance-tests/test_client_screencast.cpp (+1/-1)
tests/acceptance-tests/test_client_surface_events.cpp (+1/-1)
tests/acceptance-tests/test_client_surface_swap_buffers.cpp (+1/-1)
tests/acceptance-tests/test_client_surface_visibility.cpp (+1/-1)
tests/acceptance-tests/test_client_surfaces.cpp (+48/-25)
tests/acceptance-tests/test_client_with_custom_display_config_deadlock.cpp (+1/-1)
tests/acceptance-tests/test_command_line_handling.cpp (+1/-1)
tests/acceptance-tests/test_confined_pointer.cpp (+1/-1)
tests/acceptance-tests/test_custom_input_dispatcher.cpp (+1/-1)
tests/acceptance-tests/test_custom_window_management.cpp (+1/-1)
tests/acceptance-tests/test_debug_api.cpp (+1/-1)
tests/acceptance-tests/test_display_configuration.cpp (+1/-1)
tests/acceptance-tests/test_input_device_hub.cpp (+1/-1)
tests/acceptance-tests/test_latency.cpp (+1/-1)
tests/acceptance-tests/test_mirblob.cpp (+1/-1)
tests/acceptance-tests/test_nested_input.cpp (+1/-1)
tests/acceptance-tests/test_nested_mir.cpp (+11/-7)
tests/acceptance-tests/test_new_display_configuration.cpp (+1/-1)
tests/acceptance-tests/test_persistent_surface_store.cpp (+1/-1)
tests/acceptance-tests/test_presentation_chain.cpp (+1/-1)
tests/acceptance-tests/test_prompt_session_client_api.cpp (+1/-1)
tests/acceptance-tests/test_render_override.cpp (+1/-1)
tests/acceptance-tests/test_render_surface.cpp (+1/-1)
tests/acceptance-tests/test_server_disconnect.cpp (+1/-1)
tests/acceptance-tests/test_server_shutdown.cpp (+1/-1)
tests/acceptance-tests/test_server_startup.cpp (+1/-1)
tests/acceptance-tests/test_server_without_active_outputs.cpp (+1/-1)
tests/acceptance-tests/test_session_mediator_report.cpp (+1/-1)
tests/acceptance-tests/test_shell_control_of_surface_configuration.cpp (+0/-143)
tests/acceptance-tests/test_surface_modifications.cpp (+1/-1)
tests/acceptance-tests/test_surface_morphing.cpp (+1/-1)
tests/acceptance-tests/test_surface_placement.cpp (+1/-1)
tests/acceptance-tests/test_surface_raise.cpp (+1/-1)
tests/acceptance-tests/test_surface_specification.cpp (+1/-1)
tests/acceptance-tests/test_surfaces_with_output_id.cpp (+1/-1)
tests/acceptance-tests/test_symbols_required_by_mesa.cpp (+1/-1)
tests/acceptance-tests/test_system_compositor_window_manager.cpp (+1/-1)
tests/acceptance-tests/test_unresponsive_client.cpp (+1/-1)
tests/client-language/c99.c (+1/-1)
tests/include/gmock_set_arg.h (+1/-1)
tests/include/mir/shell/basic_window_manager.h (+1/-1)
tests/include/mir/shell/canonical_window_manager.h (+1/-1)
tests/include/mir/test/as_render_target.h (+1/-1)
tests/include/mir/test/barrier.h (+1/-1)
tests/include/mir/test/current_thread_name.h (+1/-1)
tests/include/mir/test/doubles/advanceable_clock.h (+1/-1)
tests/include/mir/test/doubles/fake_alarm_factory.h (+1/-1)
tests/include/mir/test/doubles/fake_ipc_factory.h (+1/-1)
tests/include/mir/test/doubles/fake_renderable.h (+1/-1)
tests/include/mir/test/doubles/fd_matcher.h (+1/-1)
tests/include/mir/test/doubles/mock_buffer.h (+1/-1)
tests/include/mir/test/doubles/mock_buffer_ipc_message.h (+1/-1)
tests/include/mir/test/doubles/mock_buffer_stream.h (+1/-4)
tests/include/mir/test/doubles/mock_client_buffer_factory.h (+1/-1)
tests/include/mir/test/doubles/mock_client_platform.h (+1/-1)
tests/include/mir/test/doubles/mock_compositor.h (+1/-1)
tests/include/mir/test/doubles/mock_compositor_report.h (+1/-1)
tests/include/mir/test/doubles/mock_coordinate_translator.h (+1/-1)
tests/include/mir/test/doubles/mock_cursor_listener.h (+1/-1)
tests/include/mir/test/doubles/mock_device.h (+1/-1)
tests/include/mir/test/doubles/mock_display.h (+1/-1)
tests/include/mir/test/doubles/mock_display_buffer.h (+1/-1)
tests/include/mir/test/doubles/mock_display_changer.h (+1/-1)
tests/include/mir/test/doubles/mock_display_layout.h (+1/-1)
tests/include/mir/test/doubles/mock_display_report.h (+1/-1)
tests/include/mir/test/doubles/mock_drm.h (+1/-1)
tests/include/mir/test/doubles/mock_event_filter.h (+1/-1)
tests/include/mir/test/doubles/mock_event_handler_register.h (+1/-1)
tests/include/mir/test/doubles/mock_event_sink.h (+1/-2)
tests/include/mir/test/doubles/mock_event_sink_factory.h (+1/-1)
tests/include/mir/test/doubles/mock_fb_hal_device.h (+1/-1)
tests/include/mir/test/doubles/mock_frontend_surface.h (+1/-1)
tests/include/mir/test/doubles/mock_gbm.h (+1/-1)
tests/include/mir/test/doubles/mock_gl_buffer.h (+1/-1)
tests/include/mir/test/doubles/mock_gl_config.h (+1/-1)
tests/include/mir/test/doubles/mock_gl_display_buffer.h (+1/-1)
tests/include/mir/test/doubles/mock_hwc_composer_device_1.h (+1/-1)
tests/include/mir/test/doubles/mock_input_config_changer.h (+1/-1)
tests/include/mir/test/doubles/mock_input_device.h (+1/-1)
tests/include/mir/test/doubles/mock_input_device_registry.h (+1/-1)
tests/include/mir/test/doubles/mock_input_manager.h (+1/-1)
tests/include/mir/test/doubles/mock_input_platform.h (+1/-1)
tests/include/mir/test/doubles/mock_input_seat.h (+1/-1)
tests/include/mir/test/doubles/mock_input_sink.h (+1/-1)
tests/include/mir/test/doubles/mock_input_surface.h (+1/-1)
tests/include/mir/test/doubles/mock_input_targeter.h (+1/-1)
tests/include/mir/test/doubles/mock_key_mapper.h (+1/-1)
tests/include/mir/test/doubles/mock_libinput.h (+1/-1)
tests/include/mir/test/doubles/mock_lockable_callback.h (+1/-1)
tests/include/mir/test/doubles/mock_main_loop.h (+1/-1)
tests/include/mir/test/doubles/mock_mesa_auth_extensions.h (+1/-1)
tests/include/mir/test/doubles/mock_message_sender.h (+1/-1)
tests/include/mir/test/doubles/mock_mir_buffer.h (+1/-1)
tests/include/mir/test/doubles/mock_mir_buffer_stream.h (+1/-1)
tests/include/mir/test/doubles/mock_option.h (+1/-1)
tests/include/mir/test/doubles/mock_platform_ipc_operations.h (+1/-1)
tests/include/mir/test/doubles/mock_protobuf_server.h (+1/-1)
tests/include/mir/test/doubles/mock_renderable.h (+1/-1)
tests/include/mir/test/doubles/mock_renderer.h (+1/-1)
tests/include/mir/test/doubles/mock_rpc_report.h (+1/-1)
tests/include/mir/test/doubles/mock_scene.h (+1/-1)
tests/include/mir/test/doubles/mock_scene_session.h (+1/-1)
tests/include/mir/test/doubles/mock_screencast.h (+1/-1)
tests/include/mir/test/doubles/mock_server_status_listener.h (+1/-1)
tests/include/mir/test/doubles/mock_session.h (+1/-1)
tests/include/mir/test/doubles/mock_session_listener.h (+1/-1)
tests/include/mir/test/doubles/mock_shell.h (+1/-1)
tests/include/mir/test/doubles/mock_surface.h (+1/-1)
tests/include/mir/test/doubles/mock_surface_stack.h (+1/-1)
tests/include/mir/test/doubles/mock_timer.h (+1/-1)
tests/include/mir/test/doubles/mock_touch_visualizer.h (+1/-1)
tests/include/mir/test/doubles/mock_udev.h (+1/-1)
tests/include/mir/test/doubles/mock_udev_device.h (+1/-1)
tests/include/mir/test/doubles/mock_virtual_terminal.h (+1/-1)
tests/include/mir/test/doubles/mock_x11.h (+1/-1)
tests/include/mir/test/doubles/null_application_not_responding_detector.h (+1/-1)
tests/include/mir/test/doubles/null_client_buffer.h (+1/-1)
tests/include/mir/test/doubles/null_client_event_sink.h (+1/-1)
tests/include/mir/test/doubles/null_display_changer.h (+1/-1)
tests/include/mir/test/doubles/null_emergency_cleanup.h (+1/-1)
tests/include/mir/test/doubles/null_event_sink.h (+1/-2)
tests/include/mir/test/doubles/null_event_sink_factory.h (+1/-1)
tests/include/mir/test/doubles/null_message_sender.h (+1/-1)
tests/include/mir/test/doubles/null_pixel_buffer.h (+1/-1)
tests/include/mir/test/doubles/null_prompt_session.h (+1/-1)
tests/include/mir/test/doubles/null_prompt_session_manager.h (+1/-1)
tests/include/mir/test/doubles/null_screencast.h (+1/-1)
tests/include/mir/test/doubles/null_session_event_sink.h (+2/-2)
tests/include/mir/test/doubles/null_snapshot_strategy.h (+1/-1)
tests/include/mir/test/doubles/null_video_devices.h (+1/-1)
tests/include/mir/test/doubles/null_virtual_terminal.h (+1/-1)
tests/include/mir/test/doubles/stub_alarm.h (+1/-1)
tests/include/mir/test/doubles/stub_buffer.h (+1/-1)
tests/include/mir/test/doubles/stub_buffer_allocator.h (+1/-1)
tests/include/mir/test/doubles/stub_buffer_stream.h (+1/-4)
tests/include/mir/test/doubles/stub_buffer_stream_factory.h (+10/-31)
tests/include/mir/test/doubles/stub_client_buffer.h (+1/-1)
tests/include/mir/test/doubles/stub_client_buffer_factory.h (+1/-1)
tests/include/mir/test/doubles/stub_client_platform_factory.h (+1/-1)
tests/include/mir/test/doubles/stub_connection_configuration.h (+1/-1)
tests/include/mir/test/doubles/stub_cursor_listener.h (+1/-1)
tests/include/mir/test/doubles/stub_display.h (+1/-1)
tests/include/mir/test/doubles/stub_display_server.h (+1/-1)
tests/include/mir/test/doubles/stub_gbm_native_buffer.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_buffer.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_buffer_allocator.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_config.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_display_buffer.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_program.h (+1/-1)
tests/include/mir/test/doubles/stub_gl_program_factory.h (+1/-1)
tests/include/mir/test/doubles/stub_host_connection.h (+1/-1)
tests/include/mir/test/doubles/stub_input_scene.h (+1/-1)
tests/include/mir/test/doubles/stub_input_surface.h (+1/-1)
tests/include/mir/test/doubles/stub_input_targeter.h (+1/-1)
tests/include/mir/test/doubles/stub_ipc_factory.h (+1/-1)
tests/include/mir/test/doubles/stub_renderable.h (+1/-1)
tests/include/mir/test/doubles/stub_renderer.h (+1/-1)
tests/include/mir/test/doubles/stub_scene.h (+1/-1)
tests/include/mir/test/doubles/stub_scene_element.h (+1/-7)
tests/include/mir/test/doubles/stub_scene_surface.h (+1/-2)
tests/include/mir/test/doubles/stub_session.h (+1/-1)
tests/include/mir/test/doubles/stub_session_container.h (+1/-1)
tests/include/mir/test/doubles/stub_shell.h (+1/-1)
tests/include/mir/test/doubles/stub_surface_factory.h (+1/-1)
tests/include/mir/test/doubles/stub_touch_visualizer.h (+1/-1)
tests/include/mir/test/doubles/triggered_main_loop.h (+1/-1)
tests/include/mir/test/fake_clock.h (+1/-1)
tests/include/mir/test/fd_utils.h (+1/-1)
tests/include/mir/test/input_config_matchers.h (+1/-1)
tests/include/mir/test/input_devices_matcher.h (+1/-1)
tests/include/mir/test/stub_server_tool.h (+1/-1)
tests/include/mir/test/test_dispatchable.h (+1/-1)
tests/include/mir/test/test_protobuf_client.h (+9/-1)
tests/include/mir/test/test_protobuf_server.h (+1/-1)
tests/include/mir/test/wait_object.h (+1/-1)
tests/include/mir_test_framework/basic_client_server_fixture.h (+1/-1)
tests/include/mir_test_framework/client_platform_factory.h (+1/-1)
tests/include/mir_test_framework/command_line_server_configuration.h (+1/-1)
tests/include/mir_test_framework/deferred_in_process_server.h (+1/-1)
tests/include/mir_test_framework/fake_input_server_configuration.h (+1/-1)
tests/include/mir_test_framework/input_testing_server_configuration.h (+1/-1)
tests/include/mir_test_framework/libinput_environment.h (+1/-1)
tests/include/mir_test_framework/stub_client_connection_configuration.h (+1/-1)
tests/include/mir_test_framework/stub_client_platform_factory.h (+1/-1)
tests/include/mir_test_framework/stub_input_platform.h (+1/-1)
tests/include/mir_test_framework/stubbed_server_configuration.h (+2/-1)
tests/include/mir_test_framework/testing_server_configuration.h (+1/-1)
tests/include/mir_test_framework/udev_environment.h (+1/-1)
tests/integration-tests/client/test_mirsurface.cpp (+1/-1)
tests/integration-tests/client/test_screencast.cpp (+1/-1)
tests/integration-tests/compositor/multithread_harness.h (+1/-1)
tests/integration-tests/compositor/test_swapping_swappers.cpp (+2/-3)
tests/integration-tests/compositor/test_synchronizer.cpp (+1/-1)
tests/integration-tests/graphics/mesa/test_buffer_integration.cpp (+1/-1)
tests/integration-tests/input/test_configuring_input_manager.cpp (+1/-1)
tests/integration-tests/input/test_cursor_listener.cpp (+1/-1)
tests/integration-tests/input/test_single_seat_setup.cpp (+1/-1)
tests/integration-tests/precompiled.hpp (+1/-1)
tests/integration-tests/process/test_process.cpp (+1/-1)
tests/integration-tests/session_management.cpp (+1/-1)
tests/integration-tests/shell/test_session_lifecycle_event.cpp (+1/-1)
tests/integration-tests/test_buffer_scheduling.cpp (+52/-17)
tests/integration-tests/test_client_screencast.cpp (+1/-1)
tests/integration-tests/test_display_info.cpp (+1/-1)
tests/integration-tests/test_display_server_main_loop_events.cpp (+1/-1)
tests/integration-tests/test_error_reporting.cpp (+1/-1)
tests/integration-tests/test_focus_selection.cpp (+1/-1)
tests/integration-tests/test_large_messages.cpp (+1/-1)
tests/integration-tests/test_server_client_types.cpp (+1/-1)
tests/integration-tests/test_server_shutdown.cpp (+1/-1)
tests/integration-tests/test_session.cpp (+2/-2)
tests/integration-tests/test_stale_frames.cpp (+1/-1)
tests/integration-tests/test_submit_buffer.cpp (+147/-109)
tests/integration-tests/test_surface_first_frame_sync.cpp (+1/-1)
tests/integration-tests/test_surface_stack_with_compositor.cpp (+3/-6)
tests/integration-tests/test_surfaceloop.cpp (+1/-1)
tests/integration-tests/test_swapinterval.cpp (+4/-9)
tests/integration-tests/test_test_framework.cpp (+1/-1)
tests/integration-tests/test_touchspot_visualization.cpp (+1/-1)
tests/loader-tests/test_reload.c (+1/-1)
tests/mir_test/cross_process_action.cpp (+1/-1)
tests/mir_test/cross_process_sync.cpp (+1/-1)
tests/mir_test/current_thread_name.cpp (+1/-1)
tests/mir_test/display_config_matchers.cpp (+1/-1)
tests/mir_test/event_factory.cpp (+1/-1)
tests/mir_test/event_matchers.cpp (+1/-1)
tests/mir_test/fake_clock.cpp (+1/-1)
tests/mir_test/fd_utils.cpp (+1/-1)
tests/mir_test/pipe.cpp (+1/-1)
tests/mir_test/popen.cpp (+1/-1)
tests/mir_test/signal.cpp (+1/-1)
tests/mir_test/spin_wait.cpp (+1/-1)
tests/mir_test/test_dispatchable.cpp (+1/-1)
tests/mir_test/wait_object.cpp (+1/-1)
tests/mir_test_doubles/fake_alarm_factory.cpp (+1/-1)
tests/mir_test_doubles/fake_display.cpp (+1/-1)
tests/mir_test_doubles/mock_drm.cpp (+1/-1)
tests/mir_test_doubles/mock_egl.cpp (+49/-2)
tests/mir_test_doubles/mock_event_sink_factory.cpp (+1/-7)
tests/mir_test_doubles/mock_gbm.cpp (+1/-1)
tests/mir_test_doubles/mock_gl.cpp (+1/-1)
tests/mir_test_doubles/mock_input_device.cpp (+1/-1)
tests/mir_test_doubles/mock_libinput.cpp (+1/-1)
tests/mir_test_doubles/mock_timer.cpp (+1/-1)
tests/mir_test_doubles/mock_udev.cpp (+1/-1)
tests/mir_test_doubles/mock_x11.cpp (+1/-1)
tests/mir_test_doubles/nested_mock_egl.cpp (+3/-12)
tests/mir_test_doubles/null_event_sink_factory.cpp (+1/-1)
tests/mir_test_doubles/null_logger.cpp (+1/-1)
tests/mir_test_doubles/stub_display_configuration.cpp (+1/-1)
tests/mir_test_doubles/test_protobuf_client.cpp (+3/-1)
tests/mir_test_doubles/test_protobuf_socket_server.cpp (+1/-1)
tests/mir_test_doubles/triggered_main_loop.cpp (+1/-1)
tests/mir_test_framework/CMakeLists.txt (+4/-2)
tests/mir_test_framework/any_surface.cpp (+1/-1)
tests/mir_test_framework/async_server_runner.cpp (+22/-3)
tests/mir_test_framework/basic_window_manager.cpp (+1/-1)
tests/mir_test_framework/canonical_window_manager.cpp (+1/-1)
tests/mir_test_framework/command_line_server_configuration.cpp (+1/-1)
tests/mir_test_framework/connected_client_headless_server.cpp (+1/-1)
tests/mir_test_framework/connected_client_with_a_window.cpp (+1/-1)
tests/mir_test_framework/declarative_placement_window_manage_policy.cpp (+12/-12)
tests/mir_test_framework/executable_path.cpp (+1/-1)
tests/mir_test_framework/fake_input_device_impl.cpp (+1/-1)
tests/mir_test_framework/fake_input_device_impl.h (+1/-1)
tests/mir_test_framework/fake_input_server_configuration.cpp (+1/-1)
tests/mir_test_framework/headless_display_buffer_compositor_factory.cpp (+1/-1)
tests/mir_test_framework/headless_in_process_server.cpp (+13/-1)
tests/mir_test_framework/headless_nested_server_runner.cpp (+1/-1)
tests/mir_test_framework/headless_test.cpp (+1/-1)
tests/mir_test_framework/input_testing_server_options.cpp (+1/-1)
tests/mir_test_framework/interprocess_client_server_test.cpp (+1/-1)
tests/mir_test_framework/libinput_environment.cpp (+1/-1)
tests/mir_test_framework/main.cpp (+1/-1)
tests/mir_test_framework/observant_shell.cpp (+1/-1)
tests/mir_test_framework/placement_applying_shell.cpp (+1/-1)
tests/mir_test_framework/platform_graphics_dummy.cpp (+1/-1)
tests/mir_test_framework/platform_graphics_throw.cpp (+1/-1)
tests/mir_test_framework/process.cpp (+1/-1)
tests/mir_test_framework/server_runner.cpp (+2/-2)
tests/mir_test_framework/socket_detect_server.cpp (+1/-1)
tests/mir_test_framework/stub_client_platform_factory.cpp (+1/-1)
tests/mir_test_framework/stub_client_platform_module.cpp (+1/-1)
tests/mir_test_framework/stub_client_platform_options.cpp (+1/-1)
tests/mir_test_framework/stub_input.cpp (+1/-1)
tests/mir_test_framework/stub_input_platform.cpp (+1/-1)
tests/mir_test_framework/stub_server_platform_factory.cpp (+1/-1)
tests/mir_test_framework/stub_session.cpp (+1/-26)
tests/mir_test_framework/stub_surface.cpp (+1/-6)
tests/mir_test_framework/stubbed_graphics_platform.cpp (+1/-1)
tests/mir_test_framework/stubbed_graphics_platform.h (+1/-1)
tests/mir_test_framework/stubbed_server_configuration.cpp (+13/-1)
tests/mir_test_framework/temporary_environment_value.cpp (+1/-1)
tests/mir_test_framework/testing_client_options.cpp (+1/-1)
tests/mir_test_framework/testing_server_options.cpp (+1/-1)
tests/mir_test_framework/udev_environment.cpp (+1/-1)
tests/mir_test_framework/visible_surface.cpp (+1/-1)
tests/miral/CMakeLists.txt (+54/-0)
tests/miral/active_outputs.cpp (+205/-0)
tests/miral/active_window.cpp (+412/-0)
tests/miral/client_mediated_gestures.cpp (+299/-0)
tests/miral/display_reconfiguration.cpp (+87/-0)
tests/miral/drag_active_window.cpp (+153/-0)
tests/miral/drag_and_drop.cpp (+656/-0)
tests/miral/modify_window_state.cpp (+105/-0)
tests/miral/mru_window_list.cpp (+193/-0)
tests/miral/raise_tree.cpp (+85/-0)
tests/miral/runner.cpp (+49/-0)
tests/miral/select_active_window.cpp (+121/-0)
tests/miral/test_server.cpp (+198/-0)
tests/miral/test_server.h (+90/-0)
tests/miral/test_window_manager_tools.h (+197/-0)
tests/miral/window_id.cpp (+114/-0)
tests/miral/window_info.cpp (+61/-0)
tests/miral/window_placement.cpp (+554/-0)
tests/miral/window_placement_anchors_to_parent.cpp (+208/-0)
tests/miral/window_placement_client_api.cpp (+141/-0)
tests/miral/window_properties.cpp (+164/-0)
tests/miral/workspaces.cpp (+707/-0)
tests/mirtest.pc.in (+1/-1)
tests/performance-tests/CMakeLists.txt (+2/-10)
tests/performance-tests/performance_tests.sh (+1/-1)
tests/performance-tests/system_performance_test.cpp (+1/-1)
tests/performance-tests/system_performance_test.h (+1/-1)
tests/performance-tests/test_client_startup.cpp (+1/-1)
tests/performance-tests/test_compositor.cpp (+1/-1)
tests/performance-tests/test_glmark2-es2-mir.cpp (+1/-1)
tests/privileged-tests/test_input_events.cpp (+1/-1)
tests/privileged-tests/ui_get_sysname_ioctl_override.cpp (+1/-1)
tests/test-clients/impolite-shutdown/scroll.cpp (+1/-1)
tests/test-clients/mir-stress/src/client.cpp (+1/-1)
tests/test-clients/mir-stress/src/client.h (+1/-1)
tests/test-clients/mir-stress/src/mir-stress.cpp (+1/-1)
tests/test-clients/mir-stress/src/results.cpp (+1/-1)
tests/test-clients/mir-stress/src/results.h (+1/-1)
tests/test-clients/mir-stress/src/threading.cpp (+1/-1)
tests/test-clients/mir-stress/src/threading.h (+1/-1)
tests/umock-acceptance-tests/test_libinput.cpp (+1/-1)
tests/unit-tests/CMakeLists.txt (+0/-2)
tests/unit-tests/client/input/test_xkb_mapper.cpp (+1/-1)
tests/unit-tests/client/test_aging_buffer.cpp (+1/-1)
tests/unit-tests/client/test_buffer_vault.cpp (+1/-29)
tests/unit-tests/client/test_client.cpp (+1/-1)
tests/unit-tests/client/test_client_buffer_stream.cpp (+7/-8)
tests/unit-tests/client/test_client_display_conf.cpp (+1/-1)
tests/unit-tests/client/test_client_mir_error.cpp (+1/-1)
tests/unit-tests/client/test_client_mir_surface.cpp (+1/-1)
tests/unit-tests/client/test_client_platform.cpp (+1/-1)
tests/unit-tests/client/test_connection_resource_map.cpp (+3/-7)
tests/unit-tests/client/test_error_buffer.cpp (+1/-1)
tests/unit-tests/client/test_event_distributor.cpp (+1/-1)
tests/unit-tests/client/test_frame_clock.cpp (+1/-1)
tests/unit-tests/client/test_mir_buffer.cpp (+1/-1)
tests/unit-tests/client/test_mir_connection.cpp (+1/-2)
tests/unit-tests/client/test_mir_prompt_session.cpp (+1/-1)
tests/unit-tests/client/test_mir_render_surface.cpp (+1/-1)
tests/unit-tests/client/test_mir_screencast.cpp (+1/-1)
tests/unit-tests/client/test_no_tls_future.cpp (+1/-1)
tests/unit-tests/client/test_periodic_perf_report.cpp (+1/-1)
tests/unit-tests/client/test_presentation_chain.cpp (+1/-1)
tests/unit-tests/client/test_probing_client_platform_factory.cpp (+1/-1)
tests/unit-tests/client/test_protobuf_rpc_channel.cpp (+31/-1)
tests/unit-tests/client/test_screencast_stream.cpp (+1/-1)
tests/unit-tests/client/test_stream_transport.cpp (+1/-1)
tests/unit-tests/client/test_wait_handle.cpp (+1/-1)
tests/unit-tests/compositor/CMakeLists.txt (+0/-2)
tests/unit-tests/compositor/test_client_buffers.cpp (+0/-119)
tests/unit-tests/compositor/test_compositing_screencast.cpp (+1/-1)
tests/unit-tests/compositor/test_default_display_buffer_compositor.cpp (+1/-8)
tests/unit-tests/compositor/test_dropping_schedule.cpp (+7/-46)
tests/unit-tests/compositor/test_multi_monitor_arbiter.cpp (+251/-184)
tests/unit-tests/compositor/test_multi_threaded_compositor.cpp (+1/-1)
tests/unit-tests/compositor/test_occlusion.cpp (+1/-1)
tests/unit-tests/compositor/test_queueing_schedule.cpp (+1/-20)
tests/unit-tests/compositor/test_screencast_display_buffer.cpp (+1/-1)
tests/unit-tests/compositor/test_stream.cpp (+28/-69)
tests/unit-tests/compositor/test_temporary_buffers.cpp (+0/-143)
tests/unit-tests/dispatch/test_action_queue.cpp (+1/-1)
tests/unit-tests/dispatch/test_dispatch_utils.cpp (+1/-1)
tests/unit-tests/dispatch/test_multiplexing_dispatchable.cpp (+1/-1)
tests/unit-tests/dispatch/test_readable_fd.cpp (+1/-1)
tests/unit-tests/dispatch/test_threaded_dispatcher.cpp (+1/-1)
tests/unit-tests/frontend/stress_protobuf_communicator.cpp (+5/-1)
tests/unit-tests/frontend/test_authorizing_display_changer.cpp (+1/-1)
tests/unit-tests/frontend/test_authorizing_input_config_changer.cpp (+1/-1)
tests/unit-tests/frontend/test_basic_connector.cpp (+1/-1)
tests/unit-tests/frontend/test_buffering_message_sender.cpp (+1/-1)
tests/unit-tests/frontend/test_event_sender.cpp (+1/-1)
tests/unit-tests/frontend/test_protobuf_buffer_packer.cpp (+1/-1)
tests/unit-tests/frontend/test_protobuf_message_processor.cpp (+1/-1)
tests/unit-tests/frontend/test_protobuf_reports_errors.cpp (+1/-1)
tests/unit-tests/frontend/test_protobuf_surface_apis.cpp (+1/-1)
tests/unit-tests/frontend/test_published_socket_connector.cpp (+3/-1)
tests/unit-tests/frontend/test_resource_cache.cpp (+1/-1)
tests/unit-tests/frontend/test_session_mediator.cpp (+504/-99)
tests/unit-tests/frontend/test_socket_connection.cpp (+1/-1)
tests/unit-tests/geometry/test-dimensions.cpp (+1/-1)
tests/unit-tests/geometry/test-displacement.cpp (+1/-1)
tests/unit-tests/geometry/test-length.cpp (+1/-1)
tests/unit-tests/geometry/test-point.cpp (+1/-1)
tests/unit-tests/geometry/test-rectangle.cpp (+1/-1)
tests/unit-tests/geometry/test-rectangles.cpp (+1/-1)
tests/unit-tests/geometry/test-size.cpp (+1/-1)
tests/unit-tests/gl/test_gl_texture_cache.cpp (+1/-1)
tests/unit-tests/gl/test_program_factory.cpp (+1/-1)
tests/unit-tests/graphics/egl_mock/egl_mock_test.cpp (+1/-1)
tests/unit-tests/graphics/test_anonymous_shm_file.cpp (+5/-7)
tests/unit-tests/graphics/test_buffer_id.cpp (+1/-1)
tests/unit-tests/graphics/test_buffer_properties.cpp (+1/-1)
tests/unit-tests/graphics/test_default_display_configuration_policy.cpp (+1/-1)
tests/unit-tests/graphics/test_display_configuration.cpp (+1/-1)
tests/unit-tests/graphics/test_egl_error.cpp (+1/-1)
tests/unit-tests/graphics/test_egl_extensions.cpp (+1/-1)
tests/unit-tests/graphics/test_gamma_curves.cpp (+1/-1)
tests/unit-tests/graphics/test_overlapping_output_grouping.cpp (+1/-1)
tests/unit-tests/graphics/test_pixel_format_utils.cpp (+1/-1)
tests/unit-tests/graphics/test_platform_prober.cpp (+1/-1)
tests/unit-tests/graphics/test_shm_buffer.cpp (+4/-4)
tests/unit-tests/graphics/test_software_cursor.cpp (+1/-1)
tests/unit-tests/graphics/test_surfaceless_egl_context.cpp (+1/-1)
tests/unit-tests/input/CMakeLists.txt (+0/-1)
tests/unit-tests/input/evdev/test_evdev_device_detection.cpp (+1/-1)
tests/unit-tests/input/evdev/test_evdev_input_platform.cpp (+1/-1)
tests/unit-tests/input/evdev/test_libinput_device.cpp (+1/-1)
tests/unit-tests/input/test_config_changer.cpp (+1/-1)
tests/unit-tests/input/test_cursor_controller.cpp (+1/-1)
tests/unit-tests/input/test_default_device.cpp (+1/-1)
tests/unit-tests/input/test_default_input_device_hub.cpp (+1/-1)
tests/unit-tests/input/test_default_input_manager.cpp (+1/-1)
tests/unit-tests/input/test_event_builders.cpp (+1/-1)
tests/unit-tests/input/test_event_filter_chain_dispatcher.cpp (+1/-1)
tests/unit-tests/input/test_external_input_device_hub.cpp (+1/-1)
tests/unit-tests/input/test_input_event.cpp (+1/-1)
tests/unit-tests/input/test_input_platform_probing.cpp (+1/-1)
tests/unit-tests/input/test_key_repeat_dispatcher.cpp (+1/-1)
tests/unit-tests/input/test_nested_input_platform.cpp (+1/-1)
tests/unit-tests/input/test_seat_input_device_tracker.cpp (+1/-1)
tests/unit-tests/input/test_surface_input_dispatcher.cpp (+1/-1)
tests/unit-tests/input/test_touchspot_controller.cpp (+1/-1)
tests/unit-tests/input/test_validator.cpp (+1/-1)
tests/unit-tests/input/test_x11_module.cpp (+1/-1)
tests/unit-tests/input/test_x11_platform.cpp (+1/-1)
tests/unit-tests/input/test_xcursor_loader.cpp (+0/-148)
tests/unit-tests/library_example.cpp (+1/-1)
tests/unit-tests/library_example.h (+1/-1)
tests/unit-tests/logging/message_processor_report.cpp (+1/-1)
tests/unit-tests/logging/test_compositor_report.cpp (+1/-1)
tests/unit-tests/logging/test_display_report.cpp (+1/-1)
tests/unit-tests/options/test_program_option.cpp (+1/-1)
tests/unit-tests/platforms/eglstream-kms/server/test_buffer_allocator.cpp (+1/-1)
tests/unit-tests/platforms/mesa/client/CMakeLists.txt (+1/-1)
tests/unit-tests/platforms/mesa/client/test_client_buffer.cpp (+1/-1)
tests/unit-tests/platforms/mesa/client/test_client_platform.cpp (+1/-1)
tests/unit-tests/platforms/mesa/client/test_mesa_native_display_container.cpp (+1/-1)
tests/unit-tests/platforms/mesa/client/test_native_surface.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms-utils/test_connector_utils.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms-utils/test_drm_mode_resources.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/mock_kms_output.h (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_buffer_allocator.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_bypass.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_cursor.cpp (+16/-14)
tests/unit-tests/platforms/mesa/kms/test_display.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_display_buffer.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_display_configuration.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_display_generic.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_display_multi_monitor.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_drm_helper.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_gbm_buffer.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_graphics_platform.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_ipc_operations.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_kms_page_flipper.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_linux_virtual_terminal.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_nested_authentication.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_platform.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_real_kms_output.cpp (+1/-1)
tests/unit-tests/platforms/mesa/kms/test_software_buffer.cpp (+3/-3)
tests/unit-tests/platforms/mesa/x11/test_display.cpp (+1/-1)
tests/unit-tests/platforms/mesa/x11/test_display_generic.cpp (+1/-1)
tests/unit-tests/platforms/mesa/x11/test_graphics_platform.cpp (+1/-1)
tests/unit-tests/platforms/mesa/x11/test_platform.cpp (+1/-1)
tests/unit-tests/platforms/nested/mir_display_configuration_builder.cpp (+1/-1)
tests/unit-tests/platforms/nested/mir_display_configuration_builder.h (+1/-1)
tests/unit-tests/platforms/nested/test_buffer.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_host_buffer.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_ipc_operations.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_nested_cursor.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_nested_display.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_nested_display_buffer.cpp (+1/-1)
tests/unit-tests/platforms/nested/test_nested_display_configuration.cpp (+1/-1)
tests/unit-tests/platforms/test_display.h (+1/-1)
tests/unit-tests/platforms/test_graphics_platform.h (+1/-1)
tests/unit-tests/precompiled.hpp (+1/-1)
tests/unit-tests/renderers/gl/test_gl_renderer.cpp (+1/-1)
tests/unit-tests/scene/test_abstract_shell.cpp (+2/-2)
tests/unit-tests/scene/test_application_session.cpp (+8/-15)
tests/unit-tests/scene/test_basic_surface.cpp (+1/-15)
tests/unit-tests/scene/test_broadcasting_session_event_sink.cpp (+35/-40)
tests/unit-tests/scene/test_gl_pixel_buffer.cpp (+1/-1)
tests/unit-tests/scene/test_global_event_sender.cpp (+1/-1)
tests/unit-tests/scene/test_legacy_scene_change_notification.cpp (+1/-1)
tests/unit-tests/scene/test_mediating_display_changer.cpp (+2/-2)
tests/unit-tests/scene/test_prompt_session_container.cpp (+1/-1)
tests/unit-tests/scene/test_prompt_session_impl.cpp (+1/-1)
tests/unit-tests/scene/test_prompt_session_manager.cpp (+1/-1)
tests/unit-tests/scene/test_rendering_tracker.cpp (+1/-1)
tests/unit-tests/scene/test_session_manager.cpp (+2/-2)
tests/unit-tests/scene/test_surface.cpp (+1/-22)
tests/unit-tests/scene/test_surface_impl.cpp (+1/-1)
tests/unit-tests/scene/test_surface_stack.cpp (+2/-70)
tests/unit-tests/scene/test_the_session_container_implementation.cpp (+1/-1)
tests/unit-tests/scene/test_threaded_snapshot_strategy.cpp (+1/-1)
tests/unit-tests/scene/test_timeout_application_not_responding_detector.cpp (+1/-1)
tests/unit-tests/shared_library_test.cpp (+1/-1)
tests/unit-tests/shell/test_default_persistent_surface_store.cpp (+1/-1)
tests/unit-tests/shell/test_graphics_display_layout.cpp (+1/-1)
tests/unit-tests/shell/test_persistent_surface_store_id.cpp (+1/-1)
tests/unit-tests/test_default_emergency_cleanup.cpp (+1/-1)
tests/unit-tests/test_edid.cpp (+1/-1)
tests/unit-tests/test_fatal.cpp (+1/-1)
tests/unit-tests/test_fd.cpp (+1/-1)
tests/unit-tests/test_flags.cpp (+1/-1)
tests/unit-tests/test_glib_main_loop.cpp (+1/-1)
tests/unit-tests/test_gmock_fixes.cpp (+1/-1)
tests/unit-tests/test_lockable_callback.cpp (+1/-1)
tests/unit-tests/test_mir_cookie.cpp (+1/-1)
tests/unit-tests/test_module_deleter.cpp (+1/-1)
tests/unit-tests/test_observer_multiplexer.cpp (+1/-1)
tests/unit-tests/test_posix_rw_mutex.cpp (+1/-1)
tests/unit-tests/test_posix_timestamp.cpp (+1/-1)
tests/unit-tests/test_raii.cpp (+1/-1)
tests/unit-tests/test_recursive_read_write_mutex.cpp (+1/-1)
tests/unit-tests/test_shared_library_prober.cpp (+1/-1)
tests/unit-tests/test_thread_name.cpp (+1/-1)
tests/unit-tests/test_thread_safe_list.cpp (+1/-1)
tests/unit-tests/test_udev_wrapper.cpp (+1/-1)
tests/unit-tests/test_variable_length_array.cpp (+1/-1)
tests/unit-tests/thread/test_basic_thread_pool.cpp (+1/-1)
tools/update_package_abis.sh (+1/-0)
tools/valgrind_suppressions_generic (+7/-0)
To merge this branch: bzr merge lp:~mir-team/mir/1.0-artful
Reviewer Review Type Date Requested Status
Gerry Boland (community) 2017-10-08 Approve on 2017-10-10
Mir CI Bot continuous-integration 2017-10-08 Approve on 2017-10-08
Review via email: mp+331993@code.launchpad.net

Commit message

Mir 0.28 release to artful

To post a comment you must log in.
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4282
https://mir-jenkins.ubuntu.com/job/mir-ubuntu-ci/130/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/5103
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/5341
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/5328
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/5328
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/5328
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5147/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5147
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5147/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://mir-jenkins.ubuntu.com/job/mir-ubuntu-ci/130/rebuild

review: Approve (continuous-integration)
Gerry Boland (gerboland) wrote :

To be noted that this causes the miral-examples package to be deprecated and removed by mir-demos. A dist-upgrade is needed to do this. But all packages installed/upgraded ok.

It is a large diff, but it mainly consists of 2 changes:
1. adding MirAL from lp:miral to Mir itself, and adapting the tests to suit
2. relicencing changes, which touch every file
MirAL's inter-operability with Mir has long been good quality, and in my testing of lp:mir this hasn't changed.

I've run through the testing plan, found no new issues

review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2017-05-08 03:04:26 +0000
3+++ .bzrignore 2017-10-11 15:01:23 +0000
4@@ -2,4 +2,6 @@
5 .project
6 include/server/mir/version.h
7 include/client/mir_toolkit/version.h
8+include/miral/version.h
9 build-*
10+cmake-*
11
12=== modified file 'CMakeLists.txt'
13--- CMakeLists.txt 2017-05-25 08:58:03 +0000
14+++ CMakeLists.txt 2017-10-11 15:01:23 +0000
15@@ -1,7 +1,7 @@
16 # Copyright © 2012 Canonical Ltd.
17 #
18 # This program is free software: you can redistribute it and/or modify
19-# it under the terms of the GNU General Public License version 3 as
20+# it under the terms of the GNU General Public License version 2 or 3 as
21 # published by the Free Software Foundation.
22 #
23 # This program is distributed in the hope that it will be useful,
24@@ -28,7 +28,7 @@
25 set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
26
27 set(MIR_VERSION_MAJOR 0)
28-set(MIR_VERSION_MINOR 27)
29+set(MIR_VERSION_MINOR 28)
30 set(MIR_VERSION_PATCH 0)
31
32 add_definitions(-DMIR_VERSION_MAJOR=${MIR_VERSION_MAJOR})
33@@ -53,6 +53,7 @@
34 include (cmake/EnableCoverageReport.cmake)
35 include (cmake/MirCommon.cmake)
36 include (GNUInstallDirs)
37+include (cmake/Doxygen.cmake)
38
39 set(build_types "None;Debug;Release;RelWithDebInfo;MinSizeRel;Coverage;AddressSanitizer;ThreadSanitizer;UBSanitizer")
40 # Change informational string for CMAKE_BUILD_TYPE
41@@ -73,6 +74,16 @@
42 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-mismatched-tags")
43 endif()
44
45+# GCC 7.1 fixed a bug in the ARM ABI, which results in some std::vector methods
46+# (among others) generating this warning.
47+#
48+# There's nothing we can do about it; everything just needs to be rebuilt with
49+# GCC 7.1.
50+check_cxx_compiler_flag(-Wpsabi HAS_W_PSABI)
51+if(HAS_W_PSABI)
52+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-psabi")
53+endif()
54+
55 option(MIR_USE_LD_GOLD "Enables the \"gold\" linker." OFF)
56 if(MIR_USE_LD_GOLD)
57 set (CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -fuse-ld=gold")
58@@ -81,8 +92,6 @@
59 endif()
60
61 # Link time optimization allows leaner, cleaner libraries
62-message(STATUS "CMAKE_C_COMPILER: " ${CMAKE_C_COMPILER})
63-
64 option(MIR_LINK_TIME_OPTIMIZATION "Enables the linker to optimize binaries." OFF)
65 if(MIR_LINK_TIME_OPTIMIZATION)
66 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -flto -ffat-lto-objects")
67@@ -207,6 +216,8 @@
68
69 pkg_check_modules(UDEV REQUIRED libudev)
70 pkg_check_modules(GLIB REQUIRED glib-2.0)
71+pkg_check_modules(WAYLAND_SERVER REQUIRED wayland-server)
72+pkg_check_modules(WAYLAND_CLIENT REQUIRED wayland-client)
73
74 include_directories (SYSTEM ${GLESv2_INCLUDE_DIRS})
75 include_directories (SYSTEM ${EGL_INCLUDE_DIRS})
76@@ -291,7 +302,7 @@
77
78 # There's no nice way to format this. Thanks CMake.
79 mir_add_test(NAME LGPL-required
80- COMMAND /bin/sh -c "! grep -rl 'GNU General' ${PROJECT_SOURCE_DIR}/src/client ${PROJECT_SOURCE_DIR}/include/client ${PROJECT_SOURCE_DIR}/src/common ${PROJECT_SOURCE_DIR}/include/common ${PROJECT_SOURCE_DIR}/src/include/common ${PROJECT_SOURCE_DIR}/src/platform ${PROJECT_SOURCE_DIR}/include/platform ${PROJECT_SOURCE_DIR}/src/include/platform ${PROJECT_SOURCE_DIR}/src/capnproto"
81+ COMMAND /bin/sh -c "! grep -rl 'GNU General' ${PROJECT_SOURCE_DIR}/src/client ${PROJECT_SOURCE_DIR}/include/client ${PROJECT_SOURCE_DIR}/src/core ${PROJECT_SOURCE_DIR}/include/core ${PROJECT_SOURCE_DIR}/src/common ${PROJECT_SOURCE_DIR}/include/common ${PROJECT_SOURCE_DIR}/src/include/common ${PROJECT_SOURCE_DIR}/src/platform ${PROJECT_SOURCE_DIR}/include/platform ${PROJECT_SOURCE_DIR}/src/include/platform ${PROJECT_SOURCE_DIR}/src/platforms ${PROJECT_SOURCE_DIR}/include/platforms ${PROJECT_SOURCE_DIR}/src/include/platforms ${PROJECT_SOURCE_DIR}/src/renderers ${PROJECT_SOURCE_DIR}/include/renderers ${PROJECT_SOURCE_DIR}/src/include/renderers ${PROJECT_SOURCE_DIR}/src/capnproto"
82 )
83 mir_add_test(NAME GPL-required
84 COMMAND /bin/sh -c "! grep -rl 'GNU Lesser' ${PROJECT_SOURCE_DIR}/src/server ${PROJECT_SOURCE_DIR}/include/server ${PROJECT_SOURCE_DIR}/src/include/server ${PROJECT_SOURCE_DIR}/tests ${PROJECT_SOURCE_DIR}/examples"
85@@ -302,7 +313,6 @@
86 endif ()
87
88 enable_coverage_report(mirserver)
89-include (cmake/Doxygen.cmake)
90 include (cmake/ABICheck.cmake)
91
92 add_custom_target(ptest
93
94=== added file 'COPYING.GPL2'
95--- COPYING.GPL2 1970-01-01 00:00:00 +0000
96+++ COPYING.GPL2 2017-10-11 15:01:23 +0000
97@@ -0,0 +1,339 @@
98+ GNU GENERAL PUBLIC LICENSE
99+ Version 2, June 1991
100+
101+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
102+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
103+ Everyone is permitted to copy and distribute verbatim copies
104+ of this license document, but changing it is not allowed.
105+
106+ Preamble
107+
108+ The licenses for most software are designed to take away your
109+freedom to share and change it. By contrast, the GNU General Public
110+License is intended to guarantee your freedom to share and change free
111+software--to make sure the software is free for all its users. This
112+General Public License applies to most of the Free Software
113+Foundation's software and to any other program whose authors commit to
114+using it. (Some other Free Software Foundation software is covered by
115+the GNU Lesser General Public License instead.) You can apply it to
116+your programs, too.
117+
118+ When we speak of free software, we are referring to freedom, not
119+price. Our General Public Licenses are designed to make sure that you
120+have the freedom to distribute copies of free software (and charge for
121+this service if you wish), that you receive source code or can get it
122+if you want it, that you can change the software or use pieces of it
123+in new free programs; and that you know you can do these things.
124+
125+ To protect your rights, we need to make restrictions that forbid
126+anyone to deny you these rights or to ask you to surrender the rights.
127+These restrictions translate to certain responsibilities for you if you
128+distribute copies of the software, or if you modify it.
129+
130+ For example, if you distribute copies of such a program, whether
131+gratis or for a fee, you must give the recipients all the rights that
132+you have. You must make sure that they, too, receive or can get the
133+source code. And you must show them these terms so they know their
134+rights.
135+
136+ We protect your rights with two steps: (1) copyright the software, and
137+(2) offer you this license which gives you legal permission to copy,
138+distribute and/or modify the software.
139+
140+ Also, for each author's protection and ours, we want to make certain
141+that everyone understands that there is no warranty for this free
142+software. If the software is modified by someone else and passed on, we
143+want its recipients to know that what they have is not the original, so
144+that any problems introduced by others will not reflect on the original
145+authors' reputations.
146+
147+ Finally, any free program is threatened constantly by software
148+patents. We wish to avoid the danger that redistributors of a free
149+program will individually obtain patent licenses, in effect making the
150+program proprietary. To prevent this, we have made it clear that any
151+patent must be licensed for everyone's free use or not licensed at all.
152+
153+ The precise terms and conditions for copying, distribution and
154+modification follow.
155+
156+ GNU GENERAL PUBLIC LICENSE
157+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
158+
159+ 0. This License applies to any program or other work which contains
160+a notice placed by the copyright holder saying it may be distributed
161+under the terms of this General Public License. The "Program", below,
162+refers to any such program or work, and a "work based on the Program"
163+means either the Program or any derivative work under copyright law:
164+that is to say, a work containing the Program or a portion of it,
165+either verbatim or with modifications and/or translated into another
166+language. (Hereinafter, translation is included without limitation in
167+the term "modification".) Each licensee is addressed as "you".
168+
169+Activities other than copying, distribution and modification are not
170+covered by this License; they are outside its scope. The act of
171+running the Program is not restricted, and the output from the Program
172+is covered only if its contents constitute a work based on the
173+Program (independent of having been made by running the Program).
174+Whether that is true depends on what the Program does.
175+
176+ 1. You may copy and distribute verbatim copies of the Program's
177+source code as you receive it, in any medium, provided that you
178+conspicuously and appropriately publish on each copy an appropriate
179+copyright notice and disclaimer of warranty; keep intact all the
180+notices that refer to this License and to the absence of any warranty;
181+and give any other recipients of the Program a copy of this License
182+along with the Program.
183+
184+You may charge a fee for the physical act of transferring a copy, and
185+you may at your option offer warranty protection in exchange for a fee.
186+
187+ 2. You may modify your copy or copies of the Program or any portion
188+of it, thus forming a work based on the Program, and copy and
189+distribute such modifications or work under the terms of Section 1
190+above, provided that you also meet all of these conditions:
191+
192+ a) You must cause the modified files to carry prominent notices
193+ stating that you changed the files and the date of any change.
194+
195+ b) You must cause any work that you distribute or publish, that in
196+ whole or in part contains or is derived from the Program or any
197+ part thereof, to be licensed as a whole at no charge to all third
198+ parties under the terms of this License.
199+
200+ c) If the modified program normally reads commands interactively
201+ when run, you must cause it, when started running for such
202+ interactive use in the most ordinary way, to print or display an
203+ announcement including an appropriate copyright notice and a
204+ notice that there is no warranty (or else, saying that you provide
205+ a warranty) and that users may redistribute the program under
206+ these conditions, and telling the user how to view a copy of this
207+ License. (Exception: if the Program itself is interactive but
208+ does not normally print such an announcement, your work based on
209+ the Program is not required to print an announcement.)
210+
211+These requirements apply to the modified work as a whole. If
212+identifiable sections of that work are not derived from the Program,
213+and can be reasonably considered independent and separate works in
214+themselves, then this License, and its terms, do not apply to those
215+sections when you distribute them as separate works. But when you
216+distribute the same sections as part of a whole which is a work based
217+on the Program, the distribution of the whole must be on the terms of
218+this License, whose permissions for other licensees extend to the
219+entire whole, and thus to each and every part regardless of who wrote it.
220+
221+Thus, it is not the intent of this section to claim rights or contest
222+your rights to work written entirely by you; rather, the intent is to
223+exercise the right to control the distribution of derivative or
224+collective works based on the Program.
225+
226+In addition, mere aggregation of another work not based on the Program
227+with the Program (or with a work based on the Program) on a volume of
228+a storage or distribution medium does not bring the other work under
229+the scope of this License.
230+
231+ 3. You may copy and distribute the Program (or a work based on it,
232+under Section 2) in object code or executable form under the terms of
233+Sections 1 and 2 above provided that you also do one of the following:
234+
235+ a) Accompany it with the complete corresponding machine-readable
236+ source code, which must be distributed under the terms of Sections
237+ 1 and 2 above on a medium customarily used for software interchange; or,
238+
239+ b) Accompany it with a written offer, valid for at least three
240+ years, to give any third party, for a charge no more than your
241+ cost of physically performing source distribution, a complete
242+ machine-readable copy of the corresponding source code, to be
243+ distributed under the terms of Sections 1 and 2 above on a medium
244+ customarily used for software interchange; or,
245+
246+ c) Accompany it with the information you received as to the offer
247+ to distribute corresponding source code. (This alternative is
248+ allowed only for noncommercial distribution and only if you
249+ received the program in object code or executable form with such
250+ an offer, in accord with Subsection b above.)
251+
252+The source code for a work means the preferred form of the work for
253+making modifications to it. For an executable work, complete source
254+code means all the source code for all modules it contains, plus any
255+associated interface definition files, plus the scripts used to
256+control compilation and installation of the executable. However, as a
257+special exception, the source code distributed need not include
258+anything that is normally distributed (in either source or binary
259+form) with the major components (compiler, kernel, and so on) of the
260+operating system on which the executable runs, unless that component
261+itself accompanies the executable.
262+
263+If distribution of executable or object code is made by offering
264+access to copy from a designated place, then offering equivalent
265+access to copy the source code from the same place counts as
266+distribution of the source code, even though third parties are not
267+compelled to copy the source along with the object code.
268+
269+ 4. You may not copy, modify, sublicense, or distribute the Program
270+except as expressly provided under this License. Any attempt
271+otherwise to copy, modify, sublicense or distribute the Program is
272+void, and will automatically terminate your rights under this License.
273+However, parties who have received copies, or rights, from you under
274+this License will not have their licenses terminated so long as such
275+parties remain in full compliance.
276+
277+ 5. You are not required to accept this License, since you have not
278+signed it. However, nothing else grants you permission to modify or
279+distribute the Program or its derivative works. These actions are
280+prohibited by law if you do not accept this License. Therefore, by
281+modifying or distributing the Program (or any work based on the
282+Program), you indicate your acceptance of this License to do so, and
283+all its terms and conditions for copying, distributing or modifying
284+the Program or works based on it.
285+
286+ 6. Each time you redistribute the Program (or any work based on the
287+Program), the recipient automatically receives a license from the
288+original licensor to copy, distribute or modify the Program subject to
289+these terms and conditions. You may not impose any further
290+restrictions on the recipients' exercise of the rights granted herein.
291+You are not responsible for enforcing compliance by third parties to
292+this License.
293+
294+ 7. If, as a consequence of a court judgment or allegation of patent
295+infringement or for any other reason (not limited to patent issues),
296+conditions are imposed on you (whether by court order, agreement or
297+otherwise) that contradict the conditions of this License, they do not
298+excuse you from the conditions of this License. If you cannot
299+distribute so as to satisfy simultaneously your obligations under this
300+License and any other pertinent obligations, then as a consequence you
301+may not distribute the Program at all. For example, if a patent
302+license would not permit royalty-free redistribution of the Program by
303+all those who receive copies directly or indirectly through you, then
304+the only way you could satisfy both it and this License would be to
305+refrain entirely from distribution of the Program.
306+
307+If any portion of this section is held invalid or unenforceable under
308+any particular circumstance, the balance of the section is intended to
309+apply and the section as a whole is intended to apply in other
310+circumstances.
311+
312+It is not the purpose of this section to induce you to infringe any
313+patents or other property right claims or to contest validity of any
314+such claims; this section has the sole purpose of protecting the
315+integrity of the free software distribution system, which is
316+implemented by public license practices. Many people have made
317+generous contributions to the wide range of software distributed
318+through that system in reliance on consistent application of that
319+system; it is up to the author/donor to decide if he or she is willing
320+to distribute software through any other system and a licensee cannot
321+impose that choice.
322+
323+This section is intended to make thoroughly clear what is believed to
324+be a consequence of the rest of this License.
325+
326+ 8. If the distribution and/or use of the Program is restricted in
327+certain countries either by patents or by copyrighted interfaces, the
328+original copyright holder who places the Program under this License
329+may add an explicit geographical distribution limitation excluding
330+those countries, so that distribution is permitted only in or among
331+countries not thus excluded. In such case, this License incorporates
332+the limitation as if written in the body of this License.
333+
334+ 9. The Free Software Foundation may publish revised and/or new versions
335+of the General Public License from time to time. Such new versions will
336+be similar in spirit to the present version, but may differ in detail to
337+address new problems or concerns.
338+
339+Each version is given a distinguishing version number. If the Program
340+specifies a version number of this License which applies to it and "any
341+later version", you have the option of following the terms and conditions
342+either of that version or of any later version published by the Free
343+Software Foundation. If the Program does not specify a version number of
344+this License, you may choose any version ever published by the Free Software
345+Foundation.
346+
347+ 10. If you wish to incorporate parts of the Program into other free
348+programs whose distribution conditions are different, write to the author
349+to ask for permission. For software which is copyrighted by the Free
350+Software Foundation, write to the Free Software Foundation; we sometimes
351+make exceptions for this. Our decision will be guided by the two goals
352+of preserving the free status of all derivatives of our free software and
353+of promoting the sharing and reuse of software generally.
354+
355+ NO WARRANTY
356+
357+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
358+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
359+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
360+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
361+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
362+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
363+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
364+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
365+REPAIR OR CORRECTION.
366+
367+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
368+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
369+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
370+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
371+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
372+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
373+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
374+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
375+POSSIBILITY OF SUCH DAMAGES.
376+
377+ END OF TERMS AND CONDITIONS
378+
379+ How to Apply These Terms to Your New Programs
380+
381+ If you develop a new program, and you want it to be of the greatest
382+possible use to the public, the best way to achieve this is to make it
383+free software which everyone can redistribute and change under these terms.
384+
385+ To do so, attach the following notices to the program. It is safest
386+to attach them to the start of each source file to most effectively
387+convey the exclusion of warranty; and each file should have at least
388+the "copyright" line and a pointer to where the full notice is found.
389+
390+ <one line to give the program's name and a brief idea of what it does.>
391+ Copyright (C) <year> <name of author>
392+
393+ This program is free software; you can redistribute it and/or modify
394+ it under the terms of the GNU General Public License as published by
395+ the Free Software Foundation; either version 2 of the License, or
396+ (at your option) any later version.
397+
398+ This program is distributed in the hope that it will be useful,
399+ but WITHOUT ANY WARRANTY; without even the implied warranty of
400+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
401+ GNU General Public License for more details.
402+
403+ You should have received a copy of the GNU General Public License along
404+ with this program; if not, write to the Free Software Foundation, Inc.,
405+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
406+
407+Also add information on how to contact you by electronic and paper mail.
408+
409+If the program is interactive, make it output a short notice like this
410+when it starts in an interactive mode:
411+
412+ Gnomovision version 69, Copyright (C) year name of author
413+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
414+ This is free software, and you are welcome to redistribute it
415+ under certain conditions; type `show c' for details.
416+
417+The hypothetical commands `show w' and `show c' should show the appropriate
418+parts of the General Public License. Of course, the commands you use may
419+be called something other than `show w' and `show c'; they could even be
420+mouse-clicks or menu items--whatever suits your program.
421+
422+You should also get your employer (if you work as a programmer) or your
423+school, if any, to sign a "copyright disclaimer" for the program, if
424+necessary. Here is a sample; alter the names:
425+
426+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
427+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
428+
429+ <signature of Ty Coon>, 1 April 1989
430+ Ty Coon, President of Vice
431+
432+This General Public License does not permit incorporating your program into
433+proprietary programs. If your program is a subroutine library, you may
434+consider it more useful to permit linking proprietary applications with the
435+library. If this is what you want to do, use the GNU Lesser General
436+Public License instead of this License.
437
438=== renamed file 'COPYING.GPL' => 'COPYING.GPL3'
439=== added file 'COPYING.LGPL2'
440--- COPYING.LGPL2 1970-01-01 00:00:00 +0000
441+++ COPYING.LGPL2 2017-10-11 15:01:23 +0000
442@@ -0,0 +1,481 @@
443+ GNU LIBRARY GENERAL PUBLIC LICENSE
444+ Version 2, June 1991
445+
446+ Copyright (C) 1991 Free Software Foundation, Inc.
447+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
448+ Everyone is permitted to copy and distribute verbatim copies
449+ of this license document, but changing it is not allowed.
450+
451+[This is the first released version of the library GPL. It is
452+ numbered 2 because it goes with version 2 of the ordinary GPL.]
453+
454+ Preamble
455+
456+ The licenses for most software are designed to take away your
457+freedom to share and change it. By contrast, the GNU General Public
458+Licenses are intended to guarantee your freedom to share and change
459+free software--to make sure the software is free for all its users.
460+
461+ This license, the Library General Public License, applies to some
462+specially designated Free Software Foundation software, and to any
463+other libraries whose authors decide to use it. You can use it for
464+your libraries, too.
465+
466+ When we speak of free software, we are referring to freedom, not
467+price. Our General Public Licenses are designed to make sure that you
468+have the freedom to distribute copies of free software (and charge for
469+this service if you wish), that you receive source code or can get it
470+if you want it, that you can change the software or use pieces of it
471+in new free programs; and that you know you can do these things.
472+
473+ To protect your rights, we need to make restrictions that forbid
474+anyone to deny you these rights or to ask you to surrender the rights.
475+These restrictions translate to certain responsibilities for you if
476+you distribute copies of the library, or if you modify it.
477+
478+ For example, if you distribute copies of the library, whether gratis
479+or for a fee, you must give the recipients all the rights that we gave
480+you. You must make sure that they, too, receive or can get the source
481+code. If you link a program with the library, you must provide
482+complete object files to the recipients so that they can relink them
483+with the library, after making changes to the library and recompiling
484+it. And you must show them these terms so they know their rights.
485+
486+ Our method of protecting your rights has two steps: (1) copyright
487+the library, and (2) offer you this license which gives you legal
488+permission to copy, distribute and/or modify the library.
489+
490+ Also, for each distributor's protection, we want to make certain
491+that everyone understands that there is no warranty for this free
492+library. If the library is modified by someone else and passed on, we
493+want its recipients to know that what they have is not the original
494+version, so that any problems introduced by others will not reflect on
495+the original authors' reputations.
496+
497
498+ Finally, any free program is threatened constantly by software
499+patents. We wish to avoid the danger that companies distributing free
500+software will individually obtain patent licenses, thus in effect
501+transforming the program into proprietary software. To prevent this,
502+we have made it clear that any patent must be licensed for everyone's
503+free use or not licensed at all.
504+
505+ Most GNU software, including some libraries, is covered by the ordinary
506+GNU General Public License, which was designed for utility programs. This
507+license, the GNU Library General Public License, applies to certain
508+designated libraries. This license is quite different from the ordinary
509+one; be sure to read it in full, and don't assume that anything in it is
510+the same as in the ordinary license.
511+
512+ The reason we have a separate public license for some libraries is that
513+they blur the distinction we usually make between modifying or adding to a
514+program and simply using it. Linking a program with a library, without
515+changing the library, is in some sense simply using the library, and is
516+analogous to running a utility program or application program. However, in
517+a textual and legal sense, the linked executable is a combined work, a
518+derivative of the original library, and the ordinary General Public License
519+treats it as such.
520+
521+ Because of this blurred distinction, using the ordinary General
522+Public License for libraries did not effectively promote software
523+sharing, because most developers did not use the libraries. We
524+concluded that weaker conditions might promote sharing better.
525+
526+ However, unrestricted linking of non-free programs would deprive the
527+users of those programs of all benefit from the free status of the
528+libraries themselves. This Library General Public License is intended to
529+permit developers of non-free programs to use free libraries, while
530+preserving your freedom as a user of such programs to change the free
531+libraries that are incorporated in them. (We have not seen how to achieve
532+this as regards changes in header files, but we have achieved it as regards
533+changes in the actual functions of the Library.) The hope is that this
534+will lead to faster development of free libraries.
535+
536+ The precise terms and conditions for copying, distribution and
537+modification follow. Pay close attention to the difference between a
538+"work based on the library" and a "work that uses the library". The
539+former contains code derived from the library, while the latter only
540+works together with the library.
541+
542+ Note that it is possible for a library to be covered by the ordinary
543+General Public License rather than by this special one.
544+
545
546+ GNU LIBRARY GENERAL PUBLIC LICENSE
547+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
548+
549+ 0. This License Agreement applies to any software library which
550+contains a notice placed by the copyright holder or other authorized
551+party saying it may be distributed under the terms of this Library
552+General Public License (also called "this License"). Each licensee is
553+addressed as "you".
554+
555+ A "library" means a collection of software functions and/or data
556+prepared so as to be conveniently linked with application programs
557+(which use some of those functions and data) to form executables.
558+
559+ The "Library", below, refers to any such software library or work
560+which has been distributed under these terms. A "work based on the
561+Library" means either the Library or any derivative work under
562+copyright law: that is to say, a work containing the Library or a
563+portion of it, either verbatim or with modifications and/or translated
564+straightforwardly into another language. (Hereinafter, translation is
565+included without limitation in the term "modification".)
566+
567+ "Source code" for a work means the preferred form of the work for
568+making modifications to it. For a library, complete source code means
569+all the source code for all modules it contains, plus any associated
570+interface definition files, plus the scripts used to control compilation
571+and installation of the library.
572+
573+ Activities other than copying, distribution and modification are not
574+covered by this License; they are outside its scope. The act of
575+running a program using the Library is not restricted, and output from
576+such a program is covered only if its contents constitute a work based
577+on the Library (independent of the use of the Library in a tool for
578+writing it). Whether that is true depends on what the Library does
579+and what the program that uses the Library does.
580+
581+ 1. You may copy and distribute verbatim copies of the Library's
582+complete source code as you receive it, in any medium, provided that
583+you conspicuously and appropriately publish on each copy an
584+appropriate copyright notice and disclaimer of warranty; keep intact
585+all the notices that refer to this License and to the absence of any
586+warranty; and distribute a copy of this License along with the
587+Library.
588+
589+ You may charge a fee for the physical act of transferring a copy,
590+and you may at your option offer warranty protection in exchange for a
591+fee.
592+
593
594+ 2. You may modify your copy or copies of the Library or any portion
595+of it, thus forming a work based on the Library, and copy and
596+distribute such modifications or work under the terms of Section 1
597+above, provided that you also meet all of these conditions:
598+
599+ a) The modified work must itself be a software library.
600+
601+ b) You must cause the files modified to carry prominent notices
602+ stating that you changed the files and the date of any change.
603+
604+ c) You must cause the whole of the work to be licensed at no
605+ charge to all third parties under the terms of this License.
606+
607+ d) If a facility in the modified Library refers to a function or a
608+ table of data to be supplied by an application program that uses
609+ the facility, other than as an argument passed when the facility
610+ is invoked, then you must make a good faith effort to ensure that,
611+ in the event an application does not supply such function or
612+ table, the facility still operates, and performs whatever part of
613+ its purpose remains meaningful.
614+
615+ (For example, a function in a library to compute square roots has
616+ a purpose that is entirely well-defined independent of the
617+ application. Therefore, Subsection 2d requires that any
618+ application-supplied function or table used by this function must
619+ be optional: if the application does not supply it, the square
620+ root function must still compute square roots.)
621+
622+These requirements apply to the modified work as a whole. If
623+identifiable sections of that work are not derived from the Library,
624+and can be reasonably considered independent and separate works in
625+themselves, then this License, and its terms, do not apply to those
626+sections when you distribute them as separate works. But when you
627+distribute the same sections as part of a whole which is a work based
628+on the Library, the distribution of the whole must be on the terms of
629+this License, whose permissions for other licensees extend to the
630+entire whole, and thus to each and every part regardless of who wrote
631+it.
632+
633+Thus, it is not the intent of this section to claim rights or contest
634+your rights to work written entirely by you; rather, the intent is to
635+exercise the right to control the distribution of derivative or
636+collective works based on the Library.
637+
638+In addition, mere aggregation of another work not based on the Library
639+with the Library (or with a work based on the Library) on a volume of
640+a storage or distribution medium does not bring the other work under
641+the scope of this License.
642+
643+ 3. You may opt to apply the terms of the ordinary GNU General Public
644+License instead of this License to a given copy of the Library. To do
645+this, you must alter all the notices that refer to this License, so
646+that they refer to the ordinary GNU General Public License, version 2,
647+instead of to this License. (If a newer version than version 2 of the
648+ordinary GNU General Public License has appeared, then you can specify
649+that version instead if you wish.) Do not make any other change in
650+these notices.
651+
652
653+ Once this change is made in a given copy, it is irreversible for
654+that copy, so the ordinary GNU General Public License applies to all
655+subsequent copies and derivative works made from that copy.
656+
657+ This option is useful when you wish to copy part of the code of
658+the Library into a program that is not a library.
659+
660+ 4. You may copy and distribute the Library (or a portion or
661+derivative of it, under Section 2) in object code or executable form
662+under the terms of Sections 1 and 2 above provided that you accompany
663+it with the complete corresponding machine-readable source code, which
664+must be distributed under the terms of Sections 1 and 2 above on a
665+medium customarily used for software interchange.
666+
667+ If distribution of object code is made by offering access to copy
668+from a designated place, then offering equivalent access to copy the
669+source code from the same place satisfies the requirement to
670+distribute the source code, even though third parties are not
671+compelled to copy the source along with the object code.
672+
673+ 5. A program that contains no derivative of any portion of the
674+Library, but is designed to work with the Library by being compiled or
675+linked with it, is called a "work that uses the Library". Such a
676+work, in isolation, is not a derivative work of the Library, and
677+therefore falls outside the scope of this License.
678+
679+ However, linking a "work that uses the Library" with the Library
680+creates an executable that is a derivative of the Library (because it
681+contains portions of the Library), rather than a "work that uses the
682+library". The executable is therefore covered by this License.
683+Section 6 states terms for distribution of such executables.
684+
685+ When a "work that uses the Library" uses material from a header file
686+that is part of the Library, the object code for the work may be a
687+derivative work of the Library even though the source code is not.
688+Whether this is true is especially significant if the work can be
689+linked without the Library, or if the work is itself a library. The
690+threshold for this to be true is not precisely defined by law.
691+
692+ If such an object file uses only numerical parameters, data
693+structure layouts and accessors, and small macros and small inline
694+functions (ten lines or less in length), then the use of the object
695+file is unrestricted, regardless of whether it is legally a derivative
696+work. (Executables containing this object code plus portions of the
697+Library will still fall under Section 6.)
698+
699+ Otherwise, if the work is a derivative of the Library, you may
700+distribute the object code for the work under the terms of Section 6.
701+Any executables containing that work also fall under Section 6,
702+whether or not they are linked directly with the Library itself.
703+
704
705+ 6. As an exception to the Sections above, you may also compile or
706+link a "work that uses the Library" with the Library to produce a
707+work containing portions of the Library, and distribute that work
708+under terms of your choice, provided that the terms permit
709+modification of the work for the customer's own use and reverse
710+engineering for debugging such modifications.
711+
712+ You must give prominent notice with each copy of the work that the
713+Library is used in it and that the Library and its use are covered by
714+this License. You must supply a copy of this License. If the work
715+during execution displays copyright notices, you must include the
716+copyright notice for the Library among them, as well as a reference
717+directing the user to the copy of this License. Also, you must do one
718+of these things:
719+
720+ a) Accompany the work with the complete corresponding
721+ machine-readable source code for the Library including whatever
722+ changes were used in the work (which must be distributed under
723+ Sections 1 and 2 above); and, if the work is an executable linked
724+ with the Library, with the complete machine-readable "work that
725+ uses the Library", as object code and/or source code, so that the
726+ user can modify the Library and then relink to produce a modified
727+ executable containing the modified Library. (It is understood
728+ that the user who changes the contents of definitions files in the
729+ Library will not necessarily be able to recompile the application
730+ to use the modified definitions.)
731+
732+ b) Accompany the work with a written offer, valid for at
733+ least three years, to give the same user the materials
734+ specified in Subsection 6a, above, for a charge no more
735+ than the cost of performing this distribution.
736+
737+ c) If distribution of the work is made by offering access to copy
738+ from a designated place, offer equivalent access to copy the above
739+ specified materials from the same place.
740+
741+ d) Verify that the user has already received a copy of these
742+ materials or that you have already sent this user a copy.
743+
744+ For an executable, the required form of the "work that uses the
745+Library" must include any data and utility programs needed for
746+reproducing the executable from it. However, as a special exception,
747+the source code distributed need not include anything that is normally
748+distributed (in either source or binary form) with the major
749+components (compiler, kernel, and so on) of the operating system on
750+which the executable runs, unless that component itself accompanies
751+the executable.
752+
753+ It may happen that this requirement contradicts the license
754+restrictions of other proprietary libraries that do not normally
755+accompany the operating system. Such a contradiction means you cannot
756+use both them and the Library together in an executable that you
757+distribute.
758+
759
760+ 7. You may place library facilities that are a work based on the
761+Library side-by-side in a single library together with other library
762+facilities not covered by this License, and distribute such a combined
763+library, provided that the separate distribution of the work based on
764+the Library and of the other library facilities is otherwise
765+permitted, and provided that you do these two things:
766+
767+ a) Accompany the combined library with a copy of the same work
768+ based on the Library, uncombined with any other library
769+ facilities. This must be distributed under the terms of the
770+ Sections above.
771+
772+ b) Give prominent notice with the combined library of the fact
773+ that part of it is a work based on the Library, and explaining
774+ where to find the accompanying uncombined form of the same work.
775+
776+ 8. You may not copy, modify, sublicense, link with, or distribute
777+the Library except as expressly provided under this License. Any
778+attempt otherwise to copy, modify, sublicense, link with, or
779+distribute the Library is void, and will automatically terminate your
780+rights under this License. However, parties who have received copies,
781+or rights, from you under this License will not have their licenses
782+terminated so long as such parties remain in full compliance.
783+
784+ 9. You are not required to accept this License, since you have not
785+signed it. However, nothing else grants you permission to modify or
786+distribute the Library or its derivative works. These actions are
787+prohibited by law if you do not accept this License. Therefore, by
788+modifying or distributing the Library (or any work based on the
789+Library), you indicate your acceptance of this License to do so, and
790+all its terms and conditions for copying, distributing or modifying
791+the Library or works based on it.
792+
793+ 10. Each time you redistribute the Library (or any work based on the
794+Library), the recipient automatically receives a license from the
795+original licensor to copy, distribute, link with or modify the Library
796+subject to these terms and conditions. You may not impose any further
797+restrictions on the recipients' exercise of the rights granted herein.
798+You are not responsible for enforcing compliance by third parties to
799+this License.
800+
801
802+ 11. If, as a consequence of a court judgment or allegation of patent
803+infringement or for any other reason (not limited to patent issues),
804+conditions are imposed on you (whether by court order, agreement or
805+otherwise) that contradict the conditions of this License, they do not
806+excuse you from the conditions of this License. If you cannot
807+distribute so as to satisfy simultaneously your obligations under this
808+License and any other pertinent obligations, then as a consequence you
809+may not distribute the Library at all. For example, if a patent
810+license would not permit royalty-free redistribution of the Library by
811+all those who receive copies directly or indirectly through you, then
812+the only way you could satisfy both it and this License would be to
813+refrain entirely from distribution of the Library.
814+
815+If any portion of this section is held invalid or unenforceable under any
816+particular circumstance, the balance of the section is intended to apply,
817+and the section as a whole is intended to apply in other circumstances.
818+
819+It is not the purpose of this section to induce you to infringe any
820+patents or other property right claims or to contest validity of any
821+such claims; this section has the sole purpose of protecting the
822+integrity of the free software distribution system which is
823+implemented by public license practices. Many people have made
824+generous contributions to the wide range of software distributed
825+through that system in reliance on consistent application of that
826+system; it is up to the author/donor to decide if he or she is willing
827+to distribute software through any other system and a licensee cannot
828+impose that choice.
829+
830+This section is intended to make thoroughly clear what is believed to
831+be a consequence of the rest of this License.
832+
833+ 12. If the distribution and/or use of the Library is restricted in
834+certain countries either by patents or by copyrighted interfaces, the
835+original copyright holder who places the Library under this License may add
836+an explicit geographical distribution limitation excluding those countries,
837+so that distribution is permitted only in or among countries not thus
838+excluded. In such case, this License incorporates the limitation as if
839+written in the body of this License.
840+
841+ 13. The Free Software Foundation may publish revised and/or new
842+versions of the Library General Public License from time to time.
843+Such new versions will be similar in spirit to the present version,
844+but may differ in detail to address new problems or concerns.
845+
846+Each version is given a distinguishing version number. If the Library
847+specifies a version number of this License which applies to it and
848+"any later version", you have the option of following the terms and
849+conditions either of that version or of any later version published by
850+the Free Software Foundation. If the Library does not specify a
851+license version number, you may choose any version ever published by
852+the Free Software Foundation.
853+
854
855+ 14. If you wish to incorporate parts of the Library into other free
856+programs whose distribution conditions are incompatible with these,
857+write to the author to ask for permission. For software which is
858+copyrighted by the Free Software Foundation, write to the Free
859+Software Foundation; we sometimes make exceptions for this. Our
860+decision will be guided by the two goals of preserving the free status
861+of all derivatives of our free software and of promoting the sharing
862+and reuse of software generally.
863+
864+ NO WARRANTY
865+
866+ 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO
867+WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW.
868+EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR
869+OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY
870+KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
871+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
872+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE
873+LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME
874+THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
875+
876+ 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN
877+WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY
878+AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU
879+FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR
880+CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE
881+LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING
882+RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A
883+FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF
884+SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
885+DAMAGES.
886+
887+ END OF TERMS AND CONDITIONS
888+
889
890+ How to Apply These Terms to Your New Libraries
891+
892+ If you develop a new library, and you want it to be of the greatest
893+possible use to the public, we recommend making it free software that
894+everyone can redistribute and change. You can do so by permitting
895+redistribution under these terms (or, alternatively, under the terms of the
896+ordinary General Public License).
897+
898+ To apply these terms, attach the following notices to the library. It is
899+safest to attach them to the start of each source file to most effectively
900+convey the exclusion of warranty; and each file should have at least the
901+"copyright" line and a pointer to where the full notice is found.
902+
903+ <one line to give the library's name and a brief idea of what it does.>
904+ Copyright (C) <year> <name of author>
905+
906+ This library is free software; you can redistribute it and/or
907+ modify it under the terms of the GNU Library General Public
908+ License as published by the Free Software Foundation; either
909+ version 2 of the License, or (at your option) any later version.
910+
911+ This library is distributed in the hope that it will be useful,
912+ but WITHOUT ANY WARRANTY; without even the implied warranty of
913+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
914+ Library General Public License for more details.
915+
916+ You should have received a copy of the GNU Library General Public
917+ License along with this library; if not, write to the Free Software
918+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
919+
920+Also add information on how to contact you by electronic and paper mail.
921+
922+You should also get your employer (if you work as a programmer) or your
923+school, if any, to sign a "copyright disclaimer" for the library, if
924+necessary. Here is a sample; alter the names:
925+
926+ Yoyodyne, Inc., hereby disclaims all copyright interest in the
927+ library `Frob' (a library for tweaking knobs) written by James Random Hacker.
928+
929+ <signature of Ty Coon>, 1 April 1990
930+ Ty Coon, President of Vice
931+
932+That's all there is to it!
933
934=== renamed file 'COPYING.LGPL' => 'COPYING.LGPL3'
935=== modified file 'HACKING.md'
936--- HACKING.md 2017-05-08 03:04:26 +0000
937+++ HACKING.md 2017-10-11 15:01:23 +0000
938@@ -1,38 +1,6 @@
939 Mir hacking guide
940 =================
941
942-Getting Mir
943------------
944-
945-If you're reading this file then you've probably solved this one. ;)
946-
947-However, for completeness Mir is a project on LaunchPad (https://launchpad.net/mir)
948-to grab a copy use the command:
949-
950- $ bzr branch lp:mir
951-
952-
953-Getting dependencies
954---------------------
955-To succesfully build Mir there are a few packages required:
956-
957- $ apt-get install devscripts equivs cmake
958- $ mk-build-deps --install --tool "apt-get -y" --build-dep debian/control
959-
960-
961-Building Mir
962------------
963-
964-Mir is built using cmake. There are other options, but here's one way to
965-build the system:
966-
967- $ mkdir build
968- $ cd build
969- $ cmake ..
970- $ make -j 8
971- $ ctest
972-
973-
974 Coding Mir
975 ----------
976
977@@ -109,7 +77,7 @@
978 you need to know to get it working, and also to prevent your existing X server
979 from dying at the same time.
980
981- - \ref using_mir_on_pc
982+ - \ref getting_and_using_mir
983
984 You can configure Mir to provide runtime information helpful for debugging
985 by enabling component reports:
986
987=== modified file 'README.md'
988--- README.md 2013-04-24 05:22:20 +0000
989+++ README.md 2017-10-11 15:01:23 +0000
990@@ -9,7 +9,7 @@
991 License (server)
992 -------
993 This program is free software: you can redistribute it and/or modify
994-it under the terms of the GNU General Public License version 3 as
995+it under the terms of the GNU General Public License version 2 or 3 as
996 published by the Free Software Foundation.
997
998 This program is distributed in the hope that it will be useful,
999@@ -23,7 +23,7 @@
1000 License (client)
1001 -------
1002 This program is free software: you can redistribute it and/or modify
1003-it under the terms of the GNU Lesser General Public License version 3 as
1004+it under the terms of the GNU Lesser General Public License version 2 or 3 as
1005 published by the Free Software Foundation.
1006
1007 This program is distributed in the hope that it will be useful,
1008
1009=== modified file 'benchmarks/benchmark_multiplexing_dispatchable.cpp'
1010--- benchmarks/benchmark_multiplexing_dispatchable.cpp 2015-06-17 05:20:42 +0000
1011+++ benchmarks/benchmark_multiplexing_dispatchable.cpp 2017-10-11 15:01:23 +0000
1012@@ -2,7 +2,7 @@
1013 * Copyright © 2015 Canonical Ltd.
1014 *
1015 * This program is free software: you can redistribute it and/or modify
1016- * it under the terms of the GNU General Public License version 3 as
1017+ * it under the terms of the GNU General Public License version 2 or 3 as
1018 * published by the Free Software Foundation.
1019 *
1020 * This program is distributed in the hope that it will be useful,
1021
1022=== modified file 'benchmarks/frame-uniformity/frame_uniformity_test.cpp'
1023--- benchmarks/frame-uniformity/frame_uniformity_test.cpp 2014-10-22 19:27:20 +0000
1024+++ benchmarks/frame-uniformity/frame_uniformity_test.cpp 2017-10-11 15:01:23 +0000
1025@@ -2,7 +2,7 @@
1026 * Copyright © 2014 Canonical Ltd.
1027 *
1028 * This program is free software: you can redistribute it and/or modify
1029- * it under the terms of the GNU General Public License version 3 as
1030+ * it under the terms of the GNU General Public License version 2 or 3 as
1031 * published by the Free Software Foundation.
1032 *
1033 * This program is distributed in the hope that it will be useful,
1034
1035=== modified file 'benchmarks/frame-uniformity/frame_uniformity_test.h'
1036--- benchmarks/frame-uniformity/frame_uniformity_test.h 2015-06-25 03:00:08 +0000
1037+++ benchmarks/frame-uniformity/frame_uniformity_test.h 2017-10-11 15:01:23 +0000
1038@@ -2,7 +2,7 @@
1039 * Copyright © 2014 Canonical Ltd.
1040 *
1041 * This program is free software: you can redistribute it and/or modify
1042- * it under the terms of the GNU General Public License version 3 as
1043+ * it under the terms of the GNU General Public License version 2 or 3 as
1044 * published by the Free Software Foundation.
1045 *
1046 * This program is distributed in the hope that it will be useful,
1047
1048=== modified file 'benchmarks/frame-uniformity/main.cpp'
1049--- benchmarks/frame-uniformity/main.cpp 2015-04-28 07:54:10 +0000
1050+++ benchmarks/frame-uniformity/main.cpp 2017-10-11 15:01:23 +0000
1051@@ -2,7 +2,7 @@
1052 * Copyright © 2014 Canonical Ltd.
1053 *
1054 * This program is free software: you can redistribute it and/or modify
1055- * it under the terms of the GNU General Public License version 3 as
1056+ * it under the terms of the GNU General Public License version 2 or 3 as
1057 * published by the Free Software Foundation.
1058 *
1059 * This program is distributed in the hope that it will be useful,
1060
1061=== modified file 'benchmarks/frame-uniformity/touch_measuring_client.cpp'
1062--- benchmarks/frame-uniformity/touch_measuring_client.cpp 2017-05-08 03:04:26 +0000
1063+++ benchmarks/frame-uniformity/touch_measuring_client.cpp 2017-10-11 15:01:23 +0000
1064@@ -2,7 +2,7 @@
1065 * Copyright © 2014 Canonical Ltd.
1066 *
1067 * This program is free software: you can redistribute it and/or modify
1068- * it under the terms of the GNU General Public License version 3 as
1069+ * it under the terms of the GNU General Public License version 2 or 3 as
1070 * published by the Free Software Foundation.
1071 *
1072 * This program is distributed in the hope that it will be useful,
1073
1074=== modified file 'benchmarks/frame-uniformity/touch_measuring_client.h'
1075--- benchmarks/frame-uniformity/touch_measuring_client.h 2015-06-25 03:00:08 +0000
1076+++ benchmarks/frame-uniformity/touch_measuring_client.h 2017-10-11 15:01:23 +0000
1077@@ -2,7 +2,7 @@
1078 * Copyright © 2014 Canonical Ltd.
1079 *
1080 * This program is free software: you can redistribute it and/or modify
1081- * it under the terms of the GNU General Public License version 3 as
1082+ * it under the terms of the GNU General Public License version 2 or 3 as
1083 * published by the Free Software Foundation.
1084 *
1085 * This program is distributed in the hope that it will be useful,
1086
1087=== modified file 'benchmarks/frame-uniformity/touch_producing_server.cpp'
1088--- benchmarks/frame-uniformity/touch_producing_server.cpp 2016-01-29 08:18:22 +0000
1089+++ benchmarks/frame-uniformity/touch_producing_server.cpp 2017-10-11 15:01:23 +0000
1090@@ -2,7 +2,7 @@
1091 * Copyright © 2014 Canonical Ltd.
1092 *
1093 * This program is free software: you can redistribute it and/or modify
1094- * it under the terms of the GNU General Public License version 3 as
1095+ * it under the terms of the GNU General Public License version 2 or 3 as
1096 * published by the Free Software Foundation.
1097 *
1098 * This program is distributed in the hope that it will be useful,
1099
1100=== modified file 'benchmarks/frame-uniformity/touch_producing_server.h'
1101--- benchmarks/frame-uniformity/touch_producing_server.h 2016-01-29 08:18:22 +0000
1102+++ benchmarks/frame-uniformity/touch_producing_server.h 2017-10-11 15:01:23 +0000
1103@@ -2,7 +2,7 @@
1104 * Copyright © 2014 Canonical Ltd.
1105 *
1106 * This program is free software: you can redistribute it and/or modify
1107- * it under the terms of the GNU General Public License version 3 as
1108+ * it under the terms of the GNU General Public License version 2 or 3 as
1109 * published by the Free Software Foundation.
1110 *
1111 * This program is distributed in the hope that it will be useful,
1112
1113=== modified file 'benchmarks/frame-uniformity/touch_samples.cpp'
1114--- benchmarks/frame-uniformity/touch_samples.cpp 2015-06-17 05:20:42 +0000
1115+++ benchmarks/frame-uniformity/touch_samples.cpp 2017-10-11 15:01:23 +0000
1116@@ -2,7 +2,7 @@
1117 * Copyright © 2014 Canonical Ltd.
1118 *
1119 * This program is free software: you can redistribute it and/or modify
1120- * it under the terms of the GNU General Public License version 3 as
1121+ * it under the terms of the GNU General Public License version 2 or 3 as
1122 * published by the Free Software Foundation.
1123 *
1124 * This program is distributed in the hope that it will be useful,
1125
1126=== modified file 'benchmarks/frame-uniformity/touch_samples.h'
1127--- benchmarks/frame-uniformity/touch_samples.h 2014-10-22 14:08:51 +0000
1128+++ benchmarks/frame-uniformity/touch_samples.h 2017-10-11 15:01:23 +0000
1129@@ -2,7 +2,7 @@
1130 * Copyright © 2014 Canonical Ltd.
1131 *
1132 * This program is free software: you can redistribute it and/or modify
1133- * it under the terms of the GNU General Public License version 3 as
1134+ * it under the terms of the GNU General Public License version 2 or 3 as
1135 * published by the Free Software Foundation.
1136 *
1137 * This program is distributed in the hope that it will be useful,
1138
1139=== modified file 'benchmarks/frame-uniformity/vsync_simulating_graphics_platform.cpp'
1140--- benchmarks/frame-uniformity/vsync_simulating_graphics_platform.cpp 2016-01-29 08:18:22 +0000
1141+++ benchmarks/frame-uniformity/vsync_simulating_graphics_platform.cpp 2017-10-11 15:01:23 +0000
1142@@ -2,7 +2,7 @@
1143 * Copyright © 2014 Canonical Ltd.
1144 *
1145 * This program is free software: you can redistribute it and/or modify
1146- * it under the terms of the GNU General Public License version 3 as
1147+ * it under the terms of the GNU General Public License version 2 or 3 as
1148 * published by the Free Software Foundation.
1149 *
1150 * This program is distributed in the hope that it will be useful,
1151
1152=== modified file 'benchmarks/frame-uniformity/vsync_simulating_graphics_platform.h'
1153--- benchmarks/frame-uniformity/vsync_simulating_graphics_platform.h 2016-01-29 08:18:22 +0000
1154+++ benchmarks/frame-uniformity/vsync_simulating_graphics_platform.h 2017-10-11 15:01:23 +0000
1155@@ -2,7 +2,7 @@
1156 * Copyright © 2014 Canonical Ltd.
1157 *
1158 * This program is free software: you can redistribute it and/or modify
1159- * it under the terms of the GNU General Public License version 3 as
1160+ * it under the terms of the GNU General Public License version 2 or 3 as
1161 * published by the Free Software Foundation.
1162 *
1163 * This program is distributed in the hope that it will be useful,
1164
1165=== added file 'cmake/FindPIL.cmake'
1166--- cmake/FindPIL.cmake 1970-01-01 00:00:00 +0000
1167+++ cmake/FindPIL.cmake 2017-10-11 15:01:23 +0000
1168@@ -0,0 +1,8 @@
1169+execute_process(
1170+ COMMAND python3 -c "from PIL import Image"
1171+ RESULT_VARIABLE HAVE_PIL
1172+)
1173+
1174+if (NOT ${HAVE_PIL} EQUAL 0)
1175+ message(FATAL_ERROR "Python Imaging Library (PIL) not found")
1176+endif()
1177
1178=== modified file 'cmake/MirCommon.cmake'
1179--- cmake/MirCommon.cmake 2017-05-08 03:04:26 +0000
1180+++ cmake/MirCommon.cmake 2017-10-11 15:01:23 +0000
1181@@ -26,6 +26,7 @@
1182 set(VALGRIND_CMD "${VALGRIND_EXECUTABLE}" "--error-exitcode=1" "--trace-children=yes")
1183 set(VALGRIND_CMD ${VALGRIND_CMD} "--leak-check=full" "--show-leak-kinds=definite" "--errors-for-leak-kinds=definite")
1184 set(VALGRIND_CMD ${VALGRIND_CMD} "--track-fds=yes")
1185+ set(VALGRIND_CMD ${VALGRIND_CMD} "--track-origins=yes")
1186 set(VALGRIND_CMD ${VALGRIND_CMD} "--num-callers=128")
1187 set(VALGRIND_CMD ${VALGRIND_CMD} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_generic")
1188 set(VALGRIND_CMD ${VALGRIND_CMD} "--suppressions=${CMAKE_SOURCE_DIR}/tools/valgrind_suppressions_glibc_2.23")
1189
1190=== modified file 'debian/changelog'
1191--- debian/changelog 2017-06-30 12:00:38 +0000
1192+++ debian/changelog 2017-10-11 15:01:23 +0000
1193@@ -1,3 +1,61 @@
1194+mir (0.28.0-0ubuntu1) UNRELEASED; urgency=medium
1195+
1196+ * New upstream release 0.28.0(https://launchpad.net/mir/+milestone/0.28.0)
1197+ - ABI summary:
1198+ . mirclient ABI unchanged at 9
1199+ . miral ABI introduced at 2
1200+ . mirserver ABI bumped to 45
1201+ . mircommon ABI unchanged at 7
1202+ . mirplatform ABI unchanged at 61
1203+ . mirprotobuf ABI unchanged at 3
1204+ . mirplatformgraphics ABI unchanged at 13
1205+ . mirclientplatform ABI unchanged at 5
1206+ . mirinputplatform ABI unchanged at 7
1207+ . mircore ABI unchanged at 1
1208+ - Enhancements:
1209+ . Update licences to (L)GPL3 or (L)GPL2.
1210+ . Initial support for Wayland clients
1211+ . [mir_demo_client_display_config] add orientation changing
1212+ . RPC: Don't require the server ACK client's buffer-release requests.
1213+ . Added libmirclientcpp to Mir source package
1214+ . Added libmiral to Mir source package
1215+ . Various small improvements to miral-shell example
1216+ . [libmiral, miral-shell] handle display reconfiguration better and allow
1217+ shells to customize maximized placements.
1218+ . Enable CommandLineOptions to be processed before server initialization
1219+ - Bugs fixed:
1220+ . Fix handling of invalid display configuration. (LP: #1643446)
1221+ . Move full responsibility for buffer IPC into frontend. (LP: #1395421)
1222+ . Don't destroy an IPC "closure" object when it may yet be used
1223+ (LP: #1672960)
1224+ . [mesa-kms] Respect display orientation when painting cursor.
1225+ (LP: #1610078)
1226+ . Respect cursor hotspot when hosted on Mir. (LP: #1705284)
1227+ . mcl::BufferVault: Fix lock inversion.
1228+ . Handle mir_event_type_close_window in examples (LP: #1706004),
1229+ (LP: #1705439)
1230+ . Drop BufferStream::suitable_for_cursor()
1231+ . Only notify resize events for valid surfaces (LP: #1643446)
1232+ . Don't leak DRM fds in platform-eglstream probe.
1233+ . Remove obsolete & broken example code. (LP: #1663130)
1234+ . Move buffer-release IPC to a dedicated IPC thread. (LP: #1395421)
1235+ . [NestedServerWithTwoDisplays] Look for the last of a series of
1236+ synthetic events to ensure that the queue is drained before the test
1237+ exits. (LP: #1709666)
1238+ . floating window manager allows resizing maximized windows (LP: #1704776)
1239+ . [miral-shell] doesn't work with breeze X cursor theme (LP: #1699084)
1240+ . [miral-shell] Don't allow splashscreen to be occluded (LP: #1705973)
1241+ . [miral-shell] Update maximized windows on display changes (LP: #1705695)
1242+ . Make racy DragAndDrop test reliable. (LP: #1704780)
1243+ . [libmiral] Define default window settings in one place and clamp the
1244+ actual values to avoid ldiv0. (LP: #1717061)
1245+ . [miral-kiosk] Apply fullscreen logic when hidden windows are restored.
1246+ (LP: #1717910)
1247+ . [mir-on-x11] Less annoying clipping of Mir-on-X11 window when it exceeds
1248+ display bounds. (LP: #1668599)
1249+
1250+ -- Alan Griffiths <alan.griffiths@canonical.com> Thu, 10 Aug 2017 11:54:30 +0000
1251+
1252 mir (0.27.0+17.10.20170630-0ubuntu1) artful; urgency=medium
1253
1254 [ Daniel van Vugt ]
1255
1256=== modified file 'debian/control'
1257--- debian/control 2017-06-28 16:02:35 +0000
1258+++ debian/control 2017-10-11 15:01:23 +0000
1259@@ -31,6 +31,7 @@
1260 libudev-dev,
1261 libgtest-dev,
1262 google-mock (>= 1.6.0+svn437),
1263+ libxml++2.6-dev,
1264 # only enable valgrind once it's been tested to work on each architecture:
1265 valgrind [amd64 i386 armhf arm64],
1266 libglib2.0-dev,
1267@@ -45,6 +46,8 @@
1268 libcapnp-dev,
1269 capnproto,
1270 libepoxy-dev,
1271+ python3-pil:native,
1272+ linux-libc-dev,
1273 Standards-Version: 3.9.4
1274 Homepage: https://launchpad.net/mir
1275 # If you aren't a member of ~mir-team but need to upload packaging changes,
1276@@ -67,7 +70,7 @@
1277
1278 #TODO: Packaging infrastructure for better dependency generation,
1279 # ala pkg-xorg's xviddriver:Provides and ABI detection.
1280-Package: libmirserver44
1281+Package: libmirserver45
1282 Section: libs
1283 Architecture: linux-any
1284 Multi-Arch: same
1285@@ -146,7 +149,7 @@
1286 Architecture: linux-any
1287 Multi-Arch: same
1288 Pre-Depends: ${misc:Pre-Depends}
1289-Depends: libmirserver44 (= ${binary:Version}),
1290+Depends: libmirserver45 (= ${binary:Version}),
1291 libmirplatform-dev (= ${binary:Version}),
1292 libmircommon-dev (= ${binary:Version}),
1293 libglm-dev,
1294@@ -195,6 +198,9 @@
1295 Architecture: linux-any
1296 Multi-Arch: same
1297 Pre-Depends: ${misc:Pre-Depends}
1298+Breaks: libmirclientcpp-dev
1299+Replaces: libmirclientcpp-dev
1300+Provides: libmirclientcpp-dev (=1.5)
1301 Depends: libmirclient9 (= ${binary:Version}),
1302 libmircommon-dev (= ${binary:Version}),
1303 libmircookie-dev (= ${binary:Version}),
1304@@ -233,7 +239,7 @@
1305 Multi-Arch: same
1306 Pre-Depends: ${misc:Pre-Depends}
1307 Depends: libmirclient-debug-extension1 (= ${binary:Version}),
1308- ${misc:Depends},
1309+ ${misc:Depends},
1310 ${shlibs:Depends},
1311 Description: Display server for Ubuntu - client debug interface headers
1312 Mir is a display server running on linux systems, with a focus on efficiency,
1313@@ -254,9 +260,13 @@
1314
1315 Package: mir-demos
1316 Architecture: linux-any
1317+Breaks: miral-examples
1318+Replaces: miral-examples
1319+Provides: miral-examples (=1.5)
1320 Depends: ${misc:Depends},
1321 ${shlibs:Depends},
1322-Recommends: fonts-liberation
1323+Recommends: dmz-cursor-theme,
1324+ fonts-liberation
1325 Description: Display server for Ubuntu - demonstration programs
1326 Mir is a display server running on linux systems, with a focus on efficiency,
1327 robust operation and a well-defined driver model.
1328@@ -477,3 +487,33 @@
1329 .
1330 Contains header files that define the interfaces through which platforms and
1331 renderers access the functionality needed to render with GL.
1332+
1333+Package: libmiral2
1334+Section: libs
1335+Architecture: linux-any
1336+Multi-Arch: same
1337+Pre-Depends: ${misc:Pre-Depends}
1338+Depends: ${misc:Depends},
1339+ ${shlibs:Depends},
1340+Description: Display server for Ubuntu - ABI preserving abstraction layer
1341+ MirAL provides an ABI-stable abstraction layer for Mir based shells,
1342+ insulating them from mirserver ABI breaks.
1343+ .
1344+ Contains the shared library containing MirAL abstraction layer.
1345+
1346+Package: libmiral-dev
1347+Section: libdevel
1348+Architecture: linux-any
1349+Multi-Arch: same
1350+Pre-Depends: ${misc:Pre-Depends}
1351+Depends: libmiral2 (= ${libmiral2:Version}),
1352+# ${source:Version} is technically incorrect, but Launchpad doesn't do BinNMUs
1353+# so it's harmless.
1354+ libmirclient-dev (= ${source:Version}),
1355+ ${misc:Depends},
1356+Description: Developer files for the Mir ABI-stable abstraction layer
1357+ MirAL provides an ABI-stable abstraction layer for Mir based shells,
1358+ insulating them from mirserver ABI breaks.
1359+ .
1360+ Contains header files required for development using the MirAL abstraction
1361+ layer.
1362
1363=== modified file 'debian/copyright'
1364--- debian/copyright 2017-05-08 03:04:26 +0000
1365+++ debian/copyright 2017-10-11 15:01:23 +0000
1366@@ -1,11 +1,11 @@
1367 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
1368 Upstream-Name: Mir
1369-Upstream-Contact: Thomas Voß <thomas.voss@canonical.com>
1370+Upstream-Contact: Alan Griffiths <alan.griffiths@canonical.com>
1371 Source: http://launchpad.net/mir
1372
1373 Files: *
1374-Copyright: 2012-2013, Canonical Ltd.
1375-License: GPL-3
1376+Copyright: 2012-2017, Canonical Ltd.
1377+License: GPL-3 or GPL-2
1378 This program is free software: you can redistribute it and/or modify
1379 it under the terms of the GNU General Public License version 3 as
1380 published by the Free Software Foundation.
1381@@ -18,6 +18,31 @@
1382 On Debian systems, the full text of the GNU General Public
1383 License version 3 can be found in the file
1384 `/usr/share/common-licenses/GPL-3'.
1385+ .
1386+ On Debian systems, the full text of the GNU General Public
1387+ License version 2 can be found in the file
1388+ `/usr/share/common-licenses/GPL-2'.
1389+
1390+Files: include/client/* include/common/* include/core/* include/platform/* include/platforms/* include/renderers/*
1391+ src/client/* src/common/* src/core/* src/platform/* src/platforms/* src/renderers/*
1392+Copyright: 2012-2017, Canonical Ltd.
1393+License: LGPL-3 or LGPL-2
1394+ This program is free software: you can redistribute it and/or modify
1395+ it under the terms of the GNU Lesser General Public License version 3 as
1396+ published by the Free Software Foundation.
1397+ .
1398+ This program is distributed in the hope that it will be useful,
1399+ but WITHOUT ANY WARRANTY; without even the implied warranty of
1400+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1401+ GNU Lesser General Public License for more details.
1402+ .
1403+ On Debian systems, the full text of the GNU Lesser General Public
1404+ License version 3 can be found in the file
1405+ `/usr/share/common-licenses/LGPL-3'.
1406+ .
1407+ On Debian systems, the full text of the GNU Lesser General Public
1408+ License version 2 can be found in the file
1409+ `/usr/share/common-licenses/LGPL-2'.
1410
1411 Files: include/test/mir_test/gmock_fixes.h:
1412 Copyright:
1413@@ -49,20 +74,3 @@
1414 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
1415 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
1416 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
1417-
1418-Files: include/client/* include/common/* src/client/* src/common/*
1419-Copyright: 2012-2013, Canonical Ltd.
1420-License: LGPL-3
1421- This program is free software: you can redistribute it and/or modify
1422- it under the terms of the GNU Lesser General Public License version 3 as
1423- published by the Free Software Foundation.
1424- .
1425- This program is distributed in the hope that it will be useful,
1426- but WITHOUT ANY WARRANTY; without even the implied warranty of
1427- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
1428- GNU Lesser General Public License for more details.
1429- .
1430- On Debian systems, the full text of the GNU Lesser General Public
1431- License version 3 can be found in the file
1432- `/usr/share/common-licenses/LGPL-3'.
1433-
1434
1435=== added file 'debian/libmiral-dev.install'
1436--- debian/libmiral-dev.install 1970-01-01 00:00:00 +0000
1437+++ debian/libmiral-dev.install 2017-10-11 15:01:23 +0000
1438@@ -0,0 +1,3 @@
1439+usr/include/miral/miral/*
1440+usr/lib/*/pkgconfig/miral.pc
1441+usr/lib/*/libmiral.so
1442
1443=== added file 'debian/libmiral2.install'
1444--- debian/libmiral2.install 1970-01-01 00:00:00 +0000
1445+++ debian/libmiral2.install 2017-10-11 15:01:23 +0000
1446@@ -0,0 +1,1 @@
1447+usr/lib/*/libmiral.so.2
1448
1449=== added file 'debian/libmiral2.symbols'
1450--- debian/libmiral2.symbols 1970-01-01 00:00:00 +0000
1451+++ debian/libmiral2.symbols 2017-10-11 15:01:23 +0000
1452@@ -0,0 +1,399 @@
1453+libmiral.so.2 libmiral2 #MINVER#
1454+ MIRAL_1.0@MIRAL_1.0 1.0.0
1455+ (c++)"miral::WindowInfo::height_inc(mir::geometry::detail::IntWrapper<mir::geometry::DeltaYTag>)@MIRAL_1.0" 1.0.0
1456+ (c++)"miral::WindowInfo::max_aspect(miral::WindowSpecification::AspectRatio)@MIRAL_1.0" 1.0.0
1457+ (c++)"miral::WindowInfo::max_height(mir::geometry::detail::IntWrapper<mir::geometry::HeightTag>)@MIRAL_1.0" 1.0.0
1458+ (c++)"miral::WindowInfo::min_aspect(miral::WindowSpecification::AspectRatio)@MIRAL_1.0" 1.0.0
1459+ (c++)"miral::WindowInfo::min_height(mir::geometry::detail::IntWrapper<mir::geometry::HeightTag>)@MIRAL_1.0" 1.0.0
1460+ (c++)"miral::WindowInfo::remove_child(miral::Window const&)@MIRAL_1.0" 1.0.0
1461+ (c++)"miral::WindowInfo::restore_rect(mir::geometry::Rectangle const&)@MIRAL_1.0" 1.0.0
1462+ (c++)"miral::WindowInfo::needs_titlebar(MirSurfaceType)@MIRAL_1.0" 1.0.0
1463+ (c++)"miral::WindowInfo::confine_pointer(MirPointerConfinementState)@MIRAL_1.0" 1.0.0
1464+ (c++)"miral::WindowInfo::preferred_orientation(MirOrientationMode)@MIRAL_1.0" 1.0.0
1465+ (c++)"miral::WindowInfo::name(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1466+ (c++)"miral::WindowInfo::type(MirSurfaceType)@MIRAL_1.0" 1.0.0
1467+ (c++)"miral::WindowInfo::state(MirSurfaceState)@MIRAL_1.0" 1.0.0
1468+ (c++)"miral::WindowInfo::parent(miral::Window const&)@MIRAL_1.0" 1.0.0
1469+ (c++)"miral::WindowInfo::userdata(std::shared_ptr<void>)@MIRAL_1.0" 1.0.0
1470+ (c++)"miral::WindowInfo::add_child(miral::Window const&)@MIRAL_1.0" 1.0.0
1471+ (c++)"miral::WindowInfo::max_width(mir::geometry::detail::IntWrapper<mir::geometry::WidthTag>)@MIRAL_1.0" 1.0.0
1472+ (c++)"miral::WindowInfo::min_width(mir::geometry::detail::IntWrapper<mir::geometry::WidthTag>)@MIRAL_1.0" 1.0.0
1473+ (c++)"miral::WindowInfo::output_id(mir::optional_value<int>)@MIRAL_1.0" 1.0.0
1474+ (c++)"miral::WindowInfo::width_inc(mir::geometry::detail::IntWrapper<mir::geometry::DeltaXTag>)@MIRAL_1.0" 1.0.0
1475+ (c++)"miral::WindowInfo::WindowInfo(miral::Window const&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1476+ (c++)"miral::WindowInfo::WindowInfo(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1477+ (c++)"miral::WindowInfo::WindowInfo()@MIRAL_1.0" 1.0.0
1478+ (c++)"miral::WindowInfo::WindowInfo(miral::Window const&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1479+ (c++)"miral::WindowInfo::WindowInfo(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1480+ (c++)"miral::WindowInfo::WindowInfo()@MIRAL_1.0" 1.0.0
1481+ (c++)"miral::WindowInfo::~WindowInfo()@MIRAL_1.0" 1.0.0
1482+ (c++)"miral::WindowInfo::~WindowInfo()@MIRAL_1.0" 1.0.0
1483+ (c++)"miral::WindowInfo::operator=(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1484+ (c++)"miral::CursorTheme::CursorTheme(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1485+ (c++)"miral::CursorTheme::CursorTheme(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1486+ (c++)"miral::CursorTheme::~CursorTheme()@MIRAL_1.0" 1.0.0
1487+ (c++)"miral::CursorTheme::~CursorTheme()@MIRAL_1.0" 1.0.0
1488+ (c++)"miral::SetTerminator::SetTerminator(std::function<void (int)> const&)@MIRAL_1.0" 1.0.0
1489+ (c++)"miral::SetTerminator::SetTerminator(std::function<void (int)> const&)@MIRAL_1.0" 1.0.0
1490+ (c++)"miral::SetTerminator::~SetTerminator()@MIRAL_1.0" 1.0.0
1491+ (c++)"miral::SetTerminator::~SetTerminator()@MIRAL_1.0" 1.0.0
1492+ (c++)"miral::DebugExtension::enable()@MIRAL_1.0" 1.0.0
1493+ (c++)"miral::DebugExtension::disable()@MIRAL_1.0" 1.0.0
1494+ (c++)"miral::DebugExtension::DebugExtension(miral::DebugExtension const&)@MIRAL_1.0" 1.0.0
1495+ (c++)"miral::DebugExtension::DebugExtension()@MIRAL_1.0" 1.0.0
1496+ (c++)"miral::DebugExtension::DebugExtension(miral::DebugExtension const&)@MIRAL_1.0" 1.0.0
1497+ (c++)"miral::DebugExtension::DebugExtension()@MIRAL_1.0" 1.0.0
1498+ (c++)"miral::DebugExtension::operator=(miral::DebugExtension const&)@MIRAL_1.0" 1.0.0
1499+ (c++)"miral::AddInitCallback::AddInitCallback(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1500+ (c++)"miral::AddInitCallback::AddInitCallback(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1501+ (c++)"miral::AddInitCallback::~AddInitCallback()@MIRAL_1.0" 1.0.0
1502+ (c++)"miral::AddInitCallback::~AddInitCallback()@MIRAL_1.0" 1.0.0
1503+ (c++)"miral::ApplicationInfo::add_window(miral::Window const&)@MIRAL_1.0" 1.0.0
1504+ (c++)"miral::ApplicationInfo::remove_window(miral::Window const&)@MIRAL_1.0" 1.0.0
1505+ (c++)"miral::ApplicationInfo::userdata(std::shared_ptr<void>)@MIRAL_1.0" 1.0.0
1506+ (c++)"miral::ApplicationInfo::ApplicationInfo(miral::ApplicationInfo const&)@MIRAL_1.0" 1.0.0
1507+ (c++)"miral::ApplicationInfo::ApplicationInfo(std::shared_ptr<mir::scene::Session> const&)@MIRAL_1.0" 1.0.0
1508+ (c++)"miral::ApplicationInfo::ApplicationInfo()@MIRAL_1.0" 1.0.0
1509+ (c++)"miral::ApplicationInfo::ApplicationInfo(miral::ApplicationInfo const&)@MIRAL_1.0" 1.0.0
1510+ (c++)"miral::ApplicationInfo::ApplicationInfo(std::shared_ptr<mir::scene::Session> const&)@MIRAL_1.0" 1.0.0
1511+ (c++)"miral::ApplicationInfo::ApplicationInfo()@MIRAL_1.0" 1.0.0
1512+ (c++)"miral::ApplicationInfo::~ApplicationInfo()@MIRAL_1.0" 1.0.0
1513+ (c++)"miral::ApplicationInfo::~ApplicationInfo()@MIRAL_1.0" 1.0.0
1514+ (c++)"miral::ApplicationInfo::operator=(miral::ApplicationInfo const&)@MIRAL_1.0" 1.0.0
1515+ (c++)"miral::AppendEventFilter::AppendEventFilter(std::function<int (MirEvent const*)> const&)@MIRAL_1.0" 1.0.0
1516+ (c++)"miral::AppendEventFilter::AppendEventFilter(std::function<int (MirEvent const*)> const&)@MIRAL_1.0" 1.0.0
1517+ (c++)"miral::AppendEventFilter::operator()(mir::Server&)@MIRAL_1.0" 1.0.0
1518+ (c++)"miral::CommandLineOption::CommandLineOption(miral::CommandLineOption const&)@MIRAL_1.0" 1.0.0
1519+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1520+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<bool> const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1521+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<int> const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1522+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@MIRAL_1.0" 1.0.0
1523+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1524+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (bool)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1525+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (bool)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@MIRAL_1.0" 1.0.0
1526+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (double)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double)@MIRAL_1.0" 1.0.0
1527+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (int)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@MIRAL_1.0" 1.0.0
1528+ (c++)"miral::CommandLineOption::CommandLineOption(miral::CommandLineOption const&)@MIRAL_1.0" 1.0.0
1529+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1530+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<bool> const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1531+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (mir::optional_value<int> const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1532+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, char const*)@MIRAL_1.0" 1.0.0
1533+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1534+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (bool)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1535+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (bool)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)@MIRAL_1.0" 1.0.0
1536+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (double)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, double)@MIRAL_1.0" 1.0.0
1537+ (c++)"miral::CommandLineOption::CommandLineOption(std::function<void (int)>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)@MIRAL_1.0" 1.0.0
1538+ (c++)"miral::CommandLineOption::~CommandLineOption()@MIRAL_1.0" 1.0.0
1539+ (c++)"miral::CommandLineOption::~CommandLineOption()@MIRAL_1.0" 1.0.0
1540+ (c++)"miral::CommandLineOption::operator=(miral::CommandLineOption const&)@MIRAL_1.0" 1.0.0
1541+ (c++)"miral::WindowManagerTools::raise_tree(miral::Window const&)@MIRAL_1.0" 1.0.0
1542+ (c++)"miral::WindowManagerTools::force_close(miral::Window const&)@MIRAL_1.0" 1.0.0
1543+ (c++)"miral::WindowManagerTools::modify_window(miral::Window const&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1544+ (c++)"miral::WindowManagerTools::modify_window(miral::WindowInfo&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1545+ (c++)"miral::WindowManagerTools::active_display()@MIRAL_1.0" 1.0.0
1546+ (c++)"miral::WindowManagerTools::find_application(std::function<bool (miral::ApplicationInfo const&)> const&)@MIRAL_1.0" 1.0.0
1547+ (c++)"miral::WindowManagerTools::invoke_under_lock(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1548+ (c++)"miral::WindowManagerTools::drag_active_window(mir::geometry::Displacement)@MIRAL_1.0" 1.0.0
1549+ (c++)"miral::WindowManagerTools::ask_client_to_close(miral::Window const&)@MIRAL_1.0" 1.0.0
1550+ (c++)"miral::WindowManagerTools::for_each_application(std::function<void (miral::ApplicationInfo&)> const&)@MIRAL_1.0" 1.0.0
1551+ (c++)"miral::WindowManagerTools::select_active_window(miral::Window const&)@MIRAL_1.0" 1.0.0
1552+ (c++)"miral::WindowManagerTools::focus_next_application()@MIRAL_1.0" 1.0.0
1553+ (c++)"miral::WindowManagerTools::focus_next_within_application()@MIRAL_1.0" 1.0.0
1554+ (c++)"miral::WindowManagerTools::WindowManagerTools(miral::WindowManagerToolsImplementation*)@MIRAL_1.0" 1.0.0
1555+ (c++)"miral::WindowManagerTools::WindowManagerTools(miral::WindowManagerTools const&)@MIRAL_1.0" 1.0.0
1556+ (c++)"miral::WindowManagerTools::WindowManagerTools(miral::WindowManagerToolsImplementation*)@MIRAL_1.0" 1.0.0
1557+ (c++)"miral::WindowManagerTools::WindowManagerTools(miral::WindowManagerTools const&)@MIRAL_1.0" 1.0.0
1558+ (c++)"miral::WindowManagerTools::~WindowManagerTools()@MIRAL_1.0" 1.0.0
1559+ (c++)"miral::WindowManagerTools::~WindowManagerTools()@MIRAL_1.0" 1.0.0
1560+ (c++)"miral::WindowManagerTools::operator=(miral::WindowManagerTools const&)@MIRAL_1.0" 1.0.0
1561+ (c++)"miral::WindowSpecification::height_inc()@MIRAL_1.0" 1.0.0
1562+ (c++)"miral::WindowSpecification::input_mode()@MIRAL_1.0" 1.0.0
1563+ (c++)"miral::WindowSpecification::max_aspect()@MIRAL_1.0" 1.0.0
1564+ (c++)"miral::WindowSpecification::max_height()@MIRAL_1.0" 1.0.0
1565+ (c++)"miral::WindowSpecification::min_aspect()@MIRAL_1.0" 1.0.0
1566+ (c++)"miral::WindowSpecification::min_height()@MIRAL_1.0" 1.0.0
1567+ (c++)"miral::WindowSpecification::input_shape()@MIRAL_1.0" 1.0.0
1568+ (c++)"miral::WindowSpecification::shell_chrome()@MIRAL_1.0" 1.0.0
1569+ (c++)"miral::WindowSpecification::confine_pointer()@MIRAL_1.0" 1.0.0
1570+ (c++)"miral::WindowSpecification::placement_hints()@MIRAL_1.0" 1.0.0
1571+ (c++)"miral::WindowSpecification::preferred_orientation()@MIRAL_1.0" 1.0.0
1572+ (c++)"miral::WindowSpecification::window_placement_gravity()@MIRAL_1.0" 1.0.0
1573+ (c++)"miral::WindowSpecification::aux_rect_placement_offset()@MIRAL_1.0" 1.0.0
1574+ (c++)"miral::WindowSpecification::aux_rect_placement_gravity()@MIRAL_1.0" 1.0.0
1575+ (c++)"miral::WindowSpecification::name[abi:cxx11]()@MIRAL_1.0" 1.0.0
1576+ (c++)"miral::WindowSpecification::size()@MIRAL_1.0" 1.0.0
1577+ (c++)"miral::WindowSpecification::type()@MIRAL_1.0" 1.0.0
1578+ (c++)"miral::WindowSpecification::state()@MIRAL_1.0" 1.0.0
1579+ (c++)"miral::WindowSpecification::parent()@MIRAL_1.0" 1.0.0
1580+ (c++)"miral::WindowSpecification::aux_rect()@MIRAL_1.0" 1.0.0
1581+ (c++)"miral::WindowSpecification::top_left()@MIRAL_1.0" 1.0.0
1582+ (c++)"miral::WindowSpecification::userdata()@MIRAL_1.0" 1.0.0
1583+ (c++)"miral::WindowSpecification::max_width()@MIRAL_1.0" 1.0.0
1584+ (c++)"miral::WindowSpecification::min_width()@MIRAL_1.0" 1.0.0
1585+ (c++)"miral::WindowSpecification::output_id()@MIRAL_1.0" 1.0.0
1586+ (c++)"miral::WindowSpecification::width_inc()@MIRAL_1.0" 1.0.0
1587+ (c++)"miral::WindowSpecification::WindowSpecification(mir::scene::SurfaceCreationParameters const&)@MIRAL_1.0" 1.0.0
1588+ (c++)"miral::WindowSpecification::WindowSpecification(mir::shell::SurfaceSpecification const&)@MIRAL_1.0" 1.0.0
1589+ (c++)"miral::WindowSpecification::WindowSpecification(miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1590+ (c++)"miral::WindowSpecification::WindowSpecification()@MIRAL_1.0" 1.0.0
1591+ (c++)"miral::WindowSpecification::WindowSpecification(mir::scene::SurfaceCreationParameters const&)@MIRAL_1.0" 1.0.0
1592+ (c++)"miral::WindowSpecification::WindowSpecification(mir::shell::SurfaceSpecification const&)@MIRAL_1.0" 1.0.0
1593+ (c++)"miral::WindowSpecification::WindowSpecification(miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1594+ (c++)"miral::WindowSpecification::WindowSpecification()@MIRAL_1.0" 1.0.0
1595+ (c++)"miral::WindowSpecification::~WindowSpecification()@MIRAL_1.0" 1.0.0
1596+ (c++)"miral::WindowSpecification::~WindowSpecification()@MIRAL_1.0" 1.0.0
1597+ (c++)"miral::WindowSpecification::operator=(miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1598+ (c++)"miral::ActiveOutputsMonitor::add_listener(miral::ActiveOutputsListener*)@MIRAL_1.0" 1.0.0
1599+ (c++)"miral::ActiveOutputsMonitor::delete_listener(miral::ActiveOutputsListener*)@MIRAL_1.0" 1.0.0
1600+ (c++)"miral::ActiveOutputsMonitor::ActiveOutputsMonitor(miral::ActiveOutputsMonitor const&)@MIRAL_1.0" 1.0.0
1601+ (c++)"miral::ActiveOutputsMonitor::ActiveOutputsMonitor()@MIRAL_1.0" 1.0.0
1602+ (c++)"miral::ActiveOutputsMonitor::ActiveOutputsMonitor(miral::ActiveOutputsMonitor const&)@MIRAL_1.0" 1.0.0
1603+ (c++)"miral::ActiveOutputsMonitor::ActiveOutputsMonitor()@MIRAL_1.0" 1.0.0
1604+ (c++)"miral::ActiveOutputsMonitor::~ActiveOutputsMonitor()@MIRAL_1.0" 1.0.0
1605+ (c++)"miral::ActiveOutputsMonitor::~ActiveOutputsMonitor()@MIRAL_1.0" 1.0.0
1606+ (c++)"miral::ActiveOutputsMonitor::operator=(miral::ActiveOutputsMonitor const&)@MIRAL_1.0" 1.0.0
1607+ (c++)"miral::ActiveOutputsMonitor::operator()(mir::Server&)@MIRAL_1.0" 1.0.0
1608+ (c++)"miral::ActiveOutputsListener::advise_output_end()@MIRAL_1.0" 1.0.0
1609+ (c++)"miral::ActiveOutputsListener::advise_output_begin()@MIRAL_1.0" 1.0.0
1610+ (c++)"miral::ActiveOutputsListener::advise_output_create(miral::Output const&)@MIRAL_1.0" 1.0.0
1611+ (c++)"miral::ActiveOutputsListener::advise_output_delete(miral::Output const&)@MIRAL_1.0" 1.0.0
1612+ (c++)"miral::ActiveOutputsListener::advise_output_update(miral::Output const&, miral::Output const&)@MIRAL_1.0" 1.0.0
1613+ (c++)"miral::SetCommandLineHandler::SetCommandLineHandler(std::function<void (int, char const* const*)> const&)@MIRAL_1.0" 1.0.0
1614+ (c++)"miral::SetCommandLineHandler::SetCommandLineHandler(std::function<void (int, char const* const*)> const&)@MIRAL_1.0" 1.0.0
1615+ (c++)"miral::SetCommandLineHandler::~SetCommandLineHandler()@MIRAL_1.0" 1.0.0
1616+ (c++)"miral::SetCommandLineHandler::~SetCommandLineHandler()@MIRAL_1.0" 1.0.0
1617+ (c++)"miral::StartupInternalClient::StartupInternalClient(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<void (miral::toolkit::Connection)>, std::function<void (std::weak_ptr<mir::scene::Session>)>)@MIRAL_1.0" 1.0.0
1618+ (c++)"miral::StartupInternalClient::StartupInternalClient(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<void (miral::toolkit::Connection)>, std::function<void (std::weak_ptr<mir::scene::Session>)>)@MIRAL_1.0" 1.0.0
1619+ (c++)"miral::StartupInternalClient::~StartupInternalClient()@MIRAL_1.0" 1.0.0
1620+ (c++)"miral::StartupInternalClient::~StartupInternalClient()@MIRAL_1.0" 1.0.0
1621+ (c++)"miral::StartupInternalClient::operator()(mir::Server&)@MIRAL_1.0" 1.0.0
1622+ (c++)"miral::ApplicationCredentials::ApplicationCredentials(mir::frontend::SessionCredentials const&)@MIRAL_1.0" 1.0.0
1623+ (c++)"miral::ApplicationCredentials::ApplicationCredentials(mir::frontend::SessionCredentials const&)@MIRAL_1.0" 1.0.0
1624+ (c++)"miral::InternalClientLauncher::InternalClientLauncher()@MIRAL_1.0" 1.0.0
1625+ (c++)"miral::InternalClientLauncher::InternalClientLauncher()@MIRAL_1.0" 1.0.0
1626+ (c++)"miral::InternalClientLauncher::~InternalClientLauncher()@MIRAL_1.0" 1.0.0
1627+ (c++)"miral::InternalClientLauncher::~InternalClientLauncher()@MIRAL_1.0" 1.0.0
1628+ (c++)"miral::InternalClientLauncher::operator()(mir::Server&)@MIRAL_1.0" 1.0.0
1629+ (c++)"miral::WindowManagementPolicy::advise_end()@MIRAL_1.0" 1.0.0
1630+ (c++)"miral::WindowManagementPolicy::advise_begin()@MIRAL_1.0" 1.0.0
1631+ (c++)"miral::WindowManagementPolicy::advise_raise(std::vector<miral::Window, std::allocator<miral::Window> > const&)@MIRAL_1.0" 1.0.0
1632+ (c++)"miral::WindowManagementPolicy::advise_resize(miral::WindowInfo const&, mir::geometry::Size const&)@MIRAL_1.0" 1.0.0
1633+ (c++)"miral::WindowManagementPolicy::advise_move_to(miral::WindowInfo const&, mir::geometry::Point)@MIRAL_1.0" 1.0.0
1634+ (c++)"miral::WindowManagementPolicy::advise_new_app(miral::ApplicationInfo&)@MIRAL_1.0" 1.0.0
1635+ (c++)"miral::WindowManagementPolicy::advise_delete_app(miral::ApplicationInfo const&)@MIRAL_1.0" 1.0.0
1636+ (c++)"miral::WindowManagementPolicy::advise_focus_lost(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1637+ (c++)"miral::WindowManagementPolicy::advise_new_window(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1638+ (c++)"miral::WindowManagementPolicy::advise_focus_gained(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1639+ (c++)"miral::WindowManagementPolicy::advise_state_change(miral::WindowInfo const&, MirSurfaceState)@MIRAL_1.0" 1.0.0
1640+ (c++)"miral::WindowManagementPolicy::advise_delete_window(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1641+ (c++)"miral::equivalent_display_area(miral::Output const&, miral::Output const&)@MIRAL_1.0" 1.0.0
1642+ (c++)"miral::SetWindowManagmentPolicy::SetWindowManagmentPolicy(std::function<std::unique_ptr<miral::WindowManagementPolicy, std::default_delete<miral::WindowManagementPolicy> > (miral::WindowManagerTools const&)> const&)@MIRAL_1.0" 1.0.0
1643+ (c++)"miral::SetWindowManagmentPolicy::SetWindowManagmentPolicy(std::function<std::unique_ptr<miral::WindowManagementPolicy, std::default_delete<miral::WindowManagementPolicy> > (miral::WindowManagerTools const&)> const&)@MIRAL_1.0" 1.0.0
1644+ (c++)"miral::SetWindowManagmentPolicy::~SetWindowManagmentPolicy()@MIRAL_1.0" 1.0.0
1645+ (c++)"miral::SetWindowManagmentPolicy::~SetWindowManagmentPolicy()@MIRAL_1.0" 1.0.0
1646+ (c++)"miral::apply_lifecycle_state_to(std::shared_ptr<mir::scene::Session> const&, MirLifecycleState)@MIRAL_1.0" 1.0.0
1647+ (c++)"miral::CanonicalWindowManagerPolicy::place_new_surface(miral::ApplicationInfo const&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1648+ (c++)"miral::CanonicalWindowManagerPolicy::advise_focus_gained(miral::WindowInfo const&)@MIRAL_1.0" 1.0.0
1649+ (c++)"miral::CanonicalWindowManagerPolicy::handle_raise_window(miral::WindowInfo&)@MIRAL_1.0" 1.0.0
1650+ (c++)"miral::CanonicalWindowManagerPolicy::handle_window_ready(miral::WindowInfo&)@MIRAL_1.0" 1.0.0
1651+ (c++)"miral::CanonicalWindowManagerPolicy::handle_modify_window(miral::WindowInfo&, miral::WindowSpecification const&)@MIRAL_1.0" 1.0.0
1652+ (c++)"miral::CanonicalWindowManagerPolicy::confirm_inherited_move(miral::WindowInfo const&, mir::geometry::Displacement)@MIRAL_1.0" 1.0.0
1653+ (c++)"miral::CanonicalWindowManagerPolicy::CanonicalWindowManagerPolicy(miral::WindowManagerTools const&)@MIRAL_1.0" 1.0.0
1654+ (c++)"miral::CanonicalWindowManagerPolicy::CanonicalWindowManagerPolicy(miral::WindowManagerTools const&)@MIRAL_1.0" 1.0.0
1655+ (c++)"miral::BasicSetApplicationAuthorizer::BasicSetApplicationAuthorizer(std::function<std::shared_ptr<miral::ApplicationAuthorizer> ()> const&)@MIRAL_1.0" 1.0.0
1656+ (c++)"miral::BasicSetApplicationAuthorizer::BasicSetApplicationAuthorizer(std::function<std::shared_ptr<miral::ApplicationAuthorizer> ()> const&)@MIRAL_1.0" 1.0.0
1657+ (c++)"miral::BasicSetApplicationAuthorizer::~BasicSetApplicationAuthorizer()@MIRAL_1.0" 1.0.0
1658+ (c++)"miral::BasicSetApplicationAuthorizer::~BasicSetApplicationAuthorizer()@MIRAL_1.0" 1.0.0
1659+ (c++)"miral::BasicSetApplicationAuthorizer::operator()(mir::Server&)@MIRAL_1.0" 1.0.0
1660+ (c++)"miral::display_configuration_options(mir::Server&)@MIRAL_1.0" 1.0.0
1661+ (c++)"miral::kill(std::shared_ptr<mir::scene::Session> const&, int)@MIRAL_1.0" 1.0.0
1662+ (c++)"miral::Keymap::set_keymap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1663+ (c++)"miral::Keymap::Keymap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1664+ (c++)"miral::Keymap::Keymap(miral::Keymap const&)@MIRAL_1.0" 1.0.0
1665+ (c++)"miral::Keymap::Keymap()@MIRAL_1.0" 1.0.0
1666+ (c++)"miral::Keymap::Keymap(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)@MIRAL_1.0" 1.0.0
1667+ (c++)"miral::Keymap::Keymap(miral::Keymap const&)@MIRAL_1.0" 1.0.0
1668+ (c++)"miral::Keymap::Keymap()@MIRAL_1.0" 1.0.0
1669+ (c++)"miral::Keymap::~Keymap()@MIRAL_1.0" 1.0.0
1670+ (c++)"miral::Keymap::~Keymap()@MIRAL_1.0" 1.0.0
1671+ (c++)"miral::Keymap::operator=(miral::Keymap const&)@MIRAL_1.0" 1.0.0
1672+ (c++)"miral::Output::Output(mir::graphics::DisplayConfigurationOutput const&)@MIRAL_1.0" 1.0.0
1673+ (c++)"miral::Output::Output(miral::Output const&)@MIRAL_1.0" 1.0.0
1674+ (c++)"miral::Output::Output(mir::graphics::DisplayConfigurationOutput const&)@MIRAL_1.0" 1.0.0
1675+ (c++)"miral::Output::Output(miral::Output const&)@MIRAL_1.0" 1.0.0
1676+ (c++)"miral::Output::~Output()@MIRAL_1.0" 1.0.0
1677+ (c++)"miral::Output::~Output()@MIRAL_1.0" 1.0.0
1678+ (c++)"miral::Output::operator=(miral::Output const&)@MIRAL_1.0" 1.0.0
1679+ (c++)"miral::Window::resize(mir::geometry::Size const&)@MIRAL_1.0" 1.0.0
1680+ (c++)"miral::Window::move_to(mir::geometry::Point)@MIRAL_1.0" 1.0.0
1681+ (c++)"miral::Window::Window(std::shared_ptr<mir::scene::Session> const&, std::shared_ptr<mir::scene::Surface> const&)@MIRAL_1.0" 1.0.0
1682+ (c++)"miral::Window::Window()@MIRAL_1.0" 1.0.0
1683+ (c++)"miral::Window::Window(std::shared_ptr<mir::scene::Session> const&, std::shared_ptr<mir::scene::Surface> const&)@MIRAL_1.0" 1.0.0
1684+ (c++)"miral::Window::Window()@MIRAL_1.0" 1.0.0
1685+ (c++)"miral::Window::~Window()@MIRAL_1.0" 1.0.0
1686+ (c++)"miral::Window::~Window()@MIRAL_1.0" 1.0.0
1687+ (c++)"miral::pid_of(std::shared_ptr<mir::scene::Session> const&)@MIRAL_1.0" 1.0.0
1688+ (c++)"miral::name_of[abi:cxx11](std::shared_ptr<mir::scene::Session> const&)@MIRAL_1.0" 1.0.0
1689+ (c++)"miral::MirRunner::add_stop_callback(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1690+ (c++)"miral::MirRunner::add_start_callback(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1691+ (c++)"miral::MirRunner::set_exception_handler(std::function<void ()> const&)@MIRAL_1.0" 1.0.0
1692+ (c++)"miral::MirRunner::stop()@MIRAL_1.0" 1.0.0
1693+ (c++)"miral::MirRunner::run_with(std::initializer_list<std::function<void (mir::Server&)> >)@MIRAL_1.0" 1.0.0
1694+ (c++)"miral::MirRunner::MirRunner(int, char const**)@MIRAL_1.0" 1.0.0
1695+ (c++)"miral::MirRunner::MirRunner(int, char const**, char const*)@MIRAL_1.0" 1.0.0
1696+ (c++)"miral::MirRunner::MirRunner(int, char const**)@MIRAL_1.0" 1.0.0
1697+ (c++)"miral::MirRunner::MirRunner(int, char const**, char const*)@MIRAL_1.0" 1.0.0
1698+ (c++)"miral::MirRunner::~MirRunner()@MIRAL_1.0" 1.0.0
1699+ (c++)"miral::MirRunner::~MirRunner()@MIRAL_1.0" 1.0.0
1700+ (c++)"miral::operator==(miral::Output::PhysicalSizeMM const&, miral::Output::PhysicalSizeMM const&)@MIRAL_1.0" 1.0.0
1701+ (c++)"miral::operator==(miral::Window const&, std::shared_ptr<mir::scene::Surface> const&)@MIRAL_1.0" 1.0.0
1702+ (c++)"miral::operator==(miral::Window const&, miral::Window const&)@MIRAL_1.0" 1.0.0
1703+ (c++)"miral::operator==(std::shared_ptr<mir::scene::Surface> const&, miral::Window const&)@MIRAL_1.0" 1.0.0
1704+ (c++)"miral::WindowInfo::height_inc() const@MIRAL_1.0" 1.0.0
1705+ (c++)"miral::WindowInfo::is_visible() const@MIRAL_1.0" 1.0.0
1706+ (c++)"miral::WindowInfo::max_aspect() const@MIRAL_1.0" 1.0.0
1707+ (c++)"miral::WindowInfo::max_height() const@MIRAL_1.0" 1.0.0
1708+ (c++)"miral::WindowInfo::min_aspect() const@MIRAL_1.0" 1.0.0
1709+ (c++)"miral::WindowInfo::min_height() const@MIRAL_1.0" 1.0.0
1710+ (c++)"miral::WindowInfo::can_morph_to(MirSurfaceType) const@MIRAL_1.0" 1.0.0
1711+ (c++)"miral::WindowInfo::restore_rect() const@MIRAL_1.0" 1.0.0
1712+ (c++)"miral::WindowInfo::can_be_active() const@MIRAL_1.0" 1.0.0
1713+ (c++)"miral::WindowInfo::has_output_id() const@MIRAL_1.0" 1.0.0
1714+ (c++)"miral::WindowInfo::confine_pointer() const@MIRAL_1.0" 1.0.0
1715+ (c++)"miral::WindowInfo::constrain_resize(mir::geometry::Point&, mir::geometry::Size&) const@MIRAL_1.0" 1.0.0
1716+ (c++)"miral::WindowInfo::must_have_parent() const@MIRAL_1.0" 1.0.0
1717+ (c++)"miral::WindowInfo::must_not_have_parent() const@MIRAL_1.0" 1.0.0
1718+ (c++)"miral::WindowInfo::preferred_orientation() const@MIRAL_1.0" 1.0.0
1719+ (c++)"miral::WindowInfo::name[abi:cxx11]() const@MIRAL_1.0" 1.0.0
1720+ (c++)"miral::WindowInfo::type() const@MIRAL_1.0" 1.0.0
1721+ (c++)"miral::WindowInfo::state() const@MIRAL_1.0" 1.0.0
1722+ (c++)"miral::WindowInfo::parent() const@MIRAL_1.0" 1.0.0
1723+ (c++)"miral::WindowInfo::window() const@MIRAL_1.0" 1.0.0
1724+ (c++)"miral::WindowInfo::children() const@MIRAL_1.0" 1.0.0
1725+ (c++)"miral::WindowInfo::userdata() const@MIRAL_1.0" 1.0.0
1726+ (c++)"miral::WindowInfo::max_width() const@MIRAL_1.0" 1.0.0
1727+ (c++)"miral::WindowInfo::min_width() const@MIRAL_1.0" 1.0.0
1728+ (c++)"miral::WindowInfo::output_id() const@MIRAL_1.0" 1.0.0
1729+ (c++)"miral::WindowInfo::width_inc() const@MIRAL_1.0" 1.0.0
1730+ (c++)"miral::CursorTheme::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1731+ (c++)"miral::SetTerminator::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1732+ (c++)"miral::DebugExtension::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1733+ (c++)"miral::AddInitCallback::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1734+ (c++)"miral::ApplicationInfo::application() const@MIRAL_1.0" 1.0.0
1735+ (c++)"miral::ApplicationInfo::name[abi:cxx11]() const@MIRAL_1.0" 1.0.0
1736+ (c++)"miral::ApplicationInfo::windows() const@MIRAL_1.0" 1.0.0
1737+ (c++)"miral::ApplicationInfo::userdata() const@MIRAL_1.0" 1.0.0
1738+ (c++)"miral::CommandLineOption::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1739+ (c++)"miral::WindowManagerTools::active_window() const@MIRAL_1.0" 1.0.0
1740+ (c++)"miral::WindowManagerTools::id_for_window[abi:cxx11](miral::Window const&) const@MIRAL_1.0" 1.0.0
1741+ (c++)"miral::WindowManagerTools::count_applications() const@MIRAL_1.0" 1.0.0
1742+ (c++)"miral::WindowManagerTools::info_for_window_id(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const@MIRAL_1.0" 1.0.0
1743+ (c++)"miral::WindowManagerTools::place_and_size_for_state(miral::WindowSpecification&, miral::WindowInfo const&) const@MIRAL_1.0" 1.0.0
1744+ (c++)"miral::WindowManagerTools::info_for(miral::Window const&) const@MIRAL_1.0" 1.0.0
1745+ (c++)"miral::WindowManagerTools::info_for(std::weak_ptr<mir::scene::Session> const&) const@MIRAL_1.0" 1.0.0
1746+ (c++)"miral::WindowManagerTools::info_for(std::weak_ptr<mir::scene::Surface> const&) const@MIRAL_1.0" 1.0.0
1747+ (c++)"miral::WindowManagerTools::window_at(mir::geometry::Point) const@MIRAL_1.0" 1.0.0
1748+ (c++)"miral::WindowSpecification::height_inc() const@MIRAL_1.0" 1.0.0
1749+ (c++)"miral::WindowSpecification::input_mode() const@MIRAL_1.0" 1.0.0
1750+ (c++)"miral::WindowSpecification::max_aspect() const@MIRAL_1.0" 1.0.0
1751+ (c++)"miral::WindowSpecification::max_height() const@MIRAL_1.0" 1.0.0
1752+ (c++)"miral::WindowSpecification::min_aspect() const@MIRAL_1.0" 1.0.0
1753+ (c++)"miral::WindowSpecification::min_height() const@MIRAL_1.0" 1.0.0
1754+ (c++)"miral::WindowSpecification::input_shape() const@MIRAL_1.0" 1.0.0
1755+ (c++)"miral::WindowSpecification::shell_chrome() const@MIRAL_1.0" 1.0.0
1756+ (c++)"miral::WindowSpecification::confine_pointer() const@MIRAL_1.0" 1.0.0
1757+ (c++)"miral::WindowSpecification::placement_hints() const@MIRAL_1.0" 1.0.0
1758+ (c++)"miral::WindowSpecification::preferred_orientation() const@MIRAL_1.0" 1.0.0
1759+ (c++)"miral::WindowSpecification::window_placement_gravity() const@MIRAL_1.0" 1.0.0
1760+ (c++)"miral::WindowSpecification::aux_rect_placement_offset() const@MIRAL_1.0" 1.0.0
1761+ (c++)"miral::WindowSpecification::aux_rect_placement_gravity() const@MIRAL_1.0" 1.0.0
1762+ (c++)"miral::WindowSpecification::name[abi:cxx11]() const@MIRAL_1.0" 1.0.0
1763+ (c++)"miral::WindowSpecification::size() const@MIRAL_1.0" 1.0.0
1764+ (c++)"miral::WindowSpecification::type() const@MIRAL_1.0" 1.0.0
1765+ (c++)"miral::WindowSpecification::state() const@MIRAL_1.0" 1.0.0
1766+ (c++)"miral::WindowSpecification::parent() const@MIRAL_1.0" 1.0.0
1767+ (c++)"miral::WindowSpecification::update(mir::scene::SurfaceCreationParameters&) const@MIRAL_1.0" 1.0.0
1768+ (c++)"miral::WindowSpecification::aux_rect() const@MIRAL_1.0" 1.0.0
1769+ (c++)"miral::WindowSpecification::top_left() const@MIRAL_1.0" 1.0.0
1770+ (c++)"miral::WindowSpecification::userdata() const@MIRAL_1.0" 1.0.0
1771+ (c++)"miral::WindowSpecification::max_width() const@MIRAL_1.0" 1.0.0
1772+ (c++)"miral::WindowSpecification::min_width() const@MIRAL_1.0" 1.0.0
1773+ (c++)"miral::WindowSpecification::output_id() const@MIRAL_1.0" 1.0.0
1774+ (c++)"miral::WindowSpecification::width_inc() const@MIRAL_1.0" 1.0.0
1775+ (c++)"miral::ActiveOutputsMonitor::process_outputs(std::function<void (std::vector<miral::Output, std::allocator<miral::Output> > const&)> const&) const@MIRAL_1.0" 1.0.0
1776+ (c++)"miral::WindowManagerOptions::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1777+ (c++)"miral::SetCommandLineHandler::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1778+ (c++)"miral::ApplicationCredentials::gid() const@MIRAL_1.0" 1.0.0
1779+ (c++)"miral::ApplicationCredentials::pid() const@MIRAL_1.0" 1.0.0
1780+ (c++)"miral::ApplicationCredentials::uid() const@MIRAL_1.0" 1.0.0
1781+ (c++)"miral::InternalClientLauncher::launch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (miral::toolkit::Connection)> const&, std::function<void (std::weak_ptr<mir::scene::Session>)> const&) const@MIRAL_1.0" 1.0.0
1782+ (c++)"miral::SetWindowManagmentPolicy::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1783+ (c++)"miral::BasicSetApplicationAuthorizer::the_application_authorizer() const@MIRAL_1.0" 1.0.0
1784+ (c++)"miral::Keymap::operator()(mir::Server&) const@MIRAL_1.0" 1.0.0
1785+ (c++)"miral::Output::power_mode() const@MIRAL_1.0" 1.0.0
1786+ (c++)"miral::Output::form_factor() const@MIRAL_1.0" 1.0.0
1787+ (c++)"miral::Output::orientation() const@MIRAL_1.0" 1.0.0
1788+ (c++)"miral::Output::pixel_format() const@MIRAL_1.0" 1.0.0
1789+ (c++)"miral::Output::refresh_rate() const@MIRAL_1.0" 1.0.0
1790+ (c++)"miral::Output::is_same_output(miral::Output const&) const@MIRAL_1.0" 1.0.0
1791+ (c++)"miral::Output::physical_size_mm() const@MIRAL_1.0" 1.0.0
1792+ (c++)"miral::Output::type() const@MIRAL_1.0" 1.0.0
1793+ (c++)"miral::Output::used() const@MIRAL_1.0" 1.0.0
1794+ (c++)"miral::Output::scale() const@MIRAL_1.0" 1.0.0
1795+ (c++)"miral::Output::valid() const@MIRAL_1.0" 1.0.0
1796+ (c++)"miral::Output::extents() const@MIRAL_1.0" 1.0.0
1797+ (c++)"miral::Output::connected() const@MIRAL_1.0" 1.0.0
1798+ (c++)"miral::Window::application() const@MIRAL_1.0" 1.0.0
1799+ (c++)"miral::Window::size() const@MIRAL_1.0" 1.0.0
1800+ (c++)"miral::Window::top_left() const@MIRAL_1.0" 1.0.0
1801+ (c++)"miral::Window::operator std::shared_ptr<mir::scene::Surface>() const@MIRAL_1.0" 1.0.0
1802+ (c++)"miral::Window::operator std::weak_ptr<mir::scene::Surface>() const@MIRAL_1.0" 1.0.0
1803+ (c++)"miral::Window::operator bool() const@MIRAL_1.0" 1.0.0
1804+ (c++)"typeinfo for miral::ActiveOutputsListener@MIRAL_1.0" 1.0.0
1805+ (c++)"typeinfo for miral::WindowManagementPolicy@MIRAL_1.0" 1.0.0
1806+ (c++)"typeinfo for miral::CanonicalWindowManagerPolicy@MIRAL_1.0" 1.0.0
1807+ (c++)"vtable for miral::ActiveOutputsListener@MIRAL_1.0" 1.0.0
1808+ (c++)"vtable for miral::WindowManagementPolicy@MIRAL_1.0" 1.0.0
1809+ (c++)"vtable for miral::CanonicalWindowManagerPolicy@MIRAL_1.0" 1.0.0
1810+ MIRAL_1.1@MIRAL_1.1 1.1.0
1811+ (c++)"miral::WindowInfo::needs_titlebar(MirWindowType)@MIRAL_1.1" 1.1.0
1812+ (c++)"miral::WindowInfo::type(MirWindowType)@MIRAL_1.1" 1.1.0
1813+ (c++)"miral::WindowInfo::state(MirWindowState)@MIRAL_1.1" 1.1.0
1814+ (c++)"miral::WindowManagementPolicy::advise_state_change(miral::WindowInfo const&, MirWindowState)@MIRAL_1.1" 1.1.0
1815+ (c++)"miral::WindowInfo::can_morph_to(MirWindowType) const@MIRAL_1.1" 1.1.0
1816+ (c++)"miral::CanonicalWindowManagerPolicy::place_new_window(miral::ApplicationInfo const&, miral::WindowSpecification const&)@MIRAL_1.1" 1.1.0
1817+ MIRAL_1.2@MIRAL_1.2 1.2.0
1818+ (c++)"miral::StartupInternalClient::StartupInternalClient(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::function<void (mir::client::Connection)>, std::function<void (std::weak_ptr<mir::scene::Session>)>)@MIRAL_1.2" 1.2.0
1819+ (c++)"miral::InternalClientLauncher::launch(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::function<void (mir::client::Connection)> const&, std::function<void (std::weak_ptr<mir::scene::Session>)> const&) const@MIRAL_1.2" 1.2.0
1820+ (c++)"miral::WindowInfo::shell_chrome(MirShellChrome)@MIRAL_1.2" 1.2.0
1821+ (c++)"miral::WindowInfo::shell_chrome() const@MIRAL_1.2" 1.2.0
1822+ (c++)"miral::WindowManagerTools::drag_window(miral::Window const&, mir::geometry::Displacement)@MIRAL_1.2" 1.2.0
1823+ (c++)"typeinfo for miral::ApplicationAuthorizer@MIRAL_1.0" 1.2.0
1824+ (c++)"typeinfo for miral::ApplicationAuthorizer1@MIRAL_1.2" 1.2.0
1825+ MIRAL_1.3@MIRAL_1.3 1.3.0
1826+ (c++)"miral::operator<(miral::Window const&, miral::Window const&)@MIRAL_1.0" 1.3.0
1827+ (c++)"miral::WindowManagerTools::create_workspace()@MIRAL_1.3" 1.3.0
1828+ (c++)"miral::WindowManagerTools::add_tree_to_workspace(miral::Window const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
1829+ (c++)"miral::WindowManagerTools::focus_prev_within_application()@MIRAL_1.3" 1.3.0
1830+ (c++)"miral::WindowManagerTools::remove_tree_from_workspace(miral::Window const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
1831+ (c++)"miral::WindowManagerTools::move_workspace_content_to_workspace(std::shared_ptr<miral::Workspace> const&, std::shared_ptr<miral::Workspace> const&)@MIRAL_1.3" 1.3.0
1832+ (c++)"miral::WorkspacePolicy::advise_adding_to_workspace(std::shared_ptr<miral::Workspace> const&, std::vector<miral::Window, std::allocator<miral::Window> > const&)@MIRAL_1.3" 1.3.0
1833+ (c++)"miral::WorkspacePolicy::advise_removing_from_workspace(std::shared_ptr<miral::Workspace> const&, std::vector<miral::Window, std::allocator<miral::Window> > const&)@MIRAL_1.3" 1.3.0
1834+ (c++)"miral::WindowManagerTools::for_each_window_in_workspace(std::shared_ptr<miral::Workspace> const&, std::function<void (miral::Window const&)> const&)@MIRAL_1.3" 1.3.0
1835+ (c++)"miral::WindowManagerTools::for_each_workspace_containing(miral::Window const&, std::function<void (std::shared_ptr<miral::Workspace> const&)> const&)@MIRAL_1.3" 1.3.0
1836+ (c++)"typeinfo for miral::WorkspacePolicy@MIRAL_1.3" 1.3.0
1837+ (c++)"vtable for miral::WorkspacePolicy@MIRAL_1.3" 1.3.0
1838+ MIRAL_1.3.1@MIRAL_1.3.1 1.3.1
1839+ (c++)"miral::SetWindowManagementPolicy::SetWindowManagementPolicy(std::function<std::unique_ptr<miral::WindowManagementPolicy, std::default_delete<miral::WindowManagementPolicy> > (miral::WindowManagerTools const&)> const&)@MIRAL_1.3.1" 1.3.1
1840+ (c++)"miral::SetWindowManagementPolicy::SetWindowManagementPolicy(std::function<std::unique_ptr<miral::WindowManagementPolicy, std::default_delete<miral::WindowManagementPolicy> > (miral::WindowManagerTools const&)> const&)@MIRAL_1.3.1" 1.3.1
1841+ (c++)"miral::SetWindowManagementPolicy::~SetWindowManagementPolicy()@MIRAL_1.3.1" 1.3.1
1842+ (c++)"miral::SetWindowManagementPolicy::~SetWindowManagementPolicy()@MIRAL_1.3.1" 1.3.1
1843+ (c++)"miral::SetWindowManagementPolicy::operator()(mir::Server&) const@MIRAL_1.3.1" 1.3.1
1844+ MIRAL_1.4.0@MIRAL_1.4.0 1.4.0
1845+ (c++)"miral::WindowManagerTools::end_drag_and_drop()@MIRAL_1.4.0" 1.4.0
1846+ (c++)"miral::WindowManagerTools::start_drag_and_drop(miral::WindowInfo&, std::vector<unsigned char, std::allocator<unsigned char> > const&)@MIRAL_1.4.0" 1.4.0
1847+ (c++)"typeinfo for miral::WindowManagementPolicyAddendum2@MIRAL_1.4.0" 1.4.0
1848+ MIRAL_1.5.0@MIRAL_1.5.0 1.5.0
1849+ (c++)"miral::pre_init(miral::CommandLineOption const&)@MIRAL_1.5.0" 1.5.0
1850+ (c++)"typeinfo for miral::WindowManagementPolicyAddendum3@MIRAL_1.5.0" 1.5.0
1851+ (c++)"miral::WindowManagerTools::active_output()@MIRAL_1.5.0" 1.5.0
1852\ No newline at end of file
1853
1854=== modified file 'debian/libmirclient-dev.install'
1855--- debian/libmirclient-dev.install 2017-05-17 04:48:46 +0000
1856+++ debian/libmirclient-dev.install 2017-10-11 15:01:23 +0000
1857@@ -1,8 +1,10 @@
1858 usr/include/mirclient/mir_toolkit/*.h
1859 usr/include/mirclient/mir_toolkit/extensions/*.h
1860+usr/include/mirclient/mir/client/*.h
1861 usr/include/mirclient/mir/events/*.h
1862 usr/include/mirclient/mir/event_printer.h
1863 usr/include/mirclient/mir_toolkit/events
1864 usr/include/mirclient/mir_toolkit/rs/mir_render_surface.h
1865 usr/lib/*/pkgconfig/mirclient.pc
1866+usr/lib/*/pkgconfig/mirclientcpp.pc
1867 usr/lib/*/libmirclient.so
1868
1869=== renamed file 'debian/libmirserver44.install' => 'debian/libmirserver45.install'
1870--- debian/libmirserver44.install 2017-05-08 03:04:26 +0000
1871+++ debian/libmirserver45.install 2017-10-11 15:01:23 +0000
1872@@ -1,1 +1,1 @@
1873-usr/lib/*/libmirserver.so.44
1874+usr/lib/*/libmirserver.so.45
1875
1876=== modified file 'debian/mir-demos.install'
1877--- debian/mir-demos.install 2015-06-17 05:20:42 +0000
1878+++ debian/mir-demos.install 2017-10-11 15:01:23 +0000
1879@@ -1,3 +1,11 @@
1880 usr/bin/mir_demo_*
1881-usr/bin/mir_proving_*
1882 usr/lib/*/libmir_demo_*
1883+usr/bin/miral-shell
1884+usr/bin/miral-run
1885+usr/bin/miral-kiosk
1886+usr/bin/miral-xrun
1887+usr/bin/miral-screencast
1888+usr/bin/miral-desktop
1889+usr/bin/miral-app
1890+usr/share/applications/miral-shell.desktop
1891+usr/share/icons/hicolor/scalable/apps/ubuntu-logo.svg
1892
1893=== modified file 'debian/rules'
1894--- debian/rules 2017-06-28 16:02:35 +0000
1895+++ debian/rules 2017-10-11 15:01:23 +0000
1896@@ -1,10 +1,6 @@
1897 #!/usr/bin/make -f
1898
1899-DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH)
1900-DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
1901-DEB_HOST_ARCH_ENDIAN ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_ENDIAN)
1902-EXACT_PACKAGE_VERSION = $(shell dpkg-parsechangelog | grep Version | cut -d' ' -f 2)
1903-DISTRIB_CODENAME = $(shell grep DISTRIB_CODENAME /etc/lsb-release | cut -d= -f2)
1904+include /usr/share/dpkg/default.mk
1905
1906 export DPKG_GENSYMBOLS_CHECK_LEVEL = 4
1907
1908@@ -57,16 +53,25 @@
1909 override_dh_auto_build-indep:
1910 dh_auto_build -- doc
1911
1912+# Reconstruct the MirAL version
1913+MIRAL_VERSION_MAJOR = $(shell perl -n -e '/^set\(MIRAL_VERSION_MAJOR ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
1914+MIRAL_VERSION_MINOR = $(shell perl -n -e '/^set\(MIRAL_VERSION_MINOR ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
1915+MIRAL_VERSION_PATCH = $(shell perl -n -e '/^set\(MIRAL_VERSION_PATCH ([0-9]*)\)$$/ && print $$1' src/CMakeLists.txt)
1916+MIRAL_RELEASE=$(MIRAL_VERSION_MAJOR).$(MIRAL_VERSION_MINOR).$(MIRAL_VERSION_PATCH)
1917+MIRAL_VERSION=$(MIRAL_RELEASE).$(DEB_VERSION)
1918+
1919 # TODO: we'll use a symbol file once mir is abi stable
1920 override_dh_makeshlibs:
1921- dh_makeshlibs -V -Nmir-test-tools
1922+ dh_makeshlibs -Nlibmiral2 -V -Nmir-test-tools
1923+ # libmiral2 *has* a symbols file, so we don't need to -V it!
1924+ dh_makeshlibs -plibmiral2 -- -v$(MIRAL_RELEASE)
1925
1926 override_dh_install:
1927 # Nothing outside Mir should link to libmirprotobuf directly.
1928 # Delete the symlink so that --fail-missing doesn't think we've missed it
1929 # accidentally.
1930 -rm debian/tmp/usr/lib/*/libmirprotobuf.so
1931-ifeq ($(filter xenial yakkety zesty,$(DISTRIB_CODENAME)),)
1932+ifeq ($(filter xenial yakkety zesty,$(DEB_DISTRIBUTION)),)
1933 dh_install
1934 else
1935 # xenial, yakkety & zesty predate dh_missing
1936@@ -80,3 +85,7 @@
1937 # Don't try to find dependencies of libraries used as test data
1938 override_dh_shlibdeps:
1939 dh_shlibdeps -Xmir-test-data
1940+
1941+override_dh_gencontrol:
1942+ dh_gencontrol -Nlibmiral2 -Nlibmiral-dev
1943+ dh_gencontrol -plibmiral2 -plibmiral-dev -- -v$(MIRAL_VERSION) -V'libmiral2:Version=$(MIRAL_VERSION)'
1944
1945=== modified file 'doc/Doxyfile.in'
1946--- doc/Doxyfile.in 2017-05-08 03:04:26 +0000
1947+++ doc/Doxyfile.in 2017-10-11 15:01:23 +0000
1948@@ -784,7 +784,8 @@
1949 INPUT = @CMAKE_CURRENT_SOURCE_DIR@/README.md \
1950 @CMAKE_CURRENT_SOURCE_DIR@/HACKING.md \
1951 @CMAKE_CURRENT_SOURCE_DIR@/doc \
1952- @CMAKE_CURRENT_SOURCE_DIR@/examples \
1953+ @CMAKE_CURRENT_SOURCE_DIR@/examples/miral-kiosk \
1954+ @CMAKE_CURRENT_SOURCE_DIR@/examples/miral-shell \
1955 @CMAKE_CURRENT_SOURCE_DIR@/include \
1956 @MIR_GENERATED_INCLUDE_DIRECTORIES_FLATTENED@
1957
1958@@ -859,7 +860,9 @@
1959 # Note that relative paths are relative to the directory from which doxygen is
1960 # run.
1961
1962-EXCLUDE =
1963+EXCLUDE = @CMAKE_CURRENT_SOURCE_DIR@/include/server \
1964+ @CMAKE_CURRENT_SOURCE_DIR@/include/platform \
1965+ @CMAKE_CURRENT_SOURCE_DIR@/include/platforms
1966
1967 # The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
1968 # directories that are symbolic links (a Unix file system feature) are excluded
1969@@ -875,7 +878,11 @@
1970 # Note that the wildcards are matched against the file with absolute path, so to
1971 # exclude all test directories for example use the pattern */test/*
1972
1973-EXCLUDE_PATTERNS = */include/test/*
1974+EXCLUDE_PATTERNS = *.capnp.c++ \
1975+ */detail/* \
1976+ @CMAKE_CURRENT_SOURCE_DIR@/examples/multi_stream.cpp \
1977+ @CMAKE_CURRENT_SOURCE_DIR@/examples/uses_non_client_symbol.cpp \
1978+ @CMAKE_CURRENT_SOURCE_DIR@/examples/miral-shell/titlebar_config.*
1979
1980 # The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
1981 # (namespaces, classes, functions, etc.) that should be excluded from the
1982
1983=== removed file 'doc/building_source_for_pc.md'
1984--- doc/building_source_for_pc.md 2017-05-08 03:04:26 +0000
1985+++ doc/building_source_for_pc.md 1970-01-01 00:00:00 +0000
1986@@ -1,101 +0,0 @@
1987-Building the source for a PC {#building_source_for_pc}
1988-============================
1989-
1990-Getting Mir
1991------------
1992-
1993-Mir is a project on Launchpad (https://launchpad.net/mir). To grab a copy use
1994-the command:
1995-
1996- $ bzr branch lp:mir
1997-
1998-The command above will download the latest development version of Mir into
1999-the 'mir' directory (called the 'project directory' from now on).
2000-
2001-Getting dependencies
2002---------------------
2003-
2004-To succesfully build Mir there are a few packages required. The easiest way
2005-to get them is to use the packaging build dependencies:
2006-
2007- $ sudo apt-get install devscripts equivs cmake
2008-
2009-Then, in the project directory:
2010-
2011- $ sudo mk-build-deps -i
2012-
2013-
2014-Building Mir
2015-------------
2016-
2017-Mir is built using CMake. You first need to create the build directory and
2018-configure the build. In the project directory do:
2019-
2020- $ mkdir build
2021- $ cd build
2022- $ cmake .. (possibly passing configuration options to CMake)
2023-
2024-There are many configuration options for the Mir project. The default options
2025-will work fine, but you may want to customize the build depending on your
2026-needs. The best way to get an overview and set them is to use the cmake-gui
2027-tool:
2028-
2029- $ cmake-gui ..
2030-
2031-The next step is to build the source and run the tests:
2032-
2033- $ make (-j8)
2034- $ ctest
2035-
2036-
2037-Running Mir
2038------------
2039-
2040-The binaries created in the bin subdirectory of the project directory can be
2041-used directly. For example,
2042-
2043- $ bin/mir_demo_server --launch-client bin/mir_demo_client_multiwin
2044-
2045-Other examples described elsewhere in this documentation assume you're using the
2046-installed version and simply need "bin/" adding to specify the local build.
2047-
2048-
2049-Install Mir
2050------------
2051-
2052-*It should not be necessary to install Mir for experimental purposes (see
2053-"Running Mir" above).* Further, if you are using an Ubuntu derived disto then
2054-there's likely to be existing Mir binaries elsewhere that may interact badly
2055-with a second install.
2056-
2057-To install Mir just use the normal make install command:
2058-
2059- $ sudo make install
2060-
2061-This will install the Mir libraries, executable, example clients and header
2062-files to the configured installation location (/usr/local by default).
2063-
2064-NB You may need "sudo ldconfig" to refresh the cache before the installed
2065-programs work.
2066-
2067-If you install to a non-standard location, keep in mind that you will probably
2068-need to properly set the PKG_CONFIG_PATH environment variable to allow other
2069-applications to build against Mir, and LD_LIBRARY_PATH to allow applications to
2070-find the Mir libraries at runtime.
2071-
2072-
2073-Building Mesa
2074--------------
2075-
2076-*The Mesa packages shipped with Ubuntu are already built with the relevant Mir patches
2077-and should work out of the box with Mir.*
2078-
2079-For GL accelerated clients to use Mir they need to use a patched version of Mesa
2080-that supports Mir.
2081-
2082-The patch is hosted on GitHub:
2083-
2084- $ git clone https://github.com/RAOF/mesa.git
2085-
2086-Compile as per normal instructions and pass --with-egl-platforms="mir,drm" to
2087-the configure options. You will need libmirclient installed as shown above.
2088
2089=== removed file 'doc/demo_server_controls.md'
2090--- doc/demo_server_controls.md 2017-05-08 03:04:26 +0000
2091+++ doc/demo_server_controls.md 1970-01-01 00:00:00 +0000
2092@@ -1,69 +0,0 @@
2093-Demo Server {#demo_server}
2094-===========
2095-
2096-Mir's demo server (`mir_demo_server`) is an example of using the Mir to
2097-build a server. It uses only functionality supported by the public Mir API.
2098-
2099-Running Demo Server
2100--------------------
2101-
2102-Remember to always run `mir_demo_server` as root on PC (not required on
2103-Android), as this is required for input device support (open bug
2104-https://bugs.launchpad.net/mir/+bug/1286252);
2105-
2106- sudo mir_demo_server
2107-
2108-And if you're not already on the VT you wish to use, that needs to be
2109-specified:
2110-
2111- sudo mir_demo_server --vt 1
2112-
2113-There are plenty more options available if you run:
2114-
2115- mir_demo_server --help
2116-
2117-The following operations are supported:
2118-
2119- - Quit (shut down the Mir server): *Ctrl-Alt-Backspace*
2120- - Switch back to X: *Ctrl-Alt-F7*
2121- - Switch virtual terminals (VTs): *Ctrl-Alt-(F1-F12)*
2122- - Switch apps: *Alt-Tab*, tap or click on the corresponding app
2123- - Close app: *Alt-F4*
2124- - Switch window within app: *Alt-`*, tap or click on the window
2125- - Close surface: *Ctrl-F4*
2126- - Move window: *Alt-leftmousebutton* drag
2127- - Resize window: *Alt-middle_button* drag
2128- - Maximize/restore current window: *Alt-F11*
2129- - Vertically maximize/restore current window: *Shift-F11*
2130- - Horizontally maximize/restore current window: *Ctrl-F11*
2131-
2132-For those writing client code request to set the surface attribute
2133-`mir_surface_attrib_state` are honoured:
2134- - `mir_window_state_restored`: restores the window
2135- - `mir_window_state_maximized`: maximizes size
2136- - `mir_window_state_vertmaximized`: maximizes height
2137- - `mir_window_state_horizmaximized`: maximizes width
2138-
2139-For a quick demo try:
2140-
2141- sudo DISPLAY= mir_demo_server --vt 1 --launch bin/mir_demo_client_egltriangle\
2142- --test-client bin/mir_demo_client_multiwin --test-timeout 60
2143-
2144-(Remember to unwrap the line)
2145-
2146-### Tiling Window Manager
2147-
2148-One option that needs elaboration is "--window-manager tiling".
2149-
2150-This starts a (rather primitive) tiling window manager. It tracks the available
2151-displays and splits the available workspace into "tiles" (one per client).
2152-
2153-For a quick demo try:
2154-
2155- sudo DISPLAY= mir_demo_server --vt 1 --launch bin/mir_demo_client_egltriangle\
2156- --test-client bin/mir_demo_client_multiwin --test-timeout 60\
2157- --window-manager tiling
2158-
2159-(Remember to unwrap the line)
2160-
2161-Want more? Log your requests at: https://bugs.launchpad.net/mir/+filebug
2162
2163=== removed file 'doc/demo_shell_controls.md'
2164--- doc/demo_shell_controls.md 2016-01-29 08:18:22 +0000
2165+++ doc/demo_shell_controls.md 1970-01-01 00:00:00 +0000
2166@@ -1,53 +0,0 @@
2167-Demo Shell Controls {#demo_shell_controls}
2168-===================
2169-
2170-Mir's demo shell (`mir_proving_server`) is a basic environment for testing
2171-Mir server features as well as running natively ported apps/toolkits. It is
2172-still primitive and requires some explaining to make proper use of, so read
2173-on.
2174-
2175-Running Demo Shell
2176-------------------
2177-
2178-Remember to always run `mir_proving_server` as root on PC (not required on
2179-Android), as this is required for input device support (open bug
2180-https://bugs.launchpad.net/mir/+bug/1286252);
2181-
2182- sudo mir_proving_server
2183-
2184-And if you're not already on the VT you wish to use, that needs to be
2185-specified:
2186-
2187- sudo mir_proving_server --vt 1
2188-
2189-There are plenty more options available if you run:
2190-
2191- mir_proving_server --help
2192-
2193-Controls
2194---------
2195-
2196-All controls have a keyboard/mouse combination and where possible also have
2197-touch alternatives for phones/tablets:
2198-
2199- - Quit the shell (shut down the Mir server): *Ctrl-Alt-Backspace*
2200- - Switch back to X: *Ctrl-Alt-F7*
2201- - Switch virtual terminals (VTs): *Ctrl-Alt-(F1-F12)*
2202- - Switch apps: *Alt-Tab* or *4-finger swipe left/right*
2203- - Switch windows of the current app: *Alt-grave*
2204- - Ask an app to close: *Alt-F4* (it may refuse or not understand)
2205- - Move window: *Alt-leftmousebutton* or *3-finger drag*
2206- - Resize window: *Alt-middlemousebutton* or *3-finger pinch/zoom*
2207- - Toggle negative rendering: *Super-N*
2208- - Toggle high-contrast rendering: *Super-C*
2209- - Sleep/wake all displays: *Alt-P* or *Android power button*
2210- - Rotate the focussed monitor: *Ctrl-Alt-(Left/Right/Up/Down)* or
2211- *Volume up/down while touching the screen*
2212- - Change display mode of the focussed monitor: *Ctrl-Alt-(=/-)*
2213- - Reset display mode to default, on focussed monitor: *Ctrl-Alt-0*
2214- - Adjust window opacity/alpha: *Alt-mousewheel*
2215- - Zoom in/out: *Super-mousewheel*
2216-
2217-*Super* means the Windows key on a PC, or the search key on a Chromebook.
2218-
2219-Want more? Log your requests at: https://bugs.launchpad.net/mir/+filebug
2220
2221=== added file 'doc/getting_and_using_mir.md'
2222--- doc/getting_and_using_mir.md 1970-01-01 00:00:00 +0000
2223+++ doc/getting_and_using_mir.md 2017-10-11 15:01:23 +0000
2224@@ -0,0 +1,106 @@
2225+Getting and Using Mir {#getting_and_using_mir}
2226+=====================
2227+
2228+Getting Mir examples
2229+--------------------
2230+
2231+You can install the Mir examples as follows:
2232+
2233+ $ sudo apt install mir-demos qterminal
2234+ $ sudo apt install mir-graphics-drivers-desktop qtubuntu-desktop
2235+
2236+Using Mir examples
2237+------------------
2238+
2239+For convenient testing there's a "miral-app" script that wraps the commands used
2240+to start a server and then launches a terminal (as the current user):
2241+
2242+ $ miral-app
2243+
2244+To run independently of X11 you need to grant access to the graphics hardware
2245+(by running as root) and specify a VT to run in. There's a "miral-desktop"
2246+script that wraps to start the server (as root) and then launch a terminal
2247+(as the current user):
2248+
2249+ $ miral-desktop
2250+
2251+For more options see *Options when running the Mir example shell* below.
2252+
2253+### Running applications on Mir
2254+
2255+If you use the command-line launched by miral-app or miral-desktop native Mir
2256+applications (which include native Mir clients and those that use SDL or the
2257+GTK+, Qt toolkits) can be started as usual:
2258+
2259+ $ mir_demo_client_egltriangle
2260+ $ gedit
2261+ $ sudo apt install kate neverball
2262+ $ kate
2263+ $ neverball
2264+
2265+From outside the MirAL session GTK+, Qt and SDL applications can still be run
2266+using the miral-run script:
2267+
2268+ $ miral-run gedit
2269+ $ miral-run 7kaa
2270+
2271+### Running for X11 applications
2272+
2273+If you want to run X11 applications that do not have native Mir support in the
2274+toolkit they use then the answer is Xmir: an X11 server that runs on Mir. First
2275+you need Xmir installed:
2276+
2277+ $ sudo apt install xmir
2278+
2279+Then once you have started a miral shell (as above) you can use miral-xrun to
2280+run applications under Xmir:
2281+
2282+ $ miral-xrun firefox
2283+
2284+This automatically starts a Xmir X11 server on a new $DISPLAY for the
2285+application to use. You can use miral-xrun both from a command-line outside the
2286+miral-shell or, for example, from the terminal running in the shell.
2287+
2288+### Options when running the Mir example shell
2289+
2290+#### Script Options
2291+
2292+Both the "miral-app" and "miral-desktop" scripts provide options for using an
2293+alternative example shell (miral-kiosk) and an alternative to gnome-terminal.
2294+
2295+ -kiosk use miral-kiosk instead of miral-shell
2296+ -launcher <launcher> use <launcher> instead of qterminal
2297+
2298+In addition miral-desktop has the option to set the VT that is used:
2299+
2300+ -vt <termid> set the virtual terminal [4]
2301+
2302+There are some additional options (listed with "-h") but those are the important
2303+ones.
2304+
2305+#### miral-shell Options
2306+
2307+The scripts can also be used to pass options to Mir: they pass everything on
2308+the command-line following the first thing they don't understand. These can be
2309+listed by `miral-shell --help`. Most of these options are inherited from Mir,
2310+but the following MirAL specific are likely to be of interest:
2311+
2312+ --window-management-trace log trace message
2313+
2314+Probably the main use for MirAL is to test window-management (either of a
2315+toolkit or of a server) and this logs all calls to and from the window
2316+management policy. This option is supported directly in the MirAL library and
2317+works for any MirAL based shell - even one you write yourself.
2318+
2319+ --keymap arg (=us) keymap <layout>[+<variant>[+<options>]]
2320+ , e,g, "gb" or "cz+qwerty" or
2321+ "de++compose:caps"
2322+
2323+For those of us not in the USA this is very useful. Both the -shell and -kiosk
2324+examples support this option.
2325+
2326+ --window-manager arg (=floating) window management strategy
2327+ [{floating|tiling|system-compositor}]
2328+
2329+Is only supported by miral-shell and its main use is to allow an alternative
2330+"tiling" window manager to be selected.
2331
2332=== added file 'doc/getting_involved_in_mir.md'
2333--- doc/getting_involved_in_mir.md 1970-01-01 00:00:00 +0000
2334+++ doc/getting_involved_in_mir.md 2017-10-11 15:01:23 +0000
2335@@ -0,0 +1,106 @@
2336+Getting Involved in Mir {#getting_involved_in_mir}
2337+=======================
2338+
2339+Getting involved
2340+----------------
2341+
2342+The best place to ask questions and discuss about the Mir project is
2343+the \#ubuntu-mir IRC channel on freenode.
2344+
2345+The Mir project is hosted on Launchpad: https://launchpad.net/mir
2346+
2347+Building Mir
2348+------------
2349+
2350+These instructions assume that you’re using Ubuntu 16.04LTS or later, I’ve not
2351+earlier Ubuntu versions or other distributions.
2352+
2353+You’ll need a few development and utility packages installed, along with the
2354+Mir graphics drivers:
2355+
2356+ $ sudo apt install devscripts equivs bzr
2357+ $ sudo apt install mir-graphics-drivers-desktop
2358+
2359+If you’re working on a phone or tablet use mir-graphics-drivers-android in
2360+place of mir-graphics-drivers-desktop. (See \ref building_source_for_arm for
2361+more on this.)
2362+
2363+With these installed you can checkout and build Mir:
2364+
2365+ $ bzr branch lp:mir
2366+ $ sudo mk-build-deps -i
2367+ $ mkdir mir/build
2368+ $ cd mir/build
2369+ $ cmake ..
2370+ $ make
2371+
2372+This creates an example shell (miral-shell) in the bin directory. This can be
2373+run directly:
2374+
2375+ $ bin/miral-shell
2376+
2377+With the default options this runs in a window on X (which is convenient for
2378+development).
2379+
2380+The miral-shell example is simple, don’t expect to see a sophisticated launcher
2381+by default. You can start mir apps from the command-line. For example:
2382+
2383+ $ bin/miral-run gnome-terminal
2384+
2385+That’s right, a lot of standard GTK+ applications will “just work” (the GDK
2386+toolkit has a Mir backend). Any that assume the existence of an X11 and bypass
2387+the toolkit my making X11 protocol calls will have problems though.
2388+
2389+To exit from miral-shell press Ctrl-Alt-BkSp.
2390+
2391+You can install the Mir examples, headers and libraries you've built with:
2392+
2393+ $ sudo make install
2394+
2395+### Preparing a VM to run Mir
2396+
2397+Especially if you want to debug the shell without locking your system this might be a helpful setup:
2398+
2399+- \ref setup_kvm_for_mir
2400+- \ref setup_vmware_for_mir
2401+
2402+### Contributing to Mir
2403+
2404+Currently, the Mir code activity is performed on a development branch:
2405+lp:~mir-team/mir/development-branch
2406+
2407+This development branch is promoted to the branch used for the ubuntu archive
2408+and touch images. Please submit any merge proposals against the development
2409+branch.
2410+
2411+Please file bug reports at: https://bugs.launchpad.net/mir
2412+
2413+The Mir development mailing list can be found at: https://lists.ubuntu.com/mailman/listinfo/Mir-devel
2414+
2415+The Mir coding guidelines are [here](cppguide/index.html).
2416+
2417+### Working on Mir code
2418+
2419+ - \ref md_README "Mir Read me"
2420+ - \ref md_HACKING "Mir hacking guide"
2421+ - \ref component_reports
2422+ - \ref dso_versioning_guide
2423+ - \ref abi_compatibility_tools
2424+ - \ref performance_framework
2425+ - \ref latency "Measuring visual latency"
2426+
2427+Building Mesa
2428+-------------
2429+
2430+*The Mesa packages shipped with Ubuntu are already built with the relevant Mir patches
2431+and should work out of the box with Mir.*
2432+
2433+For GL accelerated clients to use Mir they need to use a patched version of Mesa
2434+that supports Mir.
2435+
2436+The patch is hosted on GitHub:
2437+
2438+ $ git clone https://github.com/RAOF/mesa.git
2439+
2440+Compile as per normal instructions and pass --with-egl-platforms="mir,drm" to
2441+the configure options. You will need libmirclient installed as shown above.
2442
2443=== removed file 'doc/installing_prebuilt_on_pc.md'
2444--- doc/installing_prebuilt_on_pc.md 2016-01-29 08:18:22 +0000
2445+++ doc/installing_prebuilt_on_pc.md 1970-01-01 00:00:00 +0000
2446@@ -1,8 +0,0 @@
2447-Installing pre-built packages on a PC {#installing_prebuilt_on_pc}
2448-=====================================
2449-
2450-Install Ubuntu 13.10 or later if you haven't done so already. Uninstall any
2451-proprietary drivers (-nvidia, -fglrx) and reboot on the FOSS drivers.
2452-
2453- sudo apt-get update
2454- sudo apt-get install mir-demos
2455
2456=== added file 'doc/introducing_the_miral_api.md'
2457--- doc/introducing_the_miral_api.md 1970-01-01 00:00:00 +0000
2458+++ doc/introducing_the_miral_api.md 2017-10-11 15:01:23 +0000
2459@@ -0,0 +1,25 @@
2460+Introducing the Miral API {#introducing_the_miral_api}
2461+=========================
2462+
2463+The main() program
2464+------------------
2465+
2466+The main() program from miral-shell looks like this:
2467+
2468+\include shell_main.cpp
2469+
2470+This shell is providing FloatingWindowManagerPolicy, TilingWindowManagerPolicy
2471+and SpinnerSplash. The rest is from MirAL.
2472+
2473+If you look for the corresponding code in lp:qtmir and lp:mir you’ll find it
2474+less clear, more verbose and scattered over multiple files.
2475+
2476+A shell has to provide a window management policy (miral-shell provides two:
2477+FloatingWindowManagerPolicy and TilingWindowManagerPolicy). A window management
2478+policy needs to implement the \ref miral::WindowManagementPolicy interface for
2479+handling a set of window management events.
2480+
2481+The way these events are handled determines the behaviour of the shell.
2482+
2483+The \ref miral::WindowManagerTools interface provides the principle methods for
2484+a window management policy to control Mir.
2485
2486=== modified file 'doc/mainpage.md'
2487--- doc/mainpage.md 2017-05-08 03:04:26 +0000
2488+++ doc/mainpage.md 2017-10-11 15:01:23 +0000
2489@@ -3,104 +3,66 @@
2490
2491 Mir is a next generation display server targeted as a replacement for the X
2492 window server system to unlock next-generation user experiences for devices
2493-ranging from Linux desktop to mobile devices powered by Ubuntu. The primary
2494-purpose of Mir is to enable the development of the next generation
2495-[Unity](http://unity.ubuntu.com).
2496+ranging from Linux desktop to mobile and IoT devices powered by Ubuntu.
2497+
2498+ - If you want to use the Mir snaps, see:
2499+ [Run a kiosk snap on Ubuntu Core](https://developer.ubuntu.com/core/examples/snaps-on-mir)
2500+
2501+ - If you want to try out the Mir demos on desktop, see: \ref getting_and_using_mir
2502+
2503+ - If you want to get involved in Mir development, see: \ref getting_involved_in_mir
2504+
2505+Using Mir for client development
2506+--------------------------------
2507+
2508+This is usually something you don't need to do explicitly, it is normally
2509+handled by a GUI toolkit (or library).
2510+
2511+A toolkit can run on Mir in three ways: using Wayland protocols, using the Mir
2512+client API or using X11 translation by the Xmir server.
2513+
2514+ - Qt, has "wayland" and "mir" plugins that can be selected by setting
2515+ the QT_QPA_PLATFORM environment variable to "wayland" or "ubuntumirclient"
2516+ respectively.
2517+
2518+ - SDL can be built with "wayland" and "mir" support and these options selected
2519+ by setting the SDL_VIDEODRIVER environment variable to "wayland" or "mir".
2520+
2521+If want to use the Mir client library directly (e.g. you are working on "mir"
2522+support for a toolkit or library) Install the headers and libraries for using
2523+libmirclient in development:
2524+
2525+ $ sudo apt install libmirclient-dev
2526+
2527+A `miral.pc` file is provided for use with `pkg-config` or other tools. For
2528+example:
2529+
2530+ $ pkg-config --cflags mirclient
2531+
2532+The client API documentation is here: \ref mir_toolkit
2533+
2534+Using Mir for server development
2535+--------------------------------
2536+
2537+Install the headers and libraries for using libmiral in development:
2538+
2539+ $ sudo apt install libmiral-dev
2540+
2541+A `miral.pc` file is provided for use with `pkg-config` or other tools. For
2542+example:
2543+
2544+ $ pkg-config --cflags miral
2545+
2546+The server API is introduced here: \ref introducing_the_miral_api
2547+
2548+The Mir Documentation
2549+---------------------
2550+
2551+The Mir documentation can be installed and read like this:
2552+
2553+ $ sudo apt install mir-doc
2554+ $ xdg-open /usr/share/doc/mir-doc/html/index.html
2555
2556 More detailed information about the motivation, scope, and high-level design
2557 of Mir can be found at http://wiki.ubuntu.com/MirSpec .
2558
2559-Getting and installing Mir
2560---------------------------
2561-
2562-### Using pre-built packages
2563-
2564-If you just want to try out mir, or write client applications, then the easiest
2565-way is to use the pre-built packages:
2566-
2567- - \ref installing_prebuilt_on_pc
2568-
2569-### Building and installing from source
2570-
2571-If you are curious about Mir internals or intend to contribute to it, you should
2572-get the source and build it:
2573-
2574- - \ref building_source_for_pc
2575- - \ref building_source_for_arm
2576-
2577-### Preparing a VM to run Mir
2578-
2579-Especially if you want to debug the shell without locking your system this might be a helpful setup:
2580-
2581-- \ref setup_kvm_for_mir
2582-- \ref setup_vmware_for_mir
2583-
2584-Using Mir
2585----------
2586-
2587- - \ref using_mir_on_pc
2588- - \ref demo_shell_controls
2589- - \ref demo_server
2590-
2591-Getting involved
2592-----------------
2593-
2594-The best place to ask questions and discuss about the Mir project is
2595-the \#ubuntu-mir IRC channel on freenode.
2596-
2597-The Mir project is hosted on Launchpad: https://launchpad.net/mir
2598-
2599-Currently, the Mir code activity is performed on a development branch:
2600-lp:~mir-team/mir/development-branch
2601-
2602-Approximately fortnightly, this development branch is promoted to the branch
2603-used for the ubuntu archive and touch images. Please submit any merge proposals
2604-against the development branch.
2605-
2606-Please file bug reports at: https://bugs.launchpad.net/mir
2607-
2608-The Mir development mailing list can be found at: https://lists.ubuntu.com/mailman/listinfo/Mir-devel
2609-
2610-The Mir coding guidelines are [here](cppguide/index.html).
2611-
2612-Writing client applications
2613----------------------------
2614-
2615- - \ref mir_toolkit "Mir API Documentation"
2616- - \subpage basic.c "basic.c: A basic Mir client (which does nothing)"
2617-
2618-Writing server applications
2619----------------------------
2620-
2621-Mir server is written as a library which allows the server code to be adapted
2622-for bespoke applications.
2623-
2624- - \subpage server_example.cpp
2625- "server_example.cpp: a test executable hosting the following"
2626- - \subpage server_example_input_event_filter.cpp
2627- "server_example_input_event_filter.cpp: provide a Quit command"
2628- - \subpage server_example_display_configuration_policy.cpp
2629- "server_example_display_configuration_policy.cpp: configuring display layout"
2630- - \subpage server_example_input_filter.cpp
2631- "server_example_input_filter.cpp: print input events to stdout"
2632- - \subpage server_example_log_options.cpp
2633- "server_example_log_options.cpp: replace Mir logger with glog"
2634- - \subpage server_example_basic_window_manager.h
2635- "server_example_basic_window_manager.h: How to wire up a window manager"
2636- - \subpage server_example_window_management.cpp
2637- "server_example_window_management.cpp: simple window management examples"
2638- - \subpage server_example_canonical_window_manager.cpp
2639- "server_example_canonical_window_manager.cpp: canonical window management policy"
2640- - \subpage server_example_custom_compositor.cpp
2641- "server_example_custom_compositor.cpp: demonstrate writing an alternative GL rendering code"
2642-
2643-Working on Mir code
2644--------------------
2645-
2646- - \ref md_README "Mir Read me"
2647- - \ref md_HACKING "Mir hacking guide"
2648- - \ref component_reports
2649- - \ref dso_versioning_guide
2650- - \ref abi_compatibility_tools
2651- - \ref performance_framework
2652- - \ref latency "Measuring visual latency"
2653
2654=== removed file 'doc/using_mir_on_pc.md'
2655--- doc/using_mir_on_pc.md 2016-01-29 08:18:22 +0000
2656+++ doc/using_mir_on_pc.md 1970-01-01 00:00:00 +0000
2657@@ -1,91 +0,0 @@
2658-Using Mir on a PC {#using_mir_on_pc}
2659-=================
2660-
2661-Before you begin
2662-----------------
2663-
2664-Make sure your hardware is supported. That means you're using a Mesa driver,
2665-of which intel, radeon, and nouveau families are supported. If you're logged
2666-in to X then run this command to verify an appropriate DRI driver is active:
2667-
2668- sudo pmap `pidof X` | grep dri.so
2669-
2670-or
2671-
2672- lsmod | grep drm
2673-
2674-Before you can use Mir you need to ensure you have the proper custom Mesa
2675-build installed. If you are running Ubuntu 13.10 or later
2676-(see \ref installing_prebuilt_on_pc), you should be good to go.
2677-
2678-If you built Mir from source code (see \ref building_source_for_pc), you
2679-need to ensure you are using the proper Mesa at runtime. You can do that by
2680-installing the Mesa packages from Ubuntu 13.10 (or later) or by building the
2681-custom Mesa yourself and ensuring it can be found by Mir, e.g., by using
2682-`LD_LIBRARY_PATH`.
2683-
2684-### Getting some example client applications
2685-
2686-You can get some example programs by installing the `mir-demos` package:
2687-
2688- $ sudo apt-get install mir-demos
2689-
2690-If you are building from source you can find client applications in the `bin/`
2691-subdirectory of the build directory.
2692-
2693-Running Mir
2694------------
2695-
2696-Mir can run run either natively on mesa-kms or as an X application.
2697-
2698-### Running Mir on X
2699-
2700-To run Mir as an X client start it from an X terminal:
2701-
2702- $ mir_demo_server --launch-client mir_demo_client_multiwin
2703-
2704-You can start additional Mir clients, for example (in a new terminal):
2705-
2706- $ mir_demo_egltriangle
2707-
2708-To exit from Mir:
2709-
2710- <Ctrl+Alt+BkSp>
2711-
2712-Note: up to Mir 0.18 it is also necessary to specify `--platform-input-lib` when
2713-starting the server:
2714- - for Mir-0.17 add: `--platform-input-lib server-mesa-x11.so.6`
2715- - for Mir-0.18 add: `--platform-input-lib server-mesa-x11.so.7`
2716-
2717-### Running Mir natively
2718-
2719-To run Mir natively on a PC/desktop/laptop:
2720-
2721- $ sudo DISPLAY= mir_demo_server --vt 1 --arw-file
2722-
2723-This will switch you to a Mir session on VT1. Switch back to your X-based
2724-desktop:
2725-
2726- <Ctrl+Alt+F7>
2727-
2728-In a new terminal:
2729-
2730- $ mir_demo_client_multiwin -m /tmp/mir_socket
2731-
2732-Switch back to Mir.
2733-
2734- <Ctrl+Alt+F1>
2735-
2736-Watch your friends be amazed!
2737-
2738-To exit from Mir:
2739-
2740- <Ctrl+Alt+BkSp>
2741-
2742-In case you accidentally killed your X login and ended up with a failsafe
2743-screen, you might find on subsequent reboots you can't log in to X at all any
2744-more (it instantly and silently takes you back to the login screen). The fix
2745-for this is to log in to a VT and:
2746-
2747- $ rm .Xauthority
2748- $ sudo restart lightdm
2749
2750=== modified file 'examples/CMakeLists.txt'
2751--- examples/CMakeLists.txt 2017-06-06 16:26:18 +0000
2752+++ examples/CMakeLists.txt 2017-10-11 15:01:23 +0000
2753@@ -1,14 +1,5 @@
2754-mir_add_wrapped_executable(mir_demo_standalone_render_surfaces
2755- render_surfaces.cpp
2756- buffer_render_target.cpp
2757- image_renderer.cpp
2758-)
2759-
2760-target_link_libraries(mir_demo_standalone_render_surfaces
2761- mirserver
2762- exampleserverconfig
2763- ${Boost_LIBRARIES}
2764-)
2765+add_subdirectory(miral-kiosk)
2766+add_subdirectory(miral-shell)
2767
2768 set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -std=c99 -Wall -fno-strict-aliasing -Wextra")
2769
2770@@ -18,26 +9,17 @@
2771 )
2772
2773 add_library(exampleserverconfig STATIC
2774- server_example_basic_window_manager.cpp
2775- server_example_basic_window_manager.h
2776- server_example_canonical_window_manager.cpp
2777- server_example_display_configuration_policy.cpp
2778 server_example_input_device_config.cpp
2779 server_example_input_event_filter.cpp
2780 server_example_log_options.cpp
2781 server_example_input_filter.cpp
2782 server_example_host_lifecycle_event.cpp
2783- server_example_window_management.cpp
2784 server_example_custom_compositor.cpp
2785 server_example_adorning_compositor.cpp
2786- server_example_cursor_images.cpp
2787- server_example_cursor_images.h
2788- xcursor_loader.cpp
2789- xcursor_loader.h
2790- xcursor.c
2791- xcursor.h
2792 )
2793
2794+target_link_libraries(exampleserverconfig mirserver)
2795+
2796 target_link_libraries(eglapp
2797 mirclient
2798 ${EGL_LIBRARIES}
2799@@ -184,6 +166,7 @@
2800 add_library(mirdraw STATIC graphics_utils.cpp)
2801
2802 include_directories(
2803+ ${PROJECT_SOURCE_DIR}/include/miral
2804 ${PROJECT_SOURCE_DIR}/include/server
2805 ${PROJECT_SOURCE_DIR}/include/client
2806 ${PROJECT_SOURCE_DIR}/include/platform
2807@@ -192,17 +175,6 @@
2808 ${GL_INCLUDE_DIRS}
2809 )
2810
2811-mir_add_wrapped_executable(mir_demo_standalone_render_to_fb
2812- render_to_fb.cpp
2813-)
2814-
2815-target_link_libraries(mir_demo_standalone_render_to_fb
2816- mirserver
2817- mirdraw
2818- ${GL_LIBRARIES}
2819- ${Boost_LIBRARIES}
2820-)
2821-
2822 add_library(mir_demo_server_loadable MODULE
2823 server_example.cpp
2824 glog_logger.cpp
2825@@ -210,7 +182,8 @@
2826 )
2827
2828 target_link_libraries(mir_demo_server_loadable
2829- mirserver
2830+ miral-shell-lib
2831+ miral
2832 exampleserverconfig
2833 ${GLog_LIBRARY}
2834 ${GFlags_LIBRARY}
2835@@ -229,9 +202,6 @@
2836 dl
2837 )
2838
2839-mir_add_wrapped_executable(mir_demo_server_minimal server_minimal.cpp)
2840-target_link_libraries(mir_demo_server_minimal mirserver)
2841-
2842 if (MIR_ENABLE_TESTS)
2843 add_executable(mir_symbol_test
2844 uses_non_client_symbol.cpp
2845@@ -268,15 +238,6 @@
2846 endif ()
2847 endif ()
2848
2849-add_executable(mir_cursor_theme_dump
2850- cursor-theme-dump.cpp
2851-)
2852-
2853-target_link_libraries(mir_cursor_theme_dump
2854- exampleserverconfig
2855- mirserver
2856-)
2857-
2858 mir_add_wrapped_executable(mir_demo_client_multistream
2859 multi_stream.cpp
2860 )
2861@@ -313,6 +274,15 @@
2862 mirclient
2863 )
2864
2865+include_directories(${MIR_GENERATED_INCLUDE_DIRECTORIES})
2866+
2867+mir_add_wrapped_executable(mir_demo_client_wayland wayland_client.c)
2868+target_link_libraries(mir_demo_client_wayland
2869+
2870+ ${WAYLAND_CLIENT_LIBRARIES}
2871+)
2872+
2873 mir_add_wrapped_executable(mir_demo_client_screencast screencast.cpp)
2874
2875 target_link_libraries(mir_demo_client_screencast mirclient)
2876+
2877
2878=== modified file 'examples/animated_cursor_demo_client.c'
2879--- examples/animated_cursor_demo_client.c 2017-05-19 13:51:47 +0000
2880+++ examples/animated_cursor_demo_client.c 2017-10-11 15:01:23 +0000
2881@@ -2,7 +2,7 @@
2882 * Copyright © 2015 Canonical LTD
2883 *
2884 * This program is free software: you can redistribute it and/or modify
2885- * it under the terms of the GNU General Public License version 3 as
2886+ * it under the terms of the GNU General Public License version 2 or 3 as
2887 * published by the Free Software Foundation.
2888 *
2889 * This program is distributed in the hope that it will be useful,
2890
2891=== modified file 'examples/as_render_target.h'
2892--- examples/as_render_target.h 2015-10-01 08:58:30 +0000
2893+++ examples/as_render_target.h 2017-10-11 15:01:23 +0000
2894@@ -2,7 +2,7 @@
2895 * Copyright © 2015 Canonical Ltd.
2896 *
2897 * This program is free software: you can redistribute it and/or modify
2898- * it under the terms of the GNU General Public License version 3 as
2899+ * it under the terms of the GNU General Public License version 2 or 3 as
2900 * published by the Free Software Foundation.
2901 *
2902 * This program is distributed in the hope that it will be useful,
2903
2904=== modified file 'examples/basic.c'
2905--- examples/basic.c 2017-05-19 13:49:04 +0000
2906+++ examples/basic.c 2017-10-11 15:01:23 +0000
2907@@ -2,7 +2,7 @@
2908 * Copyright © 2012 Canonical Ltd.
2909 *
2910 * This program is free software: you can redistribute it and/or modify
2911- * it under the terms of the GNU General Public License version 3 as
2912+ * it under the terms of the GNU General Public License version 2 or 3 as
2913 * published by the Free Software Foundation.
2914 *
2915 * This program is distributed in the hope that it will be useful,
2916@@ -41,16 +41,12 @@
2917 /// \snippet basic.c surface_release_tag
2918 ///\subsection connection_release We release our connection
2919 /// \snippet basic.c connection_release_tag
2920-///\subsection get the raw, platform-specific buffer handle for the current buffer
2921-/// \snippet basic.c get_current_buffer_tag
2922+///\subsection get graphics region for the current buffer
2923+/// \snippet basic.c get_graphics_region_tag
2924 /// \example basic.c A simple mir client
2925 ///\section MirDemoState MirDemoState
2926 /// The handles needs to be accessible both to callbacks and to the control function.
2927 /// \snippet basic.c MirDemoState_tag
2928-///\section Callbacks Callbacks
2929-/// This program opens a mir connection and creates a surface. The handles
2930-/// needs to be accessible both to callbacks and to the control function.
2931-/// \snippet basic.c Callback_tag
2932
2933 ///\internal [MirDemoState_tag]
2934 // Utility structure for the state of a single surface session.
2935@@ -143,11 +139,12 @@
2936 {
2937 // We can query the current graphics buffer attributes
2938 {
2939+ ///\internal [get_graphics_region_tag]
2940 MirGraphicsRegion graphics_region;
2941 mir_buffer_stream_get_graphics_region(bs, &graphics_region);
2942
2943- ///\internal [get_current_buffer_tag]
2944- // In a real application we'd render into the current buffer
2945+ ///\internal [get_graphics_region_tag]
2946+ // In a real application we'd render into the graphics_region
2947 }
2948
2949 ///\internal [swap_buffers_tag]
2950
2951=== modified file 'examples/buffer_render_target.cpp'
2952--- examples/buffer_render_target.cpp 2016-01-29 08:18:22 +0000
2953+++ examples/buffer_render_target.cpp 2017-10-11 15:01:23 +0000
2954@@ -2,7 +2,7 @@
2955 * Copyright © 2012 Canonical Ltd.
2956 *
2957 * This program is free software: you can redistribute it and/or modify
2958- * it under the terms of the GNU General Public License version 3 as
2959+ * it under the terms of the GNU General Public License version 2 or 3 as
2960 * published by the Free Software Foundation.
2961 *
2962 * This program is distributed in the hope that it will be useful,
2963
2964=== modified file 'examples/buffer_render_target.h'
2965--- examples/buffer_render_target.h 2015-02-22 07:46:25 +0000
2966+++ examples/buffer_render_target.h 2017-10-11 15:01:23 +0000
2967@@ -2,7 +2,7 @@
2968 * Copyright © 2012 Canonical Ltd.
2969 *
2970 * This program is free software: you can redistribute it and/or modify
2971- * it under the terms of the GNU General Public License version 3 as
2972+ * it under the terms of the GNU General Public License version 2 or 3 as
2973 * published by the Free Software Foundation.
2974 *
2975 * This program is distributed in the hope that it will be useful,
2976
2977=== modified file 'examples/camera.c'
2978--- examples/camera.c 2017-05-19 13:49:04 +0000
2979+++ examples/camera.c 2017-10-11 15:01:23 +0000
2980@@ -2,7 +2,7 @@
2981 * Copyright © 2015-2016 Canonical Ltd.
2982 *
2983 * This program is free software: you can redistribute it and/or modify
2984- * it under the terms of the GNU General Public License version 3 as
2985+ * it under the terms of the GNU General Public License version 2 or 3 as
2986 * published by the Free Software Foundation.
2987 *
2988 * This program is distributed in the hope that it will be useful,
2989
2990=== modified file 'examples/chain_jumping_buffers.c'
2991--- examples/chain_jumping_buffers.c 2017-05-19 13:54:14 +0000
2992+++ examples/chain_jumping_buffers.c 2017-10-11 15:01:23 +0000
2993@@ -2,7 +2,7 @@
2994 * Copyright © 2016 Canonical Ltd.
2995 *
2996 * This program is free software: you can redistribute it and/or modify
2997- * it under the terms of the GNU General Public License version 3 as
2998+ * it under the terms of the GNU General Public License version 2 or 3 as
2999 * published by the Free Software Foundation.
3000 *
3001 * This program is distributed in the hope that it will be useful,
3002
3003=== modified file 'examples/client_helpers.cpp'
3004--- examples/client_helpers.cpp 2017-06-06 14:57:41 +0000
3005+++ examples/client_helpers.cpp 2017-10-11 15:01:23 +0000
3006@@ -2,7 +2,7 @@
3007 * Copyright © 2015-2017 Canonical Ltd.
3008 *
3009 * This program is free software: you can redistribute it and/or modify
3010- * it under the terms of the GNU General Public License version 3 as
3011+ * it under the terms of the GNU General Public License version 2 or 3 as
3012 * published by the Free Software Foundation.
3013 *
3014 * This program is distributed in the hope that it will be useful,
3015@@ -18,6 +18,8 @@
3016
3017 #include "client_helpers.h"
3018 #include "mir_toolkit/mir_client_library.h"
3019+#include <unistd.h>
3020+#include <signal.h>
3021
3022 namespace me = mir::examples;
3023
3024@@ -89,6 +91,10 @@
3025 break;
3026 }
3027
3028+ case mir_event_type_close_window:
3029+ kill(getpid(), SIGTERM);
3030+ break;
3031+
3032 default:
3033 break;
3034 }
3035
3036=== modified file 'examples/client_helpers.h'
3037--- examples/client_helpers.h 2017-06-06 14:57:41 +0000
3038+++ examples/client_helpers.h 2017-10-11 15:01:23 +0000
3039@@ -2,7 +2,7 @@
3040 * Copyright © 2015-2017 Canonical Ltd.
3041 *
3042 * This program is free software: you can redistribute it and/or modify
3043- * it under the terms of the GNU General Public License version 3 as
3044+ * it under the terms of the GNU General Public License version 2 or 3 as
3045 * published by the Free Software Foundation.
3046 *
3047 * This program is distributed in the hope that it will be useful,
3048
3049=== modified file 'examples/client_touch_validator.cpp'
3050--- examples/client_touch_validator.cpp 2017-06-06 15:41:28 +0000
3051+++ examples/client_touch_validator.cpp 2017-10-11 15:01:23 +0000
3052@@ -4,7 +4,7 @@
3053 * Copyright © 2015 Canonical Ltd.
3054 *
3055 * This program is free software: you can redistribute it and/or modify
3056- * it under the terms of the GNU General Public License version 3 as
3057+ * it under the terms of the GNU General Public License version 2 or 3 as
3058 * published by the Free Software Foundation.
3059 *
3060 * This program is distributed in the hope that it will be useful,
3061
3062=== removed file 'examples/cursor-theme-dump.cpp'
3063--- examples/cursor-theme-dump.cpp 2016-01-29 08:18:22 +0000
3064+++ examples/cursor-theme-dump.cpp 1970-01-01 00:00:00 +0000
3065@@ -1,127 +0,0 @@
3066-/*
3067- * Copyright © 2015 Canonical Ltd.
3068- *
3069- * This program is free software: you can redistribute it and/or modify it
3070- * under the terms of the GNU General Public License version 3,
3071- * as published by the Free Software Foundation.
3072- *
3073- * This program is distributed in the hope that it will be useful,
3074- * but WITHOUT ANY WARRANTY; without even the implied warranty of
3075- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3076- * GNU General Public License for more details.
3077- *
3078- * You should have received a copy of the GNU General Public License
3079- * along with this program. If not, see <http://www.gnu.org/licenses/>.
3080- *
3081- * Authored by: Alan Griffiths <alan@octopull.co.uk>
3082- */
3083-
3084-#include "xcursor_loader.h"
3085-
3086-#include "mir/graphics/cursor_image.h"
3087-#include <mir_toolkit/cursors.h>
3088-
3089-#include <fstream>
3090-
3091-using namespace mir::examples;
3092-using namespace mir::geometry;
3093-
3094-namespace
3095-{
3096-auto const cursor_names = {
3097- mir_arrow_cursor_name,
3098- mir_busy_cursor_name,
3099- mir_caret_cursor_name,
3100- mir_default_cursor_name,
3101- mir_pointing_hand_cursor_name,
3102- mir_open_hand_cursor_name,
3103- mir_closed_hand_cursor_name,
3104- mir_horizontal_resize_cursor_name,
3105- mir_vertical_resize_cursor_name,
3106- mir_diagonal_resize_bottom_to_top_cursor_name,
3107- mir_diagonal_resize_top_to_bottom_cursor_name,
3108- mir_omnidirectional_resize_cursor_name,
3109- mir_vsplit_resize_cursor_name,
3110- mir_hsplit_resize_cursor_name,
3111- mir_crosshair_cursor_name };
3112-}
3113-
3114-
3115-int main(int argc, char const* argv[])
3116-try
3117-{
3118- if (argc != 2)
3119- {
3120- puts("Usage mir_cursor_theme_dump <cursor theme>\n");
3121- exit(-1);
3122- }
3123-
3124- auto const theme = argv[1];
3125- std::ofstream output(std::string{theme} + "-theme.h");
3126-
3127- output << "#include <initializer_list>\n"
3128- "\n"
3129- "namespace\n"
3130- "{\n"
3131- "struct CursorData\n"
3132- "{\n"
3133- " CursorData(char const* name, unsigned int hotspot_x, unsigned int hotspot_y, char const* pixel_data) :\n"
3134- " name(name), hotspot_x(hotspot_x), hotspot_y(hotspot_y), pixel_data(reinterpret_cast<unsigned char const*>(pixel_data)) {}\n"
3135- "\n"
3136- " unsigned int const width{" << mir::input::default_cursor_size.width.as_int() << "};\n"
3137- " unsigned int const height{" << mir::input::default_cursor_size.height.as_int() << "};\n"
3138- " char const* const name;\n"
3139- " unsigned int const hotspot_x;\n"
3140- " unsigned int const hotspot_y;\n"
3141- " unsigned char const* const pixel_data;\n"
3142- "};\n"
3143- "auto const cursor_data = {\n";
3144-
3145- auto const buffer_size = 4*mir::input::default_cursor_size.height.as_int()*mir::input::default_cursor_size.height.as_int();
3146-
3147- auto const xcursor_loader = std::make_shared<XCursorLoader>(theme);
3148-
3149- for (auto cursor : cursor_names)
3150- {
3151- if (auto const image = xcursor_loader->image(cursor, mir::input::default_cursor_size))
3152- {
3153- printf("Have image for %s:%s\n", theme, cursor);
3154-
3155- auto const hotspot = image->hotspot();
3156- auto const argb_8888 = static_cast<uint8_t const*>(image->as_argb_8888());
3157-
3158- output << "CursorData{\"" << cursor << "\", " << hotspot.dx.as_int() << ", " << hotspot.dy.as_int() << ",\n";
3159-
3160- int chars = 0;
3161-
3162- output << std::oct << " \"";
3163-
3164- for (auto pbyte = argb_8888; pbyte != argb_8888 + buffer_size; ++pbyte)
3165- {
3166- auto step = (*pbyte < 010) ? 2 : (*pbyte < 0100) ? 3 : 4;
3167-
3168- if ((chars += step) > 80)
3169- {
3170- output << "\"\n \"";
3171- chars = step;
3172- }
3173-
3174- output << '\\' << static_cast<unsigned>(*pbyte);
3175- }
3176-
3177- output << "\"\n";
3178-
3179- output << "},\n";
3180- }
3181- else
3182- {
3183- printf("** WARNING ** No image for %s:%s\n", theme, cursor);
3184- }
3185- }
3186- output << "};\n";
3187- output << "}\n";
3188-}
3189-catch (std::exception const& error)
3190-{
3191- printf("** ERROR **: %s", error.what());
3192-}
3193\ No newline at end of file
3194
3195=== modified file 'examples/cursors_demo_client.c'
3196--- examples/cursors_demo_client.c 2017-05-08 03:04:26 +0000
3197+++ examples/cursors_demo_client.c 2017-10-11 15:01:23 +0000
3198@@ -2,7 +2,7 @@
3199 * Copyright © 2014 Canonical LTD
3200 *
3201 * This program is free software: you can redistribute it and/or modify
3202- * it under the terms of the GNU General Public License version 3 as
3203+ * it under the terms of the GNU General Public License version 2 or 3 as
3204 * published by the Free Software Foundation.
3205 *
3206 * This program is distributed in the hope that it will be useful,
3207
3208=== modified file 'examples/demo_client_display_config.c'
3209--- examples/demo_client_display_config.c 2017-05-08 03:04:26 +0000
3210+++ examples/demo_client_display_config.c 2017-10-11 15:01:23 +0000
3211@@ -1,10 +1,10 @@
3212 /*
3213 * Client-side display configuration demo.
3214 *
3215- * Copyright © 2013 Canonical Ltd.
3216+ * Copyright © 2013, 2017 Canonical Ltd.
3217 *
3218 * This program is free software: you can redistribute it and/or modify
3219- * it under the terms of the GNU General Public License version 3 as
3220+ * it under the terms of the GNU General Public License version 2 or 3 as
3221 * published by the Free Software Foundation.
3222 *
3223 * This program is distributed in the hope that it will be useful,
3224@@ -37,7 +37,11 @@
3225 configuration_mode_clone,
3226 configuration_mode_horizontal,
3227 configuration_mode_vertical,
3228- configuration_mode_single
3229+ configuration_mode_single,
3230+ configuration_mode_left,
3231+ configuration_mode_right,
3232+ configuration_mode_up,
3233+ configuration_mode_down,
3234 } ConfigurationMode;
3235
3236 struct ClientContext
3237@@ -49,9 +53,13 @@
3238 volatile sig_atomic_t reconfigure;
3239 };
3240
3241-static void print_current_configuration(MirConnection *connection)
3242+static MirDisplayConfig *conf = NULL;
3243+
3244+static void print_current_configuration()
3245 {
3246- MirDisplayConfig *conf = mir_connection_create_display_configuration(connection);
3247+ if (!conf)
3248+ return;
3249+
3250 size_t num_outputs = mir_display_config_get_num_outputs(conf);
3251
3252 for (uint32_t i = 0; i < num_outputs; i++)
3253@@ -64,8 +72,8 @@
3254 bool connected = mir_output_get_connection_state(output) ==
3255 mir_output_connection_state_connected;
3256
3257- printf("Output id: %d connected: %d used: %d position_x: %d position_y: %d",
3258- id, connected, used, position_x, position_y);
3259+ printf("Output id: %d connected: %d used: %d position_x: %d position_y: %d orientation: %d",
3260+ id, connected, used, position_x, position_y, mir_output_get_orientation(output));
3261
3262 MirOutputMode const* current = mir_output_get_current_mode(output);
3263 if (current)
3264@@ -80,8 +88,6 @@
3265 printf("\n");
3266 }
3267 }
3268-
3269- mir_display_config_release(conf);
3270 }
3271
3272 static int apply_configuration(MirConnection *connection, MirDisplayConfig *conf)
3273@@ -208,31 +214,67 @@
3274 }
3275 }
3276
3277+static void orient_display(MirDisplayConfig *conf, MirOrientation orientation)
3278+{
3279+ size_t num_outputs = mir_display_config_get_num_outputs(conf);
3280+
3281+ for (size_t i = 0; i < num_outputs; i++)
3282+ {
3283+ MirOutput *output = mir_display_config_get_mutable_output(conf, i);
3284+ mir_output_set_orientation(output, orientation);
3285+ }
3286+}
3287+
3288 static void configure_display(struct ClientContext *context, ConfigurationMode mode,
3289 int mode_data)
3290 {
3291- MirDisplayConfig *conf =
3292- mir_connection_create_display_configuration(context->connection);
3293+ if (!conf)
3294+ conf = mir_connection_create_display_configuration(context->connection);
3295
3296- if (mode == configuration_mode_clone)
3297+ switch (mode)
3298 {
3299+ case configuration_mode_clone:
3300 configure_display_clone(conf);
3301 printf("Applying clone configuration: ");
3302- }
3303- else if (mode == configuration_mode_vertical)
3304- {
3305+ break;
3306+
3307+ case configuration_mode_vertical:
3308 configure_display_vertical(conf);
3309 printf("Applying vertical configuration: ");
3310- }
3311- else if (mode == configuration_mode_horizontal)
3312- {
3313+ break;
3314+
3315+ case configuration_mode_horizontal:
3316 configure_display_horizontal(conf);
3317 printf("Applying horizontal configuration: ");
3318- }
3319- else if (mode == configuration_mode_single)
3320- {
3321+ break;
3322+
3323+ case configuration_mode_single:
3324 configure_display_single(conf, mode_data);
3325 printf("Applying single configuration for output %d: ", mode_data);
3326+ break;
3327+
3328+ case configuration_mode_left:
3329+ orient_display(conf, mir_orientation_left);
3330+ printf("Applying orientation left: ");
3331+ break;
3332+
3333+ case configuration_mode_right:
3334+ orient_display(conf, mir_orientation_right);
3335+ printf("Applying orientation right: ");
3336+ break;
3337+
3338+ case configuration_mode_up:
3339+ orient_display(conf, mir_orientation_inverted);
3340+ printf("Applying orientation up: ");
3341+ break;
3342+
3343+ case configuration_mode_down:
3344+ orient_display(conf, mir_orientation_normal);
3345+ printf("Applying orientation down: ");
3346+ break;
3347+
3348+ default:
3349+ break;
3350 }
3351
3352 if (apply_configuration(context->connection, conf))
3353@@ -240,22 +282,33 @@
3354 context->mode = mode;
3355 context->mode_data = mode_data;
3356 }
3357-
3358- mir_display_config_release(conf);
3359 }
3360
3361 static void display_change_callback(MirConnection *connection, void *context)
3362 {
3363- (void)context;
3364-
3365 printf("=== Display configuration changed === \n");
3366
3367- print_current_configuration(connection);
3368+ if (conf)
3369+ mir_display_config_release(conf);
3370+
3371+ conf = mir_connection_create_display_configuration(connection);
3372+
3373+ print_current_configuration();
3374
3375 struct ClientContext *ctx = (struct ClientContext*) context;
3376 ctx->reconfigure = 1;
3377 }
3378
3379+static void apply_to_base_configuration(MirConnection *connection)
3380+{
3381+ if (!conf)
3382+ return;
3383+
3384+ mir_connection_preview_base_display_configuration(connection, conf, 2);
3385+ puts("Applying to base configuration");
3386+ mir_connection_confirm_base_display_configuration(connection, conf);
3387+}
3388+
3389 static void handle_keyboard_event(struct ClientContext *ctx, MirKeyboardEvent const* event)
3390 {
3391 if (mir_keyboard_event_action(event) != mir_keyboard_action_up)
3392@@ -271,6 +324,9 @@
3393
3394 switch (key_code)
3395 {
3396+ case XKB_KEY_a:
3397+ apply_to_base_configuration(ctx->connection);
3398+ break;
3399 case XKB_KEY_q:
3400 ctx->running = 0;
3401 break;
3402@@ -284,7 +340,21 @@
3403 configure_display(ctx, configuration_mode_vertical, 0);
3404 break;
3405 case XKB_KEY_p:
3406- print_current_configuration(ctx->connection);
3407+ if (!conf)
3408+ conf = mir_connection_create_display_configuration(ctx->connection);
3409+ print_current_configuration();
3410+ break;
3411+ case XKB_KEY_Left:
3412+ configure_display(ctx, configuration_mode_right, 0);
3413+ break;
3414+ case XKB_KEY_Up:
3415+ configure_display(ctx, configuration_mode_up, 0);
3416+ break;
3417+ case XKB_KEY_Right:
3418+ configure_display(ctx, configuration_mode_left, 0);
3419+ break;
3420+ case XKB_KEY_Down:
3421+ configure_display(ctx, configuration_mode_down, 0);
3422 break;
3423 }
3424 }
3425@@ -292,15 +362,16 @@
3426 static void event_callback(
3427 MirWindow* surface, MirEvent const* event, void* context)
3428 {
3429- (void) surface;
3430+ mir_eglapp_handle_event(surface, event, context);
3431+
3432 struct ClientContext *ctx = (struct ClientContext*) context;
3433-
3434+
3435 if (mir_event_get_type(event) != mir_event_type_input)
3436 return;
3437 MirInputEvent const* input_event = mir_event_get_input_event(event);
3438 if (mir_input_event_get_type(input_event) != mir_input_event_type_key)
3439 return;
3440-
3441+
3442 handle_keyboard_event(ctx, mir_input_event_get_keyboard_event(input_event));
3443 }
3444
3445@@ -317,7 +388,9 @@
3446 " h: arrange outputs horizontally in the virtual space\n"
3447 " v: arrange outputs vertically in the virtual space\n"
3448 " 1-9: enable only the Nth connected output (in the order returned by the hardware)\n"
3449- " p: print current display configuration\n");
3450+ " Arrows: orient display (sets \"down\" direction)\n"
3451+ " p: print current display configuration\n"
3452+ " a: apply current display configuration globally\n");
3453
3454 return 1;
3455 }
3456@@ -351,6 +424,9 @@
3457 }
3458 }
3459
3460+ if (conf)
3461+ mir_display_config_release(conf);
3462+
3463 mir_eglapp_cleanup();
3464
3465 return 0;
3466
3467=== modified file 'examples/eglapp.c'
3468--- examples/eglapp.c 2017-06-30 11:35:46 +0000
3469+++ examples/eglapp.c 2017-10-11 15:01:23 +0000
3470@@ -2,7 +2,7 @@
3471 * Copyright © 2013 Canonical Ltd.
3472 *
3473 * This program is free software: you can redistribute it and/or modify
3474- * it under the terms of the GNU General Public License version 3 as
3475+ * it under the terms of the GNU General Public License version 2 or 3 as
3476 * published by the Free Software Foundation.
3477 *
3478 * This program is distributed in the hope that it will be useful,
3479
3480=== modified file 'examples/eglapp.h'
3481--- examples/eglapp.h 2017-06-06 15:41:28 +0000
3482+++ examples/eglapp.h 2017-10-11 15:01:23 +0000
3483@@ -2,7 +2,7 @@
3484 * Copyright © 2013 Canonical Ltd.
3485 *
3486 * This program is free software: you can redistribute it and/or modify
3487- * it under the terms of the GNU General Public License version 3 as
3488+ * it under the terms of the GNU General Public License version 2 or 3 as
3489 * published by the Free Software Foundation.
3490 *
3491 * This program is distributed in the hope that it will be useful,
3492
3493=== modified file 'examples/eglcounter.cpp'
3494--- examples/eglcounter.cpp 2017-05-08 03:04:26 +0000
3495+++ examples/eglcounter.cpp 2017-10-11 15:01:23 +0000
3496@@ -2,7 +2,7 @@
3497 * Copyright © 2014 Canonical Ltd.
3498 *
3499 * This program is free software: you can redistribute it and/or modify
3500- * it under the terms of the GNU General Public License version 3 as
3501+ * it under the terms of the GNU General Public License version 2 or 3 as
3502 * published by the Free Software Foundation.
3503 *
3504 * This program is distributed in the hope that it will be useful,
3505
3506=== modified file 'examples/eglflash.c'
3507--- examples/eglflash.c 2017-05-08 03:04:26 +0000
3508+++ examples/eglflash.c 2017-10-11 15:01:23 +0000
3509@@ -4,7 +4,7 @@
3510 * Copyright © 2013 Canonical Ltd.
3511 *
3512 * This program is free software: you can redistribute it and/or modify
3513- * it under the terms of the GNU General Public License version 3 as
3514+ * it under the terms of the GNU General Public License version 2 or 3 as
3515 * published by the Free Software Foundation.
3516 *
3517 * This program is distributed in the hope that it will be useful,
3518
3519=== modified file 'examples/eglplasma.c'
3520--- examples/eglplasma.c 2017-05-08 03:04:26 +0000
3521+++ examples/eglplasma.c 2017-10-11 15:01:23 +0000
3522@@ -2,7 +2,7 @@
3523 * Copyright © 2013 Canonical Ltd.
3524 *
3525 * This program is free software: you can redistribute it and/or modify
3526- * it under the terms of the GNU General Public License version 3 as
3527+ * it under the terms of the GNU General Public License version 2 or 3 as
3528 * published by the Free Software Foundation.
3529 *
3530 * This program is distributed in the hope that it will be useful,
3531
3532=== modified file 'examples/eglsquare.cpp'
3533--- examples/eglsquare.cpp 2017-06-06 13:55:51 +0000
3534+++ examples/eglsquare.cpp 2017-10-11 15:01:23 +0000
3535@@ -2,7 +2,7 @@
3536 * Copyright © 2015 Canonical Ltd.
3537 *
3538 * This program is free software: you can redistribute it and/or modify
3539- * it under the terms of the GNU General Public License version 3 as
3540+ * it under the terms of the GNU General Public License version 2 or 3 as
3541 * published by the Free Software Foundation.
3542 *
3543 * This program is distributed in the hope that it will be useful,
3544@@ -169,84 +169,89 @@
3545
3546 pos = Pos{x, y};
3547 cv.notify_one();
3548+ break;
3549 }
3550
3551+ case mir_event_type_close_window:
3552+ kill(getpid(), SIGTERM);
3553+ break;
3554+
3555 default:;
3556 }
3557- }
3558-
3559- SquareRenderingSurface(SquareRenderingSurface const&) = delete;
3560- SquareRenderingSurface& operator=(SquareRenderingSurface const&) = delete;
3561- private:
3562- struct OutputDimensions
3563- {
3564- unsigned int const width;
3565- unsigned int const height;
3566- } const dimensions;
3567-
3568- me::Context context;
3569- me::NormalWindow window;
3570- RenderProgram program;
3571-
3572- OutputDimensions active_output_dimensions(MirConnection* connection)
3573- {
3574- unsigned int width{0};
3575- unsigned int height{0};
3576- auto display_config = mir_connection_create_display_configuration(connection);
3577- auto num_outputs = mir_display_config_get_num_outputs(display_config);
3578- for (auto i = 0; i < num_outputs; i++)
3579- {
3580- auto output = mir_display_config_get_output(display_config, i);
3581- auto state = mir_output_get_connection_state(output);
3582- if (state == mir_output_connection_state_connected && mir_output_is_enabled(output))
3583- {
3584- auto mode = mir_output_get_current_mode(output);
3585- width = mir_output_mode_get_width(mode);
3586- height = mir_output_mode_get_height(mode);
3587- break;
3588- }
3589- }
3590- mir_display_config_release(display_config);
3591- if (width == 0 || height == 0)
3592- throw std::logic_error("could not determine display size");
3593- return {width, height};
3594- }
3595-
3596- static void on_event(MirWindow*, const MirEvent *event, void *context)
3597- {
3598- auto surface = reinterpret_cast<SquareRenderingSurface*>(context);
3599- if (surface) surface->on_event(event);
3600- }
3601-
3602- private:
3603- void do_work()
3604- {
3605- std::unique_lock<decltype(mutex)> lock(mutex);
3606-
3607- while (true)
3608- {
3609- cv.wait(lock);
3610-
3611- if (!running) return;
3612-
3613- Pos pos = this->pos;
3614-
3615- context.make_current();
3616- program.draw(
3617- pos.x/static_cast<float>(dimensions.width)*2.0 - 1.0,
3618- pos.y/static_cast<float>(dimensions.height)*-2.0 + 1.0);
3619- context.swapbuffers();
3620- }
3621- }
3622-
3623- struct Pos { float x; float y; };
3624- std::atomic<Pos> pos;
3625-
3626- std::thread worker;
3627- std::condition_variable cv;
3628- std::mutex mutex;
3629- bool running{true};
3630- };
3631+ }
3632+
3633+ SquareRenderingSurface(SquareRenderingSurface const&) = delete;
3634+ SquareRenderingSurface& operator=(SquareRenderingSurface const&) = delete;
3635+private:
3636+ struct OutputDimensions
3637+ {
3638+ unsigned int const width;
3639+ unsigned int const height;
3640+ } const dimensions;
3641+
3642+ me::Context context;
3643+ me::NormalWindow window;
3644+ RenderProgram program;
3645+
3646+ OutputDimensions active_output_dimensions(MirConnection* connection)
3647+ {
3648+ unsigned int width{0};
3649+ unsigned int height{0};
3650+ auto display_config = mir_connection_create_display_configuration(connection);
3651+ auto num_outputs = mir_display_config_get_num_outputs(display_config);
3652+ for (auto i = 0; i < num_outputs; i++)
3653+ {
3654+ auto output = mir_display_config_get_output(display_config, i);
3655+ auto state = mir_output_get_connection_state(output);
3656+ if (state == mir_output_connection_state_connected && mir_output_is_enabled(output))
3657+ {
3658+ auto mode = mir_output_get_current_mode(output);
3659+ width = mir_output_mode_get_width(mode);
3660+ height = mir_output_mode_get_height(mode);
3661+ break;
3662+ }
3663+ }
3664+ mir_display_config_release(display_config);
3665+ if (width == 0 || height == 0)
3666+ throw std::logic_error("could not determine display size");
3667+ return {width, height};
3668+ }
3669+
3670+ static void on_event(MirWindow*, const MirEvent *event, void *context)
3671+ {
3672+ auto surface = reinterpret_cast<SquareRenderingSurface*>(context);
3673+ if (surface) surface->on_event(event);
3674+ }
3675+
3676+private:
3677+ void do_work()
3678+ {
3679+ std::unique_lock<decltype(mutex)> lock(mutex);
3680+
3681+ while (true)
3682+ {
3683+ cv.wait(lock);
3684+
3685+ if (!running) return;
3686+
3687+ Pos pos = this->pos;
3688+
3689+ context.make_current();
3690+ program.draw(
3691+ pos.x/static_cast<float>(dimensions.width)*2.0 - 1.0,
3692+ pos.y/static_cast<float>(dimensions.height)*-2.0 + 1.0);
3693+ context.swapbuffers();
3694+ }
3695+ }
3696+
3697+ struct Pos { float x; float y; };
3698+ std::atomic<Pos> pos;
3699+
3700+ std::thread worker;
3701+ std::condition_variable cv;
3702+ std::mutex mutex;
3703+ bool running{true};
3704+};
3705 }
3706
3707 int main(int argc, char *argv[])
3708
3709=== modified file 'examples/eglstateswitcher.c'
3710--- examples/eglstateswitcher.c 2017-05-08 03:04:26 +0000
3711+++ examples/eglstateswitcher.c 2017-10-11 15:01:23 +0000
3712@@ -4,7 +4,7 @@
3713 * Copyright © 2014 Canonical Ltd.
3714 *
3715 * This program is free software: you can redistribute it and/or modify
3716- * it under the terms of the GNU General Public License version 3 as
3717+ * it under the terms of the GNU General Public License version 2 or 3 as
3718 * published by the Free Software Foundation.
3719 *
3720 * This program is distributed in the hope that it will be useful,
3721
3722=== modified file 'examples/egltriangle.c'
3723--- examples/egltriangle.c 2017-05-08 03:04:26 +0000
3724+++ examples/egltriangle.c 2017-10-11 15:01:23 +0000
3725@@ -2,7 +2,7 @@
3726 * Copyright © 2013 Canonical Ltd.
3727 *
3728 * This program is free software: you can redistribute it and/or modify
3729- * it under the terms of the GNU General Public License version 3 as
3730+ * it under the terms of the GNU General Public License version 2 or 3 as
3731 * published by the Free Software Foundation.
3732 *
3733 * This program is distributed in the hope that it will be useful,
3734
3735=== modified file 'examples/fingerpaint.c'
3736--- examples/fingerpaint.c 2017-05-19 13:49:04 +0000
3737+++ examples/fingerpaint.c 2017-10-11 15:01:23 +0000
3738@@ -2,7 +2,7 @@
3739 * Copyright © 2013 Canonical Ltd.
3740 *
3741 * This program is free software: you can redistribute it and/or modify
3742- * it under the terms of the GNU General Public License version 3 as
3743+ * it under the terms of the GNU General Public License version 2 or 3 as
3744 * published by the Free Software Foundation.
3745 *
3746 * This program is distributed in the hope that it will be useful,
3747
3748=== modified file 'examples/flicker.c'
3749--- examples/flicker.c 2017-06-06 09:02:33 +0000
3750+++ examples/flicker.c 2017-10-11 15:01:23 +0000
3751@@ -2,7 +2,7 @@
3752 * Copyright © 2012 Canonical Ltd.
3753 *
3754 * This program is free software: you can redistribute it and/or modify
3755- * it under the terms of the GNU General Public License version 3 as
3756+ * it under the terms of the GNU General Public License version 2 or 3 as
3757 * published by the Free Software Foundation.
3758 *
3759 * This program is distributed in the hope that it will be useful,
3760
3761=== modified file 'examples/glog_logger.cpp'
3762--- examples/glog_logger.cpp 2015-02-22 07:46:25 +0000
3763+++ examples/glog_logger.cpp 2017-10-11 15:01:23 +0000
3764@@ -2,7 +2,7 @@
3765 * Copyright © 2013 Canonical Ltd.
3766 *
3767 * This program is free software: you can redistribute it and/or modify
3768- * it under the terms of the GNU General Public License version 3 as
3769+ * it under the terms of the GNU General Public License version 2 or 3 as
3770 * published by the Free Software Foundation.
3771 *
3772 * This program is distributed in the hope that it will be useful,
3773
3774=== modified file 'examples/glog_logger.h'
3775--- examples/glog_logger.h 2015-02-22 07:46:25 +0000
3776+++ examples/glog_logger.h 2017-10-11 15:01:23 +0000
3777@@ -2,7 +2,7 @@
3778 * Copyright © 2013 Canonical Ltd.
3779 *
3780 * This program is free software: you can redistribute it and/or modify
3781- * it under the terms of the GNU General Public License version 3 as
3782+ * it under the terms of the GNU General Public License version 2 or 3 as
3783 * published by the Free Software Foundation.
3784 *
3785 * This program is distributed in the hope that it will be useful,
3786
3787=== modified file 'examples/graphics.h'
3788--- examples/graphics.h 2013-04-24 05:22:20 +0000
3789+++ examples/graphics.h 2017-10-11 15:01:23 +0000
3790@@ -2,7 +2,7 @@
3791 * Copyright © 2012 Canonical Ltd.
3792 *
3793 * This program is free software: you can redistribute it and/or modify it
3794- * under the terms of the GNU General Public License version 3,
3795+ * under the terms of the GNU General Public License version 2 or 3,
3796 * as published by the Free Software Foundation.
3797 *
3798 * This program is distributed in the hope that it will be useful,
3799
3800=== modified file 'examples/graphics_utils.cpp'
3801--- examples/graphics_utils.cpp 2017-05-08 03:04:26 +0000
3802+++ examples/graphics_utils.cpp 2017-10-11 15:01:23 +0000
3803@@ -2,7 +2,7 @@
3804 * Copyright © 2012 Canonical Ltd.
3805 *
3806 * This program is free software: you can redistribute it and/or modify it
3807- * under the terms of the GNU General Public License version 3,
3808+ * under the terms of the GNU General Public License version 2 or 3,
3809 * as published by the Free Software Foundation.
3810 *
3811 * This program is distributed in the hope that it will be useful,
3812
3813=== modified file 'examples/image_renderer.cpp'
3814--- examples/image_renderer.cpp 2017-05-08 03:04:26 +0000
3815+++ examples/image_renderer.cpp 2017-10-11 15:01:23 +0000
3816@@ -2,7 +2,7 @@
3817 * Copyright © 2012 Canonical Ltd.
3818 *
3819 * This program is free software: you can redistribute it and/or modify
3820- * it under the terms of the GNU General Public License version 3 as
3821+ * it under the terms of the GNU General Public License version 2 or 3 as
3822 * published by the Free Software Foundation.
3823 *
3824 * This program is distributed in the hope that it will be useful,
3825
3826=== modified file 'examples/image_renderer.h'
3827--- examples/image_renderer.h 2015-02-22 07:46:25 +0000
3828+++ examples/image_renderer.h 2017-10-11 15:01:23 +0000
3829@@ -2,7 +2,7 @@
3830 * Copyright © 2012 Canonical Ltd.
3831 *
3832 * This program is free software: you can redistribute it and/or modify
3833- * it under the terms of the GNU General Public License version 3 as
3834+ * it under the terms of the GNU General Public License version 2 or 3 as
3835 * published by the Free Software Foundation.
3836 *
3837 * This program is distributed in the hope that it will be useful,
3838
3839=== modified file 'examples/input_shapes.cpp'
3840--- examples/input_shapes.cpp 2017-05-23 10:51:47 +0000
3841+++ examples/input_shapes.cpp 2017-10-11 15:01:23 +0000
3842@@ -2,7 +2,7 @@
3843 * Copyright © 2015 Canonical Ltd.
3844 *
3845 * This program is free software: you can redistribute it and/or modify
3846- * it under the terms of the GNU General Public License version 3 as
3847+ * it under the terms of the GNU General Public License version 2 or 3 as
3848 * published by the Free Software Foundation.
3849 *
3850 * This program is distributed in the hope that it will be useful,
3851
3852=== modified file 'examples/mir_demo_server_loader.cpp'
3853--- examples/mir_demo_server_loader.cpp 2017-05-08 03:04:26 +0000
3854+++ examples/mir_demo_server_loader.cpp 2017-10-11 15:01:23 +0000
3855@@ -2,7 +2,7 @@
3856 * Copyright © 2015 Canonical Ltd.
3857 *
3858 * This program is free software: you can redistribute it and/or modify
3859- * it under the terms of the GNU General Public License version 3 as
3860+ * it under the terms of the GNU General Public License version 2 or 3 as
3861 * published by the Free Software Foundation.
3862 *
3863 * This program is distributed in the hope that it will be useful,
3864
3865=== modified file 'examples/mir_image.h'
3866--- examples/mir_image.h 2013-04-24 05:22:20 +0000
3867+++ examples/mir_image.h 2017-10-11 15:01:23 +0000
3868@@ -2,7 +2,7 @@
3869 * Copyright © 2012 Canonical Ltd.
3870 *
3871 * This program is free software: you can redistribute it and/or modify it
3872- * under the terms of the GNU General Public License version 3,
3873+ * under the terms of the GNU General Public License version 2 or 3,
3874 * as published by the Free Software Foundation.
3875 *
3876 * This program is distributed in the hope that it will be useful,
3877
3878=== added directory 'examples/miral-kiosk'
3879=== added file 'examples/miral-kiosk/CMakeLists.txt'
3880--- examples/miral-kiosk/CMakeLists.txt 1970-01-01 00:00:00 +0000
3881+++ examples/miral-kiosk/CMakeLists.txt 2017-10-11 15:01:23 +0000
3882@@ -0,0 +1,12 @@
3883+include_directories(
3884+ ${PROJECT_SOURCE_DIR}/include/miral
3885+ ${PROJECT_SOURCE_DIR}/include/client
3886+)
3887+
3888+mir_add_wrapped_executable(miral-kiosk
3889+ kiosk_main.cpp
3890+ kiosk_window_manager.cpp kiosk_window_manager.h
3891+ sw_splash.cpp sw_splash.h
3892+)
3893+
3894+target_link_libraries(miral-kiosk miral)
3895
3896=== added file 'examples/miral-kiosk/kiosk_main.cpp'
3897--- examples/miral-kiosk/kiosk_main.cpp 1970-01-01 00:00:00 +0000
3898+++ examples/miral-kiosk/kiosk_main.cpp 2017-10-11 15:01:23 +0000
3899@@ -0,0 +1,94 @@
3900+/*
3901+ * Copyright © 2016 Canonical Ltd.
3902+ *
3903+ * This program is free software: you can redistribute it and/or modify
3904+ * under the terms of the GNU General Public License version 2 or 3 as as
3905+ * published by the Free Software Foundation.
3906+ *
3907+ * This program is distributed in the hope that it will be useful,
3908+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
3909+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
3910+ * GNU General Public License for more details.
3911+ *
3912+ * You should have received a copy of the GNU General Public License
3913+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
3914+ *
3915+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
3916+ */
3917+
3918+#include "kiosk_window_manager.h"
3919+
3920+#include <miral/runner.h>
3921+#include <miral/application_authorizer.h>
3922+#include <miral/command_line_option.h>
3923+#include <miral/keymap.h>
3924+#include <miral/set_window_management_policy.h>
3925+#include <miral/internal_client.h>
3926+
3927+#include <unistd.h>
3928+#include <atomic>
3929+
3930+namespace
3931+{
3932+struct KioskAuthorizer : miral::ApplicationAuthorizer
3933+{
3934+ KioskAuthorizer(SwSplash const& splash) : splash{splash}{}
3935+
3936+ virtual bool connection_is_allowed(miral::ApplicationCredentials const& creds) override
3937+ {
3938+ // Allow internal applications and (optionally) only ones that start "immediately"
3939+ // (For the sake of an example "immediately" means while the spash is running)
3940+ return getpid() == creds.pid() || !startup_only || splash.session().lock();
3941+ }
3942+
3943+ virtual bool configure_display_is_allowed(miral::ApplicationCredentials const& /*creds*/) override
3944+ {
3945+ return false;
3946+ }
3947+
3948+ virtual bool set_base_display_configuration_is_allowed(miral::ApplicationCredentials const& /*creds*/) override
3949+ {
3950+ return false;
3951+ }
3952+
3953+ virtual bool screencast_is_allowed(miral::ApplicationCredentials const& /*creds*/) override
3954+ {
3955+ return true;
3956+ }
3957+
3958+ virtual bool prompt_session_is_allowed(miral::ApplicationCredentials const& /*creds*/) override
3959+ {
3960+ return false;
3961+ }
3962+
3963+ static std::atomic<bool> startup_only;
3964+
3965+ SwSplash splash;
3966+};
3967+
3968+std::atomic<bool> KioskAuthorizer::startup_only{false};
3969+}
3970+
3971+int main(int argc, char const* argv[])
3972+{
3973+ using namespace miral;
3974+
3975+ SwSplash splash;
3976+
3977+ CommandLineOption startup_only{
3978+ [&](bool startup_only) {KioskAuthorizer::startup_only = startup_only; },
3979+ "kiosk-startup-apps-only",
3980+ "Only allow applications to connect during startup",
3981+ KioskAuthorizer::startup_only};
3982+
3983+ return MirRunner{argc, argv}.run_with(
3984+ {
3985+ CommandLineOption{[&](std::string const& ) { },
3986+ "desktop_file_hint", "Ignored for Unity8 compatability", "miral-shell.desktop"},
3987+ set_window_management_policy<KioskWindowManagerPolicy>(splash),
3988+ SetApplicationAuthorizer<KioskAuthorizer>{splash},
3989+ Keymap{},
3990+ startup_only,
3991+ StartupInternalClient{"Intro", splash}
3992+ });
3993+}
3994
3995=== added file 'examples/miral-kiosk/kiosk_window_manager.cpp'
3996--- examples/miral-kiosk/kiosk_window_manager.cpp 1970-01-01 00:00:00 +0000
3997+++ examples/miral-kiosk/kiosk_window_manager.cpp 2017-10-11 15:01:23 +0000
3998@@ -0,0 +1,164 @@
3999+/*
4000+ * Copyright © 2016-2017 Canonical Ltd.
4001+ *
4002+ * This program is free software: you can redistribute it and/or modify it
4003+ * under the terms of the GNU General Public License version 2 or 3 as
4004+ * published by the Free Software Foundation.
4005+ *
4006+ * This program is distributed in the hope that it will be useful,
4007+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4008+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4009+ * GNU General Public License for more details.
4010+ *
4011+ * You should have received a copy of the GNU General Public License
4012+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4013+ *
4014+ * Authored By: Alan Griffiths <alan@octopull.co.uk>
4015+ */
4016+
4017+#include "kiosk_window_manager.h"
4018+
4019+#include <miral/application_info.h>
4020+#include <miral/window_info.h>
4021+#include <miral/window_manager_tools.h>
4022+
4023+#include <linux/input.h>
4024+
4025+namespace ms = mir::scene;
4026+using namespace miral;
4027+
4028+KioskWindowManagerPolicy::KioskWindowManagerPolicy(WindowManagerTools const& tools, SwSplash const& splash) :
4029+ CanonicalWindowManagerPolicy{tools},
4030+ splash{splash}
4031+{
4032+}
4033+
4034+bool KioskWindowManagerPolicy::handle_keyboard_event(MirKeyboardEvent const* event)
4035+{
4036+ auto const action = mir_keyboard_event_action(event);
4037+ auto const scan_code = mir_keyboard_event_scan_code(event);
4038+ auto const modifiers = mir_keyboard_event_modifiers(event) & modifier_mask;
4039+
4040+ if (action == mir_keyboard_action_down &&
4041+ modifiers == mir_input_event_modifier_alt &&
4042+ scan_code == KEY_TAB)
4043+ {
4044+ tools.focus_next_application();
4045+
4046+ return true;
4047+ }
4048+ else if (action == mir_keyboard_action_down &&
4049+ modifiers == mir_input_event_modifier_alt &&
4050+ scan_code == KEY_GRAVE)
4051+ {
4052+ tools.focus_next_within_application();
4053+
4054+ return true;
4055+ }
4056+ else if (action == mir_keyboard_action_down &&
4057+ modifiers == (mir_input_event_modifier_alt | mir_input_event_modifier_shift) &&
4058+ scan_code == KEY_GRAVE)
4059+ {
4060+ tools.focus_prev_within_application();
4061+
4062+ return true;
4063+ }
4064+ else if (action == mir_keyboard_action_down && scan_code == KEY_F4)
4065+ {
4066+ switch (modifiers & modifier_mask)
4067+ {
4068+ case mir_input_event_modifier_alt:
4069+ tools.ask_client_to_close(tools.active_window());;
4070+ return true;
4071+
4072+ default:
4073+ break;
4074+ }
4075+ }
4076+
4077+ return false;
4078+}
4079+
4080+bool KioskWindowManagerPolicy::handle_touch_event(MirTouchEvent const* event)
4081+{
4082+ auto const count = mir_touch_event_point_count(event);
4083+
4084+ long total_x = 0;
4085+ long total_y = 0;
4086+
4087+ for (auto i = 0U; i != count; ++i)
4088+ {
4089+ total_x += mir_touch_event_axis_value(event, i, mir_touch_axis_x);
4090+ total_y += mir_touch_event_axis_value(event, i, mir_touch_axis_y);
4091+ }
4092+
4093+ Point const cursor{total_x/count, total_y/count};
4094+
4095+ tools.select_active_window(tools.window_at(cursor));
4096+
4097+ return false;
4098+}
4099+
4100+bool KioskWindowManagerPolicy::handle_pointer_event(MirPointerEvent const* event)
4101+{
4102+ auto const action = mir_pointer_event_action(event);
4103+
4104+ Point const cursor{
4105+ mir_pointer_event_axis_value(event, mir_pointer_axis_x),
4106+ mir_pointer_event_axis_value(event, mir_pointer_axis_y)};
4107+
4108+ if (action == mir_pointer_action_button_down)
4109+ {
4110+ tools.select_active_window(tools.window_at(cursor));
4111+ }
4112+
4113+ return false;
4114+}
4115+
4116+void KioskWindowManagerPolicy::advise_focus_gained(WindowInfo const& info)
4117+{
4118+ CanonicalWindowManagerPolicy::advise_focus_gained(info);
4119+
4120+ if (auto session = splash.session().lock())
4121+ {
4122+ auto const& app_info = tools.info_for(session);
4123+
4124+ for (auto const& s : app_info.windows())
4125+ tools.raise_tree(s);
4126+ }
4127+}
4128+
4129+auto KioskWindowManagerPolicy::place_new_window(ApplicationInfo const& app_info, WindowSpecification const& request)
4130+-> WindowSpecification
4131+{
4132+ WindowSpecification specification = CanonicalWindowManagerPolicy::place_new_window(app_info, request);
4133+
4134+ if ((specification.type() == mir_window_type_normal || specification.type() == mir_window_type_freestyle) &&
4135+ (!specification.parent().is_set() || !specification.parent().value().lock()))
4136+ {
4137+ specification.state() = mir_window_state_maximized;
4138+ tools.place_and_size_for_state(specification, WindowInfo{});
4139+
4140+ if (!request.state().is_set() || request.state().value() != mir_window_state_restored)
4141+ specification.state() = request.state();
4142+ }
4143+
4144+ return specification;
4145+}
4146+
4147+void KioskWindowManagerPolicy::handle_modify_window(WindowInfo& window_info, WindowSpecification const& modifications)
4148+{
4149+ WindowSpecification specification = modifications;
4150+
4151+ if ((window_info.type() == mir_window_type_normal || window_info.type() == mir_window_type_freestyle) &&
4152+ !window_info.parent())
4153+ {
4154+ specification.state() = mir_window_state_maximized;
4155+ tools.place_and_size_for_state(specification, window_info);
4156+
4157+ if (!modifications.state().is_set() || modifications.state().value() != mir_window_state_restored)
4158+ specification.state() = modifications.state();
4159+ }
4160+
4161+ CanonicalWindowManagerPolicy::handle_modify_window(window_info, specification);
4162+}
4163
4164=== added file 'examples/miral-kiosk/kiosk_window_manager.h'
4165--- examples/miral-kiosk/kiosk_window_manager.h 1970-01-01 00:00:00 +0000
4166+++ examples/miral-kiosk/kiosk_window_manager.h 2017-10-11 15:01:23 +0000
4167@@ -0,0 +1,54 @@
4168+/*
4169+ * Copyright © 2016-2017 Canonical Ltd.
4170+ *
4171+ * This program is free software: you can redistribute it and/or modify it
4172+ * under the terms of the GNU General Public License version 2 or 3 as
4173+ * published by the Free Software Foundation.
4174+ *
4175+ * This program is distributed in the hope that it will be useful,
4176+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4177+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4178+ * GNU General Public License for more details.
4179+ *
4180+ * You should have received a copy of the GNU General Public License
4181+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4182+ *
4183+ * Authored By: Alan Griffiths <alan@octopull.co.uk>
4184+ */
4185+
4186+#ifndef MIRAL_KIOSK_WINDOW_MANAGER_H
4187+#define MIRAL_KIOSK_WINDOW_MANAGER_H
4188+
4189+#include "sw_splash.h"
4190+
4191+#include <miral/canonical_window_manager.h>
4192+
4193+using namespace mir::geometry;
4194+
4195+class KioskWindowManagerPolicy : public miral::CanonicalWindowManagerPolicy
4196+{
4197+public:
4198+ KioskWindowManagerPolicy(miral::WindowManagerTools const& tools, SwSplash const&);
4199+
4200+ auto place_new_window(miral::ApplicationInfo const& app_info, miral::WindowSpecification const& request)
4201+ -> miral::WindowSpecification override;
4202+
4203+ void advise_focus_gained(miral::WindowInfo const& info) override;
4204+
4205+ bool handle_keyboard_event(MirKeyboardEvent const* event) override;
4206+ bool handle_touch_event(MirTouchEvent const* event) override;
4207+ bool handle_pointer_event(MirPointerEvent const* event) override;
4208+ void handle_modify_window(miral::WindowInfo& window_info, miral::WindowSpecification const& modifications) override;
4209+
4210+private:
4211+ static const int modifier_mask =
4212+ mir_input_event_modifier_alt |
4213+ mir_input_event_modifier_shift |
4214+ mir_input_event_modifier_sym |
4215+ mir_input_event_modifier_ctrl |
4216+ mir_input_event_modifier_meta;
4217+
4218+ SwSplash const splash;
4219+};
4220+
4221+#endif /* MIRAL_KIOSK_WINDOW_MANAGER_H */
4222
4223=== added file 'examples/miral-kiosk/sw_splash.cpp'
4224--- examples/miral-kiosk/sw_splash.cpp 1970-01-01 00:00:00 +0000
4225+++ examples/miral-kiosk/sw_splash.cpp 2017-10-11 15:01:23 +0000
4226@@ -0,0 +1,173 @@
4227+/*
4228+ * Copyright © 2016 Canonical Ltd.
4229+ *
4230+ * This program is free software: you can redistribute it and/or modify it
4231+ * under the terms of the GNU General Public License version 2 or 3 as
4232+ * published by the Free Software Foundation.
4233+ *
4234+ * This program is distributed in the hope that it will be useful,
4235+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4236+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4237+ * GNU General Public License for more details.
4238+ *
4239+ * You should have received a copy of the GNU General Public License
4240+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4241+ *
4242+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
4243+ */
4244+
4245+#include "sw_splash.h"
4246+
4247+#include <mir/client/display_config.h>
4248+#include <mir/client/surface.h>
4249+#include <mir/client/window.h>
4250+#include <mir/client/window_spec.h>
4251+
4252+#include <mir_toolkit/mir_buffer_stream.h>
4253+
4254+#include <chrono>
4255+#include <cstring>
4256+#include <thread>
4257+#include <mutex>
4258+
4259+namespace
4260+{
4261+MirPixelFormat find_8888_format(MirConnection* connection)
4262+{
4263+ unsigned int const num_formats = 32;
4264+ MirPixelFormat pixel_formats[num_formats];
4265+ unsigned int valid_formats;
4266+ mir_connection_get_available_surface_formats(connection, pixel_formats, num_formats, &valid_formats);
4267+
4268+ for (unsigned int i = 0; i < num_formats; ++i)
4269+ {
4270+ MirPixelFormat cur_pf = pixel_formats[i];
4271+ if (cur_pf == mir_pixel_format_abgr_8888 ||
4272+ cur_pf == mir_pixel_format_argb_8888)
4273+ {
4274+ return cur_pf;
4275+ }
4276+ }
4277+
4278+ for (unsigned int i = 0; i < num_formats; ++i)
4279+ {
4280+ MirPixelFormat cur_pf = pixel_formats[i];
4281+ if (cur_pf == mir_pixel_format_xbgr_8888 ||
4282+ cur_pf == mir_pixel_format_xrgb_8888)
4283+ {
4284+ return cur_pf;
4285+ }
4286+ }
4287+
4288+ return *pixel_formats;
4289+}
4290+
4291+auto create_window(MirConnection* connection, mir::client::Surface const& surface) -> mir::client::Window
4292+{
4293+ int id = 0;
4294+ int width = 0;
4295+ int height = 0;
4296+
4297+ mir::client::DisplayConfig{connection}.for_each_output([&](MirOutput const* output)
4298+ {
4299+ if (mir_output_get_connection_state(output) == mir_output_connection_state_connected &&
4300+ mir_output_is_enabled(output))
4301+ {
4302+ id = mir_output_get_id(output);
4303+
4304+ MirOutputMode const* mode = mir_output_get_current_mode(output);
4305+ width = mir_output_mode_get_width(mode);
4306+ height = mir_output_mode_get_height(mode);
4307+ }
4308+ });
4309+
4310+ return mir::client::WindowSpec::for_normal_window(connection, width, height)
4311+ .set_name("splash")
4312+ .set_fullscreen_on_output(id)
4313+ .add_surface(surface, width, height, 0, 0)
4314+ .create_window();
4315+}
4316+
4317+void render_pattern(MirGraphicsRegion *region, uint8_t pattern[])
4318+{
4319+ char *row = region->vaddr;
4320+
4321+ for (int j = 0; j < region->height; j++)
4322+ {
4323+ uint32_t *pixel = (uint32_t*)row;
4324+
4325+ for (int i = 0; i < region->width; i++)
4326+ memcpy(pixel+i, pattern, sizeof pixel[i]);
4327+
4328+ row += region->stride;
4329+ }
4330+}
4331+}
4332+
4333+struct SwSplash::Self
4334+{
4335+ std::mutex mutex;
4336+ std::weak_ptr<mir::scene::Session> session;
4337+};
4338+
4339+SwSplash::SwSplash() : self{std::make_shared<Self>()} {}
4340+
4341+SwSplash::~SwSplash() = default;
4342+
4343+void SwSplash::operator()(std::weak_ptr<mir::scene::Session> const& session)
4344+{
4345+ std::lock_guard<decltype(self->mutex)> lock{self->mutex};
4346+ self->session = session;
4347+}
4348+
4349+auto SwSplash::session() const -> std::weak_ptr<mir::scene::Session>
4350+{
4351+ std::lock_guard<decltype(self->mutex)> lock{self->mutex};
4352+ return self->session;
4353+}
4354+
4355+void SwSplash::operator()(MirConnection* connection)
4356+{
4357+ MirPixelFormat pixel_format = find_8888_format(connection);
4358+
4359+ uint8_t pattern[4] = { 0x14, 0x48, 0xDD, 0xFF };
4360+
4361+ switch(pixel_format)
4362+ {
4363+ case mir_pixel_format_abgr_8888:
4364+ case mir_pixel_format_xbgr_8888:
4365+ std::swap(pattern[2],pattern[0]);
4366+ break;
4367+
4368+ case mir_pixel_format_argb_8888:
4369+ case mir_pixel_format_xrgb_8888:
4370+ break;
4371+
4372+ default:
4373+ return;
4374+ };
4375+
4376+
4377+ mir::client::Surface surface{mir_connection_create_render_surface_sync(connection, 42, 42)};
4378+ MirBufferStream* buffer_stream = mir_render_surface_get_buffer_stream(surface, 42, 42, pixel_format);
4379+
4380+ auto const window = create_window(connection, surface);
4381+
4382+ MirGraphicsRegion graphics_region;
4383+
4384+ auto const time_limit = std::chrono::steady_clock::now() + std::chrono::seconds(2);
4385+
4386+ do
4387+ {
4388+ mir_buffer_stream_get_graphics_region(buffer_stream, &graphics_region);
4389+
4390+ render_pattern(&graphics_region, pattern);
4391+ mir_buffer_stream_swap_buffers_sync(buffer_stream);
4392+
4393+ for (auto& x : pattern)
4394+ x = 3*x/4;
4395+
4396+ std::this_thread::sleep_for(std::chrono::milliseconds(200));
4397+ }
4398+ while (std::chrono::steady_clock::now() < time_limit);
4399+}
4400
4401=== added file 'examples/miral-kiosk/sw_splash.h'
4402--- examples/miral-kiosk/sw_splash.h 1970-01-01 00:00:00 +0000
4403+++ examples/miral-kiosk/sw_splash.h 2017-10-11 15:01:23 +0000
4404@@ -0,0 +1,44 @@
4405+/*
4406+ * Copyright © 2016 Canonical Ltd.
4407+ *
4408+ * This program is free software: you can redistribute it and/or modify it
4409+ * under the terms of the GNU General Public License version 2 or 3 as
4410+ * published by the Free Software Foundation.
4411+ *
4412+ * This program is distributed in the hope that it will be useful,
4413+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4414+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4415+ * GNU General Public License for more details.
4416+ *
4417+ * You should have received a copy of the GNU General Public License
4418+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4419+ *
4420+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
4421+ */
4422+
4423+#ifndef MIRAL_SHELL_SW_SPLASH_H
4424+#define MIRAL_SHELL_SW_SPLASH_H
4425+
4426+#include <mir_toolkit/client_types.h>
4427+
4428+#include <memory>
4429+
4430+namespace mir { class Server; namespace scene { class Session; }}
4431+
4432+// A very simple s/w rendered splash animation
4433+class SwSplash
4434+{
4435+public:
4436+ SwSplash();
4437+ ~SwSplash();
4438+
4439+ void operator()(MirConnection* connection);
4440+ void operator()(std::weak_ptr<mir::scene::Session> const& session);
4441+ auto session() const -> std::weak_ptr<mir::scene::Session>;
4442+
4443+private:
4444+ struct Self;
4445+ std::shared_ptr<Self> const self;
4446+};
4447+
4448+#endif //MIRAL_SHELL_SW_SPLASH_H
4449
4450=== added directory 'examples/miral-shell'
4451=== added file 'examples/miral-shell/CMakeLists.txt'
4452--- examples/miral-shell/CMakeLists.txt 1970-01-01 00:00:00 +0000
4453+++ examples/miral-shell/CMakeLists.txt 2017-10-11 15:01:23 +0000
4454@@ -0,0 +1,69 @@
4455+include_directories(
4456+ ${PROJECT_SOURCE_DIR}/include/miral
4457+ ${PROJECT_SOURCE_DIR}/include/client
4458+)
4459+
4460+add_subdirectory(spinner)
4461+add_subdirectory(desktop)
4462+
4463+add_custom_target(miral-run ALL
4464+ cp ${CMAKE_CURRENT_SOURCE_DIR}/miral-run.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-run
4465+)
4466+
4467+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-run
4468+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
4469+)
4470+
4471+add_custom_target(miral-xrun ALL
4472+ cp ${CMAKE_CURRENT_SOURCE_DIR}/miral-xrun.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-xrun
4473+)
4474+
4475+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-xrun
4476+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
4477+)
4478+
4479+add_custom_target(miral-screencast ALL
4480+ cp ${CMAKE_CURRENT_SOURCE_DIR}/miral-screencast.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-screencast
4481+)
4482+
4483+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-screencast
4484+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
4485+)
4486+
4487+add_custom_target(miral-desktop ALL
4488+ cp ${CMAKE_CURRENT_SOURCE_DIR}/miral-desktop.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-desktop
4489+)
4490+
4491+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-desktop
4492+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
4493+)
4494+
4495+add_custom_target(miral-app ALL
4496+ cp ${CMAKE_CURRENT_SOURCE_DIR}/miral-app.sh ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-app
4497+)
4498+
4499+install(PROGRAMS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/miral-app
4500+ DESTINATION ${CMAKE_INSTALL_PREFIX}/bin
4501+)
4502+
4503+add_library(miral-shell-lib STATIC
4504+ tiling_window_manager.cpp tiling_window_manager.h
4505+ floating_window_manager.cpp floating_window_manager.h
4506+ decoration_provider.cpp decoration_provider.h
4507+ titlebar_config.cpp titlebar_config.h
4508+)
4509+
4510+pkg_check_modules(FREETYPE freetype2 REQUIRED)
4511+target_include_directories(miral-shell-lib PRIVATE ${FREETYPE_INCLUDE_DIRS})
4512+target_compile_definitions(miral-shell-lib PRIVATE -DTYPO_SUPPORTS_FREETYPE)
4513+target_link_libraries(miral-shell-lib miral-spinner miral ${FREETYPE_LIBRARIES})
4514+
4515+mir_add_wrapped_executable(miral-shell
4516+ shell_main.cpp
4517+)
4518+
4519+target_link_libraries(miral-shell
4520+ miral-shell-lib
4521+ miral
4522+)
4523+
4524
4525=== added file 'examples/miral-shell/decoration_provider.cpp'
4526--- examples/miral-shell/decoration_provider.cpp 1970-01-01 00:00:00 +0000
4527+++ examples/miral-shell/decoration_provider.cpp 2017-10-11 15:01:23 +0000
4528@@ -0,0 +1,666 @@
4529+/*
4530+ * Copyright © 2016-2017 Canonical Ltd.
4531+ *
4532+ * This program is free software: you can redistribute it and/or modify it
4533+ * under the terms of the GNU General Public License version 2 or 3 as
4534+ * published by the Free Software Foundation.
4535+ *
4536+ * This program is distributed in the hope that it will be useful,
4537+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
4538+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
4539+ * GNU General Public License for more details.
4540+ *
4541+ * You should have received a copy of the GNU General Public License
4542+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
4543+ *
4544+ * Authored by: Alan Griffiths <alan@octopull.co.uk>
4545+ */
4546+
4547+#include "decoration_provider.h"
4548+#include "titlebar_config.h"
4549+
4550+#include <mir/client/display_config.h>
4551+#include <mir/client/window_spec.h>
4552+
4553+#include <mir_toolkit/mir_buffer_stream.h>
4554+
4555+#include <ft2build.h>
4556+#include FT_FREETYPE_H
4557+
4558+#include <locale>
4559+#include <codecvt>
4560+#include <string>
4561+#include <cstring>
4562+#include <sstream>
4563+
4564+#include <iostream>
4565+
4566+namespace
4567+{
4568+int const title_bar_height = 12;
4569+char const* const wallpaper_name = "wallpaper";
4570+
4571+void null_window_callback(MirWindow*, void*) {}
4572+
4573+struct preferred_codecvt : std::codecvt_byname<wchar_t, char, std::mbstate_t>
4574+{
4575+ preferred_codecvt() : std::codecvt_byname<wchar_t, char, std::mbstate_t>("") {}
4576+ ~preferred_codecvt() = default;
4577+};
4578+
4579+struct Printer
4580+{
4581+ Printer();
4582+ ~Printer();
4583+ Printer(Printer const&) = delete;
4584+ Printer& operator=(Printer const&) = delete;
4585+
4586+ void print(MirGraphicsRegion const& region, std::string const& title, int const intensity);
4587+ void printhelp(MirGraphicsRegion const& region);
4588+
4589+private:
4590+ std::wstring_convert<preferred_codecvt> converter;
4591+
4592+ bool working = false;
4593+ FT_Library lib;
4594+ FT_Face face;
4595+};
4596+
4597+void paint_surface(MirBufferStream* buffer_stream, std::string const& title, int const intensity)
4598+{
4599+ // TODO sometimes buffer_stream is nullptr - find out why (and fix).
4600+ // (Only observed when creating a lot of clients at once)
4601+ if (!buffer_stream)
4602+ return;
4603+
4604+ MirGraphicsRegion region;
4605+ mir_buffer_stream_get_graphics_region(buffer_stream, &region);
4606+
4607+ char* row = region.vaddr;
4608+
4609+ for (int j = 0; j != region.height; ++j)
4610+ {
4611+ memset(row, intensity, 4*region.width);
4612+ row += region.stride;
4613+ }
4614+
4615+ static Printer printer;
4616+ printer.print(region, title, intensity);
4617+
4618+ mir_buffer_stream_swap_buffers_sync(buffer_stream);
4619+}
4620+
4621+Printer::Printer()
4622+{
4623+ if (FT_Init_FreeType(&lib))
4624+ return;
4625+
4626+ if (FT_New_Face(lib, titlebar::font_file().c_str(), 0, &face))
4627+ {
4628+ std::cerr << "WARNING: failed to load titlebar font: \"" << titlebar::font_file() << "\"\n";
4629+ FT_Done_FreeType(lib);
4630+ return;
4631+ }
4632+
4633+ FT_Set_Pixel_Sizes(face, 0, 10);
4634+ working = true;
4635+}
4636+
4637+Printer::~Printer()
4638+{
4639+ if (working)
4640+ {
4641+ FT_Done_Face(face);
4642+ FT_Done_FreeType(lib);
4643+ }
4644+}
4645+
4646+void Printer::print(MirGraphicsRegion const& region, std::string const& title_, int const intensity)
4647+try
4648+{
4649+ if (!working)
4650+ return;
4651+
4652+ auto title = converter.from_bytes(title_);
4653+
4654+ int base_x = 2;
4655+ int base_y = region.height-2;
4656+
4657+ for (auto const& ch : title)
4658+ {
4659+ FT_Load_Glyph(face, FT_Get_Char_Index(face, ch), FT_LOAD_DEFAULT);
4660+ auto const glyph = face->glyph;
4661+ FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
4662+
4663+ auto const& bitmap = glyph->bitmap;
4664+ auto const x = base_x + glyph->bitmap_left;
4665+
4666+ if (static_cast<int>(x + bitmap.width) <= region.width)
4667+ {
4668+ unsigned char* src = bitmap.buffer;
4669+
4670+ auto const y = base_y - glyph->bitmap_top;
4671+ char* dest = region.vaddr + y*region.stride + 4*x;
4672+
4673+ for (auto row = 0u; row != std::min(bitmap.rows, glyph->bitmap_top+2u); ++row)
4674+ {
4675+ for (auto col = 0u; col != bitmap.width; ++col)
4676+ memset(dest+ 4*col, (intensity*(0xff^src[col]))/0xff, 4);
4677+
4678+ src += bitmap.pitch;
4679+ dest += region.stride;
4680+ }
4681+ }
4682+
4683+ base_x += glyph->advance.x >> 6;
4684+ base_y += glyph->advance.y >> 6;
4685+ }
4686+}
4687+catch (...)
4688+{
4689+ std::cerr << "WARNING: failed render title: \"" << title_ << "\"\n";
4690+}
4691+
4692+void Printer::printhelp(MirGraphicsRegion const& region)
4693+{
4694+ if (!working)
4695+ return;
4696+
4697+ static char const* const helptext[] =
4698+ {
4699+ "Welcome to miral-shell",
4700+ "",
4701+ "Keyboard shortcuts:",
4702+ "",
4703+ " o Switch apps: Alt-Tab, tap or click on the corresponding window",
4704+ " o Next (previous) app window: Alt-` (Alt-Shift-`)",
4705+ "",
4706+ " o Move window: Alt-leftmousebutton drag (three finger drag)",
4707+ " o Resize window: Alt-middle_button drag (three finger pinch)",
4708+ "",
4709+ " o Maximize/restore current window (to display size). : Alt-F11",
4710+ " o Maximize/restore current window (to display height): Shift-F11",
4711+ " o Maximize/restore current window (to display width) : Ctrl-F11",
4712+ "",
4713+ " o Switch workspace: Meta-Alt-[F1|F2|F3|F4]",
4714+ " o Switch workspace taking active window: Meta-Ctrl-[F1|F2|F3|F4]",
4715+ "",
4716+ " o To exit: Ctrl-Alt-BkSp",
4717+ };
4718+
4719+ int help_width = 0;
4720+ unsigned int help_height = 0;
4721+ unsigned int line_height = 0;
4722+
4723+ for (auto const* rawline : helptext)
4724+ {
4725+ int line_width = 0;
4726+
4727+ auto const line = converter.from_bytes(rawline);
4728+
4729+ auto const fwidth = std::min(region.width / 60, 20);
4730+
4731+ FT_Set_Pixel_Sizes(face, fwidth, 0);
4732+
4733+ for (auto const& ch : line)
4734+ {
4735+ FT_Load_Glyph(face, FT_Get_Char_Index(face, ch), FT_LOAD_DEFAULT);
4736+ auto const glyph = face->glyph;
4737+ FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
4738+
4739+ line_width += glyph->advance.x >> 6;
4740+ line_height = std::max(line_height, glyph->bitmap.rows + glyph->bitmap.rows/2);
4741+ }
4742+
4743+ if (help_width < line_width) help_width = line_width;
4744+ help_height += line_height;
4745+ }
4746+
4747+ int base_y = (region.height - help_height)/2;
4748+
4749+ for (auto const* rawline : helptext)
4750+ {
4751+ int base_x = (region.width - help_width)/2;
4752+
4753+ auto const line = converter.from_bytes(rawline);
4754+
4755+ for (auto const& ch : line)
4756+ {
4757+ FT_Load_Glyph(face, FT_Get_Char_Index(face, ch), FT_LOAD_DEFAULT);
4758+ auto const glyph = face->glyph;
4759+ FT_Render_Glyph(glyph, FT_RENDER_MODE_NORMAL);
4760+
4761+ auto const& bitmap = glyph->bitmap;
4762+ auto const x = base_x + glyph->bitmap_left;
4763+
4764+ if (static_cast<int>(x + bitmap.width) <= region.width)
4765+ {
4766+ unsigned char* src = bitmap.buffer;
4767+
4768+ auto const y = base_y - glyph->bitmap_top;
4769+ char* dest = region.vaddr + y * region.stride + 4 * x;
4770+
4771+ for (auto row = 0u; row != bitmap.rows; ++row)
4772+ {
4773+ for (auto col = 0u; col != 4 * bitmap.width; ++col)
4774+ dest[col] |= src[col / 4]/2;
4775+
4776+ src += bitmap.pitch;
4777+ dest += region.stride;
4778+
4779+ if (dest > region.vaddr + region.height * region.stride)
4780+ break;
4781+ }
4782+ }
4783+
4784+ base_x += glyph->advance.x >> 6;
4785+ }
4786+ base_y += line_height;
4787+ }
4788+}
4789+
4790+void render_background(MirBufferStream* buffer_stream, MirGraphicsRegion& graphics_region)
4791+{
4792+ static uint8_t const pattern[4] = {0x00, 0x00, 0x00, 0x00 };
4793+
4794+ char* row = (&graphics_region)->vaddr;
4795+
4796+ for (int j = 0; j < (&graphics_region)->height; j++)
4797+ {
4798+ uint32_t* pixel = (uint32_t*)row;
4799+
4800+ for (int i = 0; i < (&graphics_region)->width; i++)
4801+ memcpy(pixel + i, pattern, sizeof pixel[i]);
4802+
4803+ row += (&graphics_region)->stride;
4804+ }
4805+
4806+ static Printer printer;
4807+ printer.printhelp(*&graphics_region);
4808+
4809+ mir_buffer_stream_swap_buffers_sync(buffer_stream);
4810+}
4811+}
4812+
4813+using namespace mir::client;
4814+using namespace mir::geometry;
4815+
4816+DecorationProvider::DecorationProvider(miral::WindowManagerTools const& tools) : tools{tools}
4817+{
4818+
4819+}
4820+
4821+DecorationProvider::~DecorationProvider()
4822+{
4823+}
4824+
4825+void DecorationProvider::stop()
4826+{
4827+ enqueue_work([this]
4828+ {
4829+ std::lock_guard<decltype(mutex)> lock{mutex};
4830+ window_to_titlebar.clear();
4831+ });
4832+
4833+ enqueue_work([this]
4834+ {
4835+ if (connection)
4836+ {
4837+ wallpaper.erase(begin(wallpaper), end(wallpaper));
4838+ }
4839+ connection.reset();
4840+ });
4841+ stop_work();
4842+}
4843+
4844+void DecorationProvider::operator()(Connection connection)
4845+{
4846+ this->connection = connection;
4847+
4848+ DisplayConfig const display_conf{this->connection};
4849+
4850+ display_conf.for_each_output([this](MirOutput const* output)
4851+ {
4852+ if (!mir_output_is_enabled(output))
4853+ return;
4854+
4855+ auto const mode = mir_output_get_current_mode(output);
4856+ auto const output_id = mir_output_get_id(output);
4857+ auto const width = mir_output_mode_get_width(mode);
4858+ auto const height = mir_output_mode_get_height(mode);
4859+
4860+ Surface surface{mir_connection_create_render_surface_sync(DecorationProvider::connection, width, height)};
4861+
4862+ auto const buffer_stream =
4863+ mir_render_surface_get_buffer_stream(surface, width, height, mir_pixel_format_xrgb_8888);
4864+
4865+ auto window = WindowSpec::for_gloss(DecorationProvider::connection, width, height)
4866+ .set_fullscreen_on_output(output_id)
4867+ .set_event_handler(&handle_event_for_background, this)
4868+ .add_surface(surface, width, height, 0, 0)
4869+ .set_name(wallpaper_name).create_window();
4870+
4871+ wallpaper.push_back(Wallpaper{surface, window, buffer_stream});
4872+
4873+ MirGraphicsRegion graphics_region;
4874+ mir_buffer_stream_get_graphics_region(buffer_stream, &graphics_region);
4875+ render_background(buffer_stream, graphics_region);
4876+ });
4877+
4878+ start_work();
4879+}
4880+
4881+void DecorationProvider::operator()(std::weak_ptr<mir::scene::Session> const& session)
4882+{
4883+ std::lock_guard<decltype(mutex)> lock{mutex};
4884+ this->weak_session = session;
4885+}
4886+
4887+auto DecorationProvider::session() const -> std::shared_ptr<mir::scene::Session>
4888+{
4889+ std::lock_guard<decltype(mutex)> lock{mutex};
4890+ return weak_session.lock();
4891+}
4892+
4893+void DecorationProvider::handle_event(MirWindow* window, MirEvent const* ev, void* context_)
4894+{
4895+ auto* const context = (Data*)context_;
4896+
4897+ switch (mir_event_get_type(ev))
4898+ {
4899+ case mir_event_type_resize:
4900+ {
4901+ MirResizeEvent const* resize = mir_event_get_resize_event(ev);
4902+ int const new_width = mir_resize_event_get_width(resize);
4903+ int const new_height = mir_resize_event_get_height(resize);
4904+ mir_render_surface_set_size(context->surface, new_width, new_height);
4905+ WindowSpec::for_changes(context->connection)
4906+ .add_surface(context->surface, new_width, new_height, 0, 0)
4907+ .apply_to(window);
4908+ break;
4909+ }
4910+
4911+ default:
4912+ break;
4913+ }
4914+}
4915+
4916+void DecorationProvider::create_titlebar_for(miral::Window const& window)
4917+{
4918+ if (is_decoration(window)) return;
4919+
4920+ enqueue_work([this, window]
4921+ {
4922+ auto const width = window.size().width.as_int();
4923+ std::ostringstream buffer;
4924+ buffer << std::shared_ptr<mir::scene::Surface>(window).get();
4925+
4926+ Surface surface{mir_connection_create_render_surface_sync(this->connection, width, title_bar_height)};
4927+
4928+ std::lock_guard<decltype(mutex)> lock{mutex};
4929+
4930+ auto const data = &window_to_titlebar[window];
4931+ data->connection = connection;
4932+ data->surface = surface;
4933+ data->stream = mir_render_surface_get_buffer_stream(surface, width, title_bar_height, mir_pixel_format_xrgb_8888);
4934+ windows_awaiting_titlebar[buffer.str()] = window;
4935+
4936+ WindowSpec::for_gloss(connection, width, title_bar_height)
4937+ .add_surface(surface, width, title_bar_height, 0, 0)
4938+ .set_name(buffer.str().c_str())
4939+ .set_event_handler(&handle_event, data)
4940+ .create_window(insert, data);
4941+ });
4942+}
4943+
4944+void DecorationProvider::paint_titlebar_for(miral::WindowInfo const& info, int intensity)
4945+{
4946+ if (auto data = find_titlebar_data(info.window()))
4947+ {
4948+ data->intensity = intensity;
4949+
4950+ auto const title = info.name();
4951+
4952+ enqueue_work([stream=data->stream, title, intensity]{ paint_surface(stream, title, intensity); });
4953+ }
4954+}
4955+
4956+void DecorationProvider::destroy_titlebar_for(miral::Window const& window)
4957+{
4958+ if (auto data = find_titlebar_data(window))
4959+ {
4960+ if (auto surface = data->titlebar.exchange(nullptr))
4961+ {
4962+ enqueue_work([surface]
4963+ {
4964+ mir_window_release(surface, &null_window_callback, nullptr);
4965+ });
4966+ }
4967+
4968+ if (data->titlebar.load())
4969+ {
4970+ enqueue_work([this, window]
4971+ {
4972+ std::lock_guard<decltype(mutex)> lock{mutex};
4973+ window_to_titlebar.erase(window);
4974+ });
4975+ }
4976+ else
4977+ {
4978+ data->on_create = [this, window](MirWindow*)
4979+ {
4980+ enqueue_work([this, window]
4981+ {
4982+ std::lock_guard<decltype(mutex)> lock{mutex};
4983+ window_to_titlebar.erase(window);
4984+ });
4985+ };
4986+ }
4987+ }
4988+}
4989+
4990+void DecorationProvider::resize_titlebar_for(miral::WindowInfo const& window_info, Size const& size)
4991+{
4992+ auto const window = window_info.window();
4993+
4994+ if (window.size().width == size.width)
4995+ return;
4996+
4997+ if (auto titlebar_window = find_titlebar_window(window))
4998+ {
4999+ titlebar_window.resize({size.width, title_bar_height});
5000+
The diff has been truncated for viewing.

Subscribers

People subscribed via source and target branches

to all changes: