tBar for LibreOffice Impress
Hide slide overflow.
Change slide layout from toolbar, don't waste 10% of screen for sidebar.

An extension for LibreOffice Impress.
Download tbar-impress.oxt. LibreOffice Impress: Tools: Extensions: Add.
Beta. Tested with LibreOffice Impress 25.2.3.2. It's the one that comes with Debian stable, 13-trixie. Or just 'sudo apt-get update; sudo apt-get install libreoffice-impress'. Created with the assistance of artificial intelligence.
README.md
Change a slide's layout in one click, and see at a glance what is hanging off the edge of your slide.
tBar Impress adds one toolbar to Impress with two things:
- Slide layout toolbar buttons – the 12 standard slide layouts (Blank, Title Slide, Title and Content, two columns, …) as one-click buttons. No more hunting in the sidebar or in Slide ▸ Layout.
- Hide slide overflow – one button that shades everything outside the slide. Pictures, charts or text boxes that stick out past the edge become obvious, and what is left bright is exactly what your audience will see. The shading exists only on screen: it is never printed, never exported, never saved, never in Undo, and it does not mark your file as changed.
Start using it
- Download the latest
tbar-impress-VERSION.oxt(for exampletbar-impress-0.0.3.oxt). - In LibreOffice: Tools ▸ Extensions ▸ Add…, choose the downloaded
.oxtfile, then restart LibreOffice. - Open or create a presentation. The tBar Impress toolbar appears under the other toolbars. If you don't see it: View ▸ Toolbars ▸ tBar Impress.
Using it:
- Click a layout button to apply that layout to the current slide. Hover for its name.
- Click Hide slide overflow (the last button) to turn the shading on or off.
- Click the small arrow next to it to pick how dark the shading is (10 %–100 %, default 50 %). Picking a level also turns the shading on. The level is remembered.
- The same commands are in the menu: View ▸ Hide slide overflow.
If you used the earlier Quick Layouts or Dim Non-Visible Area extensions, remove them in Tools ▸ Extensions; tBar Impress replaces both.
To remove tBar Impress: Tools ▸ Extensions, select it, Remove.
Requires LibreOffice 7.0 or later with Python support (included in the official installers; on Linux distributions it may be a separate package such as libreoffice-script-provider-python). Tested on LibreOffice 24.2.
Verify the code
You don't have to trust this extension blindly. There is no separate source download, because there doesn't need to be one. tbar-impress-VERSION.oxt is an ordinary ZIP file containing only text files (Python, XML, Markdown) and PNG images; there is no compiled code. The .oxt is the complete source, including this README, the tests and the build tool.
unzip tbar-impress-*.oxt -d tbar-impress
cd tbar-impress
What's inside
| File | What it is |
|---|---|
tbar.py | The only code LibreOffice runs (~480 lines, heavily commented). Implements Hide slide overflow. |
Addons.xcu | Declares the toolbar buttons, the View-menu entries and which icon goes with which button. Plain data. |
ProtocolHandler.xcu | Routes commands starting with com.terokarvinen.tbar-impress: to tbar.py. |
WindowState.xcu | Shows the toolbar docked at the top on first start. |
META-INF/manifest.xml | The list of files LibreOffice registers: exactly the four above. |
description.xml | Name (tBar Impress), version, publisher, identifier com.terokarvinen.tbar-impress, minimum LibreOffice version. |
icons/*.png | 26 toolbar icons (13 buttons × 2 sizes). |
README.md, docs/screenshot.png | This document. |
tests/, tools/ | Checks and build tool (below). LibreOffice does not run these; it only registers what META-INF/manifest.xml lists. |
LICENSES/, REUSE.toml | Both license texts (GPL-3.0-or-later, MPL-2.0), and licensing info for the PNG files. |
The Slide layout toolbar buttons contain no code. Each one runs LibreOffice's own built-in command .uno:AssignLayout with a layout number, exactly as the sidebar's Layouts panel does.
1. Check that the .oxt contains nothing but these files
The build is reproducible, so rebuilding from the unzipped files must give a byte-identical package:
python3 tools/build.py # writes dist/tbar-impress-VERSION.oxt, prints its SHA-256
sha256sum ../tbar-impress-*.oxt # the file you downloaded
If both hashes match, the package holds exactly the files you just unzipped and can read, and nothing hidden.
To confirm the file really comes from the author, compare its SHA-256 with the one published next to the download at https://TeroKarvinen.com.
2. Read what the code is able to do
grep -nE "^import|^from" tbar.py # json, os, re + LibreOffice's own uno modules only
grep -n "open(" tbar.py # one settings file, nothing else
The comment block at the top of tbar.py lists everything the code touches.
3. Static checks (no LibreOffice needed)
python3 tests/check_static.py
This prints one PASS/FAIL line per check. It verifies that:
- all XML is well-formed;
- the manifest registers exactly the expected files;
- identifier, name and publisher are correct, and the version is digits and dots only;
- the toolbar has the 12 layouts in order, with the layout numbers from LibreOffice's source (the source location is given in the script), then a separator, then Hide slide overflow;
- every button has an icon and no icon is unused;
- names agree between
tbar.pyand the.xcufiles; tbar.pyimports nothing beyondjson,os,reand LibreOffice's own modules, contains no eval/exec/shell/network calls, and opens no file except its settings file;- every file carries the copyright and license tags.
4. Live test in a real LibreOffice
python3 tools/build.py
python3 tests/live_test.py # tests dist/tbar-impress-VERSION.oxt
This needs LibreOffice and a Python that can import uno. On Linux that is the python3-uno package; on Windows or macOS, use the Python inside LibreOffice. It does not touch your own LibreOffice setup: it creates a temporary profile, installs the .oxt there with unopkg add, and opens a window for about 30 seconds. It then checks, among other things:
- LibreOffice registers only the four manifest files, so the README, tests and tools inside the package are inert;
- the toolbar shows the 14 expected items in order;
- every layout button applies its layout;
- the shading appears, follows slide changes (also in Window ▸ New Window), and its darkness can be picked;
- with real mouse clicks: the arrow opens the dropdown with all ten levels, picking one works, and a plain click then toggles. This part needs
xdotoolon X11; elsewhere it is reported as SKIP; - the shading never marks the document modified and never enters Undo;
- it is absent from files written by Save, Save As, Save a Copy (
.odp,.pptx) and PDF export, and comes back afterwards; - unknown commands are ignored;
- the toolbar does not appear in Draw.
Result on LibreOffice 24.2.7: 38 of 38 checks pass.
5. Licensing
Everything is Copyright 2026 Tero Karvinen https://TeroKarvinen.com and dual-licensed GPL-3.0-or-later OR MPL-2.0. Every file carries both SPDX tags: SPDX-FileCopyrightText and SPDX-License-Identifier: GPL-3.0-or-later OR MPL-2.0. Text files have them in a comment. PNG images have them embedded as PNG text metadata (python3 tools/png_spdx.py show icons/*.png) and also listed in REUSE.toml. reuse lint reports the project as compliant with REUSE 3.3. Both license texts are the official ones: LICENSES/GPL-3.0-or-later.txt from gnu.org (SHA-256 3972dc9744f6499f0f9b2dbf76696f2ae7ad8af9b23dde66d6af86c9dfb36986) and LICENSES/MPL-2.0.txt from mozilla.org (SHA-256 3f3d9e0024b1921b067d6f7f88deb4a60cbe7a78e76c64e3f1d7fc3b779b9d04).
Don't hurt your precious eyes - artificial intelligence has helped creating this addon.
Security implications
- Extensions run with your full user rights. LibreOffice does not sandbox extensions, so
tbar.pycould in principle do anything you can do. That is why the checks above exist. In fact, it imports no network, process or system modules (step 2, enforced by step 3). - Not signed. LibreOffice extensions are normally unsigned. Use step 1 to confirm the package holds only what you can read, and the published checksum to confirm where it came from.
- One file written:
<your LibreOffice profile>/config/tbar-impress.json, containing only{"darkness": NN}. Only the ten values 10, 20, …, 100 are accepted on reading and on writing; anything else falls back to 50. - Your documents: while the shading is on, tBar Impress adds one shape and one layer, both named "tBar Impress…", to the open presentation, and removes both before every save, export and autorecovery copy. If you copy a slide while the shading is on and paste it into another presentation, the shading shape is pasted with it. Delete it there (Navigator, or turn the shading on and off once in that file).
- Commands from documents: like any LibreOffice command, tBar Impress commands could be triggered by a macro or link inside a document you open. The worst they can do is toggle the shading or change its darkness.
- Layout buttons: no code; they call LibreOffice's built-in layout command.
- Files that are not run: the test and build scripts inside the package are ordinary Python you would run yourself. LibreOffice never runs them (checked by the live test).
How it works (briefly)
Slide layout toolbar buttons. Addons.xcu defines a toolbar whose buttons run .uno:AssignLayout?WhatLayout:long=N, where N is LibreOffice's AutoLayout number (include/xmloff/autolayout.hxx). For example, 20 = Blank, 0 = Title Slide, 1 = Title and Content, 34 = Title and 6 Content. Icons are mapped in the Images section.
Hide slide overflow. tbar.py is a UNO protocol handler for com.terokarvinen.tbar-impress: URLs. Turning it on draws a black polygon with a slide-shaped hole, five times the slide size, on top of the current slide, with transparency 100 − darkness. The polygon sits on its own locked, non-printable layer. Every edit is done with Undo locked and the modified flag restored. Listeners move it to whichever slide a window shows. A document-event listener removes it on OnSave, OnSaveAs and OnCopyTo (Save a Copy, exports, autorecovery) and puts it back on the matching …Done/…Failed events. The toolbar button is a ToggleDropdownButton; the dropdown list is sent to it with a SetList control command.
Changes compared with the two earlier extensions
tBar Impress merges Quick Layouts and Dim Non-Visible Area, with new names. Fixed along the way:
- Shading leaked into files. Save a Copy, PDF/PPTX export and autorecovery copies included the shading shape. Those saves raise the event
OnCopyTo, but the old code listened forOnSaveTo, which is LibreOffice's internal name that listeners never receive. Found by the live test. - A second window of the same presentation (Window ▸ New Window) did not get the shading.
- After a second window was closed, the shading's layer could not be removed (a LibreOffice quirk: layers are removed through the "current view", which is empty until a window is activated). tBar Impress now activates the window and retries.
- Unknown commands, including the View-menu submenu title, were treated as "toggle". They are now ignored.
- Invalid darkness values are refused before they are stored.
Making a release
- Increase the version in
description.xmlfor every release, even a small fix. LibreOffice offers an update only when the version is higher. Use digits and dots only (0.0.3,0.0.4, …,0.1.0); LibreOffice compares each part as a number and does not understand suffixes like-beta. python3 tests/check_static.py, thenpython3 tools/build.py, thenpython3 tests/live_test.py.- Publish
dist/tbar-impress-VERSION.oxttogether with its SHA-256 (sha256sum tbar-impress-VERSION.oxt > tbar-impress-VERSION.oxt.sha256).
Only the published file names carry the version. Files inside the package (including this README) do not.
Copyright and license
Copyright 2026 Tero Karvinen https://TeroKarvinen.com
tBar Impress is dual-licensed. You may use, modify and redistribute it under either of these licenses, at your choice:
- the GNU General Public License, version 3 or (at your option) any later version (
LICENSES/GPL-3.0-or-later.txt), or - the Mozilla Public License, version 2.0 (
LICENSES/MPL-2.0.txt).
The MPL-2.0 option is there so that tBar Impress, or parts of it, can be taken into LibreOffice itself, whose own code is under MPL-2.0. The GPL option stays for anyone who prefers it.
tBar Impress is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the license texts for details.

