shellDBus: Add ScreenTransition()
Settings will use this when switching between light and dark styles. Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2070>
This commit is contained in:
parent
03e307f328
commit
de485c8f47
@ -35,6 +35,7 @@
|
|||||||
<arg type="au" direction="in" name="action"/>
|
<arg type="au" direction="in" name="action"/>
|
||||||
<arg type="b" direction="out" name="success"/>
|
<arg type="b" direction="out" name="success"/>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="ScreenTransition"/>
|
||||||
<signal name="AcceleratorActivated">
|
<signal name="AcceleratorActivated">
|
||||||
<arg name="action" type="u"/>
|
<arg name="action" type="u"/>
|
||||||
<arg name="parameters" type="a{sv}"/>
|
<arg name="parameters" type="a{sv}"/>
|
||||||
|
@ -733,6 +733,11 @@ var BackgroundManager = class BackgroundManager {
|
|||||||
this._newBackgroundActor = null;
|
this._newBackgroundActor = null;
|
||||||
this.emit('changed');
|
this.emit('changed');
|
||||||
|
|
||||||
|
if (Main.layoutManager.screenTransition.visible) {
|
||||||
|
oldBackgroundActor.destroy();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
oldBackgroundActor.ease({
|
oldBackgroundActor.ease({
|
||||||
opacity: 0,
|
opacity: 0,
|
||||||
duration: FADE_ANIMATION_TIME,
|
duration: FADE_ANIMATION_TIME,
|
||||||
|
@ -18,6 +18,9 @@ var BACKGROUND_FADE_ANIMATION_TIME = 1000;
|
|||||||
var HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
var HOT_CORNER_PRESSURE_THRESHOLD = 100; // pixels
|
||||||
var HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
var HOT_CORNER_PRESSURE_TIMEOUT = 1000; // ms
|
||||||
|
|
||||||
|
const SCREEN_TRANSITION_DELAY = 250; // ms
|
||||||
|
const SCREEN_TRANSITION_DURATION = 500; // ms
|
||||||
|
|
||||||
function isPopupMetaWindow(actor) {
|
function isPopupMetaWindow(actor) {
|
||||||
switch (actor.meta_window.get_window_type()) {
|
switch (actor.meta_window.get_window_type()) {
|
||||||
case Meta.WindowType.DROPDOWN_MENU:
|
case Meta.WindowType.DROPDOWN_MENU:
|
||||||
@ -298,6 +301,13 @@ var LayoutManager = GObject.registerClass({
|
|||||||
monitorManager.connect('monitors-changed',
|
monitorManager.connect('monitors-changed',
|
||||||
this._monitorsChanged.bind(this));
|
this._monitorsChanged.bind(this));
|
||||||
this._monitorsChanged();
|
this._monitorsChanged();
|
||||||
|
|
||||||
|
this.screenTransition = new ScreenTransition();
|
||||||
|
this.uiGroup.add_child(this.screenTransition);
|
||||||
|
this.screenTransition.add_constraint(new Clutter.BindConstraint({
|
||||||
|
source: this.uiGroup,
|
||||||
|
coordinate: Clutter.BindCoordinate.ALL,
|
||||||
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is called by Main after everything else is constructed
|
// This is called by Main after everything else is constructed
|
||||||
@ -309,6 +319,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
|
|
||||||
showOverview() {
|
showOverview() {
|
||||||
this.overviewGroup.show();
|
this.overviewGroup.show();
|
||||||
|
this.screenTransition.hide();
|
||||||
|
|
||||||
this._inOverview = true;
|
this._inOverview = true;
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
@ -316,6 +327,7 @@ var LayoutManager = GObject.registerClass({
|
|||||||
|
|
||||||
hideOverview() {
|
hideOverview() {
|
||||||
this.overviewGroup.hide();
|
this.overviewGroup.hide();
|
||||||
|
this.screenTransition.hide();
|
||||||
|
|
||||||
this._inOverview = false;
|
this._inOverview = false;
|
||||||
this._updateVisibility();
|
this._updateVisibility();
|
||||||
@ -1369,3 +1381,42 @@ var PressureBarrier = class PressureBarrier {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
Signals.addSignalMethods(PressureBarrier.prototype);
|
Signals.addSignalMethods(PressureBarrier.prototype);
|
||||||
|
|
||||||
|
var ScreenTransition = GObject.registerClass(
|
||||||
|
class ScreenTransition extends Clutter.Actor {
|
||||||
|
_init() {
|
||||||
|
super._init({ visible: false });
|
||||||
|
}
|
||||||
|
|
||||||
|
vfunc_hide() {
|
||||||
|
this.content = null;
|
||||||
|
super.vfunc_hide();
|
||||||
|
}
|
||||||
|
|
||||||
|
run() {
|
||||||
|
if (this.visible)
|
||||||
|
return;
|
||||||
|
|
||||||
|
Main.uiGroup.set_child_above_sibling(this, null);
|
||||||
|
|
||||||
|
const rect = new imports.gi.cairo.RectangleInt({
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
width: global.screen_width,
|
||||||
|
height: global.screen_height,
|
||||||
|
});
|
||||||
|
const [, , , scale] = global.stage.get_capture_final_size(rect);
|
||||||
|
this.content = global.stage.paint_to_content(rect, scale, Clutter.PaintFlag.NO_CURSORS);
|
||||||
|
|
||||||
|
this.opacity = 255;
|
||||||
|
this.show();
|
||||||
|
|
||||||
|
this.ease({
|
||||||
|
opacity: 0,
|
||||||
|
duration: SCREEN_TRANSITION_DURATION,
|
||||||
|
delay: SCREEN_TRANSITION_DELAY,
|
||||||
|
mode: Clutter.AnimationMode.EASE_OUT_QUAD,
|
||||||
|
onStopped: () => this.hide(),
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
@ -251,6 +251,19 @@ var GnomeShell = class {
|
|||||||
invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
|
invocation.return_value(GLib.Variant.new('(b)', [ungrabSucceeded]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ScreenTransitionAsync(params, invocation) {
|
||||||
|
try {
|
||||||
|
this._senderChecker.checkInvocation(invocation);
|
||||||
|
} catch (e) {
|
||||||
|
invocation.return_gerror(e);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Main.layoutManager.screenTransition.run();
|
||||||
|
|
||||||
|
invocation.return_value(null);
|
||||||
|
}
|
||||||
|
|
||||||
_emitAcceleratorActivated(action, device, timestamp) {
|
_emitAcceleratorActivated(action, device, timestamp) {
|
||||||
let destination = this._grabbedAccelerators.get(action);
|
let destination = this._grabbedAccelerators.get(action);
|
||||||
if (!destination)
|
if (!destination)
|
||||||
|
Loading…
Reference in New Issue
Block a user