Review of "Blackstrat Desktop Icons" version 1

Details Page Preview

Free-placement desktop icons with context menu. This extension accesses the system clipboard to support cut, copy, and paste of files between the desktop and other applications. Known limitation: cut/paste and drag&drop of files between the desktop and Nautilus (Files) are not fully supported yet.

Extension Homepage
https://github.com/BlackStrat4/blackstrat-desktopicons

No comments.

FAQ

Files

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

Shexli (experimental) error 1 warning 5 manual_review 1

Shexli found 7 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

  • extension.js:1312
    file.load_contents(null)

EGO-A-005 manual_review

extensions should not access the clipboard directly

Direct clipboard access via `St.Clipboard.get_default()` requires reviewer scrutiny.

Review Guidelines

  • extension.js:861
    St.Clipboard.get_default()
  • extension.js:932
    St.Clipboard.get_default()
  • extension.js:1872
    St.Clipboard.get_default()
  • extension.js:1879
    St.Clipboard.get_default()
  • extension.js:1886
    St.Clipboard.get_default()
  • extension.js:1917
    St.Clipboard.get_default()
  • extension.js:1923
    St.Clipboard.get_default()

EGO-P-003 error

GSettings schema XML must be present in package

Extension appears to use GSettings but no `.gschema.xml` file is included in the package.

GSettings Schemas

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:51
    this.menuManager = new PopupMenu.PopupMenuManager(Main.layoutManager.dummyCursor || Main.uiGroup)
  • extension.js:266
            this.selectionBox = new St.Widget({
                style: "background-color: rgba(53, 132, 228, 0.25); border: 1px solid #3584e4; border-radius: 2px;",
                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`.

Destroy all objects

  • extension.js:51
    this.menuManager = new PopupMenu.PopupMenuManager(Main.layoutManager.dummyCursor || Main.uiGroup)
  • extension.js:266
            this.selectionBox = new St.Widget({
                style: "background-color: rgba(53, 132, 228, 0.25); border: 1px solid #3584e4; border-radius: 2px;",
                visible: false
            })

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:1835
            clutterText.connect('activate', () => {
                applyRename();
            })
  • extension.js:1838
            clutterText.connect('key-press-event', (actor, event) => {
                let key = event.get_key_symbol();
                let state = event.get_state();
                let ctrl = (state & Clutter.ModifierType.CONTROL_MASK) !== 0;
    
                if (key === Clutter.KEY_Escape) {
                    committ
  • extension.js:275
            this.desktopLayer.connect('button-press-event', (actor, event) => {
                let button = event.get_button();
    
                if (button === 3) {
                    this._showDesktopContextMenu(event);
                    return Clutter.EVENT_STOP;
                }
    
                if (button === 1) {
       
  • extension.js:317
            this.desktopLayer.connect('button-release-event', (actor, event) => {
                if (this._isMarqueeSelecting && event.get_button() === 1) {
                    this._isMarqueeSelecting = false;
                    this.selectionBox.hide();
                    return Clutter.EVENT_STOP;
                }
     
  • extension.js:302
            this.desktopLayer.connect('motion-event', (actor, event) => {
                if (this._isMarqueeSelecting) {
                    let [cx, cy] = event.get_coords();
                    let x = Math.min(this._marqueeStartX, cx);
                    let y = Math.min(this._marqueeStartY, cy);
                    l

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.

Remove main loop sources

  • extension.js:1145
                GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                    try {
                        let monitor = Main.layoutManager.primaryMonitor;
                        let [pw, ph] = panel.get_size();
                        let x = monitor.x + Math.max(0, Math.floor((monitor.width - pw) / 2));
            
  • extension.js:1804
            GLib.idle_add(GLib.PRIORITY_DEFAULT, () => {
                global.stage.set_key_focus(clutterText);
                clutterText.set_selection(0, clutterText.get_text().length);
                return GLib.SOURCE_REMOVE;
            })
  • extension.js:479
                    GLib.timeout_add(GLib.PRIORITY_DEFAULT, 50, () => {
                        dummySource.destroy();
                        return GLib.SOURCE_REMOVE;
                    })

All Versions

Version Status
6 Unreviewed
5 Rejected
4 Rejected
3 Rejected
2 Rejected
1 Rejected

Previous Reviews on this Version

JustPerfection waiting for author
Where is the git URL? Is this code generated by AI? If so, we have a rule for that: [EGO Review Guidelines: AI](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#extensions-must-not-be-ai-generated)
Dimitris posted a review
"Hello JustPerfection, thank you for the review. To be honest, I used AI as an assistant to help me structure some parts of the code since I am still learning. I was not fully aware of the strict rule regarding AI-generated code. I don't have a public Git URL yet. Please reject this version so I can review the code line-by-line, clean it up manually according to the guidelines, and submit a proper Version 2 soon."
JustPerfection rejected
Hi! Ok. Please read [Extension Best Practices Guidelines](https://gjs.guide/extensions/review-guidelines/best-practices.html). And also add the repo before sending it here: [EGO Review Guidelines: url](https://gjs.guide/extensions/review-guidelines/review-guidelines.html#metadata-json-must-be-well-formed) If you need any help with your extension you can ask us on: - [GNOME Extensions Matrix Channel](https://matrix.to/#/#extensions:gnome.org) - IRC Bridge: irc://irc.gimpnet.org/shell-extensions
Dimitris posted a review
Thank you very much for your guidance and for providing these helpful links! I will carefully read the Extension Best Practices Guidelines and make sure to clean up the code properly. I will also set up a public Git repository and include the URL in the metadata for Version 2. I truly appreciate your patience and help as I learn the correct process.