Review of "Apropos OSK" version 1.1.0 (2)

Details Page Preview

On-screen keyboard for touch devices, inspired by Windows 11, with an optional Gboard-style phone layout. It has a compact TKL layout with Fn, Ctrl, Alt, AltGr and Super keys, or a phone layout with a number row, long-press accents and symbols and a Material look. It opens by itself on text fields, can suggest words (built-in or from ibus-typing-booster), capitalizes sentences, types a period on double space, autocorrects English, moves the cursor when you drag on Space, and has a visual layout editor. It also runs on the lock screen so you can type your password there. Based on Fluent OSK by TbangIT (https://github.com/TbangIT/fluent-osk).

Extension Homepage
https://github.com/BeShO-ShO/apropos-osk

No comments.

Diff Against

Files

Note: Binary files aren't shown on the web site. To see all files, please download the extension zipfile.

Shexli (experimental) warning 6

Shexli found 6 issues that may need reviewer attention.

EGO-X-004 warning

extensions should avoid synchronous file IO in shell code

Shell code should avoid synchronous file IO APIs like `GLib.file_get_contents()` and `Gio.File.load_contents()`.

File Operations

  • keyboard.js:2908
    Gio.File.new_for_path(p).load_contents(null)
  • keyboard.js:3209
    Gio.File.new_for_path(p).load_contents(null)
  • keyboard.js:3789
    Gio.File.new_for_path(p).load_contents(null)
  • keyboard.js:2936
    f.load_contents(null)
  • keyboard.js:2966
    f.load_contents(null)
  • keyboard.js:3218
    f.load_contents(null)
  • layouts.js:242
    file.load_contents(null)

EGO-A-004 warning

extension files should not contain excessive ungated console logging

File contains 19 ungated console.log/warn/error calls (threshold: 5).

No excessive logging

  • keyboard.js:59
    console.warn('[AproposOSK] typing-booster start failed:', e)
  • keyboard.js:65
    console.warn('[AproposOSK] typing-booster stop failed:', e)
  • keyboard.js:107
    console.warn('[AproposOSK] typing-booster slow to start, continuing')
  • keyboard.js:124
    console.warn('[AproposOSK] could not restore input engine:', e)
  • keyboard.js:616
    console.warn(`[AproposOSK] Could not register font ${name}:`, e.message)
  • keyboard.js:622
    console.warn('[AproposOSK] Bundled font registration unavailable, using system fonts:', e.message)
  • keyboard.js:1018
    console.warn('[AproposOSK] GNOME accent data unavailable:', e.message)
  • keyboard.js:2139
    console.warn('[AproposOSK] Overview fallback failed:', e.message)
  • keyboard.js:2708
    console.warn('[AproposOSK] typing-booster bridge unavailable:', err)
  • keyboard.js:2779
    console.warn('[AproposOSK] typing-booster sync failed:', err)

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.

Destroy all objects

  • extension.js:355
            this._icon = new St.Icon({
                icon_name: 'input-keyboard-symbolic',
                style_class: 'system-status-icon',
            })

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`.

Destroy all objects

  • extension.js:355
            this._icon = new St.Icon({
                icon_name: 'input-keyboard-symbolic',
                style_class: 'system-status-icon',
            })

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.

Disconnect all signals

  • extension.js:361
            this._indicator.connect('button-press-event', (actor, event) => {
                if (event.get_button() === 1) {
                    if (this.keyboard) {
                        this.keyboard.toggle();
                    }
                    return Clutter.EVENT_STOP;
                }
                return Clutter
  • extension.js:371
            this._indicator.connect('touch-event', (actor, event) => {
                const type = event.type();
                if (type === Clutter.EventType.TOUCH_BEGIN) {
                    return Clutter.EVENT_STOP;
                }
                if (type === Clutter.EventType.TOUCH_END) {
                    if (thi

EGO-M-008 warning

extensions using unlock-dialog must document it in disable() comments

Extensions using `unlock-dialog` should document the reason in `disable()` comments.

Session Modes

  • extension.js:421
        disable() {
            this._stopAutoShow();
    
            if (this._settingsListener) {
                this._settings.disconnect(this._settingsListener);
                this._settingsListener = null;
            }
    
            if (this._quickToggle) {
                this._quickToggle.destroy();
                this._quickT

All Versions

Version Status
1.1.0 (2) Unreviewed
1.0.1 (1) Rejected