You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This branch adds a fourth UI backend to the AUI layer: applications written
against manatools can now be served in a web browser with no code
changes - the same source runs on Qt, GTK, ncurses, or web.
What's included
New web backend (manatools/aui/backends/web/): renders the widget
tree as HTML and serves it over HTTP, with real-time updates and events over
WebSocket. Pure Python standard library without extra dependencies;
Backend selection: MUI_BACKEND=web|qt|gtk|ncurses environment
variable override; the web backend is opt-in only and it's never
auto-selected;
Security hardening: CSP and standard security headers on
every response, localhost-only binding, origin checks on WebSocket upgrades
and the /event POST fallback, frame/body size caps, path-traversal guards
on static file and icon serving;
Browser UX: Bootstrap 5.3 frontend, XDG icon lookup served from system
themes, deferred skeleton rendering for heavy widgets (table/tree),
coalesced server thus browser DOM updates;
Qt backend robustness fixes: widgets now initialize their attributes
before super().__init__() so containers that trigger backend-widget
creation mid-construction (e.g. YDumbTab) no longer crash; popup dialog
lifecycle fixes; guarded _items access in table/tree rebuilds.
The application prints its URL (http://127.0.0.1:8080/) - open it in a
modern browser. The same test runs unchanged under MUI_BACKEND=qt,
gtk, or ncurses.
Notes
The web backend binds to 127.0.0.1 only; file dialogs and system tray are
not supported in the browser but they seems to degrade gracefully;
This branch also carries the main fixes/features merged in (tooltips,
paned multi-layout, backend detection improvements), so it's ready to
fast-forward main, local testing show no conflicts.
Links inside YRichText now behave like Qt/GTK: browser navigation is
blocked, the URL is stored in widget._last_url, and a YMenuEvent(id=url)
is posted to the dialog queue when notify() is True.
…o build
Resolved yui.py conflict: keep MUI_BACKEND/XDG detection, take main's
DISPLAY/WAYLAND and PKEXEC_UID display-recovery steps, web backend stays
explicit-only. treeqt.py merged both the init-before-super ordering and
tooltip support.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This branch adds a fourth UI backend to the AUI layer: applications written
against manatools can now be served in a web browser with no code
changes - the same source runs on Qt, GTK, ncurses, or web.
What's included
webbackend (manatools/aui/backends/web/): renders the widgettree as HTML and serves it over HTTP, with real-time updates and events over
WebSocket. Pure Python standard library without extra dependencies;
labels, buttons, input fields, check/radio boxes, combo/selection boxes,
frames, progress bars, sliders, tables, trees, rich text, menu bars, images,
int/date/time fields, multi-line edit, log view, dumb tabs, paned splitter,
spacing, alignment, replace points;
MUI_BACKEND=web|qt|gtk|ncursesenvironmentvariable override; the web backend is opt-in only and it's never
auto-selected;
every response, localhost-only binding, origin checks on WebSocket upgrades
and the
/eventPOST fallback, frame/body size caps, path-traversal guardson static file and icon serving;
themes, deferred skeleton rendering for heavy widgets (table/tree),
coalesced server thus browser DOM updates;
before
super().__init__()so containers that trigger backend-widgetcreation mid-construction (e.g.
YDumbTab) no longer crash; popup dialoglifecycle fixes; guarded
_itemsaccess in table/tree rebuilds.How to test
The application prints its URL (http://127.0.0.1:8080/) - open it in a
modern browser. The same test runs unchanged under MUI_BACKEND=qt,
gtk, or ncurses.
Notes
not supported in the browser but they seems to degrade gracefully;
paned multi-layout, backend detection improvements), so it's ready to
fast-forward main, local testing show no conflicts.