Mir

Merge lp:~alan-griffiths/mir/tiling-after-display-reconfig into lp:mir

Proposed by Alan Griffiths
Status: Merged
Merged at revision: 4273
Proposed branch: lp:~alan-griffiths/mir/tiling-after-display-reconfig
Merge into: lp:mir
Diff against target: 69 lines (+20/-15)
2 files modified
examples/miral-shell/tiling_window_manager.cpp (+18/-14)
src/miral/display_configuration_listeners.cpp (+2/-1)
To merge this branch: bzr merge lp:~alan-griffiths/mir/tiling-after-display-reconfig
Reviewer Review Type Date Requested Status
Mir CI Bot continuous-integration Approve
Mir development team Pending
Review via email: mp+331378@code.launchpad.net

Commit message

Fix the worst of the retiling bugs when the a display is unplugged

To post a comment you must log in.
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Mir CI Bot (mir-ci-bot) wrote :

PASSED: Continuous integration, rev:4270
https://mir-jenkins.ubuntu.com/job/mir-ci/3697/
Executed test runs:
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-mir/5069
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-0-fetch/5305
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=artful/5293
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/5293
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-1-sourcepkg/release=zesty/5293
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=artful/5113/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=clang,platform=mesa,release=zesty/5113/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=artful/5113/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=xenial/5113/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=amd64,compiler=gcc,platform=mesa,release=zesty/5113/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/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=artful/5113/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/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=cross-armhf,compiler=gcc,platform=mesa,release=zesty/5113/artifact/output/*zip*/output.zip
    SUCCESS: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5113
        deb: https://mir-jenkins.ubuntu.com/job/build-2-binpkg-mir/arch=i386,compiler=gcc,platform=mesa,release=xenial/5113/artifact/output/*zip*/output.zip

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

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'examples/miral-shell/tiling_window_manager.cpp'
--- examples/miral-shell/tiling_window_manager.cpp 2017-08-21 15:58:34 +0000
+++ examples/miral-shell/tiling_window_manager.cpp 2017-09-26 20:21:37 +0000
@@ -529,20 +529,26 @@
529529
530 if (!window_info.parent())530 if (!window_info.parent())
531 {531 {
532 auto const new_pos = window.top_left() + (new_tile.top_left - old_tile.top_left);532 auto offset_in_tile = window.top_left() - old_tile.top_left;
533 auto const offset = new_pos - new_tile.top_left;533 offset_in_tile.dx = std::min(offset_in_tile.dx, as_displacement(new_tile.size).dx);
534534 offset_in_tile.dy = std::min(offset_in_tile.dy, as_displacement(new_tile.size).dy);
535 // For now just scale if was filling width/height of tile535
536 auto const old_size = window.size();536 Rectangle new_placement{new_tile.top_left + offset_in_tile, window.size()};
537 auto const scaled_width = old_size.width == old_tile.size.width ? new_tile.size.width : old_size.width;537
538 auto const scaled_height = old_size.height == old_tile.size.height ? new_tile.size.height : old_size.height;538 if (window.size().width == old_tile.size.width)
539539 new_placement.size.width = new_tile.size.width;
540 auto width = std::min(new_tile.size.width.as_int() - offset.dx.as_int(), scaled_width.as_int());540
541 auto height = std::min(new_tile.size.height.as_int() - offset.dy.as_int(), scaled_height.as_int());541 if (window.size().height == old_tile.size.height)
542 new_placement.size.height = new_tile.size.height;
543
544 if (!new_placement.overlaps(new_tile))
545 new_placement.top_left = new_tile.top_left;
546
547 new_placement = new_placement.intersection_with(new_tile);
542548
543 WindowSpecification modifications;549 WindowSpecification modifications;
544 modifications.top_left() = new_pos;550 modifications.top_left() = new_placement.top_left;
545 modifications.size() = {width, height};551 modifications.size() = new_placement.size;
546 tools.modify_window(window_info, modifications);552 tools.modify_window(window_info, modifications);
547 }553 }
548 }554 }
@@ -652,12 +658,10 @@
652 dirty_displays = true;658 dirty_displays = true;
653}659}
654660
655#include <iostream>
656void TilingWindowManagerPolicy::advise_output_update(const Output& updated, const Output& original)661void TilingWindowManagerPolicy::advise_output_update(const Output& updated, const Output& original)
657{662{
658 if (!equivalent_display_area(updated, original))663 if (!equivalent_display_area(updated, original))
659 {664 {
660 std::cout << "Original: " << original.extents() << "new: " << updated.extents() << '\n';
661 live_displays.remove(original.extents());665 live_displays.remove(original.extents());
662 live_displays.add(updated.extents());666 live_displays.add(updated.extents());
663667
664668
=== modified file 'src/miral/display_configuration_listeners.cpp'
--- src/miral/display_configuration_listeners.cpp 2017-08-21 14:18:55 +0000
+++ src/miral/display_configuration_listeners.cpp 2017-09-26 20:21:37 +0000
@@ -83,7 +83,8 @@
83 {83 {
84 Output o{output};84 Output o{output};
8585
86 if (!o.connected() || !o.valid()) return;86 if (!o.valid() || !o.used() || !o.connected() || o.power_mode() != mir_power_mode_on)
87 return;
8788
88 auto op = find_if(89 auto op = find_if(
89 begin(active_outputs), end(active_outputs), [&](Output const& oo)90 begin(active_outputs), end(active_outputs), [&](Output const& oo)

Subscribers

People subscribed via source and target branches