Merge lp:~lukas-kde/unity8/newWindowDecosAndPanel into lp:unity8
- newWindowDecosAndPanel
- Merge into trunk
Status: | Merged | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Approved by: | Daniel d'Andrada | ||||||||||||
Approved revision: | 2073 | ||||||||||||
Merged at revision: | 2060 | ||||||||||||
Proposed branch: | lp:~lukas-kde/unity8/newWindowDecosAndPanel | ||||||||||||
Merge into: | lp:unity8 | ||||||||||||
Prerequisite: | lp:~dandrader/unity8/noStretchOnResize | ||||||||||||
Diff against target: |
1462 lines (+422/-298) 26 files modified
qml/Components/ModeSwitchWarningDialog.qml (+1/-1) qml/Components/PanelState/PanelState.qml (+3/-2) qml/Components/WindowControlButtons.qml (+76/-31) qml/Components/graphics/window-close.svg (+14/-0) qml/Components/graphics/window-maximize.svg (+12/-0) qml/Components/graphics/window-minimize.svg (+13/-0) qml/Panel/Handle.qml (+2/-2) qml/Panel/IndicatorItem.qml (+3/-0) qml/Panel/Indicators/client/IndicatorsClient.qml (+1/-1) qml/Panel/IndicatorsMenu.qml (+2/-2) qml/Panel/MenuContent.qml (+1/-1) qml/Panel/Panel.qml (+68/-80) qml/Panel/PanelBackground.qml (+0/-21) qml/Panel/PanelSeparatorLine.qml (+0/-25) qml/Shell.qml (+1/-1) qml/Stages/ApplicationWindow.qml (+2/-2) qml/Stages/DecoratedWindow.qml (+18/-15) qml/Stages/DesktopStage.qml (+73/-49) qml/Stages/WindowDecoration.qml (+15/-10) qml/Stages/WindowResizeArea.qml (+1/-1) tests/qmltests/Panel/tst_Panel.qml (+45/-11) tests/qmltests/Stages/tst_DesktopStage.qml (+68/-30) tests/qmltests/Stages/tst_PhoneStage.qml (+1/-1) tests/qmltests/Stages/tst_SurfaceContainer.qml (+1/-1) tests/qmltests/Stages/tst_TabletStage.qml (+1/-1) tests/qmltests/tst_Shell.qml (+0/-10) |
||||||||||||
To merge this branch: | bzr merge lp:~lukas-kde/unity8/newWindowDecosAndPanel | ||||||||||||
Related bugs: |
|
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
PS Jenkins bot (community) | continuous-integration | Needs Fixing | |
Daniel d'Andrada (community) | Approve | ||
Review via email: mp+278320@code.launchpad.net |
This proposal supersedes a proposal from 2015-11-05.
Commit message
Implement new visuals for panel and window decorations
Description of the change
Implement new visuals for panel and window decorations
* Are there any related MPs required for this MP to build/function as expected? Please list.
lp:~dandrader/unity8/noStretchOnResize
* 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
Albert Astals Cid (aacid) wrote : Posted in a previous version of this proposal | # |
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
Conflicts resolved
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
I think it's worth considering using pre-rendered images (PNGs) instead of rendering them at runtime from SVGs for performance reasons.
We keep the SVG, but also ship a couple or prerendered versions at common grid unit resolutions (like for 1080p monitors, etc). So if we don't have a PNG for the grid unit at hand, we fallback to rendering one at runtime from the original SVG.
And maybe that scheme could be turned into a component of its own.
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
> I think it's worth considering using pre-rendered images (PNGs) instead of
> rendering them at runtime from SVGs for performance reasons.
>
> We keep the SVG, but also ship a couple or prerendered versions at common grid
> unit resolutions (like for 1080p monitors, etc). So if we don't have a PNG for
> the grid unit at hand, we fallback to rendering one at runtime from the
> original SVG.
>
> And maybe that scheme could be turned into a component of its own.
I recall this had a significant impact on start up time back in 2010/2011. Not sure how relevant it still is with todays hardware.
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2034
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2046
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2047
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> > I think it's worth considering using pre-rendered images (PNGs) instead of
> > rendering them at runtime from SVGs for performance reasons.
> >
> > We keep the SVG, but also ship a couple or prerendered versions at common
> grid
> > unit resolutions (like for 1080p monitors, etc). So if we don't have a PNG
> for
> > the grid unit at hand, we fallback to rendering one at runtime from the
> > original SVG.
> >
> > And maybe that scheme could be turned into a component of its own.
>
> I recall this had a significant impact on start up time back in 2010/2011. Not
> sure how relevant it still is with todays hardware.
This doesn't seem to have any impact on performance, design would be fine with giving me whatever format assets we want I guess.
I feel like going with SVGs has the advantage of being able to freely resize the decoration once we allow clients to provide their own in the longterm.
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2048
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
deb: http://
Click here to trigger a rebuild:
http://
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Could you please remove all those empty <g></g> from the SVGs?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
> This doesn't seem to have any impact on performance
Sure, as it's used only for a couple of small images. But it might if adoption becomes widespread throughout unity8, specially on phones. We can worry about it once we get there.
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Don't know how to reset it. "Abstain" will do it for now...
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
- run "make tryDesktopStage"
- Launch camera-app, gallery-app and webbrowser-app
Why are those apps being launched fullscreen now?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
By the way, what about those rounded corner I saw in the design mock up. Should we have a trello card for it or was it dropped?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Is qml/Stages/
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
There's not a shadow around the indicators panel (that thing that you drag down from the top) anymore. Instead, there's just a black line on its left side. Is it how design intended?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
- run "make tryShell
- select desktop size
- select desktop usage scenario
- unlock the shell (dismiss lockscreen)
- Click on the indicators bar grey area between the focused app name and the indicators icons
This is what you get:
qml/Stages/
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
I don't get why you set "hoverEnabled: true" on that MouseArea where you put WindowControlBu
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Still in Panel.qml:
"// TODO here would the LIM come"
What's "LIM"? Also the sentence doesn't look grammatically correct.
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Would it be too much to ask for adding a way to show/hide window controls and name in "make tryPanel" so we can see how it interacts with other panel components and states without having to run a fullblown Shell.qml test?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
qml/Panel/
If so, could you please nuke it? It's a pretty ridiculous component anyway... (a Rectangle with a pre-defined color)
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> Could you please remove all those empty <g></g> from the SVGs?
Done
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> - run "make tryDesktopStage"
> - Launch camera-app, gallery-app and webbrowser-app
>
> Why are those apps being launched fullscreen now?
Because of the bugfix for https:/
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> By the way, what about those rounded corner I saw in the design mock up.
> Should we have a trello card for it or was it dropped?
Right, we will need another task in trello for this (qtmir I suppose)
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> Is qml/Stages/
Yup, for the desktop spread imo
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
In DesktopStage.qml:
Your updateForegroun
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
> > - run "make tryDesktopStage"
> > - Launch camera-app, gallery-app and webbrowser-app
> >
> > Why are those apps being launched fullscreen now?
>
> Because of the bugfix for https:/
> /webbrowser-
Can you please stick to the purpose of this branch and just update the visuals?
Please put this bug fix in a separate merge proposal.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> Still in Panel.qml:
>
> "// TODO here would the LIM come"
>
> What's "LIM"? Also the sentence doesn't look grammatically correct.
Locally integrated menus
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> I don't get why you set "hoverEnabled: true" on that MouseArea where you put
> WindowControlBu
Because the whole group is visible only on mouse over _and_ I need the individual mouse over visual effect when hovering over a single button. Any idea how to do that better?
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
On 12/11/2015 11:04, Lukáš Tinkl wrote:
>> Still in Panel.qml:
>>
>> "// TODO here would the LIM come"
>>
>> What's "LIM"? Also the sentence doesn't look grammatically correct.
> Locally integrated menus
Please write it down in full. Acronyms just hamper communication.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> qml/Panel/
> and didn't notice any difference. Also grepping for it didn't show anything.
>
> If so, could you please nuke it? It's a pretty ridiculous component anyway...
> (a Rectangle with a pre-defined color)
Yup, it's gone
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> In DesktopStage.qml:
>
> Your updateForegroun
> model once again unnecessarily. The delegates are already ordered according to
> ApplicationManager model, so their indexes match. No need to look up for it.
Not quite the same, the window might be maximized (its state) but not visually. In other words, the window might be maximized and minimized at the same time.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> On 12/11/2015 11:04, Lukáš Tinkl wrote:
> >> Still in Panel.qml:
> >>
> >> "// TODO here would the LIM come"
> >>
> >> What's "LIM"? Also the sentence doesn't look grammatically correct.
> > Locally integrated menus
>
> Please write it down in full. Acronyms just hamper communication.
That's what the design docs use but yea, you're right
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
On 12/11/2015 11:10, Lukáš Tinkl wrote:
>> In DesktopStage.qml:
>>
>> Your updateForegroun
>> model once again unnecessarily. The delegates are already ordered according to
>> ApplicationManager model, so their indexes match. No need to look up for it.
> Not quite the same, the window might be maximized (its state) but not visually. In other words, the window might be maximized and minimized at the same time.
Their state doesn't change their index.
appRepeater already iterates on ApplicationManager. I don't get how is
it possible to have a delegate in that repeater whose index differs from
the model it was created from.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> - run "make tryShell
> - select desktop size
> - select desktop usage scenario
> - unlock the shell (dismiss lockscreen)
> - Click on the indicators bar grey area between the focused app name and the
> indicators icons
>
> This is what you get:
> qml/Stages/
> null
Fixed
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> On 12/11/2015 11:10, Lukáš Tinkl wrote:
> >> In DesktopStage.qml:
> >>
> >> Your updateForegroun
> ApplicationManager
> >> model once again unnecessarily. The delegates are already ordered according
> to
> >> ApplicationManager model, so their indexes match. No need to look up for
> it.
> > Not quite the same, the window might be maximized (its state) but not
> visually. In other words, the window might be maximized and minimized at the
> same time.
>
> Their state doesn't change their index.
And that's problem, I need to know what index is the (visually) maximized window at. To be able to cast the panel drop shadow and focus the correct window when clicking on the panel.
> appRepeater already iterates on ApplicationManager. I don't get how is
> it possible to have a delegate in that repeater whose index differs from
> the model it was created from.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> There's not a shadow around the indicators panel (that thing that you drag
> down from the top) anymore. Instead, there's just a black line on its left
> side. Is it how design intended?
Yup, I re-added it now but there's still the thin black line... dunno where it comes from :) Will investigate
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> > There's not a shadow around the indicators panel (that thing that you drag
> > down from the top) anymore. Instead, there's just a black line on its left
> > side. Is it how design intended?
>
> Yup, I re-added it now but there's still the thin black line... dunno where it
> comes from :) Will investigate
Should be fixed now
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> > On 12/11/2015 11:10, Lukáš Tinkl wrote:
> > >> In DesktopStage.qml:
> > >>
> > >> Your updateForegroun
> > ApplicationManager
> > >> model once again unnecessarily. The delegates are already ordered
> according
> > to
> > >> ApplicationManager model, so their indexes match. No need to look up for
> > it.
> > > Not quite the same, the window might be maximized (its state) but not
> > visually. In other words, the window might be maximized and minimized at the
> > same time.
> >
> > Their state doesn't change their index.
>
> And that's problem, I need to know what index is the (visually) maximized
> window at. To be able to cast the panel drop shadow and focus the correct
> window when clicking on the panel.
>
> > appRepeater already iterates on ApplicationManager. I don't get how is
> > it possible to have a delegate in that repeater whose index differs from
> > the model it was created from.
Optimized the for loop by returning the already available index from appManager
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2049
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> Would it be too much to ask for adding a way to show/hide window controls and
> name in "make tryPanel" so we can see how it interacts with other panel
> components and states without having to run a fullblown Shell.qml test?
Done
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2055
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2056
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
UNSTABLE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
> > Would it be too much to ask for adding a way to show/hide window controls
> and
> > name in "make tryPanel" so we can see how it interacts with other panel
> > components and states without having to run a fullblown Shell.qml test?
>
> Done
But I don't see the name of the application there when the mouse is not hovering over it.
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
- make tryShell
- Select desktop size and desktop usage scenario
- Unlock screen
- Select phone size & usage scenario
- Unlock screen again
Expected outcome:
Indicators bar does not display the focused application name
Actual outcome:
Indicators bar displays the focused application name, like in a desktop usage scenario.
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2057
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2060
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2057
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2057
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> > > Would it be too much to ask for adding a way to show/hide window controls
> > and
> > > name in "make tryPanel" so we can see how it interacts with other panel
> > > components and states without having to run a fullblown Shell.qml test?
> >
> > Done
>
> But I don't see the name of the application there when the mouse is not
> hovering over it.
I don't see any applications in "make tryPanel", what should it show then?
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> - make tryShell
> - Select desktop size and desktop usage scenario
> - Unlock screen
> - Select phone size & usage scenario
> - Unlock screen again
>
> Expected outcome:
> Indicators bar does not display the focused application name
>
> Actual outcome:
> Indicators bar displays the focused application name, like in a desktop usage
> scenario.
Thanks for spotting, fixed
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> > > Would it be too much to ask for adding a way to show/hide window controls
> > and
> > > name in "make tryPanel" so we can see how it interacts with other panel
> > > components and states without having to run a fullblown Shell.qml test?
> >
> > Done
>
> But I don't see the name of the application there when the mouse is not
> hovering over it.
Ok, added an option to show a fake window title
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2061
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2062
http://
Executed test runs:
UNSTABLE: http://
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
- Run "make tryShell"
- Select desktop size and usage scenario
- Unlock the screen
- Launch a fullscreen app, like gallery
Expected outcome:
The applications takes the entire area of Shell.qml
Actual outcome:
It doesn't take the space on top that was previously occupied by the indicators bar.
Comments:
I know you said it works when run for real on a laptop/device. But those manual tests should reproduce exactly what happens "for real". Otherwise it undermines the value of qml tests. There's no reason why they should behave differently. This is just high-level QML code afterall.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> - Run "make tryShell"
> - Select desktop size and usage scenario
> - Unlock the screen
> - Launch a fullscreen app, like gallery
>
> Expected outcome:
> The applications takes the entire area of Shell.qml
>
> Actual outcome:
> It doesn't take the space on top that was previously occupied by the
> indicators bar.
>
> Comments:
> I know you said it works when run for real on a laptop/device. But those
> manual tests should reproduce exactly what happens "for real". Otherwise it
> undermines the value of qml tests. There's no reason why they should behave
> differently. This is just high-level QML code afterall.
Fixed
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2063
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2064
http://
Executed test runs:
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
In test_tappingOnD
Please keep launching 3 applications. It's important that neither the "from" nor the "to" applications are focused before the test. That's why a 3rd one is being launched.
I guess the problem is that camera-app is now fullscreen in DesktopStage. So just replace it with another an application that is not fullscreen, like gmail-webapp.
You will have to change its saved mock geometry so that it doesn't overlap unity8-dash or dialer-app.
So just replace camera-app and gallery-app below with other two non-fullscreen apps:
"""
}
"""
I suggest gmail-webapp and twitter-webapp
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Likewise in test_tappingOnW
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
In test_maximisedA
"""
findChild(
"""
You should click on the maximize button instead of directly calling an internal function. We should strive to keep code paths as close to real usage as possible.
"""
var dialerApp = startApplicatio
"""
I guess you're using dialer-app here because it starts in normal state (ie non-maximed and non-fullscreen). If so, please explicitly check for this condition in the test to have it clear.
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
Tests now launch 3 apps and use the maximize button manually
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
In test_maximizeAp
I think you should s/camera-
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
Likewise in test_applicatio
s/camera-
s/gallery-
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2065
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> In test_maximizeAp
>
> I think you should s/camera-
> code expectations
Fixed
Lukáš Tinkl (lukas-kde) wrote : Posted in a previous version of this proposal | # |
> Likewise in test_applicatio
>
> s/camera-
> s/gallery-
I don't see a problem with this testcase
Daniel d'Andrada (dandrader) wrote : Posted in a previous version of this proposal | # |
test_applicatio
In this test you launch gallery-app and click on its maximize button.
But I cannot do it manually because gallery-app starts in fullscreen. No maximize button in sight. That's why I told you to change it into an app that doesn't start in fullscreen.
Daniel d'Andrada (dandrader) : Posted in a previous version of this proposal | # |
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2067
http://
Executed test runs:
UNSTABLE: http://
FAILURE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
Daniel d'Andrada (dandrader) wrote : | # |
"""
+ width: root.width
+ height: fullscreen ? root.height : root.height - decoration.height
"""
After lp:~dandrader/unity8/noStretchOnResize, you cannot set ApplicationWindow's size directly. You have to use requestedWidth and requestedHeight instead.
- 2072. By Lukáš Tinkl
-
don't set width/height directly
Lukáš Tinkl (lukas-kde) wrote : | # |
> """
> + width: root.width
> + height: fullscreen ? root.height : root.height - decoration.height
> """
>
> After lp:~dandrader/unity8/noStretchOnResize, you cannot set
> ApplicationWindow's size directly. You have to use requestedWidth and
> requestedHeight instead.
Fixed
Daniel d'Andrada (dandrader) wrote : | # |
Disclaimer: Not sure if your branch caused it or if this is a pre-existing issue
1 - Apply this patch: http://
2 - run "make tryDesktopStage"
3 - launch dialer-app
4 - maximize dialer-app
Expected outcome:
unity8-dash stays put
Actual outcome:
http://
Daniel d'Andrada (dandrader) wrote : | # |
> Disclaimer: Not sure if your branch caused it or if this is a pre-existing
> issue
>
> 1 - Apply this patch: http://
> 2 - run "make tryDesktopStage"
> 3 - launch dialer-app
> 4 - maximize dialer-app
>
> Expected outcome:
> unity8-dash stays put
>
> Actual outcome:
> http://
Confirmed it's your branch. It doesn't happen with its prerequisite.
- 2073. By Lukáš Tinkl
-
don't hide the decoration when the window is not visible
Lukáš Tinkl (lukas-kde) wrote : | # |
> Disclaimer: Not sure if your branch caused it or if this is a pre-existing
> issue
>
> 1 - Apply this patch: http://
> 2 - run "make tryDesktopStage"
> 3 - launch dialer-app
> 4 - maximize dialer-app
>
> Expected outcome:
> unity8-dash stays put
>
> Actual outcome:
> http://
Fixed
Daniel d'Andrada (dandrader) : | # |
PS Jenkins bot (ps-jenkins) wrote : | # |
FAILED: Continuous integration, rev:2071
http://
Executed test runs:
UNSTABLE: http://
FAILURE: http://
UNSTABLE: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
SUCCESS: http://
UNSTABLE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
FAILURE: http://
SUCCESS: http://
deb: http://
SUCCESS: http://
Click here to trigger a rebuild:
http://
- 2074. By Lukáš Tinkl
-
get rid of the dp(2) gap for the orange line
- 2075. By Lukáš Tinkl
-
#333333 -> #292929
- 2076. By Lukáš Tinkl
-
get rid of the orange line in the handle
Lukáš Tinkl (lukas-kde) wrote : | # |
Updated with new visuals (panel gap gone, changed decoration colors, got rid of the orange line in the drag handle)
- 2077. By Lukáš Tinkl
-
Light font weight for the root indicator labels
Preview Diff
1 | === modified file 'qml/Components/ModeSwitchWarningDialog.qml' |
2 | --- qml/Components/ModeSwitchWarningDialog.qml 2015-11-06 10:12:44 +0000 |
3 | +++ qml/Components/ModeSwitchWarningDialog.qml 2015-11-25 16:12:37 +0000 |
4 | @@ -75,7 +75,7 @@ |
5 | property string notClickedText: i18n.tr("OK, I will reconnect") |
6 | property string clickedText: i18n.tr("Reconnect now!") |
7 | text: clicked ? clickedText : notClickedText |
8 | - color: "#333333" |
9 | + color: "#292929" |
10 | |
11 | MouseArea { |
12 | anchors.fill: parent |
13 | |
14 | === modified file 'qml/Components/PanelState/PanelState.qml' |
15 | --- qml/Components/PanelState/PanelState.qml 2015-11-09 10:16:18 +0000 |
16 | +++ qml/Components/PanelState/PanelState.qml 2015-11-25 16:12:37 +0000 |
17 | @@ -22,10 +22,11 @@ |
18 | |
19 | property string title: "" |
20 | property bool buttonsVisible: false |
21 | - |
22 | - property int panelHeight: 0 |
23 | + property bool dropShadow: false |
24 | + property int panelHeight: units.gu(3) |
25 | |
26 | signal close() |
27 | signal minimize() |
28 | signal maximize() |
29 | + signal focusMaximizedApp() |
30 | } |
31 | |
32 | === modified file 'qml/Components/WindowControlButtons.qml' |
33 | --- qml/Components/WindowControlButtons.qml 2015-11-04 14:57:33 +0000 |
34 | +++ qml/Components/WindowControlButtons.qml 2015-11-25 16:12:37 +0000 |
35 | @@ -1,5 +1,5 @@ |
36 | /* |
37 | - * Copyright (C) 2014 Canonical, Ltd. |
38 | + * Copyright (C) 2014-2015 Canonical, Ltd. |
39 | * |
40 | * This program is free software; you can redistribute it and/or modify |
41 | * it under the terms of the GNU General Public License as published by |
42 | @@ -12,8 +12,6 @@ |
43 | * |
44 | * You should have received a copy of the GNU General Public License |
45 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
46 | - * |
47 | - * Authors: Michael Zanetti <michael.zanetti@canonical.com> |
48 | */ |
49 | |
50 | import QtQuick 2.4 |
51 | @@ -21,43 +19,90 @@ |
52 | |
53 | Row { |
54 | id: root |
55 | - spacing: units.gu(0.5) |
56 | + spacing: units.gu(1) |
57 | + |
58 | + // to be set from outside |
59 | + property bool active: false |
60 | |
61 | signal close() |
62 | signal minimize() |
63 | signal maximize() |
64 | |
65 | - Rectangle { |
66 | + MouseArea { |
67 | + id: closeWindowButton |
68 | objectName: "closeWindowButton" |
69 | - height: parent.height; width: height; radius: height / 2 |
70 | - gradient: Gradient { |
71 | - GradientStop { color: "#F49073"; position: 0 } |
72 | - GradientStop { color: "#DF4F1C"; position: 1 } |
73 | - } |
74 | - border.width: units.dp(.5) |
75 | - border.color: "black" |
76 | - MouseArea { anchors.fill: parent; onClicked: root.close() } |
77 | + hoverEnabled: true |
78 | + height: parent.height |
79 | + width: height |
80 | + onClicked: root.close() |
81 | + |
82 | + Rectangle { |
83 | + anchors.centerIn: parent |
84 | + width: units.gu(2) |
85 | + height: units.gu(2) |
86 | + radius: height / 2 |
87 | + color: "#ed3146" |
88 | + visible: parent.containsMouse |
89 | + } |
90 | + Icon { |
91 | + width: height |
92 | + height: parent.height *.5 |
93 | + anchors.centerIn: parent |
94 | + source: "graphics/window-close.svg" |
95 | + color: root.active ? "white" : "#5d5d5d" |
96 | + keyColor: "black" |
97 | + } |
98 | } |
99 | - Rectangle { |
100 | + |
101 | + MouseArea { |
102 | + id: minimizeWindowButton |
103 | objectName: "minimizeWindowButton" |
104 | - height: parent.height; width: height; radius: height / 2 |
105 | - gradient: Gradient { |
106 | - GradientStop { color: "#92918C"; position: 0 } |
107 | - GradientStop { color: "#5E5D58"; position: 1 } |
108 | - } |
109 | - border.width: units.dp(.5) |
110 | - border.color: "black" |
111 | - MouseArea { anchors.fill: parent; onClicked: root.minimize() } |
112 | + hoverEnabled: true |
113 | + height: parent.height |
114 | + width: height |
115 | + onClicked: root.minimize() |
116 | + |
117 | + Rectangle { |
118 | + anchors.centerIn: parent |
119 | + width: units.gu(2) |
120 | + height: units.gu(2) |
121 | + radius: height / 2 |
122 | + color: "#888888" |
123 | + visible: parent.containsMouse |
124 | + } |
125 | + Icon { |
126 | + width: height |
127 | + height: parent.height *.5 |
128 | + anchors.centerIn: parent |
129 | + source: "graphics/window-minimize.svg" |
130 | + color: root.active ? "white" : "#5d5d5d" |
131 | + keyColor: "black" |
132 | + } |
133 | } |
134 | - Rectangle { |
135 | + |
136 | + MouseArea { |
137 | + id: maximizeWindowButton |
138 | objectName: "maximizeWindowButton" |
139 | - height: parent.height; width: height; radius: height / 2 |
140 | - gradient: Gradient { |
141 | - GradientStop { color: "#92918C"; position: 0 } |
142 | - GradientStop { color: "#5E5D58"; position: 1 } |
143 | - } |
144 | - border.width: units.dp(.5) |
145 | - border.color: "black" |
146 | - MouseArea { anchors.fill: parent; onClicked: root.maximize() } |
147 | + hoverEnabled: true |
148 | + height: parent.height |
149 | + width: height |
150 | + onClicked: root.maximize() |
151 | + |
152 | + Rectangle { |
153 | + anchors.centerIn: parent |
154 | + width: units.gu(2) |
155 | + height: units.gu(2) |
156 | + radius: height / 2 |
157 | + color: "#888888" |
158 | + visible: parent.containsMouse |
159 | + } |
160 | + Icon { |
161 | + width: height |
162 | + height: parent.height *.5 |
163 | + anchors.centerIn: parent |
164 | + source: "graphics/window-maximize.svg" |
165 | + color: root.active ? "white" : "#5d5d5d" |
166 | + keyColor: "black" |
167 | + } |
168 | } |
169 | } |
170 | |
171 | === added file 'qml/Components/graphics/window-close.svg' |
172 | --- qml/Components/graphics/window-close.svg 1970-01-01 00:00:00 +0000 |
173 | +++ qml/Components/graphics/window-close.svg 2015-11-25 16:12:37 +0000 |
174 | @@ -0,0 +1,14 @@ |
175 | +<?xml version="1.0" encoding="iso-8859-1"?> |
176 | +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> |
177 | +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> |
178 | +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" |
179 | + width="94.926px" height="94.926px" viewBox="0 0 94.926 94.926" style="enable-background:new 0 0 94.926 94.926;" |
180 | + xml:space="preserve"> |
181 | +<g> |
182 | + <path d="M55.931,47.463L94.306,9.09c0.826-0.827,0.826-2.167,0-2.994L88.833,0.62C88.436,0.224,87.896,0,87.335,0 |
183 | + c-0.562,0-1.101,0.224-1.498,0.62L47.463,38.994L9.089,0.62c-0.795-0.795-2.202-0.794-2.995,0L0.622,6.096 |
184 | + c-0.827,0.827-0.827,2.167,0,2.994l38.374,38.373L0.622,85.836c-0.827,0.827-0.827,2.167,0,2.994l5.473,5.476 |
185 | + c0.397,0.396,0.936,0.62,1.498,0.62s1.1-0.224,1.497-0.62l38.374-38.374l38.374,38.374c0.397,0.396,0.937,0.62,1.498,0.62 |
186 | + s1.101-0.224,1.498-0.62l5.473-5.476c0.826-0.827,0.826-2.167,0-2.994L55.931,47.463z"/> |
187 | +</g> |
188 | +</svg> |
189 | |
190 | === added file 'qml/Components/graphics/window-maximize.svg' |
191 | --- qml/Components/graphics/window-maximize.svg 1970-01-01 00:00:00 +0000 |
192 | +++ qml/Components/graphics/window-maximize.svg 2015-11-25 16:12:37 +0000 |
193 | @@ -0,0 +1,12 @@ |
194 | +<?xml version="1.0" encoding="iso-8859-1"?> |
195 | +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> |
196 | +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> |
197 | +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" |
198 | + width="459px" height="459px" viewBox="0 0 459 459" style="enable-background:new 0 0 459 459;" xml:space="preserve"> |
199 | +<g> |
200 | + <g id="check-box-outline-blank"> |
201 | + <path d="M408,51v357H51V51H408 M408,0H51C22.95,0,0,22.95,0,51v357c0,28.05,22.95,51,51,51h357c28.05,0,51-22.95,51-51V51 |
202 | + C459,22.95,436.05,0,408,0L408,0z"/> |
203 | + </g> |
204 | +</g> |
205 | +</svg> |
206 | |
207 | === added file 'qml/Components/graphics/window-minimize.svg' |
208 | --- qml/Components/graphics/window-minimize.svg 1970-01-01 00:00:00 +0000 |
209 | +++ qml/Components/graphics/window-minimize.svg 2015-11-25 16:12:37 +0000 |
210 | @@ -0,0 +1,13 @@ |
211 | +<?xml version="1.0" encoding="iso-8859-1"?> |
212 | +<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> |
213 | +<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> |
214 | +<svg version="1.1" id="Capa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" |
215 | + width="121.805px" height="121.804px" viewBox="0 0 121.805 121.804" style="enable-background:new 0 0 121.805 121.804;" |
216 | + xml:space="preserve"> |
217 | +<g> |
218 | + <g> |
219 | + <path d="M7.308,68.211h107.188c4.037,0,7.309-3.272,7.309-7.31c0-4.037-3.271-7.309-7.309-7.309H7.308 |
220 | + C3.272,53.593,0,56.865,0,60.902C0,64.939,3.272,68.211,7.308,68.211z"/> |
221 | + </g> |
222 | +</g> |
223 | +</svg> |
224 | |
225 | === modified file 'qml/Panel/Handle.qml' |
226 | --- qml/Panel/Handle.qml 2015-07-15 15:07:19 +0000 |
227 | +++ qml/Panel/Handle.qml 2015-11-25 16:12:37 +0000 |
228 | @@ -19,7 +19,7 @@ |
229 | |
230 | Rectangle { |
231 | id: handle |
232 | - color: "#333333" |
233 | + color: "#5d5d5d" |
234 | height: units.gu(2) |
235 | property bool active: false |
236 | |
237 | @@ -35,7 +35,7 @@ |
238 | id: dot |
239 | width: units.dp(3) |
240 | height: width |
241 | - color: handle.active ? "#de4814" : "#717171" |
242 | + color: handle.active ? UbuntuColors.orange : "#888888" |
243 | radius: units.dp(1) |
244 | } |
245 | } |
246 | |
247 | === modified file 'qml/Panel/IndicatorItem.qml' |
248 | --- qml/Panel/IndicatorItem.qml 2015-09-29 12:28:10 +0000 |
249 | +++ qml/Panel/IndicatorItem.qml 2015-11-25 16:12:37 +0000 |
250 | @@ -66,6 +66,7 @@ |
251 | opacity: 1.0 |
252 | font.family: "Ubuntu" |
253 | fontSize: "medium" |
254 | + font.weight: Font.Light |
255 | color: root.color |
256 | Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } } |
257 | } |
258 | @@ -126,6 +127,7 @@ |
259 | opacity: 1.0 |
260 | font.family: "Ubuntu" |
261 | fontSize: "medium" |
262 | + font.weight: Font.Light |
263 | color: root.color |
264 | Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } } |
265 | } |
266 | @@ -142,6 +144,7 @@ |
267 | |
268 | text: title !== "" ? title : identifier |
269 | fontSize: "x-small" |
270 | + font.weight: Font.Light |
271 | horizontalAlignment: Text.AlignHCenter |
272 | opacity: 0 |
273 | color: root.color |
274 | |
275 | === modified file 'qml/Panel/Indicators/client/IndicatorsClient.qml' |
276 | --- qml/Panel/Indicators/client/IndicatorsClient.qml 2015-07-15 15:07:19 +0000 |
277 | +++ qml/Panel/Indicators/client/IndicatorsClient.qml 2015-11-25 16:12:37 +0000 |
278 | @@ -22,7 +22,7 @@ |
279 | import Ubuntu.Components.ListItems 1.3 as ListItem |
280 | |
281 | Rectangle { |
282 | - color: "black" |
283 | + color: "#292929" |
284 | id: root |
285 | |
286 | Component.onCompleted: { |
287 | |
288 | === modified file 'qml/Panel/IndicatorsMenu.qml' |
289 | --- qml/Panel/IndicatorsMenu.qml 2015-09-02 07:42:27 +0000 |
290 | +++ qml/Panel/IndicatorsMenu.qml 2015-11-25 16:12:37 +0000 |
291 | @@ -38,7 +38,7 @@ |
292 | property bool enableHint: true |
293 | property bool contentEnabled: true |
294 | property bool showOnClick: true |
295 | - property color panelColor: "black" |
296 | + property color panelColor: "#292929" |
297 | |
298 | signal showTapped(point position) |
299 | |
300 | @@ -110,7 +110,7 @@ |
301 | height: units.gu(0.5) |
302 | gradient: Gradient { |
303 | GradientStop { position: 0.0; color: "transparent" } |
304 | - GradientStop { position: 1.0; color: "black" } |
305 | + GradientStop { position: 1.0; color: "#292929" } |
306 | } |
307 | opacity: 0.3 |
308 | } |
309 | |
310 | === modified file 'qml/Panel/MenuContent.qml' |
311 | --- qml/Panel/MenuContent.qml 2015-07-15 15:13:18 +0000 |
312 | +++ qml/Panel/MenuContent.qml 2015-11-25 16:12:37 +0000 |
313 | @@ -27,7 +27,7 @@ |
314 | |
315 | property QtObject indicatorsModel: null |
316 | property int currentMenuIndex: -1 |
317 | - color: "#221e1c" // FIXME not in palette yet |
318 | + color: "#292929" // FIXME not in palette yet |
319 | |
320 | width: units.gu(40) |
321 | height: units.gu(42) |
322 | |
323 | === modified file 'qml/Panel/Panel.qml' |
324 | --- qml/Panel/Panel.qml 2015-11-09 10:16:18 +0000 |
325 | +++ qml/Panel/Panel.qml 2015-11-25 16:12:37 +0000 |
326 | @@ -30,23 +30,12 @@ |
327 | property real indicatorAreaShowProgress: 1.0 |
328 | property bool locked: false |
329 | |
330 | - opacity: fullscreenMode && indicators.fullyClosed ? 0.0 : 1.0 |
331 | - |
332 | - Binding { |
333 | - target: PanelState |
334 | - property: "panelHeight" |
335 | - value: root.panelHeight |
336 | - } |
337 | - |
338 | Rectangle { |
339 | id: darkenedArea |
340 | property real darkenedOpacity: 0.6 |
341 | anchors { |
342 | - top: parent.top |
343 | + fill: parent |
344 | topMargin: panelHeight |
345 | - left: parent.left |
346 | - right: parent.right |
347 | - bottom: parent.bottom |
348 | } |
349 | color: "black" |
350 | opacity: indicators.unitProgress * darkenedOpacity |
351 | @@ -59,16 +48,18 @@ |
352 | } |
353 | } |
354 | |
355 | + Binding { |
356 | + target: PanelState |
357 | + property: "panelHeight" |
358 | + value: indicators.minimizedPanelHeight |
359 | + } |
360 | + |
361 | Item { |
362 | id: indicatorArea |
363 | objectName: "indicatorArea" |
364 | |
365 | anchors.fill: parent |
366 | |
367 | - Behavior on anchors.topMargin { |
368 | - NumberAnimation { duration: UbuntuAnimation.FastDuration; easing: UbuntuAnimation.StandardEasing } |
369 | - } |
370 | - |
371 | transform: Translate { |
372 | y: indicators.state === "initial" |
373 | ? (1.0 - indicatorAreaShowProgress) * -d.indicatorHeight |
374 | @@ -76,7 +67,7 @@ |
375 | } |
376 | |
377 | BorderImage { |
378 | - id: dropShadow |
379 | + id: indicatorsDropShadow |
380 | anchors { |
381 | fill: indicators |
382 | leftMargin: -units.gu(1) |
383 | @@ -86,9 +77,19 @@ |
384 | source: "graphics/rectangular_dropshadow.sci" |
385 | } |
386 | |
387 | + BorderImage { |
388 | + id: panelDropShadow |
389 | + anchors { |
390 | + fill: indicatorAreaBackground |
391 | + bottomMargin: -units.gu(1) |
392 | + } |
393 | + visible: PanelState.dropShadow && !callHint.visible |
394 | + source: "graphics/rectangular_dropshadow.sci" |
395 | + } |
396 | + |
397 | Rectangle { |
398 | id: indicatorAreaBackground |
399 | - color: callHint.visible ? "green" : "black" |
400 | + color: callHint.visible ? "green" : "#292929" |
401 | anchors { |
402 | top: parent.top |
403 | left: parent.left |
404 | @@ -99,30 +100,6 @@ |
405 | Behavior on color { ColorAnimation { duration: UbuntuAnimation.FastDuration } } |
406 | } |
407 | |
408 | - PanelSeparatorLine { |
409 | - id: orangeLine |
410 | - anchors { |
411 | - top: indicatorAreaBackground.bottom |
412 | - left: parent.left |
413 | - right: indicators.left |
414 | - } |
415 | - saturation: 1 - indicators.unitProgress |
416 | - |
417 | - // Don't let input event pass trough |
418 | - MouseArea { anchors.fill: parent } |
419 | - } |
420 | - |
421 | - Image { |
422 | - anchors { |
423 | - top: indicators.top |
424 | - bottom: indicators.bottom |
425 | - right: indicators.left |
426 | - topMargin: indicatorArea.anchors.topMargin + indicators.minimizedPanelHeight |
427 | - } |
428 | - width: units.dp(2) |
429 | - source: "graphics/VerticalDivider.png" |
430 | - } |
431 | - |
432 | MouseArea { |
433 | anchors { |
434 | top: parent.top |
435 | @@ -130,7 +107,29 @@ |
436 | right: indicators.left |
437 | } |
438 | height: indicators.minimizedPanelHeight |
439 | - onClicked: { if (callHint.visible) { callHint.showLiveCall(); } } |
440 | + hoverEnabled: true |
441 | + onClicked: callHint.visible ? callHint.showLiveCall() : PanelState.focusMaximizedApp() |
442 | + onDoubleClicked: PanelState.maximize() |
443 | + |
444 | + // WindowControlButtons inside the mouse area, otherwise QML doesn't grok nested hover events :/ |
445 | + // cf. https://bugreports.qt.io/browse/QTBUG-32909 |
446 | + WindowControlButtons { |
447 | + id: windowControlButtons |
448 | + objectName: "panelWindowControlButtons" |
449 | + anchors { |
450 | + left: parent.left |
451 | + top: parent.top |
452 | + leftMargin: units.gu(1) |
453 | + topMargin: units.gu(0.5) |
454 | + bottomMargin: units.gu(0.5) |
455 | + } |
456 | + height: indicators.minimizedPanelHeight - anchors.topMargin - anchors.bottomMargin |
457 | + visible: PanelState.buttonsVisible && parent.containsMouse && !root.locked && !callHint.visible |
458 | + active: PanelState.buttonsVisible |
459 | + onClose: PanelState.close() |
460 | + onMinimize: PanelState.minimize() |
461 | + onMaximize: PanelState.maximize() |
462 | + } |
463 | } |
464 | |
465 | IndicatorsMenu { |
466 | @@ -146,7 +145,7 @@ |
467 | width: root.width - (windowControlButtons.visible ? windowControlButtons.width + titleLabel.width : 0) |
468 | minimizedPanelHeight: units.gu(3) |
469 | expandedPanelHeight: units.gu(7) |
470 | - openedHeight: root.height - indicatorOrangeLine.height |
471 | + openedHeight: root.height |
472 | |
473 | overFlowWidth: { |
474 | if (callHint.visible) { |
475 | @@ -163,58 +162,34 @@ |
476 | callHint.showLiveCall(); |
477 | } |
478 | } |
479 | - |
480 | - hideDragHandle { |
481 | - anchors.bottomMargin: -indicatorOrangeLine.height |
482 | - } |
483 | - } |
484 | - |
485 | - WindowControlButtons { |
486 | - id: windowControlButtons |
487 | - objectName: "panelWindowControlButtons" |
488 | - anchors { |
489 | - left: parent.left |
490 | - top: parent.top |
491 | - margins: units.gu(0.7) |
492 | - } |
493 | - height: indicators.minimizedPanelHeight - anchors.margins * 2 |
494 | - visible: PanelState.buttonsVisible && !root.locked |
495 | - onClose: PanelState.close() |
496 | - onMinimize: PanelState.minimize() |
497 | - onMaximize: PanelState.maximize() |
498 | } |
499 | |
500 | Label { |
501 | id: titleLabel |
502 | objectName: "windowDecorationTitle" |
503 | anchors { |
504 | - left: windowControlButtons.right |
505 | + left: parent.left |
506 | top: parent.top |
507 | - margins: units.gu(0.7) |
508 | + leftMargin: units.gu(1) |
509 | + topMargin: units.gu(0.5) |
510 | + bottomMargin: units.gu(0.5) |
511 | } |
512 | - color: "#DFDBD2" |
513 | - height: windowControlButtons.height |
514 | - visible: windowControlButtons.visible |
515 | + color: PanelState.buttonsVisible ? "#ffffff" : "#5d5d5d" |
516 | + height: indicators.minimizedPanelHeight - anchors.topMargin - anchors.bottomMargin |
517 | + visible: !windowControlButtons.visible && !root.locked && !callHint.visible |
518 | verticalAlignment: Text.AlignVCenter |
519 | - fontSize: "small" |
520 | - font.bold: true |
521 | + fontSize: "medium" |
522 | + font.weight: Font.Normal |
523 | text: PanelState.title |
524 | } |
525 | |
526 | - PanelSeparatorLine { |
527 | - id: indicatorOrangeLine |
528 | - anchors { |
529 | - top: indicators.bottom |
530 | - left: indicators.left |
531 | - right: indicators.right |
532 | - } |
533 | - } |
534 | + // TODO here would the Locally integrated menus come |
535 | |
536 | ActiveCallHint { |
537 | id: __callHint |
538 | anchors { |
539 | top: parent.top |
540 | - left: windowControlButtons.visible ? windowControlButtons.right : parent.left |
541 | + left: parent.left |
542 | } |
543 | height: indicators.minimizedPanelHeight |
544 | visible: active && indicators.state == "initial" |
545 | @@ -224,7 +199,7 @@ |
546 | QtObject { |
547 | id: d |
548 | objectName: "panelPriv" |
549 | - readonly property real indicatorHeight: indicators.minimizedPanelHeight + indicatorOrangeLine.height |
550 | + readonly property real indicatorHeight: indicators.minimizedPanelHeight |
551 | } |
552 | |
553 | states: [ |
554 | @@ -234,6 +209,7 @@ |
555 | PropertyChanges { |
556 | target: indicatorArea; |
557 | anchors.topMargin: 0 |
558 | + opacity: 1; |
559 | } |
560 | }, |
561 | State { |
562 | @@ -242,6 +218,7 @@ |
563 | PropertyChanges { |
564 | target: indicatorArea; |
565 | anchors.topMargin: indicators.state === "initial" ? -d.indicatorHeight : 0 |
566 | + opacity: indicators.fullyClosed ? 0.0 : 1.0 |
567 | } |
568 | PropertyChanges { |
569 | target: indicators.showDragHandle; |
570 | @@ -249,4 +226,15 @@ |
571 | } |
572 | } |
573 | ] |
574 | + |
575 | + transitions: [ |
576 | + Transition { |
577 | + to: "onscreen" |
578 | + UbuntuNumberAnimation { target: indicatorArea; properties: "anchors.topMargin,opacity" } |
579 | + }, |
580 | + Transition { |
581 | + to: "offscreen" |
582 | + UbuntuNumberAnimation { target: indicatorArea; properties: "anchors.topMargin,opacity" } |
583 | + } |
584 | + ] |
585 | } |
586 | |
587 | === removed file 'qml/Panel/PanelBackground.qml' |
588 | --- qml/Panel/PanelBackground.qml 2015-07-15 15:07:19 +0000 |
589 | +++ qml/Panel/PanelBackground.qml 1970-01-01 00:00:00 +0000 |
590 | @@ -1,21 +0,0 @@ |
591 | -/* |
592 | - * Copyright (C) 2013 Canonical, Ltd. |
593 | - * |
594 | - * This program is free software; you can redistribute it and/or modify |
595 | - * it under the terms of the GNU General Public License as published by |
596 | - * the Free Software Foundation; version 3. |
597 | - * |
598 | - * This program is distributed in the hope that it will be useful, |
599 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
600 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
601 | - * GNU General Public License for more details. |
602 | - * |
603 | - * You should have received a copy of the GNU General Public License |
604 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
605 | - */ |
606 | - |
607 | -import QtQuick 2.4 |
608 | - |
609 | -Rectangle { |
610 | - color: "black" |
611 | -} |
612 | |
613 | === removed file 'qml/Panel/PanelSeparatorLine.qml' |
614 | --- qml/Panel/PanelSeparatorLine.qml 2015-07-15 15:07:19 +0000 |
615 | +++ qml/Panel/PanelSeparatorLine.qml 1970-01-01 00:00:00 +0000 |
616 | @@ -1,25 +0,0 @@ |
617 | -/* |
618 | - * Copyright (C) 2013 Canonical, Ltd. |
619 | - * |
620 | - * This program is free software; you can redistribute it and/or modify |
621 | - * it under the terms of the GNU General Public License as published by |
622 | - * the Free Software Foundation; version 3. |
623 | - * |
624 | - * This program is distributed in the hope that it will be useful, |
625 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
626 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
627 | - * GNU General Public License for more details. |
628 | - * |
629 | - * You should have received a copy of the GNU General Public License |
630 | - * along with this program. If not, see <http://www.gnu.org/licenses/>. |
631 | - */ |
632 | - |
633 | -import QtQuick 2.4 |
634 | - |
635 | -Rectangle { |
636 | - property real saturation: 1.0 |
637 | - |
638 | - // orange in HSL |
639 | - color: Qt.hsla(16.0/360.0, saturation * 0.83, 0.47, 1.0) |
640 | - height: units.dp(2) |
641 | -} |
642 | |
643 | === modified file 'qml/Shell.qml' |
644 | --- qml/Shell.qml 2015-11-06 10:06:58 +0000 |
645 | +++ qml/Shell.qml 2015-11-25 16:12:37 +0000 |
646 | @@ -269,7 +269,7 @@ |
647 | target: applicationsDisplayLoader.item |
648 | property: "maximizedAppTopMargin" |
649 | // Not just using panel.panelHeight as that changes depending on the focused app. |
650 | - value: panel.indicators.minimizedPanelHeight + units.dp(2) // dp(2) for orange line |
651 | + value: panel.indicators.minimizedPanelHeight |
652 | } |
653 | Binding { |
654 | target: applicationsDisplayLoader.item |
655 | |
656 | === modified file 'qml/Stages/ApplicationWindow.qml' |
657 | --- qml/Stages/ApplicationWindow.qml 2015-11-25 16:12:36 +0000 |
658 | +++ qml/Stages/ApplicationWindow.qml 2015-11-25 16:12:37 +0000 |
659 | @@ -56,7 +56,7 @@ |
660 | // Whether the Application had a surface before but lost it. |
661 | property bool hadSurface: sessionContainer.surfaceContainer.hadSurface |
662 | |
663 | - property bool needToTakeScreenshot: |
664 | + readonly property bool needToTakeScreenshot: |
665 | ((sessionContainer.surface && d.surfaceInitialized) || d.hadSurface) |
666 | && screenshotImage.status === Image.Null |
667 | && d.applicationState === ApplicationInfoInterface.Stopped |
668 | @@ -71,7 +71,7 @@ |
669 | // Remove this when possible |
670 | property bool surfaceInitialized: false |
671 | |
672 | - property bool supportsSurfaceResize: |
673 | + readonly property bool supportsSurfaceResize: |
674 | application && |
675 | ((application.supportedOrientations & Qt.PortraitOrientation) |
676 | || (application.supportedOrientations & Qt.InvertedPortraitOrientation)) |
677 | |
678 | === modified file 'qml/Stages/DecoratedWindow.qml' |
679 | --- qml/Stages/DecoratedWindow.qml 2015-11-25 16:12:36 +0000 |
680 | +++ qml/Stages/DecoratedWindow.qml 2015-11-25 16:12:37 +0000 |
681 | @@ -24,14 +24,15 @@ |
682 | id: root |
683 | |
684 | width: applicationWindow.width |
685 | - height: (root.decorationShown ? decoration.height : 0) + applicationWindow.height |
686 | + height: (decorationShown ? decoration.height : 0) + applicationWindow.height |
687 | |
688 | property alias window: applicationWindow |
689 | property alias application: applicationWindow.application |
690 | property alias active: decoration.active |
691 | property alias title: decoration.title |
692 | + property alias fullscreen: applicationWindow.fullscreen |
693 | |
694 | - property bool decorationShown: true |
695 | + readonly property bool decorationShown: !fullscreen |
696 | property bool highlightShown: false |
697 | property real shadowOpacity: 1 |
698 | |
699 | @@ -43,15 +44,6 @@ |
700 | signal minimize() |
701 | signal decorationPressed() |
702 | |
703 | - BorderImage { |
704 | - anchors { |
705 | - fill: root |
706 | - margins: -units.gu(2) |
707 | - } |
708 | - source: "graphics/dropshadow2gu.sci" |
709 | - opacity: root.shadowOpacity * .3 |
710 | - } |
711 | - |
712 | Rectangle { |
713 | id: selectionHighlight |
714 | anchors.fill: parent |
715 | @@ -64,7 +56,17 @@ |
716 | anchors { left: selectionHighlight.left; right: selectionHighlight.right; bottom: selectionHighlight.bottom; } |
717 | height: units.dp(2) |
718 | color: UbuntuColors.orange |
719 | - visible: root.highlightShown |
720 | + visible: highlightShown |
721 | + } |
722 | + |
723 | + BorderImage { |
724 | + anchors { |
725 | + fill: root |
726 | + margins: active ? -units.gu(2) : -units.gu(1.5) |
727 | + } |
728 | + source: "graphics/dropshadow2gu.sci" |
729 | + opacity: root.shadowOpacity * .3 |
730 | + enabled: !fullscreen |
731 | } |
732 | |
733 | WindowDecoration { |
734 | @@ -74,12 +76,13 @@ |
735 | anchors { left: parent.left; top: parent.top; right: parent.right } |
736 | height: units.gu(3) |
737 | width: root.width |
738 | - title: window.title !== "" ? window.title : "" |
739 | + title: window.title |
740 | + visible: root.decorationShown |
741 | + |
742 | onClose: root.close(); |
743 | - onMaximize: root.maximize(); |
744 | + onMaximize: { root.decorationPressed(); root.maximize(); } |
745 | onMinimize: root.minimize(); |
746 | onPressed: root.decorationPressed(); |
747 | - visible: decorationShown |
748 | } |
749 | |
750 | ApplicationWindow { |
751 | |
752 | === modified file 'qml/Stages/DesktopStage.qml' |
753 | --- qml/Stages/DesktopStage.qml 2015-11-25 16:12:36 +0000 |
754 | +++ qml/Stages/DesktopStage.qml 2015-11-25 16:12:37 +0000 |
755 | @@ -12,12 +12,9 @@ |
756 | * |
757 | * You should have received a copy of the GNU General Public License |
758 | * along with this program. If not, see <http://www.gnu.org/licenses/>. |
759 | - * |
760 | - * Authors: Michael Zanetti <michael.zanetti@canonical.com> |
761 | */ |
762 | |
763 | import QtQuick 2.4 |
764 | -import QtQuick.Layouts 1.1 |
765 | import Ubuntu.Components 1.3 |
766 | import Unity.Application 0.1 |
767 | import "../Components/PanelState" |
768 | @@ -55,7 +52,7 @@ |
769 | onFocusRequested: { |
770 | var appIndex = priv.indexOf(appId); |
771 | var appDelegate = appRepeater.itemAt(appIndex); |
772 | - appDelegate.restoreFromMinimized(); |
773 | + appDelegate.restore(); |
774 | |
775 | if (spread.state == "altTab") { |
776 | spread.cancel(); |
777 | @@ -107,7 +104,7 @@ |
778 | id: minimizeRestoreShortcut |
779 | shortcut: Qt.MetaModifier|Qt.ControlModifier|Qt.Key_Down |
780 | onTriggered: priv.focusedAppDelegate.maximized || priv.focusedAppDelegate.maximizedLeft || priv.focusedAppDelegate.maximizedRight |
781 | - ? priv.focusedAppDelegate.restore() : priv.focusedAppDelegate.minimize(true) |
782 | + ? priv.focusedAppDelegate.restoreFromMaximized() : priv.focusedAppDelegate.minimize() |
783 | active: priv.focusedAppDelegate !== null |
784 | } |
785 | |
786 | @@ -119,18 +116,16 @@ |
787 | var index = indexOf(focusedAppId); |
788 | return index >= 0 && index < appRepeater.count ? appRepeater.itemAt(index) : null |
789 | } |
790 | + onFocusedAppDelegateChanged: updateForegroundMaximizedApp(); |
791 | + |
792 | property int foregroundMaximizedAppIdIndex: -1 |
793 | |
794 | function updateForegroundMaximizedApp() { |
795 | for (var i = 0; i < appRepeater.count; i++) { |
796 | var item = appRepeater.itemAt(i); |
797 | - |
798 | if (item && item.visuallyMaximized) { |
799 | - var app = ApplicationManager.get(i); |
800 | - if (app) { |
801 | - foregroundMaximizedAppIdIndex = i; |
802 | - return; |
803 | - } |
804 | + foregroundMaximizedAppIdIndex = i; |
805 | + return; |
806 | } |
807 | } |
808 | foregroundMaximizedAppIdIndex = -1; |
809 | @@ -149,7 +144,7 @@ |
810 | for (var i = 0; i < appRepeater.count; i++) { |
811 | var appDelegate = appRepeater.itemAt(i); |
812 | if (appDelegate && !appDelegate.minimized) { |
813 | - appDelegate.minimize(false); // minimize but don't switch focus |
814 | + appDelegate.minimize(); |
815 | } |
816 | } |
817 | |
818 | @@ -173,24 +168,47 @@ |
819 | onClose: { |
820 | ApplicationManager.stopApplication(ApplicationManager.focusedApplicationId) |
821 | } |
822 | - onMinimize: appRepeater.itemAt(0).minimize(true); |
823 | - onMaximize: appRepeater.itemAt(0).restore(); |
824 | + onMinimize: priv.focusedAppDelegate && priv.focusedAppDelegate.minimize(); |
825 | + onMaximize: priv.focusedAppDelegate // don't restore minimized apps when double clicking the panel |
826 | + && priv.focusedAppDelegate.restoreFromMaximized(); |
827 | + onFocusMaximizedApp: if (priv.foregroundMaximizedAppIdIndex != -1) { |
828 | + ApplicationManager.focusApplication(appRepeater.itemAt(priv.foregroundMaximizedAppIdIndex).appId); |
829 | + } |
830 | } |
831 | |
832 | Binding { |
833 | target: PanelState |
834 | property: "buttonsVisible" |
835 | - value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.maximized |
836 | + value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.maximized // FIXME for Locally integrated menus |
837 | + && spread.state == "" |
838 | } |
839 | |
840 | Binding { |
841 | target: PanelState |
842 | property: "title" |
843 | - value: priv.focusedAppDelegate !== null && priv.focusedAppDelegate.title |
844 | - when: priv.focusedAppDelegate && priv.focusedAppDelegate.maximized |
845 | - } |
846 | - |
847 | - Component.onDestruction: PanelState.buttonsVisible = false; |
848 | + value: { |
849 | + if (priv.focusedAppDelegate !== null && spread.state == "") { |
850 | + if (priv.focusedAppDelegate.maximized) |
851 | + return priv.focusedAppDelegate.title |
852 | + else |
853 | + return priv.focusedAppDelegate.appName |
854 | + } |
855 | + return "" |
856 | + } |
857 | + when: priv.focusedAppDelegate |
858 | + } |
859 | + |
860 | + Binding { |
861 | + target: PanelState |
862 | + property: "dropShadow" |
863 | + value: priv.focusedAppDelegate && !priv.focusedAppDelegate.maximized && priv.foregroundMaximizedAppIdIndex !== -1 |
864 | + } |
865 | + |
866 | + Component.onDestruction: { |
867 | + PanelState.title = ""; |
868 | + PanelState.buttonsVisible = false; |
869 | + PanelState.dropShadow = false; |
870 | + } |
871 | |
872 | FocusScope { |
873 | id: appContainer |
874 | @@ -211,19 +229,16 @@ |
875 | model: ApplicationManager |
876 | objectName: "appRepeater" |
877 | |
878 | - onItemAdded: priv.updateForegroundMaximizedApp() |
879 | - onItemRemoved: priv.updateForegroundMaximizedApp() |
880 | - |
881 | delegate: FocusScope { |
882 | id: appDelegate |
883 | objectName: "appDelegate_" + appId |
884 | z: ApplicationManager.count - index |
885 | - y: units.gu(3) |
886 | + y: PanelState.panelHeight |
887 | + focus: appId === priv.focusedAppId |
888 | width: decoratedWindow.width |
889 | height: decoratedWindow.height |
890 | property alias requestedWidth: decoratedWindow.requestedWidth |
891 | property alias requestedHeight: decoratedWindow.requestedHeight |
892 | - focus: model.appId === priv.focusedAppId |
893 | |
894 | QtObject { |
895 | id: appDelegatePrivate |
896 | @@ -240,6 +255,7 @@ |
897 | readonly property string appId: model.appId |
898 | property bool animationsEnabled: true |
899 | property alias title: decoratedWindow.title |
900 | + readonly property string appName: model.name |
901 | property bool visuallyMaximized: false |
902 | property bool visuallyMinimized: false |
903 | |
904 | @@ -249,7 +265,6 @@ |
905 | } |
906 | } |
907 | |
908 | - onZChanged: priv.updateForegroundMaximizedApp() |
909 | onVisuallyMaximizedChanged: priv.updateForegroundMaximizedApp() |
910 | |
911 | visible: !visuallyMinimized && |
912 | @@ -289,19 +304,18 @@ |
913 | } |
914 | function minimize(animated) { |
915 | animationsEnabled = (animated === undefined) || animated; |
916 | - appDelegatePrivate.maximized = false; |
917 | appDelegatePrivate.minimized = true; |
918 | } |
919 | + function restoreFromMaximized(animated) { |
920 | + animationsEnabled = (animated === undefined) || animated; |
921 | + appDelegatePrivate.minimized = false; |
922 | + appDelegatePrivate.maximized = false; |
923 | + appDelegatePrivate.maximizedLeft = false; |
924 | + appDelegatePrivate.maximizedRight = false; |
925 | + } |
926 | function restore(animated) { |
927 | animationsEnabled = (animated === undefined) || animated; |
928 | appDelegatePrivate.minimized = false; |
929 | - appDelegatePrivate.maximized = false; |
930 | - appDelegatePrivate.maximizedLeft = false; |
931 | - appDelegatePrivate.maximizedRight = false; |
932 | - } |
933 | - function restoreFromMinimized(animated) { |
934 | - animationsEnabled = (animated === undefined) || animated; |
935 | - appDelegatePrivate.minimized = false; |
936 | if (maximized) |
937 | maximize(); |
938 | else if (maximizedLeft) |
939 | @@ -313,6 +327,14 @@ |
940 | |
941 | states: [ |
942 | State { |
943 | + name: "fullscreen"; when: decoratedWindow.fullscreen |
944 | + extend: "maximized" |
945 | + PropertyChanges { |
946 | + target: appDelegate; |
947 | + y: -PanelState.panelHeight |
948 | + } |
949 | + }, |
950 | + State { |
951 | name: "normal"; |
952 | when: !appDelegate.maximized && !appDelegate.minimized |
953 | && !appDelegate.maximizedLeft && !appDelegate.maximizedRight |
954 | @@ -323,7 +345,7 @@ |
955 | } |
956 | }, |
957 | State { |
958 | - name: "maximized"; when: appDelegate.maximized |
959 | + name: "maximized"; when: appDelegate.maximized && !appDelegate.minimized |
960 | PropertyChanges { |
961 | target: appDelegate; |
962 | x: 0; y: 0; |
963 | @@ -334,11 +356,13 @@ |
964 | }, |
965 | State { |
966 | name: "maximizedLeft"; when: appDelegate.maximizedLeft && !appDelegate.minimized |
967 | - PropertyChanges { target: appDelegate; x: 0; y: units.gu(3); width: root.width/2; height: root.height - units.gu(3) } |
968 | + PropertyChanges { target: appDelegate; x: 0; y: PanelState.panelHeight; |
969 | + requestedWidth: root.width/2; requestedHeight: root.height - PanelState.panelHeight } |
970 | }, |
971 | State { |
972 | name: "maximizedRight"; when: appDelegate.maximizedRight && !appDelegate.minimized |
973 | - PropertyChanges { target: appDelegate; x: root.width/2; y: units.gu(3); width: root.width/2; height: root.height - units.gu(3) } |
974 | + PropertyChanges { target: appDelegate; x: root.width/2; y: PanelState.panelHeight; |
975 | + requestedWidth: root.width/2; requestedHeight: root.height - PanelState.panelHeight } |
976 | }, |
977 | State { |
978 | name: "minimized"; when: appDelegate.minimized |
979 | @@ -360,15 +384,6 @@ |
980 | UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration } |
981 | }, |
982 | Transition { |
983 | - to: "maximized" |
984 | - enabled: appDelegate.animationsEnabled |
985 | - PropertyAction { target: appDelegate; property: "visuallyMinimized" } |
986 | - SequentialAnimation { |
987 | - UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration } |
988 | - PropertyAction { target: appDelegate; property: "visuallyMaximized" } |
989 | - } |
990 | - }, |
991 | - Transition { |
992 | to: "minimized" |
993 | enabled: appDelegate.animationsEnabled |
994 | PropertyAction { target: appDelegate; property: "visuallyMaximized" } |
995 | @@ -377,12 +392,21 @@ |
996 | PropertyAction { target: appDelegate; property: "visuallyMinimized" } |
997 | ScriptAction { |
998 | script: { |
999 | - if (appDelegate.animationsEnabled && state === "minimized" ) { |
1000 | + if (appDelegate.minimized) { |
1001 | priv.focusNext(); |
1002 | } |
1003 | } |
1004 | } |
1005 | } |
1006 | + }, |
1007 | + Transition { |
1008 | + to: "*" //maximized and fullscreen |
1009 | + enabled: appDelegate.animationsEnabled |
1010 | + PropertyAction { target: appDelegate; property: "visuallyMinimized" } |
1011 | + SequentialAnimation { |
1012 | + UbuntuNumberAnimation { target: appDelegate; properties: "x,y,opacity,requestedWidth,requestedHeight,scale"; duration: UbuntuAnimation.FastDuration } |
1013 | + PropertyAction { target: appDelegate; property: "visuallyMaximized" } |
1014 | + } |
1015 | } |
1016 | ] |
1017 | |
1018 | @@ -418,8 +442,8 @@ |
1019 | |
1020 | onClose: ApplicationManager.stopApplication(model.appId) |
1021 | onMaximize: appDelegate.maximized || appDelegate.maximizedLeft || appDelegate.maximizedRight |
1022 | - ? appDelegate.restore() : appDelegate.maximize() |
1023 | - onMinimize: appDelegate.minimize(true) |
1024 | + ? appDelegate.restoreFromMaximized() : appDelegate.maximize() |
1025 | + onMinimize: appDelegate.minimize() |
1026 | onDecorationPressed: { ApplicationManager.focusApplication(model.appId) } |
1027 | } |
1028 | } |
1029 | |
1030 | === modified file 'qml/Stages/WindowDecoration.qml' |
1031 | --- qml/Stages/WindowDecoration.qml 2015-11-09 10:16:18 +0000 |
1032 | +++ qml/Stages/WindowDecoration.qml 2015-11-25 16:12:37 +0000 |
1033 | @@ -33,6 +33,8 @@ |
1034 | signal minimize() |
1035 | signal maximize() |
1036 | |
1037 | + onDoubleClicked: root.maximize() |
1038 | + |
1039 | QtObject { |
1040 | id: priv |
1041 | property real distanceX |
1042 | @@ -65,20 +67,23 @@ |
1043 | anchors.fill: parent |
1044 | anchors.bottomMargin: -radius |
1045 | radius: units.gu(.5) |
1046 | - gradient: Gradient { |
1047 | - GradientStop { color: "#626055"; position: 0 } |
1048 | - GradientStop { color: "#3C3B37"; position: 1 } |
1049 | - } |
1050 | + color: "#292929" |
1051 | } |
1052 | |
1053 | Row { |
1054 | - anchors { fill: parent; margins: units.gu(0.7) } |
1055 | - spacing: units.gu(1) |
1056 | - opacity: root.active ? 1 : 0.5 |
1057 | + anchors { |
1058 | + fill: parent |
1059 | + leftMargin: units.gu(1) |
1060 | + rightMargin: units.gu(1) |
1061 | + topMargin: units.gu(0.5) |
1062 | + bottomMargin: units.gu(0.5) |
1063 | + } |
1064 | + spacing: units.gu(3) |
1065 | |
1066 | WindowControlButtons { |
1067 | id: buttons |
1068 | height: parent.height |
1069 | + active: root.active |
1070 | onClose: root.close(); |
1071 | onMinimize: root.minimize(); |
1072 | onMaximize: root.maximize(); |
1073 | @@ -87,12 +92,12 @@ |
1074 | Label { |
1075 | id: titleLabel |
1076 | objectName: "windowDecorationTitle" |
1077 | - color: "#DFDBD2" |
1078 | + color: root.active ? "white" : "#5d5d5d" |
1079 | height: parent.height |
1080 | width: parent.width - buttons.width - parent.anchors.rightMargin - parent.anchors.leftMargin |
1081 | verticalAlignment: Text.AlignVCenter |
1082 | - fontSize: "small" |
1083 | - font.bold: true |
1084 | + fontSize: "medium" |
1085 | + font.weight: root.active ? Font.Light : Font.Normal |
1086 | elide: Text.ElideRight |
1087 | } |
1088 | } |
1089 | |
1090 | === modified file 'qml/Stages/WindowResizeArea.qml' |
1091 | --- qml/Stages/WindowResizeArea.qml 2015-11-25 16:12:36 +0000 |
1092 | +++ qml/Stages/WindowResizeArea.qml 2015-11-25 16:12:37 +0000 |
1093 | @@ -25,7 +25,7 @@ |
1094 | anchors.fill: target |
1095 | anchors.margins: -borderThickness |
1096 | |
1097 | - hoverEnabled: true |
1098 | + hoverEnabled: target && !target.maximized // don't grab the resize under the panel |
1099 | |
1100 | property var windowStateStorage: WindowStateStorage |
1101 | |
1102 | |
1103 | === modified file 'tests/qmltests/Panel/tst_Panel.qml' |
1104 | --- tests/qmltests/Panel/tst_Panel.qml 2015-08-03 13:48:14 +0000 |
1105 | +++ tests/qmltests/Panel/tst_Panel.qml 2015-11-25 16:12:37 +0000 |
1106 | @@ -23,6 +23,7 @@ |
1107 | import Unity.Indicators 0.1 as Indicators |
1108 | import Ubuntu.Telephony 0.1 as Telephony |
1109 | import "../../../qml/Panel" |
1110 | +import "../../../qml/Components/PanelState" |
1111 | |
1112 | IndicatorTest { |
1113 | id: root |
1114 | @@ -30,6 +31,12 @@ |
1115 | height: units.gu(71) |
1116 | color: "white" |
1117 | |
1118 | + Binding { |
1119 | + target: mouseEmulation |
1120 | + property: "checked" |
1121 | + value: !windowControlsCB.checked |
1122 | + } |
1123 | + |
1124 | RowLayout { |
1125 | anchors.fill: parent |
1126 | anchors.margins: units.gu(1) |
1127 | @@ -45,17 +52,18 @@ |
1128 | MouseArea { |
1129 | id: backgroundMouseArea |
1130 | anchors.fill: parent |
1131 | - } |
1132 | - |
1133 | - Panel { |
1134 | - id: panel |
1135 | - anchors.fill: parent |
1136 | - indicators { |
1137 | - width: parent.width > units.gu(60) ? units.gu(40) : parent.width |
1138 | - indicatorsModel: root.indicatorsModel |
1139 | + hoverEnabled: true |
1140 | + |
1141 | + Panel { |
1142 | + id: panel |
1143 | + anchors.fill: parent |
1144 | + indicators { |
1145 | + width: parent.width > units.gu(60) ? units.gu(40) : parent.width |
1146 | + indicatorsModel: root.indicatorsModel |
1147 | + } |
1148 | + |
1149 | + property real panelAndSeparatorHeight: panel.indicators.minimizedPanelHeight |
1150 | } |
1151 | - |
1152 | - property real panelAndSeparatorHeight: panel.indicators.minimizedPanelHeight + units.dp(2) |
1153 | } |
1154 | } |
1155 | |
1156 | @@ -93,6 +101,32 @@ |
1157 | } |
1158 | } |
1159 | |
1160 | + RowLayout { |
1161 | + Layout.fillWidth: true |
1162 | + CheckBox { |
1163 | + id: windowControlsCB |
1164 | + onClicked: PanelState.buttonsVisible = checked |
1165 | + } |
1166 | + Label { |
1167 | + text: "Show window controls" |
1168 | + } |
1169 | + } |
1170 | + |
1171 | + RowLayout { |
1172 | + Layout.fillWidth: true |
1173 | + CheckBox { |
1174 | + onClicked: { |
1175 | + if (checked) |
1176 | + PanelState.title = "Fake window title" |
1177 | + else |
1178 | + PanelState.title = "" |
1179 | + } |
1180 | + } |
1181 | + Label { |
1182 | + text: "Show fake window title" |
1183 | + } |
1184 | + } |
1185 | + |
1186 | Rectangle { |
1187 | Layout.preferredHeight: units.dp(1); |
1188 | Layout.fillWidth: true; |
1189 | @@ -127,7 +161,7 @@ |
1190 | color: "black" |
1191 | } |
1192 | |
1193 | - MouseTouchEmulationCheckbox {} |
1194 | + MouseTouchEmulationCheckbox { id: mouseEmulation } |
1195 | } |
1196 | } |
1197 | |
1198 | |
1199 | === modified file 'tests/qmltests/Stages/tst_DesktopStage.qml' |
1200 | --- tests/qmltests/Stages/tst_DesktopStage.qml 2015-11-25 16:12:36 +0000 |
1201 | +++ tests/qmltests/Stages/tst_DesktopStage.qml 2015-11-25 16:12:37 +0000 |
1202 | @@ -46,8 +46,8 @@ |
1203 | WindowStateStorage.geometry = { |
1204 | 'unity8-dash': Qt.rect(0, units.gu(3), units.gu(50), units.gu(40)), |
1205 | 'dialer-app': Qt.rect(units.gu(51), units.gu(3), units.gu(50), units.gu(40)), |
1206 | - 'camera-app': Qt.rect(0, units.gu(44), units.gu(50), units.gu(40)), |
1207 | - 'gallery-app': Qt.rect(units.gu(51), units.gu(44), units.gu(50), units.gu(40)) |
1208 | + 'gmail-webapp': Qt.rect(0, units.gu(44), units.gu(50), units.gu(40)), |
1209 | + 'twitter-webapp': Qt.rect(units.gu(51), units.gu(44), units.gu(50), units.gu(40)) |
1210 | } |
1211 | } |
1212 | |
1213 | @@ -60,10 +60,14 @@ |
1214 | |
1215 | focus: true |
1216 | |
1217 | + property bool itemDestroyed: false |
1218 | sourceComponent: Component { |
1219 | DesktopStage { |
1220 | color: "darkblue" |
1221 | anchors.fill: parent |
1222 | + Component.onDestruction: { |
1223 | + desktopStageLoader.itemDestroyed = true; |
1224 | + } |
1225 | orientations: Orientations {} |
1226 | } |
1227 | } |
1228 | @@ -114,10 +118,16 @@ |
1229 | property Item desktopStage: desktopStageLoader.status === Loader.Ready ? desktopStageLoader.item : null |
1230 | |
1231 | function cleanup() { |
1232 | + desktopStageLoader.itemDestroyed = false; |
1233 | desktopStageLoader.active = false; |
1234 | |
1235 | tryCompare(desktopStageLoader, "status", Loader.Null); |
1236 | tryCompare(desktopStageLoader, "item", null); |
1237 | + // Loader.status might be Loader.Null and Loader.item might be null but the Loader |
1238 | + // actually took place. Likely because Loader waits until the next event loop |
1239 | + // iteration to do its work. So to ensure the reload, we will wait until the |
1240 | + // Shell instance gets destroyed. |
1241 | + tryCompare(desktopStageLoader, "itemDestroyed", true); |
1242 | |
1243 | killAllRunningApps(); |
1244 | |
1245 | @@ -171,8 +181,8 @@ |
1246 | |
1247 | function test_tappingOnWindowChangesFocusedApp_data() { |
1248 | return [ |
1249 | - {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 0, focusTo: 1 }, |
1250 | - {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 1, focusTo: 0 }, |
1251 | + {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "gmail-webapp"], focusfrom: 0, focusTo: 1 }, |
1252 | + {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "gmail-webapp"], focusfrom: 1, focusTo: 0 } |
1253 | ] |
1254 | } |
1255 | |
1256 | @@ -218,8 +228,8 @@ |
1257 | |
1258 | function test_tappingOnDecorationFocusesApplication_data() { |
1259 | return [ |
1260 | - {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 0, focusTo: 1 }, |
1261 | - {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "camera-app" ], focusfrom: 1, focusTo: 0 }, |
1262 | + {tag: "dash to dialer", apps: [ "unity8-dash", "dialer-app", "gmail-webapp"], focusfrom: 0, focusTo: 1 }, |
1263 | + {tag: "dialer to dash", apps: [ "unity8-dash", "dialer-app", "gmail-webapp"], focusfrom: 1, focusTo: 0 } |
1264 | ] |
1265 | } |
1266 | |
1267 | @@ -229,12 +239,16 @@ |
1268 | var fromAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusfrom]); |
1269 | verify(fromAppDecoration); |
1270 | tap(fromAppDecoration); |
1271 | - tryCompare(ApplicationManager.findApplication(data.apps[data.focusfrom]).session.surface, "activeFocus", true); |
1272 | + var fromApp = ApplicationManager.findApplication(data.apps[data.focusfrom]); |
1273 | + verify(fromApp); |
1274 | + tryCompare(fromApp.session.surface, "activeFocus", true); |
1275 | |
1276 | var toAppDecoration = findChild(desktopStage, "appWindowDecoration_" + data.apps[data.focusTo]); |
1277 | verify(toAppDecoration); |
1278 | tap(toAppDecoration); |
1279 | - tryCompare(ApplicationManager.findApplication(data.apps[data.focusTo]).session.surface, "activeFocus", true); |
1280 | + var toApp = ApplicationManager.findApplication(data.apps[data.focusTo]); |
1281 | + verify(toApp); |
1282 | + tryCompare(toApp.session.surface, "activeFocus", true); |
1283 | } |
1284 | |
1285 | function test_clickingOnDecorationFocusesApplication_data() { |
1286 | @@ -354,26 +368,26 @@ |
1287 | function test_maximizeApplicationHidesSurfacesBehindIt() { |
1288 | var dashApp = startApplication("unity8-dash"); |
1289 | var dialerApp = startApplication("dialer-app"); |
1290 | - var cameraApp = startApplication("camera-app"); |
1291 | + var gmailApp = startApplication("gmail-webapp"); |
1292 | |
1293 | var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash"); |
1294 | verify(dashDelegate); |
1295 | var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app"); |
1296 | verify(dialerDelegate); |
1297 | - var cameraDelegate = findChild(desktopStage, "appDelegate_camera-app"); |
1298 | - verify(cameraDelegate); |
1299 | + var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp"); |
1300 | + verify(gmailDelegate); |
1301 | |
1302 | // maximize |
1303 | - findChild(dialerDelegate, "decoratedWindow").maximize(); |
1304 | + dialerDelegate.maximize(); |
1305 | tryCompare(dialerDelegate, "visuallyMaximized", true); |
1306 | |
1307 | tryCompare(dashApp.session.surface, "visible", false); |
1308 | - compare(cameraApp.session.surface.visible, true); |
1309 | + compare(gmailApp.session.surface.visible, true); |
1310 | |
1311 | // restore |
1312 | - findChild(dialerDelegate, "decoratedWindow").maximize(); |
1313 | + dialerDelegate.restoreFromMaximized(); |
1314 | compare(dashApp.session.surface.visible, true); |
1315 | - compare(cameraApp.session.surface.visible, true); |
1316 | + compare(gmailApp.session.surface.visible, true); |
1317 | } |
1318 | |
1319 | function test_applicationsBecomeVisibleWhenOccludingAppRemoved() { |
1320 | @@ -385,28 +399,52 @@ |
1321 | var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app"); |
1322 | verify(dialerDelegate); |
1323 | |
1324 | - var cameraApp = startApplication("camera-app"); |
1325 | - var cameraDelegate = findChild(desktopStage, "appDelegate_camera-app"); |
1326 | - verify(cameraDelegate); |
1327 | - findChild(dialerDelegate, "decoratedWindow").maximize(); |
1328 | - |
1329 | - var galleryApp = startApplication("gallery-app"); |
1330 | - var galleryDelegate = findChild(desktopStage, "appDelegate_gallery-app"); |
1331 | - verify(galleryDelegate); |
1332 | - findChild(galleryDelegate, "decoratedWindow").maximize(); |
1333 | + var dialerMaximizeButton = findChild(dialerDelegate, "maximizeWindowButton"); |
1334 | + verify(dialerMaximizeButton); |
1335 | + mouseClick(dialerMaximizeButton); |
1336 | + |
1337 | + var mapApp = startApplication("map"); |
1338 | + var mapDelegate = findChild(desktopStage, "appDelegate_map"); |
1339 | + verify(mapDelegate); |
1340 | + |
1341 | + var gmailApp = startApplication("gmail-webapp"); |
1342 | + var gmailDelegate = findChild(desktopStage, "appDelegate_gmail-webapp"); |
1343 | + verify(gmailDelegate); |
1344 | + |
1345 | + var gmailMaximizeButton = findChild(gmailDelegate, "maximizeWindowButton"); |
1346 | + verify(gmailMaximizeButton); |
1347 | + mouseClick(gmailMaximizeButton); |
1348 | |
1349 | tryCompare(dialerDelegate, "visuallyMaximized", true); |
1350 | - tryCompare(galleryDelegate, "visuallyMaximized", true); |
1351 | + tryCompare(gmailDelegate, "visuallyMaximized", true); |
1352 | |
1353 | tryCompare(dashApp.session.surface, "visible", false); |
1354 | tryCompare(dialerApp.session.surface, "visible", false); |
1355 | - tryCompare(cameraApp.session.surface, "visible", false); |
1356 | - |
1357 | - ApplicationManager.stopApplication("gallery-app"); |
1358 | - |
1359 | - compare(cameraApp.session.surface.visible, true); |
1360 | + tryCompare(mapApp.session.surface, "visible", false); |
1361 | + |
1362 | + ApplicationManager.stopApplication("gmail-webapp"); |
1363 | + |
1364 | + compare(mapApp.session.surface.visible, true); |
1365 | tryCompare(dialerApp.session.surface, "visible", true); |
1366 | tryCompare(dashApp.session.surface, "visible", false); // still occluded by maximised dialer |
1367 | } |
1368 | + |
1369 | + function test_maximisedAppStaysVisibleWhenAppStarts() { |
1370 | + var dashApp = startApplication("unity8-dash"); |
1371 | + var dashDelegate = findChild(desktopStage, "appDelegate_unity8-dash"); |
1372 | + verify(dashDelegate); |
1373 | + // maximize |
1374 | + var dashMaximizeButton = findChild(dashDelegate, "maximizeWindowButton"); |
1375 | + verify(dashMaximizeButton); |
1376 | + mouseClick(dashMaximizeButton); |
1377 | + tryCompare(dashDelegate, "visuallyMaximized", true); |
1378 | + |
1379 | + var dialerApp = startApplication("dialer-app"); |
1380 | + var dialerDelegate = findChild(desktopStage, "appDelegate_dialer-app"); |
1381 | + verify(dialerDelegate); |
1382 | + |
1383 | + compare(dialerDelegate.visible, true, "Dialer should be visible"); |
1384 | + compare(dashDelegate.visible, true, "Dash should still be visible"); |
1385 | + } |
1386 | } |
1387 | } |
1388 | |
1389 | === modified file 'tests/qmltests/Stages/tst_PhoneStage.qml' |
1390 | --- tests/qmltests/Stages/tst_PhoneStage.qml 2015-11-04 14:58:05 +0000 |
1391 | +++ tests/qmltests/Stages/tst_PhoneStage.qml 2015-11-25 16:12:37 +0000 |
1392 | @@ -34,7 +34,7 @@ |
1393 | anchors { fill: parent; rightMargin: units.gu(30) } |
1394 | focus: true |
1395 | dragAreaWidth: units.gu(2) |
1396 | - maximizedAppTopMargin: units.gu(3) + units.dp(2) |
1397 | + maximizedAppTopMargin: units.gu(3) |
1398 | interactive: true |
1399 | shellOrientation: Qt.PortraitOrientation |
1400 | orientations: Orientations {} |
1401 | |
1402 | === modified file 'tests/qmltests/Stages/tst_SurfaceContainer.qml' |
1403 | --- tests/qmltests/Stages/tst_SurfaceContainer.qml 2015-09-02 07:42:27 +0000 |
1404 | +++ tests/qmltests/Stages/tst_SurfaceContainer.qml 2015-11-25 16:12:37 +0000 |
1405 | @@ -39,7 +39,7 @@ |
1406 | id: surfaceContainerLoader |
1407 | anchors { |
1408 | top: parent.top |
1409 | - topMargin: fullscreenCheckbox.checked ? 0 : units.gu(3) + units.dp(2) |
1410 | + topMargin: fullscreenCheckbox.checked ? 0 : units.gu(3) |
1411 | bottom: parent.bottom |
1412 | left: parent.left |
1413 | } |
1414 | |
1415 | === modified file 'tests/qmltests/Stages/tst_TabletStage.qml' |
1416 | --- tests/qmltests/Stages/tst_TabletStage.qml 2015-11-04 14:58:05 +0000 |
1417 | +++ tests/qmltests/Stages/tst_TabletStage.qml 2015-11-25 16:12:37 +0000 |
1418 | @@ -50,7 +50,7 @@ |
1419 | tabletStageLoader.itemDestroyed = true; |
1420 | } |
1421 | dragAreaWidth: units.gu(2) |
1422 | - maximizedAppTopMargin: units.gu(3) + units.dp(2) |
1423 | + maximizedAppTopMargin: units.gu(3) |
1424 | interactive: true |
1425 | shellOrientation: Qt.LandscapeOrientation |
1426 | nativeWidth: width |
1427 | |
1428 | === modified file 'tests/qmltests/tst_Shell.qml' |
1429 | --- tests/qmltests/tst_Shell.qml 2015-11-12 20:40:49 +0000 |
1430 | +++ tests/qmltests/tst_Shell.qml 2015-11-25 16:12:37 +0000 |
1431 | @@ -1777,15 +1777,10 @@ |
1432 | tryCompare(panelButtons, "visible", false); |
1433 | |
1434 | appDelegate.maximize(false); |
1435 | - tryCompare(panelButtons, "visible", true); |
1436 | |
1437 | shell.usageScenario = "phone"; |
1438 | waitForRendering(shell); |
1439 | tryCompare(panelButtons, "visible", false); |
1440 | - |
1441 | - shell.usageScenario = "desktop"; |
1442 | - waitForRendering(shell); |
1443 | - tryCompare(panelButtons, "visible", true); |
1444 | } |
1445 | |
1446 | function test_lockingGreeterHidesPanelButtons() { |
1447 | @@ -1799,15 +1794,10 @@ |
1448 | tryCompare(panelButtons, "visible", false); |
1449 | |
1450 | appDelegate.maximize(false); |
1451 | - tryCompare(panelButtons, "visible", true); |
1452 | |
1453 | LightDM.Greeter.showGreeter(); |
1454 | waitForRendering(shell); |
1455 | tryCompare(panelButtons, "visible", false); |
1456 | - |
1457 | - LightDM.Greeter.hideGreeter(); |
1458 | - waitForRendering(shell); |
1459 | - tryCompare(panelButtons, "visible", true); |
1460 | } |
1461 | |
1462 | function test_cantMoveWindowUnderPanel() { |
Text conflict in qml/Components/ WindowControlBu ttons.qml DecoratedWindow .qml DesktopStage. qml Stages/ tst_DesktopStag e.qml
Text conflict in qml/Panel/Panel.qml
Text conflict in qml/Stages/
Text conflict in qml/Stages/
Text conflict in tests/qmltests/
5 conflicts encountered.