[gnome-shell/wip/carlosg/magnifier-improvements: 11/11] windowManager: Add keybindings for a11y zoom control



commit 67ae665267348116e571a15897767814936e9c27
Author: Carlos Garnacho <carlosg gnome org>
Date:   Thu Feb 6 14:21:43 2020 +0100

    windowManager: Add keybindings for a11y zoom control
    
    It may be desirable to change the zoom level without going to the
    a11y control center panel. Add the win+plus and win+minus keybindings
    to do that.

 data/org.gnome.shell.gschema.xml.in |  8 ++++++++
 js/ui/magnifier.js                  | 22 ++++++++++++++++++++++
 js/ui/windowManager.js              | 22 ++++++++++++++++++++++
 3 files changed, 52 insertions(+)
---
diff --git a/data/org.gnome.shell.gschema.xml.in b/data/org.gnome.shell.gschema.xml.in
index 49d38d7662..db141c8431 100644
--- a/data/org.gnome.shell.gschema.xml.in
+++ b/data/org.gnome.shell.gschema.xml.in
@@ -186,6 +186,14 @@
       <default>["&lt;Super&gt;9"]</default>
       <summary>Switch to application 9</summary>
     </key>
+    <key name="a11y-zoom-in" type="as">
+      <default>["&lt;Super&gt;Plus"]</default>
+      <summary>Accessibility zoom in</summary>
+    </key>
+    <key name="a11y-zoom-out" type="as">
+      <default>["&lt;Super&gt;Minus"]</default>
+      <summary>Accessibility zoom out</summary>
+    </key>
   </schema>
 
   <schema id="org.gnome.shell.app-switcher"
diff --git a/js/ui/magnifier.js b/js/ui/magnifier.js
index b5b0a37105..a323889779 100644
--- a/js/ui/magnifier.js
+++ b/js/ui/magnifier.js
@@ -706,6 +706,28 @@ var Magnifier = class Magnifier {
             this._zoomRegions[0].setContrast(contrast);
         }
     }
+
+    zoomIn(factor) {
+        if (!this.isActive())
+            return;
+
+        this._zoomRegions.forEach(zoomRegion => {
+            let [xMag, yMag] = zoomRegion.getMagFactor();
+            zoomRegion.setMagFactor(xMag * factor, yMag * factor);
+        });
+    }
+
+    zoomOut(factor) {
+        if (!this.isActive())
+            return;
+
+        this._zoomRegions.forEach(zoomRegion => {
+            let [xMag, yMag] = zoomRegion.getMagFactor();
+            xMag = Math.max(xMag / factor, 1);
+            yMag = Math.max(yMag / factor, 1);
+            zoomRegion.setMagFactor(xMag, yMag);
+        });
+    }
 };
 Signals.addSignalMethods(Magnifier.prototype);
 
diff --git a/js/ui/windowManager.js b/js/ui/windowManager.js
index 8634274a49..e6ccf7477f 100644
--- a/js/ui/windowManager.js
+++ b/js/ui/windowManager.js
@@ -864,6 +864,18 @@ var WindowManager = class {
                            Shell.ActionMode.NORMAL |
                            Shell.ActionMode.OVERVIEW,
                            this._switchToApplication.bind(this));
+        this.addKeybinding('a11y-zoom-in',
+                           new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
+                           Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
+                           Shell.ActionMode.NORMAL |
+                           Shell.ActionMode.OVERVIEW,
+                           this._a11yZoomIn.bind(this));
+        this.addKeybinding('a11y-zoom-out',
+                           new Gio.Settings({ schema_id: SHELL_KEYBINDINGS_SCHEMA }),
+                           Meta.KeyBindingFlags.IGNORE_AUTOREPEAT,
+                           Shell.ActionMode.NORMAL |
+                           Shell.ActionMode.OVERVIEW,
+                           this._a11yZoomOut.bind(this));
 
         global.display.connect('show-resize-popup', this._showResizePopup.bind(this));
         global.display.connect('show-pad-osd', this._showPadOsd.bind(this));
@@ -2016,6 +2028,16 @@ var WindowManager = class {
             app.activate();
     }
 
+    _a11yZoomIn(display, window, binding) {
+        if (Main.magnifier.isActive())
+            Main.magnifier.zoomIn(2);
+    }
+
+    _a11yZoomOut(display, window, binding) {
+        if (Main.magnifier.isActive())
+            Main.magnifier.zoomOut(2);
+    }
+
     _toggleAppMenu() {
         Main.panel.toggleAppMenu();
     }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]