[sushi/wip/cosimoc/no-clutter: 37/50] Port to ES6 classes



commit 37bcdfe0cb16359f818d62bd2c62a4e4254e2e9e
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Sat Jun 15 12:19:03 2019 -0700

    Port to ES6 classes
    
    This makes the code much simpler and more maintainable.

 src/js/ui/application.js      | 43 ++++++++-----------
 src/js/ui/fallbackRenderer.js | 30 ++++++-------
 src/js/ui/main.js             |  4 +-
 src/js/ui/mainWindow.js       | 98 ++++++++++++++++++++-----------------------
 src/js/ui/renderer.js         | 14 +++----
 src/js/viewers/audio.js       | 66 +++++++++++++----------------
 src/js/viewers/evince.js      | 30 ++++++-------
 src/js/viewers/font.js        | 15 +++----
 src/js/viewers/gst.js         | 19 ++++-----
 src/js/viewers/html.js        | 18 ++++----
 src/js/viewers/image.js       | 82 +++++++++++++++++-------------------
 src/js/viewers/text.js        | 23 ++++------
 12 files changed, 193 insertions(+), 249 deletions(-)
---
diff --git a/src/js/ui/application.js b/src/js/ui/application.js
index c3f057b..1c9a449 100644
--- a/src/js/ui/application.js
+++ b/src/js/ui/application.js
@@ -23,13 +23,11 @@
  *
  */
 
-const {Gdk, Gio, GLib, Gtk} = imports.gi;
-const Lang = imports.lang;
+const {Gdk, Gio, GLib, GObject, Gtk} = imports.gi;
 
 const MainWindow = imports.ui.mainWindow;
 
 const SUSHI_DBUS_PATH = '/org/gnome/NautilusPreviewer';
-const SUSHI_DBUS_NAME = 'org.gnome.NautilusPreviewer';
 
 const SushiIface = '<node> \
 <interface name="org.gnome.NautilusPreviewer"> \
@@ -43,37 +41,30 @@ const SushiIface = '<node> \
 </interface> \
 </node>';
 
-var Application = new Lang.Class({
-    Name: 'Application',
-    Extends: Gtk.Application,
-
-    _init : function(args) {
-        this.parent({ application_id: SUSHI_DBUS_NAME });
-    },
-
-    vfunc_startup : function() {
-        this.parent();
+var Application = GObject.registerClass(class Application extends Gtk.Application {
+    vfunc_startup() {
+        super.vfunc_startup();
 
         this._defineStyleAndThemes();
         this._createMainWindow();
-    },
+    }
 
-    vfunc_dbus_register : function(connection, path) {
+    vfunc_dbus_register(connection, path) {
         this._dbusImpl = Gio.DBusExportedObject.wrapJSObject(SushiIface, this);
         this._dbusImpl.export(connection, SUSHI_DBUS_PATH);
 
-        return this.parent(connection, path);
-    },
+        return super.vfunc_dbus_register(connection, path);
+    }
 
-    vfunc_activate : function() {
-    },
+    vfunc_activate() {
+    }
 
-    _createMainWindow : function() {
+    _createMainWindow() {
         this._mainWindow =
             new MainWindow.MainWindow(this);
-    },
+    }
 
-    _defineStyleAndThemes : function() {
+    _defineStyleAndThemes() {
         let provider = new Gtk.CssProvider();
         provider.load_from_resource('/org/gnome/Sushi/gtk-style.css');
         Gtk.StyleContext.add_provider_for_screen(Gdk.Screen.get_default(),
@@ -82,13 +73,13 @@ var Application = new Lang.Class({
 
         let settings = Gtk.Settings.get_default();
         settings.gtk_application_prefer_dark_theme = true;
-    },
+    }
 
-    Close: function() {
+    Close() {
         this._mainWindow.destroy();
-    },
+    }
 
-    ShowFile : function(uri, xid, closeIfAlreadyShown) {
+    ShowFile(uri, xid, closeIfAlreadyShown) {
         let file = Gio.file_new_for_uri(uri);
         if (closeIfAlreadyShown &&
             this._mainWindow.file &&
diff --git a/src/js/ui/fallbackRenderer.js b/src/js/ui/fallbackRenderer.js
index d59e745..aff9c3c 100644
--- a/src/js/ui/fallbackRenderer.js
+++ b/src/js/ui/fallbackRenderer.js
@@ -23,19 +23,15 @@
  *
  */
 
-const {Gio, Gtk, Pango, Sushi} = imports.gi;
+const {Gio, GObject, Gtk, Pango, Sushi} = imports.gi;
 
 const Gettext = imports.gettext.domain('sushi');
 const _ = Gettext.gettext;
-const Lang = imports.lang;
 const Renderer = imports.ui.renderer;
 
-var FallbackRenderer = new Lang.Class({
-    Name: 'FallbackRenderer',
-    Extends: Gtk.Box,
-
-    _init : function(file, mainWindow) {
-        this.parent({ orientation: Gtk.Orientation.HORIZONTAL,
+var FallbackRenderer = GObject.registerClass(class FallbackRenderer extends Gtk.Box {
+    _init(file, mainWindow) {
+        super._init({ orientation: Gtk.Orientation.HORIZONTAL,
                       spacing: 6 });
 
         this.moveOnClick = true;
@@ -84,9 +80,9 @@ var FallbackRenderer = new Lang.Class({
         this._applyLabels();
 
         this.connect('destroy', this._onDestroy.bind(this));
-    },
+    }
 
-    _applyLabels : function() {
+    _applyLabels() {
         let titleStr =
             '<b><big>' +
             ((this._fileLoader.name) ? (this._fileLoader.name) : (this._fileLoader.file.get_basename()))
@@ -114,9 +110,9 @@ var FallbackRenderer = new Lang.Class({
              ((this._fileLoader.time) ? (this._fileLoader.time) : (_("Loading…")))
              + '</small>';
         this._dateLabel.set_markup(dateStr);
-    },
+    }
 
-    _updateIcon: function(icon) {
+    _updateIcon(icon) {
         let iconTheme = Gtk.IconTheme.get_default();
         let iconInfo = iconTheme.lookup_by_gicon_for_scale(icon, 256,
             this._image.scale_factor, 0);
@@ -129,9 +125,9 @@ var FallbackRenderer = new Lang.Class({
         } catch (e) {
             logError(e, `Error loading surface for icon ${icon.to_string()}`);
         }
-    },
+    }
 
-    _onFileInfoChanged : function() {
+    _onFileInfoChanged() {
         if (!this._fileLoader.get_loading()) {
             this._spinner.stop();
             this._spinner.hide();
@@ -141,9 +137,9 @@ var FallbackRenderer = new Lang.Class({
             this._updateIcon(this._fileLoader.icon);
 
         this._applyLabels();
-    },
+    }
 
-    _onDestroy : function() {
+    _onDestroy() {
         if (this._fileLoader) {
             this._fileLoader.disconnect(this._fileLoaderId);
             this._fileLoaderId = 0;
@@ -151,7 +147,7 @@ var FallbackRenderer = new Lang.Class({
             this._fileLoader.stop();
             this._fileLoader = null;
         }
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.NAT_SIZE;
diff --git a/src/js/ui/main.js b/src/js/ui/main.js
index c77189f..c84b764 100644
--- a/src/js/ui/main.js
+++ b/src/js/ui/main.js
@@ -33,12 +33,14 @@ const Gettext = imports.gettext;
 const Application = imports.ui.application;
 const Path = imports.util.path;
 
+const SUSHI_DBUS_NAME = 'org.gnome.NautilusPreviewer';
+
 function run(argv) {
     Gettext.bindtextdomain('sushi', Path.LOCALE_DIR);
     String.prototype.format = Format.format;
 
     GLib.set_application_name('Sushi');
 
-    let application = new Application.Application();
+    let application = new Application.Application({ application_id: SUSHI_DBUS_NAME });
     return application.run(null);
 }
diff --git a/src/js/ui/mainWindow.js b/src/js/ui/mainWindow.js
index ceb5b7a..66366b7 100644
--- a/src/js/ui/mainWindow.js
+++ b/src/js/ui/mainWindow.js
@@ -23,9 +23,8 @@
  *
  */
 
-const {Gdk, Gio, GLib, Gtk, Sushi} = imports.gi;
+const {Gdk, Gio, GLib, GObject, Gtk, Sushi} = imports.gi;
 
-const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 
 const Constants = imports.util.constants;
@@ -33,17 +32,15 @@ const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 const Utils = imports.ui.utils;
 
-const Embed = new Lang.Class({
-    Name: 'Embed',
-    Extends: Gtk.Overlay,
-    Signals: { 'size-request': {} },
-
-    vfunc_get_request_mode: function() {
+const Embed = GObject.registerClass({
+    Signals: { 'size-request': {} }
+}, class Embed extends Gtk.Overlay {
+    vfunc_get_request_mode() {
         return Gtk.SizeRequestMode.HEIGHT_FOR_WIDTH;
-    },
+    }
 
-    vfunc_get_preferred_width: function() {
-        let [min, nat] = this.parent();
+    vfunc_get_preferred_width() {
+        let [min, nat] = super.vfunc_get_preferred_width();
 
         min = Math.max(min, Constants.VIEW_MIN);
         nat = Math.max(nat, Constants.VIEW_MIN);
@@ -67,11 +64,8 @@ const Embed = new Lang.Class({
     }
 });
 
-var MainWindow = new Lang.Class({
-    Name: 'MainWindow',
-    Extends: Gtk.Window,
-
-    _init : function(application) {
+var MainWindow = GObject.registerClass(class MainWindow extends Gtk.Window {
+    _init(application) {
         this._isFullScreen = false;
         this._renderer = null;
         this._lastWindowSize = [0, 0];
@@ -81,7 +75,7 @@ var MainWindow = new Lang.Class({
 
         this._mimeHandler = new MimeHandler.MimeHandler();
 
-        this.parent({ type: Gtk.WindowType.TOPLEVEL,
+        super._init({ type: Gtk.WindowType.TOPLEVEL,
                       skipPagerHint: true,
                       skipTaskbarHint: true,
                       windowPosition: Gtk.WindowPosition.CENTER,
@@ -105,23 +99,23 @@ var MainWindow = new Lang.Class({
         this._embed = new Embed();
         this._embed.connect('size-request', this._onEmbedSizeRequest.bind(this));
         eventBox.add(this._embed);
-    },
+    }
 
     /**************************************************************************
      ****************** main object event callbacks ***************************
      **************************************************************************/
-    _onDeleteEvent : function() {
+    _onDeleteEvent() {
         this.destroy();
-    },
+    }
 
-    _onRealize: function() {
+    _onRealize() {
         // don't support maximize and minimize
         this.get_window().set_functions(Gdk.WMFunction.MOVE |
                                         Gdk.WMFunction.RESIZE |
                                         Gdk.WMFunction.CLOSE);
-    },
+    }
 
-    _onKeyPressEvent : function(widget, event) {
+    _onKeyPressEvent(widget, event) {
         let key = event.get_keyval()[1];
 
         if (key == Gdk.KEY_Escape ||
@@ -134,9 +128,9 @@ var MainWindow = new Lang.Class({
             this.toggleFullScreen();
 
         return false;
-    },
+    }
 
-    _onButtonPressEvent : function(window, event) {
+    _onButtonPressEvent(window, event) {
         if (!this._renderer.moveOnClick)
             return false;
 
@@ -147,23 +141,23 @@ var MainWindow = new Lang.Class({
                              event.get_time());
 
         return false;
-    },
+    }
 
-    _onMotionNotifyEvent : function() {
+    _onMotionNotifyEvent() {
         if (this._toolbar)
             this._resetToolbar();
 
         return false;
-    },
+    }
 
     /**************************************************************************
      *********************** texture allocation *******************************
      **************************************************************************/
-    _onEmbedSizeRequest : function() {
+    _onEmbedSizeRequest() {
         this._resizeWindow();
-    },
+    }
 
-    _resizeWindow : function() {
+    _resizeWindow() {
         if (this._isFullScreen)
             return;
 
@@ -190,9 +184,9 @@ var MainWindow = new Lang.Class({
             this._lastWindowSize = windowSize;
             this.resize(windowSize[0], windowSize[1]);
         }
-    },
+    }
 
-    _createRenderer : function(file) {
+    _createRenderer(file) {
         file.query_info_async(
             [Gio.FILE_ATTRIBUTE_STANDARD_DISPLAY_NAME,
              Gio.FILE_ATTRIBUTE_STANDARD_CONTENT_TYPE].join(','),
@@ -211,9 +205,9 @@ var MainWindow = new Lang.Class({
                     logError(e, 'Error creating viewer');
                 }
             });
-    },
+    }
 
-    _createView : function (file, klass) {
+    _createView(file, klass) {
         if (this._renderer) {
             this._renderer.destroy()
             this._renderer = null;
@@ -223,12 +217,12 @@ var MainWindow = new Lang.Class({
         this._renderer.show_all();
         this._renderer.expand = true;
         this._embed.add(this._renderer);
-    },
+    }
 
     /**************************************************************************
      ************************* toolbar helpers ********************************
      **************************************************************************/
-    _createToolbar : function() {
+    _createToolbar() {
         this._removeToolbarTimeout();
 
         if (this._toolbar) {
@@ -257,33 +251,33 @@ var MainWindow = new Lang.Class({
             return;
 
         this._embed.add_overlay(this._toolbar);
-    },
+    }
 
-    _removeToolbarTimeout: function() {
+    _removeToolbarTimeout() {
         if (this._toolbarId != 0) {
             Mainloop.source_remove(this._toolbarId);
             this._toolbarId = 0;
         }
-    },
+    }
 
-    _resetToolbar : function() {
+    _resetToolbar() {
         if (this._toolbarId == 0)
             this._toolbar.reveal_child = true;
 
         this._removeToolbarTimeout();
         this._toolbarId = Mainloop.timeout_add(1500, this._onToolbarTimeout.bind(this));
-    },
+    }
 
-    _onToolbarTimeout : function() {
+    _onToolbarTimeout() {
         this._toolbarId = 0;
         this._toolbar.reveal_child = false;
         return false;
-    },
+    }
 
     /**************************************************************************
      ************************ public methods **********************************
      **************************************************************************/
-    setParent : function(xid) {
+    setParent(xid) {
         this._parent = Sushi.create_foreign_window(xid);
         this.realize();
         if (this._parent)
@@ -291,19 +285,19 @@ var MainWindow = new Lang.Class({
         this.show_all();
 
         if (this.get_window().move_to_current_desktop)
-          this.get_window().move_to_current_desktop();
-    },
+            this.get_window().move_to_current_desktop();
+    }
 
-    setFile : function(file) {
+    setFile(file) {
         this.file = file;
         this._createRenderer(file);
-    },
+    }
 
-    setTitle : function(label) {
+    setTitle(label) {
         this.set_title(label);
-    },
+    }
 
-    toggleFullScreen : function() {
+    toggleFullScreen() {
         if (!this._renderer.canFullScreen)
             return false;
 
diff --git a/src/js/ui/renderer.js b/src/js/ui/renderer.js
index 7407d74..d64435e 100644
--- a/src/js/ui/renderer.js
+++ b/src/js/ui/renderer.js
@@ -1,6 +1,4 @@
-const {Gtk} = imports.gi;
-
-const Lang = imports.lang;
+const {GObject, Gtk} = imports.gi;
 
 var ResizePolicy = {
     MAX_SIZE: 0,
@@ -9,13 +7,11 @@ var ResizePolicy = {
     STRETCHED: 3
 };
 
-var RendererToolbar = new Lang.Class({
-    Name: 'RendererToolbar',
-    Extends: Gtk.Box,
+var RendererToolbar = GObject.registerClass({
     CssName: 'toolbar',
-
-    _init : function() {
-        this.parent({ halign: Gtk.Align.CENTER,
+}, class RendererToolbar extends Gtk.Box {
+    _init() {
+        super._init({ halign: Gtk.Align.CENTER,
                       hexpand: true });
         this.get_style_context().add_class('osd');
     }
diff --git a/src/js/viewers/audio.js b/src/js/viewers/audio.js
index 4f6f028..adb18cc 100644
--- a/src/js/viewers/audio.js
+++ b/src/js/viewers/audio.js
@@ -23,11 +23,10 @@
  *
  */
 
-const {GdkPixbuf, Gio, Gst, Gtk, Sushi} = imports.gi;
+const {GdkPixbuf, Gio, GObject, Gst, Gtk, Sushi} = imports.gi;
 
 const Gettext = imports.gettext.domain('sushi');
 const _ = Gettext.gettext;
-const Lang = imports.lang;
 
 const Constants = imports.util.constants;
 const MimeHandler = imports.ui.mimeHandler;
@@ -52,12 +51,9 @@ function _formatTimeString(timeVal) {
     return str;
 }
 
-const AudioRenderer = new Lang.Class({
-    Name: 'AudioRenderer',
-    Extends: Gtk.Box,
-
-    _init : function(file, mainWindow) {
-        this.parent({ orientation: Gtk.Orientation.HORIZONTAL,
+const AudioRenderer = GObject.registerClass(class AudioRenderer extends Gtk.Box {
+    _init(file, mainWindow) {
+        super._init({ orientation: Gtk.Orientation.HORIZONTAL,
                       spacing: 6 });
 
         this.moveOnClick = true;
@@ -92,9 +88,9 @@ const AudioRenderer = new Lang.Class({
         vbox.pack_start(this._albumLabel, false, false, 0);
 
         this.connect('destroy', this._onDestroy.bind(this));
-    },
+    }
 
-    _createPlayer : function(file) {
+    _createPlayer(file) {
         this._playerNotifies = [];
 
         this._player = new Sushi.SoundPlayer({ uri: file.get_uri() });
@@ -110,16 +106,16 @@ const AudioRenderer = new Lang.Class({
             this._player.connect('notify::taglist', this._onTagListChanged.bind(this)));
         this._playerNotifies.push(
             this._player.connect('notify::cover', this._onCoverArtChanged.bind(this)));
-    },
+    }
 
-    _onDestroy : function() {
+    _onDestroy() {
         this._playerNotifies.forEach((id) => this._player.disconnect(id));
         this._playerNotifies = [];
         this._player.playing = false;
         this._player = null;
-    },
+    }
 
-    _ensurePixbufSize : function(cover) {
+    _ensurePixbufSize(cover) {
         let width, height;
 
         width = cover.get_width();
@@ -139,9 +135,9 @@ const AudioRenderer = new Lang.Class({
         } else {
             this._coverArt = cover;
         }
-    },
+    }
 
-    _onCoverArtChanged : function() {
+    _onCoverArtChanged() {
         if (!this._artFetcher.cover) {
             this._image.set_from_icon_name('media-optical-symbolic');
             return;
@@ -149,9 +145,9 @@ const AudioRenderer = new Lang.Class({
 
         this._ensurePixbufSize(this._artFetcher.cover);
         this._image.set_from_pixbuf(this._coverArt);
-    },
+    }
 
-    _onTagListChanged : function() {
+    _onTagListChanged() {
         let tags = this._player.taglist;
         let albumName = tags.get_string('album')[1];
         let artistName = tags.get_string('artist')[1];
@@ -183,20 +179,18 @@ const AudioRenderer = new Lang.Class({
         this._artFetcher = new Sushi.CoverArtFetcher();
         this._artFetcher.connect('notify::cover', this._onCoverArtChanged.bind(this));
         this._artFetcher.taglist = tags;
+    }
 
-        this._mainWindow.queue_allocate();
-    },
-
-    _updateProgressBar : function() {
+    _updateProgressBar() {
         if (!this._progressBar)
             return;
 
         this._isSettingValue = true;
         this._progressBar.set_value(this._player.progress * 1000);
         this._isSettingValue = false;
-    },
+    }
 
-    _updateCurrentLabel : function() {
+    _updateCurrentLabel() {
         if (!this._currentLabel)
             return;
 
@@ -204,27 +198,27 @@ const AudioRenderer = new Lang.Class({
             Math.floor(this._player.duration * this._player.progress);
 
         this._currentLabel.set_text(_formatTimeString(currentTime));
-    },
+    }
 
-    _updateDurationLabel : function() {
+    _updateDurationLabel() {
         if (!this._durationLabel)
             return;
 
         let totalTime = this._player.duration;
 
         this._durationLabel.set_text(_formatTimeString(totalTime));
-    },
+    }
 
-    _onPlayerProgressChanged : function() {
+    _onPlayerProgressChanged() {
         this._updateProgressBar();
         this._updateCurrentLabel();
-    },
+    }
 
-    _onPlayerDurationChanged : function() {
+    _onPlayerDurationChanged() {
         this._updateDurationLabel();
-    },
+    }
 
-    _onPlayerStateChanged : function() {
+    _onPlayerStateChanged() {
         switch(this._player.state) {
         case Sushi.SoundPlayerState.PLAYING:
             this._toolbarPlay.image.set_from_icon_name('media-playback-pause-symbolic', Gtk.IconSize.MENU);
@@ -233,13 +227,13 @@ const AudioRenderer = new Lang.Class({
             let iconName = 'media-playback-start-symbolic';
             this._toolbarPlay.image.set_from_icon_name(iconName, Gtk.IconSize.MENU);
         }
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.NAT_SIZE;
-    },
+    }
 
-    populateToolbar : function (toolbar) {
+    populateToolbar(toolbar) {
         this._toolbarPlay = Utils.createToolButton('media-playback-pause-symbolic', () => {
             let playing = !this._player.playing;
             this._player.playing = playing;
@@ -264,7 +258,7 @@ const AudioRenderer = new Lang.Class({
 
         this._durationLabel = new Gtk.Label({ margin_start: 3 });
         toolbar.add(this._durationLabel);
-    },
+    }
 });
 
 let handler = new MimeHandler.MimeHandler();
diff --git a/src/js/viewers/evince.js b/src/js/viewers/evince.js
index 8f7184a..21227f3 100644
--- a/src/js/viewers/evince.js
+++ b/src/js/viewers/evince.js
@@ -23,23 +23,19 @@
  *
  */
 
-const {EvinceDocument, EvinceView, Gtk, Sushi} = imports.gi;
+const {EvinceDocument, EvinceView, GObject, Gtk, Sushi} = imports.gi;
 
 const Gettext = imports.gettext.domain('sushi');
 const _ = Gettext.gettext;
-const Lang = imports.lang;
 
 const Constants = imports.util.constants;
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 const Utils = imports.ui.utils;
 
-const EvinceRenderer = new Lang.Class({
-    Name: 'EvinceRenderer',
-    Extends: Gtk.ScrolledWindow,
-
-    _init : function(file, mainWindow) {
-        this.parent({ visible: true,
+const EvinceRenderer = GObject.registerClass(class EvinceRenderer extends Gtk.ScrolledWindow {
+    _init(file, mainWindow) {
+        super._init({ visible: true,
                       min_content_height: Constants.VIEW_MIN,
                       min_content_width: Constants.VIEW_MIN });
 
@@ -58,9 +54,9 @@ const EvinceRenderer = new Lang.Class({
         this.add(this._view);
 
         this.connect('destroy', this._onDestroy.bind(this));
-    },
+    }
 
-    _updatePageLabel : function() {
+    _updatePageLabel() {
         let curPage = this._model.get_page();
         let totPages = this._model.document.get_n_pages();
 
@@ -68,9 +64,9 @@ const EvinceRenderer = new Lang.Class({
         this._toolbarForward.set_sensitive(curPage < totPages - 1);
 
         this._pageLabel.set_text(_("%d of %d").format(curPage + 1, totPages));
-    },
+    }
 
-    _onDocumentLoaded : function(pdfLoader) {
+    _onDocumentLoaded(pdfLoader) {
         this._model = EvinceView.DocumentModel.new_with_document(pdfLoader.document);
         this._model.set_sizing_mode(EvinceView.SizingMode.FIT_WIDTH);
         this._model.set_continuous(true);
@@ -79,13 +75,13 @@ const EvinceRenderer = new Lang.Class({
         this._updatePageLabel();
 
         this._view.set_model(this._model);
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.MAX_SIZE;
-    },
+    }
 
-    populateToolbar : function(toolbar) {
+    populateToolbar(toolbar) {
         this._toolbarBack = Utils.createToolButton('go-previous-symbolic', () => {
             this._view.previous_page();
         });
@@ -106,9 +102,9 @@ const EvinceRenderer = new Lang.Class({
 
         let toolbarZoom = Utils.createFullScreenButton(this._mainWindow);
         toolbar.add(toolbarZoom);
-    },
+    }
 
-    _onDestroy : function() {
+    _onDestroy() {
         this._pdfLoader = null;
     }
 });
diff --git a/src/js/viewers/font.js b/src/js/viewers/font.js
index 01109d4..329e42e 100644
--- a/src/js/viewers/font.js
+++ b/src/js/viewers/font.js
@@ -23,25 +23,20 @@
  *
  */
 
-const {Gtk, GLib, Sushi} = imports.gi;
-
-const Lang = imports.lang;
+const {GLib, GObject, Gtk, Sushi} = imports.gi;
 
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 
-const FontRenderer = new Lang.Class({
-    Name: 'FontRenderer',
-    Extends: Sushi.FontWidget,
-
-    _init : function(file, mainWindow) {
-        this.parent({ uri: file.get_uri(),
+const FontRenderer = GObject.registerClass(class FontRenderer extends Sushi.FontWidget {
+    _init(file, mainWindow) {
+        super._init({ uri: file.get_uri(),
                       visible: true })
 
         this.moveOnClick = true;
         this.canFullScreen = true;
         this._file = file;
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.MAX_SIZE;
diff --git a/src/js/viewers/gst.js b/src/js/viewers/gst.js
index 9054bb2..c73de5c 100644
--- a/src/js/viewers/gst.js
+++ b/src/js/viewers/gst.js
@@ -23,21 +23,16 @@
  *
  */
 
-const {GLib, Sushi} = imports.gi;
-
-const Lang = imports.lang;
+const {GLib, GObject, Sushi} = imports.gi;
 
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 const TotemMimeTypes = imports.util.totemMimeTypes;
 const Utils = imports.ui.utils;
 
-const GstRenderer = new Lang.Class({
-    Name: 'GstRenderer',
-    Extends: Sushi.MediaBin,
-
-    _init : function(file, mainWindow) {
-        this.parent({ uri: file.get_uri() });
+const GstRenderer = GObject.registerClass(class GstRenderer extends Sushi.MediaBin {
+    _init(file, mainWindow) {
+        super._init({ uri: file.get_uri() });
 
         this.moveOnClick = true;
         // fullscreen is handled internally by the widget
@@ -50,14 +45,14 @@ const GstRenderer = new Lang.Class({
         });
 
         this.connect('destroy', this._onDestroy.bind(this));
-    },
+    }
 
-    _onDestroy : function() {
+    _onDestroy() {
         if (this._autoplayId > 0) {
             GLib.source_remove(this._autoplayId);
             this._autoplayId = 0;
         }
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.STRETCHED;
diff --git a/src/js/viewers/html.js b/src/js/viewers/html.js
index 9cab7a9..eb9bad8 100644
--- a/src/js/viewers/html.js
+++ b/src/js/viewers/html.js
@@ -23,19 +23,15 @@
  *
  */
 
-const {Gtk, GLib, Sushi, WebKit2} = imports.gi;
-const Lang = imports.lang;
+const {Gtk, GLib, GObject, Sushi, WebKit2} = imports.gi;
 
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 const Utils = imports.ui.utils;
 
-const HTMLRenderer = new Lang.Class({
-    Name: 'HTMLRenderer',
-    Extends: WebKit2.WebView,
-
-    _init : function(file, mainWindow) {
-        this.parent();
+const HTMLRenderer = GObject.registerClass(class HTMLRenderer extends WebKit2.WebView {
+    _init(file, mainWindow) {
+        super._init();
 
         this.moveOnClick = false;
         this.canFullScreen = true;
@@ -48,13 +44,13 @@ const HTMLRenderer = new Lang.Class({
                      function() {return true;});
 
         this.load_uri(file.get_uri());
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.MAX_SIZE;
-    },
+    }
 
-    populateToolbar : function(toolbar) {
+    populateToolbar(toolbar) {
         let toolbarZoom = Utils.createFullScreenButton(this._mainWindow);
         toolbar.add(toolbarZoom);
 
diff --git a/src/js/viewers/image.js b/src/js/viewers/image.js
index 63422e1..386b644 100644
--- a/src/js/viewers/image.js
+++ b/src/js/viewers/image.js
@@ -29,30 +29,27 @@ const {Gdk, GdkPixbuf, GLib, GObject, Gtk} = imports.gi;
 
 const Gettext = imports.gettext.domain('sushi');
 const _ = Gettext.gettext;
-const Lang = imports.lang;
 const Mainloop = imports.mainloop;
 
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
 const Utils = imports.ui.utils;
 
-const Image = new Lang.Class({
-    Name: 'Image',
-    Extends: Gtk.DrawingArea,
+const Image = GObject.registerClass({
     Properties: {
-        'pix': GObject.ParamSpec.object('pix', '', '',
-                                        GObject.ParamFlags.READWRITE,
-                                        GdkPixbuf.Pixbuf)
-    },
+        pix: GObject.ParamSpec.object('pix', '', '',
+                                      GObject.ParamFlags.READWRITE,
+                                      GdkPixbuf.Pixbuf)
+    }
+}, class Image extends Gtk.DrawingArea {
+    _init() {
+        super._init();
 
-    _init: function() {
         this._pix = null;
         this._scaledSurface = null;
+    }
 
-        this.parent();
-    },
-
-    _ensureScaledPix: function() {
+    _ensureScaledPix() {
         if (!this._pix)
             return;
 
@@ -81,22 +78,22 @@ const Image = new Lang.Class({
                                                                        scaleFactor,
                                                                        this.get_window());
         }
-    },
+    }
 
-    vfunc_get_preferred_width: function() {
+    vfunc_get_preferred_width() {
         return [1, this._pix ? this._pix.get_width() : 1];
-    },
+    }
 
-    vfunc_get_preferred_height: function() {
+    vfunc_get_preferred_height() {
         return [1, this._pix ? this._pix.get_height() : 1];
-    },
+    }
 
-    vfunc_size_allocate: function(allocation) {
-        this.parent(allocation);
+    vfunc_size_allocate(allocation) {
+        super.vfunc_size_allocate(allocation);
         this._ensureScaledPix();
-    },
+    }
 
-    vfunc_draw: function(context) {
+    vfunc_draw(context) {
         if (!this._scaledSurface)
             return false;
 
@@ -110,25 +107,22 @@ const Image = new Lang.Class({
         context.setSourceSurface(this._scaledSurface, offsetX, offsetY);
         context.paint();
         return false;
-    },
+    }
 
     set pix(p) {
         this._pix = p;
         this._scaledSurface = null;
         this.queue_resize();
-    },
+    }
 
     get pix() {
         return this._pix;
     }
 });
 
-const ImageRenderer = new Lang.Class({
-    Name: 'ImageRenderer',
-    Extends: Image,
-
-    _init : function(file, mainWindow) {
-        this.parent();
+const ImageRenderer = GObject.registerClass(class ImageRenderer extends Image {
+    _init(file, mainWindow) {
+        super._init();
 
         this._timeoutId = 0;
         this.moveOnClick = true;
@@ -140,9 +134,9 @@ const ImageRenderer = new Lang.Class({
         this._createImageTexture(file);
 
         this.connect('destroy', this._onDestroy.bind(this));
-    },
+    }
 
-    _createImageTexture : function(file) {
+    _createImageTexture(file) {
         file.read_async(GLib.PRIORITY_DEFAULT, null, (obj, res) => {
             try {
                 let stream = obj.read_finish(res);
@@ -151,9 +145,9 @@ const ImageRenderer = new Lang.Class({
                 logError(e, `Unable to read image file ${file.get_uri()}`);
             }
         });
-    },
+    }
 
-    _textureFromStream : function(stream) {
+    _textureFromStream(stream) {
         GdkPixbuf.PixbufAnimation.new_from_stream_async(stream, null, (obj, res) => {
             let anim = GdkPixbuf.PixbufAnimation.new_from_stream_finish(res);
 
@@ -171,23 +165,23 @@ const ImageRenderer = new Lang.Class({
                 }
             });
          });
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.SCALED;
-    },
+    }
 
-    _startTimeout : function() {
+    _startTimeout() {
         this._timeoutId = Mainloop.timeout_add(
             this._iter.get_delay_time(), this._advanceImage.bind(this));
-    },
+    }
 
-    populateToolbar : function(toolbar) {
+    populateToolbar(toolbar) {
         let toolbarZoom = Utils.createFullScreenButton(this._mainWindow);
         toolbar.add(toolbarZoom);
-    },
+    }
 
-    _onDestroy : function () {
+    _onDestroy() {
         /* We should do the check here because it is possible
          * that we never created a source if our image is
          * not animated. */
@@ -195,14 +189,14 @@ const ImageRenderer = new Lang.Class({
             Mainloop.source_remove(this._timeoutId);
             this._timeoutId = 0;
         }
-    },
+    }
 
-    _advanceImage : function () {
+    _advanceImage() {
         this._iter.advance(null);
         let pix = this._iter.get_pixbuf().apply_embedded_orientation();
         this.set_from_pixbuf(pix);
         return true;
-    },
+    }
 });
 
 let handler = new MimeHandler.MimeHandler();
diff --git a/src/js/viewers/text.js b/src/js/viewers/text.js
index ffb8c0f..3705f8e 100644
--- a/src/js/viewers/text.js
+++ b/src/js/viewers/text.js
@@ -25,9 +25,7 @@
 
 imports.gi.versions.GtkSource = '4';
 
-const {Gdk, Gio, GLib, Gtk, GtkSource, Sushi} = imports.gi;
-
-const Lang = imports.lang;
+const {Gdk, Gio, GLib, GObject, Gtk, GtkSource, Sushi} = imports.gi;
 
 const MimeHandler = imports.ui.mimeHandler;
 const Renderer = imports.ui.renderer;
@@ -47,12 +45,9 @@ function _getGeditScheme() {
     return geditScheme;
 }
 
-const TextRenderer = new Lang.Class({
-    Name: 'TextRenderer',
-    Extends: Gtk.ScrolledWindow,
-
-    _init : function(file, mainWindow) {
-        this.parent();
+const TextRenderer = GObject.registerClass(class TextRenderer extends Gtk.ScrolledWindow {
+    _init(file, mainWindow) {
+        super._init();
 
         this.moveOnClick = false;
         this.canFullScreen = true;
@@ -76,9 +71,9 @@ const TextRenderer = new Lang.Class({
         });
 
         this.add(this._view);
-    },
+    }
 
-    _onBufferLoaded : function(loader, buffer) {
+    _onBufferLoaded(loader, buffer) {
         buffer.highlight_syntax = true;
 
         let styleManager = GtkSource.StyleSchemeManager.get_default();
@@ -89,13 +84,13 @@ const TextRenderer = new Lang.Class({
         this._view.set_buffer(buffer);
         if (buffer.get_language())
             this._view.set_show_line_numbers(true);
-    },
+    }
 
     get resizePolicy() {
         return Renderer.ResizePolicy.MAX_SIZE;
-    },
+    }
 
-    populateToolbar : function(toolbar) {
+    populateToolbar(toolbar) {
         let toolbarRun = Utils.createOpenButton(this._file, this._mainWindow);
         toolbar.add(toolbarRun);
     }


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