cleanup: Use inheritance for Actor classes instead of composition
Remove the `this.actor = ...` and `this.actor._delegate = this` patterns in most of classes, by inheriting all the actor container classes. Uses interfaces when needed for making sure that multiple classes will implement some required methods or to avoid redefining the same code multiple times. https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/559
This commit is contained in:

committed by
Florian Müllner

parent
f67b409fc1
commit
c4c5c4fd5c
@ -606,17 +606,17 @@ var LayoutManager = GObject.registerClass({
|
||||
return;
|
||||
}
|
||||
this._systemBackground = new Background.SystemBackground();
|
||||
this._systemBackground.actor.hide();
|
||||
this._systemBackground.hide();
|
||||
|
||||
global.stage.insert_child_below(this._systemBackground.actor, null);
|
||||
global.stage.insert_child_below(this._systemBackground, null);
|
||||
|
||||
let constraint = new Clutter.BindConstraint({ source: global.stage,
|
||||
coordinate: Clutter.BindCoordinate.ALL });
|
||||
this._systemBackground.actor.add_constraint(constraint);
|
||||
this._systemBackground.add_constraint(constraint);
|
||||
|
||||
let signalId = this._systemBackground.connect('loaded', () => {
|
||||
this._systemBackground.disconnect(signalId);
|
||||
this._systemBackground.actor.show();
|
||||
this._systemBackground.show();
|
||||
global.stage.show();
|
||||
|
||||
this._prepareStartupAnimation();
|
||||
@ -722,7 +722,7 @@ var LayoutManager = GObject.registerClass({
|
||||
this._coverPane.destroy();
|
||||
this._coverPane = null;
|
||||
|
||||
this._systemBackground.actor.destroy();
|
||||
this._systemBackground.destroy();
|
||||
this._systemBackground = null;
|
||||
|
||||
this._startingUp = false;
|
||||
@ -1112,8 +1112,11 @@ var LayoutManager = GObject.registerClass({
|
||||
//
|
||||
// This class manages a "hot corner" that can toggle switching to
|
||||
// overview.
|
||||
var HotCorner = class HotCorner {
|
||||
constructor(layoutManager, monitor, x, y) {
|
||||
var HotCorner = GObject.registerClass(
|
||||
class HotCorner extends Clutter.Actor {
|
||||
_init(layoutManager, monitor, x, y) {
|
||||
super._init();
|
||||
|
||||
// We use this flag to mark the case where the user has entered the
|
||||
// hot corner and has not left both the hot corner and a surrounding
|
||||
// guard area (the "environs"). This avoids triggering the hot corner
|
||||
@ -1142,6 +1145,8 @@ var HotCorner = class HotCorner {
|
||||
|
||||
this._ripples = new Ripples.Ripples(px, py, 'ripple-box');
|
||||
this._ripples.addTo(layoutManager.uiGroup);
|
||||
|
||||
this.connect('destroy', this._onDestroy.bind(this));
|
||||
}
|
||||
|
||||
setBarrierSize(size) {
|
||||
@ -1181,11 +1186,14 @@ var HotCorner = class HotCorner {
|
||||
|
||||
_setupFallbackCornerIfNeeded(layoutManager) {
|
||||
if (!global.display.supports_extended_barriers()) {
|
||||
this.actor = new Clutter.Actor({ name: 'hot-corner-environs',
|
||||
x: this._x, y: this._y,
|
||||
width: 3,
|
||||
height: 3,
|
||||
reactive: true });
|
||||
this.set({
|
||||
name: 'hot-corner-environs',
|
||||
x: this._x,
|
||||
y: this._y,
|
||||
width: 3,
|
||||
height: 3,
|
||||
reactive: true
|
||||
});
|
||||
|
||||
this._corner = new Clutter.Actor({ name: 'hot-corner',
|
||||
width: 1,
|
||||
@ -1194,18 +1202,17 @@ var HotCorner = class HotCorner {
|
||||
reactive: true });
|
||||
this._corner._delegate = this;
|
||||
|
||||
this.actor.add_child(this._corner);
|
||||
layoutManager.addChrome(this.actor);
|
||||
this.add_child(this._corner);
|
||||
layoutManager.addChrome(this);
|
||||
|
||||
if (Clutter.get_default_text_direction() == Clutter.TextDirection.RTL) {
|
||||
this._corner.set_position(this.actor.width - this._corner.width, 0);
|
||||
this.actor.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
|
||||
this._corner.set_position(this.width - this._corner.width, 0);
|
||||
this.set_anchor_point_from_gravity(Clutter.Gravity.NORTH_EAST);
|
||||
} else {
|
||||
this._corner.set_position(0, 0);
|
||||
}
|
||||
|
||||
this.actor.connect('leave-event',
|
||||
this._onEnvironsLeft.bind(this));
|
||||
this.connect('leave-event', this._onEnvironsLeft.bind(this));
|
||||
|
||||
this._corner.connect('enter-event',
|
||||
this._onCornerEntered.bind(this));
|
||||
@ -1214,14 +1221,11 @@ var HotCorner = class HotCorner {
|
||||
}
|
||||
}
|
||||
|
||||
destroy() {
|
||||
_onDestroy() {
|
||||
this.setBarrierSize(0);
|
||||
this._pressureBarrier.destroy();
|
||||
this._pressureBarrier = null;
|
||||
|
||||
if (this.actor)
|
||||
this.actor.destroy();
|
||||
|
||||
this._ripples.destroy();
|
||||
}
|
||||
|
||||
@ -1253,7 +1257,7 @@ var HotCorner = class HotCorner {
|
||||
}
|
||||
|
||||
_onCornerLeft(actor, event) {
|
||||
if (event.get_related() != this.actor)
|
||||
if (event.get_related() != this)
|
||||
this._entered = false;
|
||||
// Consume event, otherwise this will confuse onEnvironsLeft
|
||||
return Clutter.EVENT_STOP;
|
||||
@ -1264,7 +1268,7 @@ var HotCorner = class HotCorner {
|
||||
this._entered = false;
|
||||
return Clutter.EVENT_PROPAGATE;
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
var PressureBarrier = class PressureBarrier {
|
||||
constructor(threshold, timeout, actionMode) {
|
||||
|
Reference in New Issue
Block a user