Skip to content

Repository files navigation

Sidebar Tab Glide

Sidebar Tab Glide extends Blender's native Sidebar shortcut without replacing the Sidebar itself.

stg-demo
  • Tap the shortcut to toggle the Sidebar exactly as before.
  • Hold the shortcut until the GPU list appears.
  • The list opens focused on the current Sidebar category.
  • By default, moving over a category previews it immediately; release on a row to confirm it. This can be disabled in the extension preferences.
  • Release without hovering, or outside the list, to cancel and restore the original category.
  • Press Esc or the right mouse button to cancel.
  • Use the mouse wheel when the category list is longer than the visible panel.
  • When Blender's Region Toggle Pie keymap option is active, drag before the Hold gesture begins to invoke the native WM_MT_region_toggle_pie.

The extension mirrors active keyboard wm.context_toggle items whose data path is space_data.show_region_ui, or Blender's corresponding wm.call_menu_pie item for WM_MT_region_toggle_pie. In the latter case the gesture becomes tap=Sidebar, hold=tab glide, drag=native Pie. It waits for Blender's effective user keymap during startup, so disabled or remapped Sidebar shortcuts are respected. Use Refresh Native Sidebar Shortcuts in the extension preferences after editing the native keymap, changing the Region Toggle Pie option, or switching keymap presets.

Supported editors

The default configuration covers 3D View, Graph Editor, Image Editor, Node Editor, Dope Sheet, NLA Editor, Text Editor, Video Sequencer, Movie Clip Editor, and Spreadsheet.

Category source

Blender exposes Region.active_panel_category for selection, but does not expose its dynamic enum items as a Python iterable. After witnessing a fresh Sidebar draw, Sidebar Tab Glide asks RNA to validate a unique impossible enum identifier and parses the rejected assignment's valid identifiers. Every parsed identifier is then verified through RNA. This yields the native runtime order, including C and Python panels whose identifiers are unambiguous in Blender's current error representation. After an exact Sidebar draw witness, the current category getter is used only when two or more live categories prove Blender 4.5's active-fallback invariant; one-category and unrecognized states never read the crash-prone legacy getter. No private memory or ctypes access is used. Unrecognized snapshots fall back to the normal tap behavior, and Blender revalidates every selected identifier before it is committed.

Requirements

  • Blender 4.5 through 5.x

Development

The Blender Extension source is in src/sidebar_tab_glide. Run python -m ruff format --check . and python -m ruff check . for static checks.

Build an installable archive with python tools/build_extension.py. The archive is written to dist/ and contains the extension at its installable root.

Check a new Blender build with python tools/check_blender_contracts.py "<path-to-blender>". A factory-startup Blender window opens briefly so the tool can observe the real Sidebar draw, dynamic category enum, native keymaps, registration lifecycle, and other host API surfaces; the JSON report is written under build/contract-probes/.

The manifest version is the release version authority. Pushing a matching vX.Y.Z tag runs the release workflow and publishes the generated archive to GitHub Releases. Release archives use stg{version}+{UTC build time}_{Git SHA8}_b{minimum Blender major/minor}plus.zip, so the source identity and minimum compatible Blender version remain visible in the filename.

License

GPL-3.0-or-later

Releases

Contributors

Languages