magnifier: Update screen position on activation

The default ZoomRegion is created at startup and only updated if it is active
when the monitor setup changes. Thus when reactivating the magnifier after a
display change, the viewport used is still the one that been computed with the
old screen geometry values.

Move screen update code inside a function and call it both when activating
the zoom region and when the monitor changes during a zoom session.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/issues/1120
This commit is contained in:
Marco Trevisan (Treviño) 2019-03-27 22:16:26 +01:00
parent df9ddf96a5
commit a298943fac

View File

@ -763,6 +763,18 @@ var ZoomRegion = class ZoomRegion {
this._updateFocus.bind(this)); this._updateFocus.bind(this));
} }
_updateScreenPosition() {
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
this._setViewPort({
x: this._viewPortX,
y: this._viewPortY,
width: this._viewPortWidth,
height: this._viewPortHeight
});
else
this.setScreenPosition(this._screenPosition);
}
_updateFocus(caller, event) { _updateFocus(caller, event) {
let component = event.source.get_component_iface(); let component = event.source.get_component_iface();
if (!component || event.detail1 != 1) if (!component || event.detail1 != 1)
@ -808,6 +820,7 @@ var ZoomRegion = class ZoomRegion {
this._createActors(); this._createActors();
if (this._isMouseOverRegion()) if (this._isMouseOverRegion())
this._magnifier.hideSystemCursor(); this._magnifier.hideSystemCursor();
this._updateScreenPosition();
this._updateMagViewGeometry(); this._updateMagViewGeometry();
this._updateCloneGeometry(); this._updateCloneGeometry();
this._updateMousePosition(); this._updateMousePosition();
@ -1565,14 +1578,7 @@ var ZoomRegion = class ZoomRegion {
return; return;
this._background.set_size(global.screen_width, global.screen_height); this._background.set_size(global.screen_width, global.screen_height);
this._updateScreenPosition();
if (this._screenPosition == GDesktopEnums.MagnifierScreenPosition.NONE)
this._setViewPort({ x: this._viewPortX,
y: this._viewPortY,
width: this._viewPortWidth,
height: this._viewPortHeight });
else
this.setScreenPosition(this._screenPosition);
} }
}; };