Vintage digital display with a high-fidelity 7-segment font. 10 color themes, custom colors, ghost segments, CRT scanlines, desktop widget mode, a quick color-switch menu, and integrated alarms with an on-screen dialog so they're never missed. Reads its own bundled font and alarm sound files, and copies the bundled font into ~/.local/share/fonts on first opening preferences so the live preview renders correctly; no other file access.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO015 warning
signals connected by extension should be disconnected in disable()
Signals assigned in `enable()` are missing matching disconnect calls in `disable()` or its helper methods.
extension.js:106
this._indicator.connect('button-press-event', (actor, event) => {
if (this._isAlarming) {
this._stopAlarm();
return Clutter.EVENT_STOP;
}
if (event.get_button() === 1) {
dragging =
extension.js:151
this._indicator.connect('button-press-event', () => {
if (this._isAlarming) {
this._stopAlarm();
return Clutter.EVENT_STOP;
} else {
this.openPreferences();
return Clutter.EVEN
extension.js:126
this._indicator.connect('button-release-event', () => {
if (dragging) {
dragging = false;
let [x, y] = this._indicator.get_position();
this._settings.set_int('widget-x', x);
this._settings.set
extension.js:137
this._indicator.connect('motion-event', (actor, event) => {
if (dragging) {
let [x, y] = event.get_coords();
actor.set_position(x - grabX, y - grabY);
return Clutter.EVENT_STOP;
}
| Version | Status |
|---|---|
| 73 | Active |
| 72 | Active |
| 71 | Active |
| 70 | Active |
| 69 | Active |
| 68 | Active |
| 67 | Rejected |
| 66 | Active |
| 65 | Active |
| 64 | Active |
| 63 | Active |
| 62 | Active |
| 61 | Active |
| 60 | Active |
| 59 | Active |
| 58 | Active |
| 57 | Rejected |
| 56 | Active |
| 55 | Active |
| 54 | Active |
| 53 | Active |
| 52 | Rejected |
| 51 | Active |
| 50 | Active |
| 49 | Active |
| 48 | Active |
| 47 | Rejected |
| 46 | Inactive |
| 45 | Inactive |
| 44 | Rejected |
| 43 | Inactive |
| 42 | Inactive |
| 41 | Inactive |
| 40 | Inactive |
| 39 | Inactive |
| 38 | Rejected |
| 37 | Rejected |
| 36 | Inactive |
| 35 | Inactive |
| 34 | Rejected |
| 33 | Inactive |
| 32 | Inactive |
| 31 | Inactive |
| 30 | Rejected |
| 29 | Inactive |
| 28 | Rejected |
| 27 | Rejected |
| 26 | Rejected |
| 25 | Rejected |
| 24 | Inactive |
| 23 | Inactive |
| 22 | Rejected |
| 21 | Rejected |
| 20 | Rejected |
| 19 | Inactive |
| 18 | Inactive |
| 17 | Inactive |
| 16 | Rejected |
| 15 | Inactive |
| 14 | Rejected |
| 13 | Inactive |
| 12 | Rejected |
| 11 | Inactive |
| 10 | Inactive |
| 9 | Inactive |
| 8 | Rejected |
| 7 | Rejected |
| 6 | Rejected |
| 5 | Rejected |
| 4 | Rejected |
| 3 | Rejected |
| 2 | Rejected |
| 1 | Rejected |
Version 36 Update - Quick Fix What's Fixed - **UI Responsiveness**: Toggle switches in preferences now work with a single click (previously needed 2-3 clicks) - **Affected switches**: Widget Mode, Show Date, 24-Hour Format, Show Seconds, Blinking Separators, Enable Alarm Technical Details The issue was caused by recursive GTK switch events. I've added simple state validation to prevent duplicate activations: ```javascript // Now checks state before setting to avoid loops if (w.active !== settings.get_boolean('setting-name')) { settings.set_boolean('setting-name', w.active); } ``` Files Changed - `prefs.js`: Updated 6 switch handlers - `metadata.json`: Version bump to 36 Testing All switches now respond immediately, settings persist correctly, and existing functionality remains intact. --- **Thank you for your time and patience reviewing this extension!** Your work maintaining the GNOME Extensions ecosystem is truly appreciated. This small fix should make the user experience much smoother.