Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory
hamster-time-tracker
0111-Port-GObject-classes-to-JS6-classes.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0111-Port-GObject-classes-to-JS6-classes.patch of Package hamster-time-tracker
From 86b61b5d552754b58960fcea1afd886112337e18 Mon Sep 17 00:00:00 2001 From: Martin Wilck <mwilck@suse.com> Date: Thu, 9 May 2019 16:10:40 +0200 Subject: [PATCH 111/130] Port GObject classes to JS6 classes This patch is heavily based on original work by Ernestas Kulik <ekulik@redhat.com>. This patch is required to make hamster-shell-extension work on GNOME 3.32. At the same time, it breaks compatibility with older gnome-shell versions that don't support ES6 class syntax. See https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/361 Fixes https://github.com/projecthamster/hamster-shell-extension/issues/307 --- extension/prefs.js | 24 +++++------ extension/widgets/categoryTotalsWidget.js | 18 ++++----- extension/widgets/factsBox.js | 26 ++++++------ extension/widgets/ongoingFactEntry.js | 21 +++++----- extension/widgets/panelWidget.js | 49 +++++++++++------------ extension/widgets/todaysFactsWidget.js | 21 +++++----- 6 files changed, 77 insertions(+), 82 deletions(-) diff --git a/extension/prefs.js b/extension/prefs.js index 93ab15e..608034a 100644 --- a/extension/prefs.js +++ b/extension/prefs.js @@ -31,13 +31,13 @@ const Lang = imports.lang; const ExtensionUtils = imports.misc.extensionUtils; const Me = ExtensionUtils.getCurrentExtension(); -const HamsterSettingsWidget = new GObject.Class({ - Name: 'ProjectHamster.Prefs.HamsterSettingsWidget', - GTypeName: 'HamsterSettingsWidget', - Extends: Gtk.VBox, +const HamsterSettingsWidget = GObject.registerClass( +class HamsterSettingsWidget extends Gtk.VBox { + _init(params) { + super._init(params); + + this.name = 'ProjectHamster.Prefs.HamsterSettingsWidget'; - _init : function(params) { - this.parent(params); this.margin = 10; this._settings = ExtensionUtils.getSettings(); @@ -114,9 +114,9 @@ const HamsterSettingsWidget = new GObject.Class({ let version_text = ExtensionUtils.getCurrentExtension().metadata.version; let version_label_text = "You are running hamster-shell-extension version " + version_text; vbox.add(new Gtk.Label({label: version_label_text, margin_top: 10})); - }, + } - _onPlacementChange: function(widget) { + _onPlacementChange(widget) { let [success, iter] = widget.get_active_iter(); if (!success) return; @@ -127,9 +127,9 @@ const HamsterSettingsWidget = new GObject.Class({ return; this._settings.set_int("panel-placement", newPlacement); - }, + } - _onAppearanceChange: function(widget) { + _onAppearanceChange(widget) { let [success, iter] = widget.get_active_iter(); if (!success) return; @@ -140,9 +140,9 @@ const HamsterSettingsWidget = new GObject.Class({ return; this._settings.set_int("panel-appearance", newAppearance); - }, + } - _onHotkeyChange: function(widget, bananas) { + _onHotkeyChange(widget, bananas) { //global.log(widget, bananas); let hotkey = widget.get_text(); let [key, mods] = Gtk.accelerator_parse(hotkey); diff --git a/extension/widgets/categoryTotalsWidget.js b/extension/widgets/categoryTotalsWidget.js index 683fe92..17af747 100644 --- a/extension/widgets/categoryTotalsWidget.js +++ b/extension/widgets/categoryTotalsWidget.js @@ -25,6 +25,7 @@ const Lang = imports.lang; const St = imports.gi.St; const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; +const GObject = imports.gi.GObject; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Stuff = Me.imports.stuff; @@ -33,19 +34,16 @@ const Stuff = Me.imports.stuff; /** * Custom Label widget that displays category totals. */ -var CategoryTotalsWidget = new Lang.Class({ - Name: 'CategoryTotals', - Extends: St.Label, - - _init: function() { - this.parent({style_class: 'summary-label'}); - - }, +var CategoryTotalsWidget = GObject.registerClass( +class CategoryTotals extends St.Label { + _init() { + super._init({style_class: 'summary-label'}); + } /** * Recompute values and replace old string with new one based on passed facts. */ - refresh: function(facts) { + refresh(facts) { /** * Construct a string representing category totals. */ @@ -67,5 +65,5 @@ var CategoryTotalsWidget = new Lang.Class({ } this.set_text(getString(facts)); - }, + } }); diff --git a/extension/widgets/factsBox.js b/extension/widgets/factsBox.js index 42857f5..aa5a336 100644 --- a/extension/widgets/factsBox.js +++ b/extension/widgets/factsBox.js @@ -27,6 +27,7 @@ const PopupMenu = imports.ui.popupMenu; const Clutter = imports.gi.Clutter; const Mainloop = imports.mainloop; const GLib = imports.gi.GLib; +const GObject = imports.gi.GObject; const Gettext = imports.gettext.domain('hamster-shell-extension'); const _ = Gettext.gettext; @@ -43,11 +44,10 @@ const TodaysFactsWidget = Me.imports.widgets.todaysFactsWidget.TodaysFactsWidget * well as todays facts. * @class */ -var FactsBox = new Lang.Class({ - Name: 'FactsBox', - Extends: PopupMenu.PopupBaseMenuItem, - _init: function(controller, panelWidget) { - this.parent({reactive: false}); +var FactsBox = +class FactsBox extends PopupMenu.PopupBaseMenuItem { + constructor(controller, panelWidget) { + super({reactive: false}); this._controller = controller; @@ -79,32 +79,32 @@ var FactsBox = new Lang.Class({ // Setup category summery this.summaryLabel = new CategoryTotalsWidget(); main_box.add(this.summaryLabel); - }, + } // [FIXME] // The best solution would be to listen for a 'FactsChanged' Signal that carries the new // facts as payload and just refresh with this. But for now we stick with this // simpler version. - refresh: function(facts, ongoingFact) { + refresh(facts, ongoingFact) { this.todaysFactsWidget.refresh(facts, ongoingFact); this.summaryLabel.refresh(facts); - }, + } /** * Focus the fact entry and make sure todaysFactsWidget are scrolled to the bottom. */ - focus: function() { + focus() { Mainloop.timeout_add(20, Lang.bind(this, function() { this._scrollAdjustment.value = this._scrollAdjustment.upper; global.stage.set_key_focus(this.ongoingFactEntry); })); - }, + } /** * Remove any existing focus. */ - unfocus: function() { + unfocus() { global.stage.set_key_focus(null); - }, -}); + } +}; diff --git a/extension/widgets/ongoingFactEntry.js b/extension/widgets/ongoingFactEntry.js index a46948d..b90238e 100644 --- a/extension/widgets/ongoingFactEntry.js +++ b/extension/widgets/ongoingFactEntry.js @@ -22,6 +22,7 @@ Copyright (c) 2016 - 2018 Eric Goller / projecthamster <elbenfreund@projecthamst const Lang = imports.lang; +const GObject = imports.gi.GObject; const St = imports.gi.St; const Clutter = imports.gi.Clutter; @@ -39,12 +40,10 @@ const Me = imports.misc.extensionUtils.getCurrentExtension(); * * */ -var OngoingFactEntry = new Lang.Class({ - Name: 'OngoingFactEntry', - Extends: St.Entry, - - _init: function(controller) { - this.parent({ +var OngoingFactEntry = GObject.registerClass( +class OngoingFactEntry extends St.Entry { + _init(controller) { + super._init({ name: 'searchEntry', can_focus: true, track_hover: true, @@ -59,7 +58,7 @@ var OngoingFactEntry = new Lang.Class({ this._runningActivitiesQuery = null; this.clutter_text.connect('activate', Lang.bind(this, this._onEntryActivated)); this.clutter_text.connect('key-release-event', Lang.bind(this, this._onKeyReleaseEvent)); - }, + } /** * Callback for when ``ongoingFactEntry`` gets activated. @@ -70,13 +69,13 @@ var OngoingFactEntry = new Lang.Class({ * * @callback FactsBox~_onEntryActivated */ - _onEntryActivated: function() { + _onEntryActivated() { let text = this.get_text(); this._controller.apiProxy.AddFactRemote(text, 0, 0, false, Lang.bind(this, function(response, error) { // not interested in the new id - this shuts up the warning })); this.set_text(''); - }, + } /** * Callback triggered after key release. @@ -85,7 +84,7 @@ var OngoingFactEntry = new Lang.Class({ * * @callback FactsBox~_onKeyReleaseEvent */ - _onKeyReleaseEvent: function(textItem, evt) { + _onKeyReleaseEvent(textItem, evt) { /** * Check if the passed key is on our list of keys to be ignored. */ @@ -185,5 +184,5 @@ var OngoingFactEntry = new Lang.Class({ this._prevText = completion.toLowerCase(); } } - }, + } }); diff --git a/extension/widgets/panelWidget.js b/extension/widgets/panelWidget.js index d43833d..7328ba0 100644 --- a/extension/widgets/panelWidget.js +++ b/extension/widgets/panelWidget.js @@ -23,6 +23,7 @@ Copyright (c) 2016 - 2018 Eric Goller / projecthamster <elbenfreund@projecthamst const Lang = imports.lang; const Gio = imports.gi.Gio; +const GObject = imports.gi.GObject; const Clutter = imports.gi.Clutter; const PanelMenu = imports.ui.panelMenu; const St = imports.gi.St; @@ -55,14 +56,12 @@ const Stuff = Me.imports.stuff; * * @class */ -var PanelWidget = new Lang.Class({ - Name: 'PanelWidget', - Extends: PanelMenu.Button, - - _init: function(controller) { +var PanelWidget = GObject.registerClass( +class PanelWidget extends PanelMenu.Button { + _init(controller) { // [FIXME] // What is the parameter? - this.parent(0.0); + super._init(0.0); this._controller = controller; // [FIXME] @@ -140,7 +139,7 @@ var PanelWidget = new Lang.Class({ this.timeout = GLib.timeout_add_seconds(0, 60, Lang.bind(this, this.refresh)); this.connect('destroy', Lang.bind(this, this._disableRefreshTimer)); this.refresh(); - }, + } /** * This is our main 'update/refresh' method. @@ -152,7 +151,7 @@ var PanelWidget = new Lang.Class({ * required facts etc and pass them to the relevant sub-widget's * refresh methods. */ - refresh: function() { + refresh() { /** * We need to wrap our actual refresh code in this callback for now as * I am having major difficulties using a syncronous dbus method call to @@ -197,21 +196,21 @@ var PanelWidget = new Lang.Class({ // here. this._controller.apiProxy.GetTodaysFactsRemote(Lang.bind(this, _refresh)); return GLib.SOURCE_CONTINUE; - }, + } /** * Open 'popup menu' containing the bulk of the extension widgets. */ - show: function() { + show() { this.menu.open(); - }, + } /** * Close/Open the 'popup menu' depending on previous state. */ - toggle: function() { + toggle() { this.menu.toggle(); - }, + } /** @@ -220,7 +219,7 @@ var PanelWidget = new Lang.Class({ * Depending on the 'display mode' set in the extensions settings this has * slightly different consequences. */ - updatePanelDisplay: function(fact) { + updatePanelDisplay(fact) { /** * Return a text string representing the passed fact suitable for the panelLabel. * @@ -262,7 +261,7 @@ var PanelWidget = new Lang.Class({ this.panelLabel.show(); break; } - }, + } /** * Disable the refresh timer. @@ -272,9 +271,9 @@ var PanelWidget = new Lang.Class({ * This method is actually a callback triggered on the destroy * signal. */ - _disableRefreshTimer: function() { + _disableRefreshTimer() { GLib.source_remove(this.timeout); - }, + } /** * Callback to be triggered when an *ongoing fact* is stopped. @@ -283,7 +282,7 @@ var PanelWidget = new Lang.Class({ * This will get the current time and issue the ``StopTracking`` * method call to the dbus interface. */ - _onStopTracking: function() { + _onStopTracking() { let now = new Date(); let epochSeconds = Date.UTC(now.getFullYear(), now.getMonth(), @@ -293,25 +292,25 @@ var PanelWidget = new Lang.Class({ now.getSeconds()); epochSeconds = Math.floor(epochSeconds / 1000); this._controller.apiProxy.StopTrackingRemote(GLib.Variant.new('i', [epochSeconds])); - }, + } /** * Callback that triggers opening of the *Overview*-Window. * * @callback panelWidget~_onOpenOverview */ - _onOpenOverview: function() { + _onOpenOverview() { this._controller.windowsProxy.overviewSync(); - }, + } /** * Callback that triggers opening of the *Add Fact*-Window. * * @callback panelWidget~_onOpenAddFact */ - _onOpenAddFact: function() { + _onOpenAddFact() { this._controller.windowsProxy.editSync(GLib.Variant.new('i', [0])); - }, + } /** * Callback that triggers opening of the *Add Fact*-Window. @@ -320,7 +319,7 @@ var PanelWidget = new Lang.Class({ * * Note: This will open the GUI settings, not the extension settings! */ - _onOpenSettings: function() { + _onOpenSettings() { this._controller.windowsProxy.preferencesSync(); - }, + } }); diff --git a/extension/widgets/todaysFactsWidget.js b/extension/widgets/todaysFactsWidget.js index 1ec2de3..1b7f84a 100644 --- a/extension/widgets/todaysFactsWidget.js +++ b/extension/widgets/todaysFactsWidget.js @@ -25,6 +25,7 @@ const Lang = imports.lang; const St = imports.gi.St; const Clutter = imports.gi.Clutter; const GLib = imports.gi.GLib; +const GObject = imports.gi.GObject; const Me = imports.misc.extensionUtils.getCurrentExtension(); const Stuff = Me.imports.stuff; @@ -33,12 +34,10 @@ const Stuff = Me.imports.stuff; /** * A widget that lists all facts for *today*. */ -var TodaysFactsWidget = new Lang.Class({ - Name: 'TodaysFactsWidget', - Extends: St.ScrollView, - - _init: function(controller, panelWidget) { - this.parent({style_class: 'hamster-scrollbox'}); +var TodaysFactsWidget = GObject.registerClass( +class TodaysFactsWidget extends St.ScrollView { + _init(controller, panelWidget) { + super._init({style_class: 'hamster-scrollbox'}); this._controller = controller; this._panelWidget = panelWidget; @@ -53,12 +52,12 @@ var TodaysFactsWidget = new Lang.Class({ this.factsBox.add(this.facts_widget); this.add_actor(this.factsBox); - }, + } /** * Populate the widget with rows representing the passed facts. */ - populateFactsWidget: function(facts, ongoingFact) { + populateFactsWidget(facts, ongoingFact) { /** * Construct an individual row within the widget - representing a single fact. @@ -181,13 +180,13 @@ var TodaysFactsWidget = new Lang.Class({ } rowCount += 1; } - }, + } /** * Clear the widget and populate it anew. */ - refresh: function(facts, ongoingFact) { + refresh(facts, ongoingFact) { this.facts_widget.remove_all_children(); this.populateFactsWidget(facts, ongoingFact); - }, + } }); -- 2.26.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor