A calendar-integrated daily task manager and reminder system for the GNOME panel. Visualises task load and completion with dynamic colour coding. Supports timed reminders with Snooze and Dismiss notifications.
Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.
EGO-A-004 warning
extension files should not contain excessive ungated console logging
File contains 6 ungated console.log/warn/error calls (threshold: 5).
extension.js:67
console.error('[TaskMan] data.json corrupt — resetting', jsonErr)
extension.js:79
console.error('[TaskMan] Failed to load data.json', e)
extension.js:124
console.error('[TaskMan] Async save failed', e)
extension.js:129
console.error('[TaskMan] Failed to start async save', e)
extension.js:228
console.error('[TaskMan] Could not create notification source', e)
extension.js:295
console.error('[TaskMan] Notification failed', e)
EGO-L-002 warning
objects created by extension should be destroyed in disable()
Objects assigned in `enable()` are missing matching `.destroy()` calls in `disable()` or its helper methods.
extension.js:487
this._dateLabel = new St.Label({ text: '', style_class: 'taskman-date-label' })
extension.js:499
this._entry = new St.Entry({ hint_text: 'New task — press Enter or choose ⏰…', style_class: 'taskman-entry', can_focus: true, x_expand: true })
extension.js:498
this._entryBox = new St.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL, style_class: 'taskman-entry-box', x_expand: true })
extension.js:493
this._listBox = new St.BoxLayout({ orientation: Clutter.Orientation.VERTICAL, x_expand: true })
extension.js:488
this._pastBanner = new St.Label({ text: '🔒 Past day — read only', style_class: 'taskman-past-banner', visible: false })
extension.js:504
this._remBtn = new St.Button({ label: '⏰', style_class: 'taskman-mode-btn', can_focus: true, reactive: true })
extension.js:492
this._scroll = new St.ScrollView({ style_class: 'taskman-scroll', hscrollbar_policy: St.PolicyType.NEVER, vscrollbar_policy: St.PolicyType.AUTOMATIC, x_expand: true })
extension.js:502
this._taskBtn = new St.Button({ label: '📝', style_class: 'taskman-mode-btn taskman-mode-btn-active', can_focus: true, reactive: true })
extension.js:526
this._timeEntry = new St.Entry({ hint_text: 'HH:MM', style_class: 'taskman-time-entry', can_focus: true, x_expand: true })
extension.js:512
this._timeRow = new St.BoxLayout({ orientation: Clutter.Orientation.VERTICAL, style_class: 'taskman-time-row', x_expand: true, visible: false })
EGO-L-005 warning
owned object references should be released in disable()
Owned references that are cleaned up in `disable()` should also be released with `null` or `undefined`.
extension.js:487
this._dateLabel = new St.Label({ text: '', style_class: 'taskman-date-label' })
extension.js:499
this._entry = new St.Entry({ hint_text: 'New task — press Enter or choose ⏰…', style_class: 'taskman-entry', can_focus: true, x_expand: true })
extension.js:498
this._entryBox = new St.BoxLayout({ orientation: Clutter.Orientation.HORIZONTAL, style_class: 'taskman-entry-box', x_expand: true })
extension.js:493
this._listBox = new St.BoxLayout({ orientation: Clutter.Orientation.VERTICAL, x_expand: true })
extension.js:488
this._pastBanner = new St.Label({ text: '🔒 Past day — read only', style_class: 'taskman-past-banner', visible: false })
extension.js:504
this._remBtn = new St.Button({ label: '⏰', style_class: 'taskman-mode-btn', can_focus: true, reactive: true })
extension.js:492
this._scroll = new St.ScrollView({ style_class: 'taskman-scroll', hscrollbar_policy: St.PolicyType.NEVER, vscrollbar_policy: St.PolicyType.AUTOMATIC, x_expand: true })
extension.js:502
this._taskBtn = new St.Button({ label: '📝', style_class: 'taskman-mode-btn taskman-mode-btn-active', can_focus: true, reactive: true })
extension.js:526
this._timeEntry = new St.Entry({ hint_text: 'HH:MM', style_class: 'taskman-time-entry', can_focus: true, x_expand: true })
extension.js:512
this._timeRow = new St.BoxLayout({ orientation: Clutter.Orientation.VERTICAL, style_class: 'taskman-time-row', x_expand: true, visible: false })
extension.js:485
this.actor = new St.BoxLayout({ orientation: Clutter.Orientation.VERTICAL, style_class: 'taskman-tasklist-container' })
EGO-L-003 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:500
this._entry.clutter_text.connect('activate', () => this._handleEntryActivate())
extension.js:505
this._remBtn.connect('clicked', () => this._setEntryMode('reminder'))
extension.js:503
this._taskBtn.connect('clicked', () => this._setEntryMode('task'))
extension.js:527
this._timeEntry.clutter_text.connect('activate', () => this._confirmReminder())
extension.js:760
this.menu.connect('open-state-changed', (_menu, isOpen) => {
if (isOpen) {
// Track idle ID so we can cancel if menu closes before it fires.
this._openMenuIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
EGO-L-004 warning
main loop sources should be removed in disable()
Main loop sources assigned in `enable()` are missing matching removals in `disable()` or its helper methods.
extension.js:763
this._openMenuIdleId = GLib.idle_add(GLib.PRIORITY_DEFAULT_IDLE, () => {
this._openMenuIdleId = null;
this._taskList.showDate(this._calendar.selectedKey);
this._taskList.focusEntry();
| Version | Status |
|---|---|
| 1 | Unreviewed |