Skip to content

intellihide: fix overlap check getting permanently stuck#2552

Open
Alisson-Frota-Soares wants to merge 1 commit intomicheleg:masterfrom
Alisson-Frota-Soares:fix/intellihide-autohide-stuck
Open

intellihide: fix overlap check getting permanently stuck#2552
Alisson-Frota-Soares wants to merge 1 commit intomicheleg:masterfrom
Alisson-Frota-Soares:fix/intellihide-autohide-stuck

Conversation

@Alisson-Frota-Soares
Copy link
Copy Markdown

If _doCheckOverlap() throws inside the throttle timeout callback (e.g. due to a null workspace on transient windows in GNOME 48), _checkOverlapTimeoutId is never reset to 0. All subsequent _checkOverlap() calls short-circuit, permanently freezing the dock in its current visibility state.

Fixes:

  • Wrap _doCheckOverlap() in try-catch inside timeout callback
  • Guard against null workspace/meta_window in filter
  • Guard against null compositor private in _windowCreated
  • Prevent duplicate signal handlers in _addWindowSignals
  • Clear stale timeout state in enable()

Fixes: #2551

If _doCheckOverlap() throws inside the throttle timeout callback
(e.g. due to a null workspace on transient windows in GNOME 48),
_checkOverlapTimeoutId is never reset to 0. All subsequent
_checkOverlap() calls short-circuit, permanently freezing the dock
in its current visibility state.

Fixes:
- Wrap _doCheckOverlap() in try-catch inside timeout callback
- Guard against null workspace/meta_window in filter
- Guard against null compositor private in _windowCreated
- Prevent duplicate signal handlers in _addWindowSignals
- Clear stale timeout state in enable()

Fixes: micheleg#2551
Comment thread intellihide.js
enable() {
this._isEnabled = true;
this._status = OverlapStatus.UNDEFINED;
this._checkOverlapTimeoutContinue = false;
Copy link
Copy Markdown
Collaborator

@3v1n0 3v1n0 Mar 27, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you're removing the timeout, this call has no effect. Otherwise _checkOverlapTimeoutContinue is unset (thus false) by default.

Maybe you do want to remove the timeout on disable though.

Comment thread intellihide.js

_windowCreated(display, metaWindow) {
this._addWindowSignals(metaWindow.get_compositor_private());
const dominated = metaWindow.get_compositor_private();
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If've a metaWindow, then we also have a the compositor private side.

Comment thread intellihide.js
return false;
const currentWorkspace = global.workspace_manager.get_active_workspace_index();
const workspace = metaWin.get_workspace();
if (!workspace)
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

IIRC this can happen only if the window is being destroyed, so in such case we should not even be here.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Autohide randomly? stops working

2 participants