[gnome-shell] Magnifier: don't initialize if we don't need it
- From: Giovanni Campagna <gcampagna src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] Magnifier: don't initialize if we don't need it
- Date: Fri, 13 Sep 2013 14:10:36 +0000 (UTC)
commit 193f872ebedfb1fb1107a428b595855812f42153
Author: Giovanni Campagna <gcampagn redhat com>
Date: Fri Sep 13 11:56:54 2013 +0200
Magnifier: don't initialize if we don't need it
Let's avoid initializing AT-SPI and start monitoring events if we
are not actually using the magnifier.
https://bugzilla.gnome.org/show_bug.cgi?id=708020
js/ui/magnifier.js | 139 ++++++++++++++++++++++++++++++----------------------
1 files changed, 80 insertions(+), 59 deletions(-)
---
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index cccddaa..4eb7d3e 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -57,6 +57,20 @@ const Magnifier = new Lang.Class({
// Magnifier is a manager of ZoomRegions.
this._zoomRegions = [];
+ // Export to dbus.
+ magDBusService = new MagnifierDBus.ShellMagnifier();
+
+ let showAtLaunch = this._settingsInit();
+ this.setActive(showAtLaunch);
+ },
+
+ _initialize: function() {
+ if (this._initialized)
+ return;
+ this._initialized = true;
+
+ this._settingsInitLate();
+
// Create small clutter tree for the magnified mouse.
let cursorTracker = Meta.CursorTracker.get_for_screen(global.screen);
this._mouseSprite = new Clutter.Texture();
@@ -72,15 +86,11 @@ const Magnifier = new Lang.Class({
let aZoomRegion = new ZoomRegion(this, this._cursorRoot);
this._zoomRegions.push(aZoomRegion);
- let showAtLaunch = this._settingsInit(aZoomRegion);
+ this._settingsInitRegion(aZoomRegion);
aZoomRegion.scrollContentsTo(this.xMouse, this.yMouse);
cursorTracker.connect('cursor-changed', Lang.bind(this, this._updateMouseSprite));
this._cursorTracker = cursorTracker;
-
- // Export to dbus.
- magDBusService = new MagnifierDBus.ShellMagnifier();
- this.setActive(showAtLaunch);
},
/**
@@ -105,6 +115,12 @@ const Magnifier = new Lang.Class({
* @activate: Boolean to activate or de-activate the magnifier.
*/
setActive: function(activate) {
+ if (activate == this.isActive())
+ return;
+
+ if (activate)
+ this._initialize();
+
this._zoomRegions.forEach (function(zoomRegion, index, array) {
zoomRegion.setActive(activate);
});
@@ -432,64 +448,68 @@ const Magnifier = new Lang.Class({
this._mouseSprite.set_anchor_point(xHot, yHot);
},
- _settingsInit: function(zoomRegion) {
+ _settingsInitRegion: function(zoomRegion) {
+ // Mag factor is accurate to two decimal places.
+ let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
+ if (aPref != 0.0)
+ zoomRegion.setMagFactor(aPref, aPref);
+
+ aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
+ if (aPref)
+ zoomRegion.setScreenPosition(aPref);
+
+ zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
+ zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
+
+ aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
+ if (aPref)
+ zoomRegion.setMouseTrackingMode(aPref);
+
+ aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
+ if (aPref)
+ zoomRegion.setFocusTrackingMode(aPref);
+
+ aPref = this._settings.get_enum(CARET_TRACKING_KEY);
+ if (aPref)
+ zoomRegion.setCaretTrackingMode(aPref);
+
+ aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
+ if (aPref)
+ zoomRegion.setInvertLightness(aPref);
+
+ aPref = this._settings.get_double(COLOR_SATURATION_KEY);
+ if (aPref)
+ zoomRegion.setColorSaturation(aPref);
+
+ let bc = {};
+ bc.r = this._settings.get_double(BRIGHT_RED_KEY);
+ bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
+ bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
+ zoomRegion.setBrightness(bc);
+
+ bc.r = this._settings.get_double(CONTRAST_RED_KEY);
+ bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
+ bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
+ zoomRegion.setContrast(bc);
+ },
+
+ _settingsInit: function() {
this._appSettings = new Gio.Settings({ schema: APPLICATIONS_SCHEMA });
this._settings = new Gio.Settings({ schema: MAGNIFIER_SCHEMA });
- if (zoomRegion) {
- // Mag factor is accurate to two decimal places.
- let aPref = parseFloat(this._settings.get_double(MAG_FACTOR_KEY).toFixed(2));
- if (aPref != 0.0)
- zoomRegion.setMagFactor(aPref, aPref);
-
- aPref = this._settings.get_enum(SCREEN_POSITION_KEY);
- if (aPref)
- zoomRegion.setScreenPosition(aPref);
-
- zoomRegion.setLensMode(this._settings.get_boolean(LENS_MODE_KEY));
- zoomRegion.setClampScrollingAtEdges(!this._settings.get_boolean(CLAMP_MODE_KEY));
-
- aPref = this._settings.get_enum(MOUSE_TRACKING_KEY);
- if (aPref)
- zoomRegion.setMouseTrackingMode(aPref);
-
- aPref = this._settings.get_enum(FOCUS_TRACKING_KEY);
- if (aPref)
- zoomRegion.setFocusTrackingMode(aPref);
-
- aPref = this._settings.get_enum(CARET_TRACKING_KEY);
- if (aPref)
- zoomRegion.setCaretTrackingMode(aPref);
-
- aPref = this._settings.get_boolean(INVERT_LIGHTNESS_KEY);
- if (aPref)
- zoomRegion.setInvertLightness(aPref);
-
- aPref = this._settings.get_double(COLOR_SATURATION_KEY);
- if (aPref)
- zoomRegion.setColorSaturation(aPref);
-
- let bc = {};
- bc.r = this._settings.get_double(BRIGHT_RED_KEY);
- bc.g = this._settings.get_double(BRIGHT_GREEN_KEY);
- bc.b = this._settings.get_double(BRIGHT_BLUE_KEY);
- zoomRegion.setBrightness(bc);
-
- bc.r = this._settings.get_double(CONTRAST_RED_KEY);
- bc.g = this._settings.get_double(CONTRAST_GREEN_KEY);
- bc.b = this._settings.get_double(CONTRAST_BLUE_KEY);
- zoomRegion.setContrast(bc);
- }
+ this._appSettings.connect('changed::' + SHOW_KEY, Lang.bind(this, function() {
+ let active = this._appSettings.get_boolean(SHOW_KEY);
+ this.setActive(active);
+ }));
+ return this._appSettings.get_boolean(SHOW_KEY);
+ },
+
+ _settingsInitLate: function() {
let showCrosshairs = this._settings.get_boolean(SHOW_CROSS_HAIRS_KEY);
this.addCrosshairs();
this.setCrosshairsVisible(showCrosshairs);
- this._appSettings.connect('changed::' + SHOW_KEY,
- Lang.bind(this, function() {
- this.setActive(this._appSettings.get_boolean(SHOW_KEY));
- }));
-
this._settings.connect('changed::' + SCREEN_POSITION_KEY,
Lang.bind(this, this._updateScreenPosition));
this._settings.connect('changed::' + MAG_FACTOR_KEY,
@@ -553,8 +573,6 @@ const Magnifier = new Lang.Class({
Lang.bind(this, function() {
this.setCrosshairsClip(this._settings.get_boolean(CROSS_HAIRS_CLIP_KEY));
}));
-
- return this._appSettings.get_boolean(SHOW_KEY);
},
_updateScreenPosition: function() {
@@ -732,14 +750,17 @@ const ZoomRegion = new Lang.Class({
* @activate: Boolean to show/hide the ZoomRegion.
*/
setActive: function(activate) {
- if (activate && !this.isActive()) {
+ if (activate == this.isActive())
+ return;
+
+ if (activate) {
this._createActors();
if (this._isMouseOverRegion())
this._magnifier.hideSystemCursor();
this._updateMagViewGeometry();
this._updateCloneGeometry();
this._updateMousePosition();
- } else if (!activate && this.isActive()) {
+ } else {
this._destroyActors();
}
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]