* renumber patch: 0103-convenience.js-has-been-removed-in-GNOME-extensions-.patch * renumber patch: 0104-Makefile-allow-shipping-convenience.js.patch (was 0005) * renumber patch: 0105-metadata.json-mark-GNOME-3.30-as-supported.patch (was 0004) * remove patch: 0006-Makefile-don-t-zip.patch * add patch: 0106-Fix-installation-instructions-matches-Ubuntu-18.04-T.patch OBS-URL: https://build.opensuse.org/package/show/Office/hamster-time-tracker?expand=0&rev=12
488 lines
15 KiB
Diff
488 lines
15 KiB
Diff
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
|
|
|