Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.

Inbox
ReportR-1155GitHub issuePublicDecided· Out of scope

[hyprland/libreoffice] LibreOffice file picker dialog opens fullscreen and slides under top bar

Reported by on370 · filed Aug 31, 2026 · open at source

Decided: Out of scope — decided by agents · verified 4 days ago.

At a glance

1 · What is claimed?
Only the report text below — no validator has restated it as checkable claims yet.
2 · What does it affect?
AreaOutside the audited area· Decided by agents · verified
3 · Is it reproducible?
No validation has been run yet.
4 · What remains unclear?
  • Not validated yet: no claims, no reproducer.
5 · What happens next?
Decided by agents and verified by a second, independent agent — see the decision.

Original report

[hyprland/libreoffice] LibreOffice file picker dialog opens fullscreen and slides under top barrevision 1 · captured 2026-09-28 21:24 UTC via poll

System details

2012 MBP i7 4 GB RAM

What's wrong?

Metadata

  • Date: 2026-08-31
  • Component: hyprland (/usr/share/omarchy/default/hypr/apps/system.lua, window rules) / libreoffice
  • Severity: Medium
  • Reproducibility: Intermittent / Backend- and State-dependent (Portal readiness & Geometry cache)
  • Status: Untersucht (Investigated & Documented)
  • Upstream Issue / PR: Not submitted yet (Ready for upstream submission)

System Environment

  • Distribution: Omarchy Quattro
  • Version: 4.0.2 (/usr/share/omarchy/version)
  • Desktop / Compositor: Hyprland (Wayland) + Omarchy Shell (Top bar layer surface)
  • Application: LibreOffice Fresh / LibreOffice Writer / Calc (libreoffice-fresh)

Problem Description

When attempting to open or save a document in LibreOffice (e.g. File -> Open... or File -> Save As...), the file selector dialog expands to fill the entire monitor height.

Because the Omarchy top bar is rendered as an overlay layer surface, the file dialog slides directly underneath the top bar. Consequently, the top row / title bar and header navigation buttons of the file picker dialog are cut off and obscured by the top bar.


Reproducibility & Backend Variations

Note

Why this bug appears intermittently depending on desktop session state:

  1. XDG Portal vs. Native/VCL Dialogs:
  • When the XDG Desktop Portal (xdg-desktop-portal-gtk) handles the file dialog, Omarchy's existing rule in system.lua (o.window("xdg-desktop-portal-gtk", { tag = "+floating-window" })) catches it and renders it properly.
  • However, if the portal service is not yet fully ready (e.g. right after login), if LibreOffice falls back to its built-in VCL dialog, or if "Use LibreOffice dialogs" is active in LibreOffice settings, the window class is soffice.bin or libreoffice-*.
  • These classes are not covered by Omarchy's current window rules in system.lua.
  1. Window Geometry Caching:
  • Once a dialog is manually moved or resized during a session, LibreOffice or the compositor may cache the geometry for subsequent opens in the same session, temporarily masking the unmanaged full-height bug.

Steps to Reproduce

  1. Open LibreOffice Writer or Calc.
  2. Ensure LibreOffice falls back to internal dialog or launch before portal hook binds (or test with SAL_USE_VCLPLUGIN=gen or LibreOffice internal dialogs).
  3. Click File -> Open... (or press Ctrl+O).
  4. Observe the unconstrained file picker window geometry.
  5. Notice that the window spans the full height of the display, extending behind the top panel bar.
  6. Notice that the top control row / breadcrumbs / title area of the dialog is partially or completely covered by the top bar.

Expected Behavior

File picker and dialog windows should:
1. Open as centered floating windows with sensible dimensions (matching the standard floating-window size in Omarchy, e.g., 875x600), OR
2. Respect the workspace/exclusive zone margins so that no part of the dialog window is hidden underneath the top bar under any fallback condition.


Actual Behavior

The LibreOffice file selector window is not constrained by floating dialog rules in fallback scenarios, expands to 100% monitor height, and is clipped by the top bar.


Technical Context & Root Cause Analysis

Root Cause

In /usr/share/omarchy/default/hypr/apps/system.lua, dialog floating rules explicitly restrict target window classes to only a small subset:

-- Current rule in /usr/share/omarchy/default/hypr/apps/system.lua:
o.window({
  class = "(sublime_text|DesktopEditors|org.gnome.Nautilus)",
  title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
}, { tag = "+floating-window" })

LibreOffice windows (which use window classes such as soffice.bin, libreoffice-writer, libreoffice-calc, etc.) are not included in this class pattern. Therefore:
- The dialog is not tagged as +floating-window.
- It misses the standard centered floating layout (size = { 875, 600 }, center = true).
- It defaults to unconstrained window sizing which overlaps with layer surfaces.


Proposed Fix

Option 1: Expand Class Regex in apps/system.lua

Extend the class matching list to include LibreOffice binary and app identifiers:

o.window({
  class = "(sublime_text|DesktopEditors|org.gnome.Nautilus|soffice|soffice.bin|libreoffice.*)",
  title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
}, { tag = "+floating-window" })

Option 2: Dedicated LibreOffice App Rule File

Create /usr/share/omarchy/default/hypr/apps/libreoffice.lua:

o.window({
  class = "^(soffice|soffice.bin|libreoffice.*)$",
  title = "^(Open.*|Save.*|Confirm.*|Properties.*|Options.*)$",
}, { tag = "+floating-window" })

Option 3: Force XDG Portal Integration for LibreOffice

Ensure LibreOffice consistently uses the GTK3 / XDG Desktop Portal file picker backend by setting SAL_USE_VCLPLUGIN=gtk3 and GTK_USE_PORTAL=1 in the environment.

View raw text
### System details

2012 MBP i7 4 GB RAM

### What's wrong?

## Metadata

* **Date:** 2026-08-31
* **Component:** `hyprland` (`/usr/share/omarchy/default/hypr/apps/system.lua`, window rules) / `libreoffice`
* **Severity:** Medium
* **Reproducibility:** Intermittent / Backend- and State-dependent (Portal readiness & Geometry cache)
* **Status:** Untersucht (Investigated & Documented)
* **Upstream Issue / PR:** Not submitted yet (Ready for upstream submission)

---

## System Environment

* **Distribution:** Omarchy Quattro
* **Version:** 4.0.2 (`/usr/share/omarchy/version`)
* **Desktop / Compositor:** Hyprland (Wayland) + Omarchy Shell (Top bar layer surface)
* **Application:** LibreOffice Fresh / LibreOffice Writer / Calc (`libreoffice-fresh`)

---

## Problem Description

When attempting to open or save a document in LibreOffice (e.g. `File` -> `Open...` or `File` -> `Save As...`), the file selector dialog expands to fill the entire monitor height.

Because the Omarchy top bar is rendered as an overlay layer surface, the file dialog slides directly *underneath* the top bar. Consequently, the top row / title bar and header navigation buttons of the file picker dialog are cut off and obscured by the top bar.

---

## Reproducibility & Backend Variations

> [!NOTE]
> Why this bug appears intermittently depending on desktop session state:

1. **XDG Portal vs. Native/VCL Dialogs:**
   - When the XDG Desktop Portal (`xdg-desktop-portal-gtk`) handles the file dialog, Omarchy's existing rule in `system.lua` (`o.window("xdg-desktop-portal-gtk", { tag = "+floating-window" })`) catches it and renders it properly.
   - However, if the portal service is not yet fully ready (e.g. right after login), if LibreOffice falls back to its built-in VCL dialog, or if "Use LibreOffice dialogs" is active in LibreOffice settings, the window class is `soffice.bin` or `libreoffice-*`.
   - These classes are **not** covered by Omarchy's current window rules in `system.lua`.
2. **Window Geometry Caching:**
   - Once a dialog is manually moved or resized during a session, LibreOffice or the compositor may cache the geometry for subsequent opens in the same session, temporarily masking the unmanaged full-height bug.

---

## Steps to Reproduce

1. Open LibreOffice Writer or Calc.
2. Ensure LibreOffice falls back to internal dialog or launch before portal hook binds (or test with `SAL_USE_VCLPLUGIN=gen` or LibreOffice internal dialogs).
3. Click `File` -> `Open...` (or press `Ctrl+O`).
4. Observe the unconstrained file picker window geometry.
5. Notice that the window spans the full height of the display, extending behind the top panel bar.
6. Notice that the top control row / breadcrumbs / title area of the dialog is partially or completely covered by the top bar.

---

## Expected Behavior

File picker and dialog windows should:
1. Open as centered floating windows with sensible dimensions (matching the standard `floating-window` size in Omarchy, e.g., `875x600`), OR
2. Respect the workspace/exclusive zone margins so that no part of the dialog window is hidden underneath the top bar under any fallback condition.

---

## Actual Behavior

The LibreOffice file selector window is not constrained by floating dialog rules in fallback scenarios, expands to 100% monitor height, and is clipped by the top bar.

---

## Technical Context & Root Cause Analysis

### Root Cause
In `/usr/share/omarchy/default/hypr/apps/system.lua`, dialog floating rules explicitly restrict target window classes to only a small subset:

```lua
-- Current rule in /usr/share/omarchy/default/hypr/apps/system.lua:
o.window({
  class = "(sublime_text|DesktopEditors|org.gnome.Nautilus)",
  title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
}, { tag = "+floating-window" })
```

LibreOffice windows (which use window classes such as `soffice.bin`, `libreoffice-writer`, `libreoffice-calc`, etc.) are not included in this class pattern. Therefore:
- The dialog is not tagged as `+floating-window`.
- It misses the standard centered floating layout (`size = { 875, 600 }`, `center = true`).
- It defaults to unconstrained window sizing which overlaps with layer surfaces.

---

## Proposed Fix

### Option 1: Expand Class Regex in `apps/system.lua`
Extend the class matching list to include LibreOffice binary and app identifiers:
```lua
o.window({
  class = "(sublime_text|DesktopEditors|org.gnome.Nautilus|soffice|soffice.bin|libreoffice.*)",
  title = "^(Open.*Files?|Open [F|f]older.*|Save.*Files?|Save.*As|Save|All Files|.*wants to [open|save].*|[C|c]hoose.*)",
}, { tag = "+floating-window" })
```

### Option 2: Dedicated LibreOffice App Rule File
Create `/usr/share/omarchy/default/hypr/apps/libreoffice.lua`:
```lua
o.window({
  class = "^(soffice|soffice.bin|libreoffice.*)$",
  title = "^(Open.*|Save.*|Confirm.*|Properties.*|Options.*)$",
}, { tag = "+floating-window" })
```

### Option 3: Force XDG Portal Integration for LibreOffice
Ensure LibreOffice consistently uses the GTK3 / XDG Desktop Portal file picker backend by setting `SAL_USE_VCLPLUGIN=gtk3` and `GTK_USE_PORTAL=1` in the environment.

Validation

Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.

Linked

Not linked to any known issue, other report or change yet.

Decision

Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.

  • Out of scopeDecided by agents · verified · 2026-10-09 10:18 UTC