Merge lp:~lukas-kde/unity8/windowOpenCloseAnimations into lp:unity8

Proposed by Lukáš Tinkl
Status: Superseded
Proposed branch: lp:~lukas-kde/unity8/windowOpenCloseAnimations
Merge into: lp:unity8
Prerequisite: lp:~unity-team/unity8/launcher-sizing
Diff against target: 550 lines (+171/-35)
15 files modified
CMakeLists.txt (+1/-1)
data/com.canonical.Unity8.gschema.xml (+1/-1)
plugins/Unity/Launcher/launchermodel.cpp (+1/-1)
qml/Launcher/Launcher.qml (+3/-2)
qml/Stages/DesktopStage.qml (+119/-15)
qml/Stages/PhoneStage.qml (+4/-0)
qml/Stages/TabletStage.qml (+4/-0)
qml/Stages/WindowResizeArea.qml (+8/-6)
tests/mocks/Unity/Application/ApplicationManager.cpp (+6/-0)
tests/mocks/Unity/Application/ApplicationManager.h (+1/-1)
tests/plugins/Unity/Launcher/launchermodeltest.cpp (+4/-0)
tests/qmltests/Launcher/tst_Launcher.qml (+13/-3)
tests/qmltests/Stages/ApplicationCheckBox.qml (+2/-2)
tests/qmltests/Stages/tst_DesktopStage.qml (+3/-3)
tests/qmltests/Stages/tst_WindowResizeArea.qml (+1/-0)
To merge this branch: bzr merge lp:~lukas-kde/unity8/windowOpenCloseAnimations
Reviewer Review Type Date Requested Status
Lukáš Tinkl (community) Needs Fixing
PS Jenkins bot (community) continuous-integration Needs Fixing
Unity8 CI Bot continuous-integration Needs Fixing
Nick Dedekind Pending
Daniel d'Andrada Pending
Michael Terry Pending
Review via email: mp+286414@code.launchpad.net

This proposal supersedes a proposal from 2016-02-02.

This proposal has been superseded by a proposal from 2016-03-06.

Commit message

Provide animations for windows opening/closing

Description of the change

Provide animations for windows opening/closing, as described by UX in the original bugreport.

* Are there any related MPs required for this MP to build/function as expected? Please list.

Yes, lp:~unity-team/unity8/launcher-sizing

* Did you perform an exploratory manual test run of your code change and any related functionality?

Yes

* Did you make sure that your branch does not contain spurious tags?

Yes

* If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?

Yes

* If you changed the UI, has there been a design review?

Yes

To post a comment you must log in.
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2112
http://jenkins.qa.ubuntu.com/job/unity8-ci/7041/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/5984
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/456/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1746
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/449
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1641
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1641
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/448
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/447
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4623
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/5995
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/5995/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26543
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/204/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/454
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/454/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26544

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7041/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

- The app closing animation seems to "stick" on the last frame. Or not smoothly go down to zero opacity. Or something. It didn't look right on my mako.

- closeApplication() takes two arguments, normally only using the first one. It uses the appId if the first argument is not given, which is an odd construction. Maybe just drop the second argument completely, as it's never used?

Otherwise already looks nice. :)

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

> - The app closing animation seems to "stick" on the last frame. Or not
> smoothly go down to zero opacity. Or something. It didn't look right on my
> mako.

Agree, using the standard UbuntuNumberAnimation feels much smoother, at least here

> - closeApplication() takes two arguments, normally only using the first one.
> It uses the appId if the first argument is not given, which is an odd
> construction. Maybe just drop the second argument completely, as it's never
> used?

Fixed

> Otherwise already looks nice. :)

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2114
http://jenkins.qa.ubuntu.com/job/unity8-ci/7048/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6000
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/463/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1753
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/456
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1648
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1648
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/455
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/454
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4635
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6011
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6011/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26591
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/211/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/461
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/461/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26592

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7048/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

> Agree, using the standard UbuntuNumberAnimation feels much smoother, at least here

I'm still seeing a bit of a pause at the end of the animation on my mako.

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

> > Agree, using the standard UbuntuNumberAnimation feels much smoother, at
> least here
>
> I'm still seeing a bit of a pause at the end of the animation on my mako.

I guess it's the reverse easing (UbuntuAnimation.StandardEasingReverse), if I try with StandardEasing, it goes away.

Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

Yeah agreed, StandardEasing looks good to me. Is StandardEasingReverse specifically requested by Design?

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

Yes, as per the attached bug report

Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

Hrm. OK, but I ran Vesa's test code. And it didn't seem to pause at the end of the animation for me.

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:2114
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/40/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/40/rebuild

review: Approve (continuous-integration)
Revision history for this message
Michael Zanetti (mzanetti) wrote : Posted in a previous version of this proposal

Confirming the close animation stuttering on flo. Could not see it on my laptop.

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2115
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

Please test again, not it feels much smoother on both phone and desktop.

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2115
http://jenkins.qa.ubuntu.com/job/unity8-ci/7081/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6045
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/496/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1786
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/489
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1681
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1681
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/488
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/487
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4670
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6056
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6056/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26711
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/238/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/494
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/494/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26709

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7081/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Zanetti (mzanetti) wrote : Posted in a previous version of this proposal

the new animation does behave better on my flo, but it's still not 100% perfect. Paying close attention one can still see the last frames sticking around longer than they should. I don't think it's a problem of this branch, rather some sync stuff happening in Unity.Application when cleaning the app out of the memory. The new animation makes it less obvious.

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:2115
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/rebuild

review: Approve (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2115
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/94/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

But Michael, wouldn't the Unity.Application work only start happening once opacity is already animated down to zero?

Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2117
http://jenkins.qa.ubuntu.com/job/unity8-ci/7084/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6048
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/499/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1789
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/492
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1684
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1684
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/491
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/490
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4672
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6059
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6059/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26716
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/241/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/497
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/497/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26715

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7084/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:2117
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/101/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/101/rebuild

review: Approve (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

PASSED: Continuous integration, rev:2117
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/103/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/103/rebuild

review: Approve (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2117
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/103/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/103/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

Animation is now smooth on devices, using a small hack to pause the animation at the end before actually closing the application.

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2118
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2118
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

Looks good to me. The delay after the animation is a gross hack, but not the worst thing. I sat with Lukas and couldn't figure out why it would be needed. But it seems to be for now.

So approved from my end. Animation is smooth with the delay.

Tested it manually.
CI bot is crazy right now, let's wait for it to fix itself before top-approving.
No tags.

review: Approve
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2118
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/108/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2118
http://jenkins.qa.ubuntu.com/job/unity8-ci/7089/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6056
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/504/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1794
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/497
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1689
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1689
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/496
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/495
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4677
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6067
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6067/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26733
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/244/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/502
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/502/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26734

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7089/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Nick Dedekind (nick-dedekind) wrote : Posted in a previous version of this proposal

I believe this is what is causing the window to not be visible when opening a maximised app.

review: Needs Fixing
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2118
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/126/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/126/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

Starting maximized apps should be fixed now

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2120
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/132/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/132/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2120
http://jenkins.qa.ubuntu.com/job/unity8-ci/7098/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6065
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/513/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1803
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/506
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1698
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1698
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/505
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/504
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4685
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6076
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6076/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26767
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/252/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/511
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/511/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26768

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7098/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2121
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/133/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/133/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2121
http://jenkins.qa.ubuntu.com/job/unity8-ci/7099/
Executed test runs:
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6069
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/514/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1804
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/507
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1699
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1699
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/506
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/505
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4687
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6080
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6080/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26773
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/253/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/512
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/512/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/26772

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7099/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote : Posted in a previous version of this proposal

LGTM now, maximized works.

review: Approve
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2122
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/254/
Executed test runs:

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/254/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2122
http://jenkins.qa.ubuntu.com/job/unity8-ci/7197/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6299
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/612/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1902
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/605
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1797
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1797
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/604
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/603
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4842
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6310
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6310/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27248
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/326/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/610
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/610/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27246

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7197/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal

make tryShell
- select desktop size
- unlock screen
- select windowed mode

window gets broken

review: Needs Fixing
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

OK, fixed the behavior, just not sure where to take the default size from, I have this atm:

PropertyChanges {
  target: decoratedWindow
  requestedWidth: resizeArea.defaultWidth
  requestedHeight: resizeArea.defaultHeight
}

Revision history for this message
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal

Could you please re-merge your prerequisite? You seem to have an outdated version of it....

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2123
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/308/
Executed test runs:
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build/429/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-0-fetch/452
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-1-sourcepkg/release=vivid+overlay/470
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-1-sourcepkg/release=xenial/470
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=vivid+overlay/466
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=vivid+overlay/466/artifact/output/*zip*/output.zip
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=amd64,release=xenial/466/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=vivid+overlay/466
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=vivid+overlay/466/artifact/output/*zip*/output.zip
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=armhf,release=xenial/466/console
    SUCCESS: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=vivid+overlay/466
        deb: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=vivid+overlay/466/artifact/output/*zip*/output.zip
    FAILURE: https://unity8-jenkins.ubuntu.com/job/build-2-binpkg/arch=i386,release=xenial/466/console

Click here to trigger a rebuild:
https://unity8-jenkins.ubuntu.com/job/lp-unity8-1-ci/308/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

> Could you please re-merge your prerequisite? You seem to have an outdated
> version of it....

Rebased

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal

FAILED: Continuous integration, rev:2123
http://jenkins.qa.ubuntu.com/job/unity8-ci/7248/
Executed test runs:
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-vivid-touch/6400
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-xenial-touch/663/console
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity-phablet-qmluitests-vivid/1953
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/unity8-qmluitest-xenial-amd64/656
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-amd64-ci/1848
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-vivid-i386-ci/1848
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-amd64-ci/655
    SUCCESS: http://jenkins.qa.ubuntu.com/job/unity8-xenial-i386-ci/654
    UNSTABLE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-vivid-touch/4906
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6411
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-vivid-armhf/6411/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27455
    FAILURE: http://jenkins.qa.ubuntu.com/job/generic-deb-autopilot-runner-xenial-touch/341/console
    SUCCESS: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/661
        deb: http://jenkins.qa.ubuntu.com/job/generic-mediumtests-builder-xenial-armhf/661/artifact/work/output/*zip*/output.zip
    SUCCESS: http://s-jenkins.ubuntu-ci:8080/job/touch-flash-device/27454

Click here to trigger a rebuild:
http://s-jenkins.ubuntu-ci:8080/job/unity8-ci/7248/rebuild

review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal

Done, no more regressions spotted

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal

* Did you perform an exploratory manual test run of the code change and any related functionality?
Yes

* Did CI run pass? If not, please explain why.
Will never pass due to unity-api dependency from the prerequisites

* Did you make sure that the branch does not contain spurious tags?
Yes

review: Approve
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal
review: Needs Fixing (continuous-integration)
Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
2133. By Lukáš Tinkl

merge prereq

Revision history for this message
Unity8 CI Bot (unity8-ci-bot) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
PS Jenkins bot (ps-jenkins) wrote :
review: Needs Fixing (continuous-integration)
Revision history for this message
Michael Terry (mterry) wrote :

Maximized apps don't seem to animate on open or close.

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote :

On (maxed) window closing, I definitely do get the scale/opacity change although I agree when opening maximized windows, the animation is not there:

From WindowResizeArea.qml (r. 1978.4.2 <email address hidden> 20150925)

if (windowState === WindowStateStorage.WindowStateMaximized) {
     target.maximize(false)
}

Not sure what the intention is here

Revision history for this message
Michael Zanetti (mzanetti) wrote :

> On (maxed) window closing, I definitely do get the scale/opacity change
> although I agree when opening maximized windows, the animation is not there:
>
> From WindowResizeArea.qml (r. 1978.4.2 <email address hidden>
> 20150925)
>
> if (windowState === WindowStateStorage.WindowStateMaximized) {
> target.maximize(false)
> }
>
> Not sure what the intention is here

The issue I was solving with this is that otherwise a maximized window would start normal and then aminate to fullscreen. We might need to rework that a little to make the open animation play but not the maximize animation.

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote :

I guess this should go to another MP (offtopic for this one), will likely need more UX hints.

Revision history for this message
Lukáš Tinkl (lukas-kde) wrote :

Marking this as WIP, needs to handle starting/closing apps from outside of the stage too (e.g. from launcher)

review: Needs Fixing
2134. By Lukáš Tinkl

merge trunk

2135. By Lukáš Tinkl

handle the close case coming from launcher

2136. By Lukáš Tinkl

fix the launcher ApplicationManager mock

2137. By Lukáš Tinkl

restart app if focusing doesn't work

happens with dash sometimes

2138. By Lukáš Tinkl

make the close animation testable using the App checkbox

2139. By Lukáš Tinkl

fix fullscreen apps being offset by the left margin

2140. By Lukáš Tinkl

disallow resizing windows up past the Panel

2141. By Lukáš Tinkl

fix closing animation for minimized apps

2142. By Lukáš Tinkl

fullscreen apps fix

2143. By Lukáš Tinkl

fix for fullscreen windows height

2144. By Lukáš Tinkl

merge lp:~mzanetti/unity8/launcher-sizing

2145. By Lukáš Tinkl

revert keymap (unrelated) changes

2146. By Lukáš Tinkl

depend on -15 appl framework

2147. By Lukáš Tinkl

implement maximizeHorizontally/Vertically

2148. By Lukáš Tinkl

requestStop() here

2149. By Lukáš Tinkl

save/restore the correct state in all cases

implement (easy now) maximize horizontal/vertical using it

2150. By Lukáš Tinkl

merge trunk

2151. By Lukáš Tinkl

merge trunk

2152. By Lukáš Tinkl

merge trunk

2153. By Lukáš Tinkl

merge trunk, resolve conflicts

2154. By Lukáš Tinkl

merge trunk

2155. By Lukáš Tinkl

merge trunk

Unmerged revisions

2155. By Lukáš Tinkl

merge trunk

2154. By Lukáš Tinkl

merge trunk

2153. By Lukáš Tinkl

merge trunk, resolve conflicts

2152. By Lukáš Tinkl

merge trunk

2151. By Lukáš Tinkl

merge trunk

2150. By Lukáš Tinkl

merge trunk

2149. By Lukáš Tinkl

save/restore the correct state in all cases

implement (easy now) maximize horizontal/vertical using it

2148. By Lukáš Tinkl

requestStop() here

2147. By Lukáš Tinkl

implement maximizeHorizontally/Vertically

2146. By Lukáš Tinkl

depend on -15 appl framework

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'CMakeLists.txt'
--- CMakeLists.txt 2016-03-06 13:19:33 +0000
+++ CMakeLists.txt 2016-03-06 13:19:34 +0000
@@ -57,7 +57,7 @@
57find_package(Qt5Concurrent 5.4 REQUIRED)57find_package(Qt5Concurrent 5.4 REQUIRED)
58find_package(Qt5Sql 5.4 REQUIRED)58find_package(Qt5Sql 5.4 REQUIRED)
5959
60pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=14)60pkg_check_modules(APPLICATION_API REQUIRED unity-shell-application=15)
61pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)61pkg_check_modules(GIO REQUIRED gio-2.0>=2.32)
62pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)62pkg_check_modules(GLIB REQUIRED glib-2.0>=2.32)
63pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)63pkg_check_modules(QMENUMODEL REQUIRED qmenumodel)
6464
=== modified file 'data/com.canonical.Unity8.gschema.xml'
--- data/com.canonical.Unity8.gschema.xml 2016-03-06 13:19:33 +0000
+++ data/com.canonical.Unity8.gschema.xml 2016-03-06 13:19:34 +0000
@@ -28,7 +28,7 @@
28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>28 <description>How much you have to push (in grid units) the mouse against an edge barrier when sensibility is 1.</description>
29 </key>29 </key>
30 <key type="b" name="autohide-launcher">30 <key type="b" name="autohide-launcher">
31 <default>false</default>31 <default>true</default>
32 <summary>Autohide the launcher</summary>32 <summary>Autohide the launcher</summary>
33 <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>33 <description>This will only be applied in windowed mode. In staged mode, the launcher will always hide.</description>
34 </key>34 </key>
3535
=== modified file 'plugins/Unity/Launcher/launchermodel.cpp'
--- plugins/Unity/Launcher/launchermodel.cpp 2015-09-14 09:11:08 +0000
+++ plugins/Unity/Launcher/launchermodel.cpp 2016-03-06 13:19:34 +0000
@@ -214,7 +214,7 @@
214 QDesktopServices::openUrl(getUrlForAppId(appId));214 QDesktopServices::openUrl(getUrlForAppId(appId));
215 } else if (actionId == QLatin1String("stop_item")) { // Quit215 } else if (actionId == QLatin1String("stop_item")) { // Quit
216 if (m_appManager) {216 if (m_appManager) {
217 m_appManager->stopApplication(appId);217 m_appManager->requestStopApplication(appId);
218 }218 }
219 // Nope, we don't know this action, let the backend forward it to the application219 // Nope, we don't know this action, let the backend forward it to the application
220 } else {220 } else {
221221
=== modified file 'qml/Launcher/Launcher.qml'
--- qml/Launcher/Launcher.qml 2016-03-06 13:19:33 +0000
+++ qml/Launcher/Launcher.qml 2016-03-06 13:19:34 +0000
@@ -175,7 +175,7 @@
175 event.accepted = true;175 event.accepted = true;
176 break;176 break;
177 case Qt.Key_Escape:177 case Qt.Key_Escape:
178 panel.highlightIndex = -2178 panel.highlightIndex = -2;
179 // Falling through intentionally179 // Falling through intentionally
180 case Qt.Key_Enter:180 case Qt.Key_Enter:
181 case Qt.Key_Return:181 case Qt.Key_Return:
@@ -186,6 +186,7 @@
186 launcherApplicationSelected(LauncherModel.get(panel.highlightIndex).appId);186 launcherApplicationSelected(LauncherModel.get(panel.highlightIndex).appId);
187 }187 }
188 root.hide();188 root.hide();
189 panel.highlightIndex = -2
189 event.accepted = true;190 event.accepted = true;
190 root.focus = false;191 root.focus = false;
191 }192 }
@@ -355,7 +356,7 @@
355 onTriggered: {356 onTriggered: {
356 if (root.autohideEnabled && !root.lockedVisible) {357 if (root.autohideEnabled && !root.lockedVisible) {
357 if (!panel.preventHiding) {358 if (!panel.preventHiding) {
358 root.hide();359 root.state = ""
359 } else {360 } else {
360 panel.dismissTimer.restart()361 panel.dismissTimer.restart()
361 }362 }
362363
=== modified file 'qml/Stages/DesktopStage.qml'
--- qml/Stages/DesktopStage.qml 2016-03-06 13:19:33 +0000
+++ qml/Stages/DesktopStage.qml 2016-03-06 13:19:34 +0000
@@ -40,8 +40,6 @@
40 ? ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)40 ? ApplicationManager.findApplication(ApplicationManager.focusedApplicationId)
41 : null41 : null
4242
43 mainAppWindow: priv.focusedAppDelegate ? priv.focusedAppDelegate.appWindow : null
44
45 // application windows never rotate independently43 // application windows never rotate independently
46 mainAppWindowOrientationAngle: shellOrientationAngle44 mainAppWindowOrientationAngle: shellOrientationAngle
4745
@@ -62,20 +60,30 @@
62 }60 }
6361
64 onFocusRequested: {62 onFocusRequested: {
65 var appIndex = priv.indexOf(appId);63 var delegate = priv.appDelegate(appId);
66 var appDelegate = appRepeater.itemAt(appIndex);64 if (delegate) {
67 appDelegate.restore();65 delegate.restore();
66 } else { // app died, start it
67 ApplicationManager.startApplication(appId);
68 }
6869
69 if (spread.state == "altTab") {70 if (spread.state == "altTab") {
70 spread.cancel();71 spread.cancel();
71 }72 }
72 }73 }
74
75 onStopRequested: {
76 var delegate = priv.appDelegate(appId);
77 if (delegate) {
78 delegate.close();
79 }
80 }
73 }81 }
7482
75 GlobalShortcut {83 GlobalShortcut {
76 id: closeWindowShortcut84 id: closeWindowShortcut
77 shortcut: Qt.AltModifier|Qt.Key_F485 shortcut: Qt.AltModifier|Qt.Key_F4
78 onTriggered: ApplicationManager.stopApplication(priv.focusedAppId)86 onTriggered: priv.focusedAppDelegate.close()
79 active: priv.focusedAppId !== ""87 active: priv.focusedAppId !== ""
80 }88 }
8189
@@ -177,13 +185,18 @@
177 }185 }
178 }186 }
179 }187 }
188
189 function appDelegate(appId) {
190 var appIndex = indexOf(appId);
191 return appRepeater.itemAt(appIndex);
192 }
180 }193 }
181194
182 Connections {195 Connections {
183 target: PanelState196 target: PanelState
184 onClose: {197 onClose: if (priv.focusedAppDelegate) {
185 ApplicationManager.stopApplication(ApplicationManager.focusedApplicationId)198 priv.focusedAppDelegate.close()
186 }199 }
187 onMinimize: priv.focusedAppDelegate && priv.focusedAppDelegate.minimize();200 onMinimize: priv.focusedAppDelegate && priv.focusedAppDelegate.minimize();
188 onMaximize: priv.focusedAppDelegate // don't restore minimized apps when double clicking the panel201 onMaximize: priv.focusedAppDelegate // don't restore minimized apps when double clicking the panel
189 && priv.focusedAppDelegate.restoreFromMaximized();202 && priv.focusedAppDelegate.restoreFromMaximized();
@@ -277,6 +290,7 @@
277 readonly property alias maximizedLeft: appDelegatePrivate.maximizedLeft290 readonly property alias maximizedLeft: appDelegatePrivate.maximizedLeft
278 readonly property alias maximizedRight: appDelegatePrivate.maximizedRight291 readonly property alias maximizedRight: appDelegatePrivate.maximizedRight
279 readonly property alias minimized: appDelegatePrivate.minimized292 readonly property alias minimized: appDelegatePrivate.minimized
293 readonly property alias fullscreen: decoratedWindow.fullscreen
280294
281 readonly property string appId: model.appId295 readonly property string appId: model.appId
282 property bool animationsEnabled: true296 property bool animationsEnabled: true
@@ -354,6 +368,10 @@
354 ApplicationManager.focusApplication(appId);368 ApplicationManager.focusApplication(appId);
355 }369 }
356370
371 function close() {
372 state = "closing";
373 }
374
357 function playFocusAnimation() {375 function playFocusAnimation() {
358 focusAnimation.start()376 focusAnimation.start()
359 }377 }
@@ -369,6 +387,14 @@
369387
370 states: [388 states: [
371 State {389 State {
390 name: "closing"
391 PropertyChanges { // freeze the values
392 target: appDelegate; explicit: true; restoreEntryValues: false;
393 x: appDelegate.x; y: appDelegate.y
394 requestedWidth: appDelegate.width; requestedHeight: appDelegate.height
395 }
396 },
397 State {
372 name: "fullscreen"; when: decoratedWindow.fullscreen398 name: "fullscreen"; when: decoratedWindow.fullscreen
373 PropertyChanges {399 PropertyChanges {
374 target: appDelegate;400 target: appDelegate;
@@ -383,7 +409,8 @@
383 PropertyChanges {409 PropertyChanges {
384 target: appDelegate;410 target: appDelegate;
385 visuallyMinimized: false;411 visuallyMinimized: false;
386 visuallyMaximized: false412 visuallyMaximized: false;
413 opacity: 1; scale: 1
387 }414 }
388 },415 },
389 State {416 State {
@@ -393,7 +420,8 @@
393 x: root.leftMargin; y: 0;420 x: root.leftMargin; y: 0;
394 requestedWidth: appContainer.width - root.leftMargin; requestedHeight: appContainer.height;421 requestedWidth: appContainer.width - root.leftMargin; requestedHeight: appContainer.height;
395 visuallyMinimized: false;422 visuallyMinimized: false;
396 visuallyMaximized: true423 visuallyMaximized: true;
424 opacity: 1; scale: 1
397 }425 }
398 },426 },
399 State {427 State {
@@ -420,17 +448,32 @@
420 ]448 ]
421 transitions: [449 transitions: [
422 Transition {450 Transition {
451 from: ",minimized"
423 to: "normal"452 to: "normal"
424 enabled: appDelegate.animationsEnabled453 enabled: appDelegate.animationsEnabled
425 PropertyAction { target: appDelegate; properties: "visuallyMinimized,visuallyMaximized" }454 PropertyAction { target: appDelegate; properties: "visuallyMinimized,visuallyMaximized" }
426 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration }455 UbuntuNumberAnimation { target: appDelegate; properties: "x,y" }
456 UbuntuNumberAnimation {
457 target: appDelegate
458 property: 'scale'
459 from: 0.85
460 to: 1
461 duration: UbuntuAnimation.SnapDuration
462 }
463 UbuntuNumberAnimation {
464 target: appDelegate
465 property: 'opacity'
466 from: 0
467 to: 1
468 duration: UbuntuAnimation.SnapDuration
469 }
427 },470 },
428 Transition {471 Transition {
429 to: "minimized"472 to: "minimized"
430 enabled: appDelegate.animationsEnabled473 enabled: appDelegate.animationsEnabled
431 PropertyAction { target: appDelegate; property: "visuallyMaximized" }474 PropertyAction { target: appDelegate; property: "visuallyMaximized" }
432 SequentialAnimation {475 SequentialAnimation {
433 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration }476 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,scale,requestedWidth,requestedHeight" }
434 PropertyAction { target: appDelegate; property: "visuallyMinimized" }477 PropertyAction { target: appDelegate; property: "visuallyMinimized" }
435 ScriptAction {478 ScriptAction {
436 script: {479 script: {
@@ -442,11 +485,51 @@
442 }485 }
443 },486 },
444 Transition {487 Transition {
488 to: "closing"
489 SequentialAnimation {
490 PropertyAction { target: appDelegate; properties: "x,y,requestedWidth,requestedHeight" }
491 ParallelAnimation {
492 UbuntuNumberAnimation {
493 target: appDelegate
494 property: 'scale'
495 from: 1
496 to: 0.85
497 duration: UbuntuAnimation.SnapDuration
498 easing: UbuntuAnimation.StandardEasingReverse
499 }
500 UbuntuNumberAnimation {
501 target: appDelegate
502 property: 'opacity'
503 from: 1
504 to: 0
505 duration: UbuntuAnimation.SnapDuration
506 easing: UbuntuAnimation.StandardEasingReverse
507 }
508 }
509 // hack: make sure the animation has really finished before closing the app
510 PauseAnimation { duration: UbuntuAnimation.SnapDuration }
511 ScriptAction {
512 script: {
513 ApplicationManager.stopApplication(appId);
514 }
515 }
516 }
517 },
518 Transition {
519 from: "minimized"
520 to: "closing"
521 ScriptAction {
522 script: {
523 ApplicationManager.stopApplication(appId);
524 }
525 }
526 },
527 Transition {
445 to: "*" //maximized and fullscreen528 to: "*" //maximized and fullscreen
446 enabled: appDelegate.animationsEnabled529 enabled: appDelegate.animationsEnabled
447 PropertyAction { target: appDelegate; property: "visuallyMinimized" }530 PropertyAction { target: appDelegate; property: "visuallyMinimized" }
448 SequentialAnimation {531 SequentialAnimation {
449 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration }532 UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,scale,requestedWidth,requestedHeight" }
450 PropertyAction { target: appDelegate; property: "visuallyMaximized" }533 PropertyAction { target: appDelegate; property: "visuallyMaximized" }
451 }534 }
452 }535 }
@@ -483,7 +566,7 @@
483 active: ApplicationManager.focusedApplicationId === model.appId566 active: ApplicationManager.focusedApplicationId === model.appId
484 focus: true567 focus: true
485568
486 onClose: ApplicationManager.stopApplication(model.appId)569 onClose: appDelegate.close()
487 onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight570 onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight
488 ? appDelegate.restoreFromMaximized() : appDelegate.maximize()571 ? appDelegate.restoreFromMaximized() : appDelegate.maximize()
489 onMinimize: appDelegate.minimize()572 onMinimize: appDelegate.minimize()
@@ -493,6 +576,27 @@
493 }576 }
494 }577 }
495578
579 BlurLayer {
580 id: blurLayer
581 anchors.fill: appContainer
582 source: appContainer
583 visible: false
584 }
585
586 Rectangle {
587 id: spreadBackground
588 anchors.fill: parent
589 color: "#55000000"
590 visible: false
591 }
592
593 MouseArea {
594 id: eventEater
595 anchors.fill: parent
596 visible: spreadBackground.visible
597 enabled: visible
598 }
599
496 EdgeBarrier {600 EdgeBarrier {
497 id: edgeBarrier601 id: edgeBarrier
498602
499603
=== modified file 'qml/Stages/PhoneStage.qml'
--- qml/Stages/PhoneStage.qml 2016-03-06 13:19:33 +0000
+++ qml/Stages/PhoneStage.qml 2016-03-06 13:19:34 +0000
@@ -161,6 +161,10 @@
161 }161 }
162 }162 }
163163
164 onStopRequested: {
165 applicationManager.stopApplication(appId);
166 }
167
164 function focusTopMostApp() {168 function focusTopMostApp() {
165 if (applicationManager.count > 0) {169 if (applicationManager.count > 0) {
166 var topmostApp = applicationManager.get(0);170 var topmostApp = applicationManager.get(0);
167171
=== modified file 'qml/Stages/TabletStage.qml'
--- qml/Stages/TabletStage.qml 2016-03-06 13:19:33 +0000
+++ qml/Stages/TabletStage.qml 2016-03-06 13:19:34 +0000
@@ -228,6 +228,10 @@
228 ApplicationManager.focusApplication(ApplicationManager.get(0).appId);228 ApplicationManager.focusApplication(ApplicationManager.get(0).appId);
229 }229 }
230 }230 }
231
232 onStopRequested: {
233 ApplicationManager.stopApplication(appId);
234 }
231 }235 }
232236
233 Flickable {237 Flickable {
234238
=== modified file 'qml/Stages/WindowResizeArea.qml'
--- qml/Stages/WindowResizeArea.qml 2016-03-06 13:19:33 +0000
+++ qml/Stages/WindowResizeArea.qml 2016-03-06 13:19:34 +0000
@@ -73,10 +73,12 @@
73 var windowGeometry = windowStateStorage.getGeometry(root.windowId,73 var windowGeometry = windowStateStorage.getGeometry(root.windowId,
74 Qt.rect(target.x, target.y, defaultWidth, defaultHeight));74 Qt.rect(target.x, target.y, defaultWidth, defaultHeight));
7575
76 target.requestedWidth = Math.min(Math.max(windowGeometry.width, d.minimumWidth), screenWidth - root.leftMargin);76 target.requestedWidth = Qt.binding(function() { return Math.min(Math.max(windowGeometry.width, d.minimumWidth), screenWidth - root.leftMargin); });
77 target.requestedHeight = Math.min(Math.max(windowGeometry.height, d.minimumHeight), root.screenHeight - PanelState.panelHeight);77 target.requestedHeight = Qt.binding(function() { return Math.min(Math.max(windowGeometry.height, d.minimumHeight),
78 target.x = Math.max(Math.min(windowGeometry.x, root.screenWidth - root.leftMargin - target.requestedWidth), root.leftMargin)78 root.screenHeight - (target.fullscreen ? 0 : PanelState.panelHeight)); });
79 target.y = Math.max(Math.min(windowGeometry.y, root.screenHeight - target.requestedHeight), PanelState.panelHeight)79 target.x = Qt.binding(function() { return Math.max(Math.min(windowGeometry.x, root.screenWidth - root.leftMargin - target.requestedWidth),
80 (target.fullscreen ? 0 : root.leftMargin)); });
81 target.y = Qt.binding(function() { return Math.max(Math.min(windowGeometry.y, root.screenHeight - target.requestedHeight), PanelState.panelHeight); });
8082
81 var windowState = windowStateStorage.getState(root.windowId, WindowStateStorage.WindowStateNormal)83 var windowState = windowStateStorage.getState(root.windowId, WindowStateStorage.WindowStateNormal)
82 if (windowState === WindowStateStorage.WindowStateMaximized) {84 if (windowState === WindowStateStorage.WindowStateMaximized) {
@@ -86,7 +88,7 @@
86 }88 }
8789
88 Component.onDestruction: {90 Component.onDestruction: {
89 windowStateStorage.saveState(root.windowId, target.state == "maximized" ? WindowStateStorage.WindowStateMaximized : WindowStateStorage.WindowStateNormal)91 windowStateStorage.saveState(root.windowId, target.maximized ? WindowStateStorage.WindowStateMaximized : WindowStateStorage.WindowStateNormal)
90 windowStateStorage.saveGeometry(root.windowId, Qt.rect(priv.normalX, priv.normalY, priv.normalWidth, priv.normalHeight))92 windowStateStorage.saveGeometry(root.windowId, Qt.rect(priv.normalX, priv.normalY, priv.normalWidth, priv.normalHeight))
91 }93 }
9294
@@ -299,7 +301,7 @@
299 }301 }
300302
301 if (d.topBorder) {303 if (d.topBorder) {
302 var newTargetY = d.startY + deltaY;304 var newTargetY = Math.max(d.startY + deltaY, PanelState.panelHeight); // disallow resizing up past Panel
303 var bottomBorderY = target.y + target.height;305 var bottomBorderY = target.y + target.height;
304 if (bottomBorderY > newTargetY + d.minimumHeight) {306 if (bottomBorderY > newTargetY + d.minimumHeight) {
305 if (bottomBorderY < newTargetY + d.maximumHeight) {307 if (bottomBorderY < newTargetY + d.maximumHeight) {
306308
=== modified file 'tests/mocks/Unity/Application/ApplicationManager.cpp'
--- tests/mocks/Unity/Application/ApplicationManager.cpp 2015-12-03 18:10:39 +0000
+++ tests/mocks/Unity/Application/ApplicationManager.cpp 2016-03-06 13:19:34 +0000
@@ -224,6 +224,12 @@
224 return application;224 return application;
225}225}
226226
227bool ApplicationManager::requestStopApplication(const QString &appId)
228{
229 QMetaObject::invokeMethod(this, "stopRequested", Qt::QueuedConnection, Q_ARG(QString, appId));
230 return true;
231}
232
227ApplicationInfo* ApplicationManager::add(QString appId)233ApplicationInfo* ApplicationManager::add(QString appId)
228{234{
229 ApplicationInfo *application = 0;235 ApplicationInfo *application = 0;
230236
=== modified file 'tests/mocks/Unity/Application/ApplicationManager.h'
--- tests/mocks/Unity/Application/ApplicationManager.h 2015-12-03 18:10:39 +0000
+++ tests/mocks/Unity/Application/ApplicationManager.h 2016-03-06 13:19:34 +0000
@@ -66,6 +66,7 @@
66 Q_INVOKABLE void unfocusCurrentApplication() override;66 Q_INVOKABLE void unfocusCurrentApplication() override;
67 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, const QStringList &arguments = QStringList()) override;67 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, const QStringList &arguments = QStringList()) override;
68 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, ExecFlags flags, const QStringList &arguments = QStringList());68 Q_INVOKABLE ApplicationInfo *startApplication(const QString &appId, ExecFlags flags, const QStringList &arguments = QStringList());
69 Q_INVOKABLE bool requestStopApplication(const QString &appId) override;
69 Q_INVOKABLE bool stopApplication(const QString &appId) override;70 Q_INVOKABLE bool stopApplication(const QString &appId) override;
7071
71 QString focusedApplicationId() const override;72 QString focusedApplicationId() const override;
@@ -79,7 +80,6 @@
79 bool isEmpty() const;80 bool isEmpty() const;
8081
81 Q_SIGNALS:82 Q_SIGNALS:
82 void focusRequested(const QString &appId);
83 void emptyChanged(bool empty);83 void emptyChanged(bool empty);
84 void availableApplicationsChanged(QStringList list);84 void availableApplicationsChanged(QStringList list);
8585
8686
=== modified file 'tests/plugins/Unity/Launcher/launchermodeltest.cpp'
--- tests/plugins/Unity/Launcher/launchermodeltest.cpp 2016-01-22 19:44:56 +0000
+++ tests/plugins/Unity/Launcher/launchermodeltest.cpp 2016-03-06 13:19:34 +0000
@@ -105,6 +105,10 @@
105 }105 }
106 return false;106 return false;
107 }107 }
108 bool requestStopApplication(const QString &appId) override {
109 Q_EMIT stopRequested(appId);
110 return stopApplication(appId);
111 }
108 bool focusApplication(const QString &appId) override {112 bool focusApplication(const QString &appId) override {
109 Q_FOREACH(MockApp* app, m_list) {113 Q_FOREACH(MockApp* app, m_list) {
110 app->setFocused(app->appId() == appId);114 app->setFocused(app->appId() == appId);
111115
=== modified file 'tests/qmltests/Launcher/tst_Launcher.qml'
--- tests/qmltests/Launcher/tst_Launcher.qml 2016-03-06 13:19:33 +0000
+++ tests/qmltests/Launcher/tst_Launcher.qml 2016-03-06 13:19:34 +0000
@@ -320,14 +320,21 @@
320 }320 }
321321
322 function assertFocusOnIndex(index) {322 function assertFocusOnIndex(index) {
323 var launcherPanel = findChild(launcher, "launcherPanel");
323 var launcherListView = findChild(launcher, "launcherListView");324 var launcherListView = findChild(launcher, "launcherListView");
324 var bfbFocusHighlight = findChild(launcher, "bfbFocusHighlight");325 var bfbFocusHighlight = findChild(launcher, "bfbFocusHighlight");
325326
326 waitForRendering(launcher);327 waitForRendering(launcher);
328 tryCompare(launcherPanel, "highlightIndex", index);
327 compare(bfbFocusHighlight.visible, index === -1);329 compare(bfbFocusHighlight.visible, index === -1);
328 for (var i = 0; i < launcherListView.count; i++) {330 for (var i = 0; i < launcherListView.count; i++) {
329 var focusRing = findChild(findChild(launcher, "launcherDelegate" + i), "focusRing")331 var item = findChild(launcher, "launcherDelegate" + i);
330 compare(focusRing.visible, index === i);332 // Delegates might be destroyed when not visible. We can't check if they paint a focus highlight.
333 // Make sure the requested index does have focus. for the others, try best effort to check if they don't
334 if (index === i || item) {
335 var focusRing = findChild(item, "focusRing")
336 tryCompare(focusRing, "visible", index === i);
337 }
331 }338 }
332 }339 }
333340
@@ -1129,7 +1136,6 @@
1129 var last = launcherListView.count - 1;1136 var last = launcherListView.count - 1;
11301137
1131 compare(bfbFocusHighlight.visible, false);1138 compare(bfbFocusHighlight.visible, false);
1132
1133 launcher.openForKeyboardNavigation();1139 launcher.openForKeyboardNavigation();
1134 tryCompare(launcherPanel, "x", 0);1140 tryCompare(launcherPanel, "x", 0);
1135 waitForRendering(launcher);1141 waitForRendering(launcher);
@@ -1154,6 +1160,7 @@
11541160
1155 // The list should wrap around1161 // The list should wrap around
1156 keyClick(Qt.Key_Up);1162 keyClick(Qt.Key_Up);
1163 waitForRendering(launcher);
1157 assertFocusOnIndex(last);1164 assertFocusOnIndex(last);
11581165
1159 keyClick(Qt.Key_Down);1166 keyClick(Qt.Key_Down);
@@ -1186,6 +1193,9 @@
1186 // Go bar to top by wrapping around1193 // Go bar to top by wrapping around
1187 keyClick(Qt.Key_Down);1194 keyClick(Qt.Key_Down);
1188 assertFocusOnIndex(1);1195 assertFocusOnIndex(1);
1196
1197 keyClick(Qt.Key_Enter);
1198 assertFocusOnIndex(-2);
1189 }1199 }
11901200
1191 function test_selectQuicklistItemByKeyboard() {1201 function test_selectQuicklistItemByKeyboard() {
11921202
=== modified file 'tests/qmltests/Stages/ApplicationCheckBox.qml'
--- tests/qmltests/Stages/ApplicationCheckBox.qml 2015-08-11 11:41:08 +0000
+++ tests/qmltests/Stages/ApplicationCheckBox.qml 2016-03-06 13:19:34 +0000
@@ -33,7 +33,7 @@
33 if (checked) {33 if (checked) {
34 ApplicationManager.startApplication(root.appId);34 ApplicationManager.startApplication(root.appId);
35 } else {35 } else {
36 ApplicationManager.stopApplication(root.appId);36 ApplicationManager.requestStopApplication(root.appId);
37 }37 }
38 d.bindGuard = false;38 d.bindGuard = false;
39 }39 }
@@ -67,7 +67,7 @@
67 if (checked) {67 if (checked) {
68 ApplicationManager.startApplication(root.appId);68 ApplicationManager.startApplication(root.appId);
69 } else {69 } else {
70 ApplicationManager.stopApplication(root.appId);70 ApplicationManager.requestStopApplication(root.appId);
71 }71 }
72 d.bindGuard = false;72 d.bindGuard = false;
73 }73 }
7474
=== modified file 'tests/qmltests/Stages/tst_DesktopStage.qml'
--- tests/qmltests/Stages/tst_DesktopStage.qml 2016-03-06 13:19:33 +0000
+++ tests/qmltests/Stages/tst_DesktopStage.qml 2016-03-06 13:19:34 +0000
@@ -362,7 +362,7 @@
362 verify(appDelegate);362 verify(appDelegate);
363 ApplicationManager.focusApplication(appName);363 ApplicationManager.focusApplication(appName);
364 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close364 keyClick(Qt.Key_F4, Qt.AltModifier); // Alt+F4 shortcut to close
365 verify(ApplicationManager.count == 2); // verify the app is gone365 tryCompare(ApplicationManager, "count", 2); // verify the app is gone
366 verify(ApplicationManager.findApplication(appName) === null); // and it's not in running apps366 verify(ApplicationManager.findApplication(appName) === null); // and it's not in running apps
367 }367 }
368368
@@ -409,8 +409,8 @@
409409
410 // restore410 // restore
411 dialerDelegate.restoreFromMaximized();411 dialerDelegate.restoreFromMaximized();
412 compare(dashApp.session.lastSurface.visible, true);412 tryCompare(dashApp.session.lastSurface, "visible", true);
413 compare(gmailApp.session.lastSurface.visible, true);413 tryCompare(gmailApp.session.lastSurface, "visible", true);
414 }414 }
415415
416 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {416 function test_applicationsBecomeVisibleWhenOccludingAppRemoved() {
417417
=== modified file 'tests/qmltests/Stages/tst_WindowResizeArea.qml'
--- tests/qmltests/Stages/tst_WindowResizeArea.qml 2015-11-30 18:25:47 +0000
+++ tests/qmltests/Stages/tst_WindowResizeArea.qml 2016-03-06 13:19:34 +0000
@@ -56,6 +56,7 @@
56 property real widthIncrement: 056 property real widthIncrement: 0
57 property real heightIncrement: 057 property real heightIncrement: 0
58 state: "normal"58 state: "normal"
59 readonly property bool maximized: state == "maximized"
5960
60 function maximize() {61 function maximize() {
61 state = "maximized"62 state = "maximized"

Subscribers

People subscribed via source and target branches