Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
f668976
fix: align appearance controls with defaults and Linux-only accent op…
ScottMorris Feb 11, 2026
32e0629
fix: restore editor setting defaults and active line toggle on desktop
ScottMorris Feb 11, 2026
56a66cc
fix: default desktop line numbers to off and align editor behaviour
ScottMorris Feb 11, 2026
1873c13
fix: restore missing left border on desktop editor frame
ScottMorris Feb 11, 2026
8404e0e
fix: hide preview front matter by default and add desktop debug toggle
ScottMorris Feb 11, 2026
05c3ba6
fix: replace native context menus and add file-tree empty-space actions
ScottMorris Feb 11, 2026
3d12b3e
fix: expand file explorer empty-space context menu hit area
ScottMorris Feb 11, 2026
64561c9
fix: keep context menus above scrollbar overlays
ScottMorris Feb 11, 2026
e001ff8
fix: harden Linux X11 bootstrap against MIT-SHM startup crash
ScottMorris Feb 11, 2026
e62bcc0
fix: commit new-note input on blur and add tab context menu
ScottMorris Feb 11, 2026
9c4d646
fix: add preview pane copy context menu including HTML option
ScottMorris Feb 11, 2026
9e84b40
fix: disable accidental text selection in desktop UI chrome
ScottMorris Feb 11, 2026
9fb3d28
fix: resolve backlink navigation for extension-less note paths
ScottMorris Feb 11, 2026
3fd0823
fix: preserve tab order when renaming open notes
ScottMorris Feb 11, 2026
fd0ab2b
fix: improve file explorer folder creation and drag-drop moves
ScottMorris Feb 12, 2026
4cdeb48
fix: improve file-tree drop targeting and root drag-out support
ScottMorris Feb 12, 2026
ce9632b
fix: extend file-tree drop targets to folder subtree areas
ScottMorris Feb 12, 2026
3e43f45
fix: allow moving nested files to root from broader tree surfaces
ScottMorris Feb 12, 2026
01cd583
fix: widen sidebar and improve nested file-tree drag start
ScottMorris Feb 12, 2026
a3f035a
fix: highlight top-level file list as active root drop region
ScottMorris Feb 12, 2026
d5beace
fix: harden file-tree drag UX for hover precision and interruption re…
ScottMorris Feb 12, 2026
aae063a
fix: show and toggle checked state for title bar Always on Top
ScottMorris Feb 12, 2026
78feb2f
fix: stabilise Always on Top title-bar state synchronisation
ScottMorris Feb 12, 2026
37b61e7
fix: render always-on-top indicator in left menu icon slot
ScottMorris Feb 12, 2026
34d2223
fix: use mapped SVG checkbox icons for always-on-top menu item
ScottMorris Feb 12, 2026
67d3ddc
fix: resolve desktop typecheck regressions in settings and title-bar …
ScottMorris Feb 12, 2026
db00c3e
fix: align Always on Top menu icons with shared React SVG mapper
ScottMorris Feb 12, 2026
a5054a1
fix: restore Always on Top checkmark icon behaviour in title-bar menu
ScottMorris Feb 12, 2026
35dff4a
fix: serialize bulk tab closes across dirty-tab confirmation flow
ScottMorris Feb 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 20 additions & 1 deletion apps/desktop/src-tauri/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,21 @@ fn configure_linux_env() {
}
}

fn ensure_csv_env_flag(key: &str, flag: &str) {
let existing = env::var(key).unwrap_or_default();
let mut values: Vec<String> = existing
.split(',')
.map(str::trim)
.filter(|v| !v.is_empty())
.map(ToOwned::to_owned)
.collect();

if !values.iter().any(|v| v.eq_ignore_ascii_case(flag)) {
values.push(flag.to_string());
env::set_var(key, values.join(","));
}
}

// Cinnamon and similar Linux desktops often lack an accessibility bus, which causes
// GTK/Wry to spam errors and sometimes abort the launch. Force-disable the AT-SPI
// bridge when it is not explicitly configured.
Expand All @@ -55,16 +70,20 @@ fn configure_linux_env() {
set_env_if_unset("WEBKIT_DISABLE_COMPOSITING_MODE", "1");
set_env_if_unset("WEBKIT_DISABLE_DMABUF_RENDERER", "1");
set_env_if_unset("GDK_DISABLE_SHM", "1");
set_env_if_unset("GDK_DISABLE_XSHM", "1");
ensure_csv_env_flag("GDK_DISABLE", "shm");
set_env_if_unset("WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS", "1");
}

println!(
"[liminal-notes bootstrap] session_type={session_type:?} inferred_x11={inferred_x11} in_container={is_container} DISPLAY={display:?} WAYLAND_DISPLAY={wayland_display:?} NO_AT_BRIDGE={:?} WEBKIT_DISABLE_COMPOSITING_MODE={:?} WEBKIT_DISABLE_DMABUF_RENDERER={:?} WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS={:?} GDK_DISABLE_SHM={:?} LIBGL_ALWAYS_SOFTWARE={:?}",
"[liminal-notes bootstrap] session_type={session_type:?} inferred_x11={inferred_x11} in_container={is_container} DISPLAY={display:?} WAYLAND_DISPLAY={wayland_display:?} NO_AT_BRIDGE={:?} WEBKIT_DISABLE_COMPOSITING_MODE={:?} WEBKIT_DISABLE_DMABUF_RENDERER={:?} WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS={:?} GDK_DISABLE_SHM={:?} GDK_DISABLE_XSHM={:?} GDK_DISABLE={:?} LIBGL_ALWAYS_SOFTWARE={:?}",
env::var("NO_AT_BRIDGE").ok(),
env::var("WEBKIT_DISABLE_COMPOSITING_MODE").ok(),
env::var("WEBKIT_DISABLE_DMABUF_RENDERER").ok(),
env::var("WEBKIT_DISABLE_SANDBOX_THIS_IS_DANGEROUS").ok(),
env::var("GDK_DISABLE_SHM").ok(),
env::var("GDK_DISABLE_XSHM").ok(),
env::var("GDK_DISABLE").ok(),
env::var("LIBGL_ALWAYS_SOFTWARE").ok(),
);
}
Expand Down
82 changes: 81 additions & 1 deletion apps/desktop/src/App.css
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,33 @@ body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Noto Color Emoji', 'Noto Emoji';
}

/* Prevent accidental text selection in UI chrome. */
.title-bar,
.title-bar *,
.sidebar,
.sidebar *,
.tab-bar-container,
.tab-bar-container *,
.editor-header,
.editor-header *,
.backlinks-panel,
.backlinks-panel * {
user-select: none;
-webkit-user-select: none;
}

/* Keep editing and reading surfaces selectable. */
.cm-editor,
.cm-editor *,
.markdown-preview,
.markdown-preview *,
input,
textarea,
[contenteditable="true"] {
user-select: text;
-webkit-user-select: text;
}

#root {
width: 100%;
height: 100vh;
Expand Down Expand Up @@ -78,7 +105,7 @@ body {
}

.sidebar {
width: 250px;
width: 276px;
background-color: var(--ln-sidebar-bg);
border-right: 1px solid var(--ln-border);
display: flex;
Expand Down Expand Up @@ -200,6 +227,34 @@ button:disabled {

.file-tree {
padding: 10px 0;
min-height: 100%;
}

.file-tree.root-drop-active {
background: color-mix(in srgb, var(--ln-accent) 8%, transparent);
}

.tree-root-drop-zone {
margin: 0 10px 8px;
padding: 6px 10px;
border: 1px dashed var(--ln-border);
border-radius: 6px;
color: var(--ln-muted);
font-size: 0.8rem;
text-align: center;
transition: border-color 120ms ease, background-color 120ms ease, color 120ms ease;
}

.tree-root-drop-zone.active {
border-color: var(--ln-accent);
background: color-mix(in srgb, var(--ln-accent) 14%, transparent);
color: var(--ln-fg);
}

.tree-root-list.active {
background: color-mix(in srgb, var(--ln-accent) 8%, transparent);
outline: 1px dashed var(--ln-accent);
outline-offset: -1px;
}

.tree-node {
Expand All @@ -212,12 +267,33 @@ button:disabled {
align-items: center;
color: var(--ln-sidebar-fg);
cursor: pointer;
width: 100%;
box-sizing: border-box;
-webkit-user-drag: element;
}

.node-label:hover {
background-color: var(--ln-item-hover-bg);
}

.node-label.drop-target {
background: color-mix(in srgb, var(--ln-accent) 16%, transparent);
outline: 1px solid var(--ln-accent);
outline-offset: -1px;
}

.node-label.root-drop-hover {
background: color-mix(in srgb, var(--ln-accent) 12%, transparent);
outline: 1px dashed var(--ln-accent);
outline-offset: -1px;
}

.node-children.drop-target-area {
background: color-mix(in srgb, var(--ln-accent) 8%, transparent);
outline: 1px dashed var(--ln-accent);
outline-offset: -1px;
}

.node-label.file {
color: var(--ln-sidebar-fg);
opacity: 0.9;
Expand Down Expand Up @@ -505,6 +581,10 @@ button:disabled {
overflow: hidden;
}

.document-column {
border-left: 1px solid var(--ln-border);
}

.editor-pane, .preview-pane {
flex: 1;
display: flex;
Expand Down
Loading