Skip to content

Commit 1baafb7

Browse files
davidtorciviaclaude
andcommitted
fix: v1.4.1 — crop overlay no longer stacks on repeat clicks; README refresh
- enterCropSelection: early-return if an overlay is already up. Repeat clicks while in crop-selection mode previously stacked overlays, each with its own dimming and event listeners — the compounded background opacity blacked out the page in a way only Esc-spam could recover. - README: control strip diagram updated for v1.3+ buttons (zoom-to-video, mute, back/forward/refresh); hotkey table includes mute, zoom, and force-show-strip; snap description covers halves/thirds/aspect; added rebinding-hotkeys subsection pointing at the v1.4 in-app capture UI; click-through recovery section mentions the emergency hotkey; config example includes the three new hotkey fields; features section regrouped for scannability Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent 4bf0bfa commit 1baafb7

6 files changed

Lines changed: 72 additions & 41 deletions

File tree

README.md

Lines changed: 63 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -35,22 +35,22 @@ Open **Settings** (gear icon in the control strip, or right-click the tray icon)
3535
Move your mouse to the **top edge** of the window. A dark control strip slides down with all your controls:
3636

3737
```
38-
[←] [→] [⟳] [Pin] [Recent] [Home] [________URL bar________] [★] [Lock] [Snap] [Crop] | [Opacity] [Settings] [-] [x]
38+
[←] [→] [⟳] [Pin] [Recent] [Home] [____URL bar____] [★] [Lock] [Snap] [Crop] [Zoom] | [Mute] [Opacity] [Settings] [-] [x]
3939
```
4040

41-
- **Back** -- Go back in history
42-
- **Forward** -- Go forward in history
43-
- **Refresh** -- Reload the current page
41+
- **Back / Forward / Refresh** -- Page navigation
4442
- **Pin** -- Toggle always-on-top
4543
- **Recent** -- Dropdown of your recent URLs
4644
- **Home** -- Navigate to your configured home URL
47-
- **URL bar** -- Shows current URL, type a new one and press Enter to navigate (non-URL input searches DuckDuckGo)
48-
- **Bookmark (★)** -- Bookmark/unbookmark the current page (right-click to open bookmarks list)
45+
- **URL bar** -- Shows the current URL. Type a new one and press Enter to navigate; non-URL input searches DuckDuckGo
46+
- **Bookmark (★)** -- Bookmark/unbookmark the current page (right-click for bookmarks list)
4947
- **Lock** -- Toggle click-through mode (clicks pass through the window)
50-
- **Snap** -- Snap the window to a screen corner or center
51-
- **Crop** -- Crop and zoom into a region of the page
52-
- **Opacity slider** -- Drag to adjust window transparency (10%-100%)
53-
- **Settings** -- Open the settings panel
48+
- **Snap** -- Open a panel to position or resize the window: corners, halves (left/right/top/bottom), thirds (left/center/right), or common aspect ratios (16:9, 4:3, 21:9, 1:1, 9:16). Aspect ratios are smart — they shrink whichever side is over-sized, keeping the closer one
49+
- **Crop** -- Click and drag to select a region of the page; the window zooms into just that region. Click again to clear
50+
- **Zoom to Video** -- Auto-detect the largest `<video>` on the page and zoom to it. Click again to restore
51+
- **Mute** -- Mute/unmute all audio on the page. **Right-click** opens a vertical volume slider
52+
- **Opacity slider** -- Adjust window transparency (10%-100%). Toolbar stays readable even at low values
53+
- **Settings** -- Open the settings panel (click again to close)
5454
- **Minimize (-)** -- Minimize to the system tray
5555
- **Close (x)** -- Close the application
5656

@@ -76,6 +76,11 @@ These work globally, even when FloatView isn't focused:
7676
| Play/pause media | `Alt+Shift+P` | `⌥⇧P` |
7777
| Skip forward | `Alt+Shift+Right` | `⌥⇧Right` |
7878
| Skip back | `Alt+Shift+Left` | `⌥⇧Left` |
79+
| Mute/unmute media | `Alt+Shift+M` | `⌥⇧M` |
80+
| Zoom to largest video | `Alt+Shift+V` | `⌥⇧V` |
81+
| Force-show control strip | `Alt+Shift+S` | `⌥⇧S` |
82+
83+
The last one is an emergency escape hatch — if click-through mode (or a hostile page) ever leaves the strip stuck, this hotkey forces it back on screen.
7984

8085
These only work when the window is focused:
8186

@@ -84,6 +89,8 @@ These only work when the window is focused:
8489
| Show control strip and focus URL bar | `Ctrl+L` | `⌘L` |
8590
| Hide control strip | `Escape` | `Escape` |
8691

92+
**Rebinding hotkeys:** Open Settings → Keyboard Shortcuts. Click any binding, press your new combination (a modifier like Ctrl/Alt/Shift is required for non-F-keys), and it saves automatically. A small reset arrow appears next to any binding you've changed; click it to restore that single binding to default. Or hit **Reset all** to restore everything.
93+
8794
### 6. System tray
8895

8996
FloatView lives in your system tray. **Left-click** the tray icon to show/hide the window. **Right-click** for quick access to settings, toggles, and quit.
@@ -92,43 +99,59 @@ FloatView lives in your system tray. **Left-click** the tray icon to show/hide t
9299

93100
Press `Alt+Shift+D` to make the window completely transparent to mouse clicks -- everything passes through to the window behind it. The control strip hides automatically. To exit click-through mode:
94101
- Press `Alt+Shift+D` again, or
95-
- Right-click the tray icon and select **Exit Click-Through Mode**
102+
- Right-click the tray icon and uncheck **Click-Through Mode**, or
103+
- Press `Alt+Shift+S` to force-show the control strip (then click the lock icon)
96104

97105
## Features
98106

107+
**Window**
99108
- **Always on Top** -- Stays above all other windows (toggle with hotkey or tray menu)
100-
- **Adjustable Opacity** -- 10% to 100% transparency via slider or hotkeys
101-
- **Click-Through Mode** -- Window becomes invisible to mouse input
102-
- **Configurable Home URL** -- Set your default page; navigate back with the Home button
109+
- **Adjustable Opacity** -- 10% to 100% transparency via slider or hotkeys; toolbar stays readable even at low values
110+
- **Click-Through Mode** -- Window becomes invisible to mouse input; emergency hotkey to recover
111+
- **Borderless & Resizable** -- Clean look with native resize handles
112+
- **Smart Snap Panel** -- Position to corners/halves/thirds, or resize to common aspect ratios (16:9, 4:3, 21:9, 1:1, 9:16). Aspect resize is smart -- shrinks whichever side is over-sized
113+
- **Crop/Zoom** -- Drag-select a region of the page to zoom into
114+
- **Zoom to Video** -- One-click zoom to the largest video on the page; restores on second click
115+
- **HDR Support** -- Uses the system webview for correct HDR rendering (unlike Electron)
116+
117+
**Browsing**
103118
- **Smart URL Bar** -- Enter a URL to navigate, or type a search query to search DuckDuckGo
119+
- **Configurable Home URL** -- Set your default page; navigate back with the Home button
104120
- **Bookmarks** -- Save favorite pages; star icon toggles bookmark, right-click for list
105-
- **Navigation Controls** -- Back, forward, and refresh buttons in the control strip
106-
- **First-Run Tutorial** -- Interactive onboarding for new users
107-
- **Borderless & Resizable** -- Clean look with native resize handles
108-
- **HDR Support** -- Uses system webview for correct HDR rendering (unlike Electron)
109-
- **Shadow DOM Control Strip** -- Injected UI that never breaks the page you're viewing
110-
- **Persistent State** -- Remembers window position, size, opacity, and last URL across restarts
111-
- **Crash Recovery** -- Geometry auto-saved every 30 seconds; config backed up on write
112-
- **System Tray** -- Minimize to tray, quick controls via right-click menu
113-
- **Global Hotkeys** -- Control everything without switching focus
114-
- **Single Instance** -- Opening FloatView again brings the existing window to front
115-
- **Snap to Corners** -- Quickly position the window at any screen corner or center
116-
- **Crop/Zoom** -- Select and zoom into a region of the page for focused viewing
121+
- **Navigation Controls** -- Back, forward, refresh
117122
- **Auto-Refresh** -- Automatically reload the page on a configurable interval (1 min to 1 hour)
118123
- **Window Title** -- Title bar updates to match the current page
119124
- **Clear Site Data** -- Clear cookies, localStorage, and sessionStorage from settings
120-
- **In-App Updates** -- Check from Settings, install from tray menu
125+
126+
**Audio**
127+
- **Mute** -- Mute/unmute all audio on the page (toolbar button or `Alt+Shift+M`)
128+
- **Volume Slider** -- Right-click the mute button for a vertical slider that controls all `<video>`/`<audio>` on the page
129+
130+
**System integration**
131+
- **System Tray** -- Minimize to tray, quick controls via right-click menu
132+
- **Global Hotkeys** -- Control pin/click-through/opacity/media/mute/zoom/visibility without switching focus. Fully **rebindable** in Settings
133+
- **Single Instance** -- Opening FloatView again brings the existing window to front
134+
- **In-App Updates** -- Check from Settings, install from the tray menu
135+
136+
**Reliability**
137+
- **Persistent State** -- Remembers window position, size, opacity, and last URL across restarts
138+
- **Crash Recovery** -- Geometry auto-saved every 30 seconds; config backed up on every write
139+
- **Force-Show Control Strip** -- Emergency hotkey (`Alt+Shift+S`) to recover the strip if a page hides it or click-through mode strands you
140+
- **Shadow DOM Control Strip** -- Injected UI never breaks the page you're viewing
141+
142+
**Polish**
143+
- **First-Run Tutorial** -- Interactive onboarding for new users
121144
- **Cross-Platform** -- Windows and macOS
122145
- **Tiny Footprint** -- ~3MB binary, uses system webview
123146

124147
## Configuration
125148

126-
Settings are stored in a platform-specific config directory and are managed automatically:
149+
FloatView is configured entirely through the in-app **Settings** panel (gear icon in the control strip). Settings are stored in a platform-specific config directory:
127150

128151
- **Windows:** `%APPDATA%\com.floatview.app\config.json`
129152
- **macOS:** `~/Library/Application Support/com.floatview.app/config.json`
130153

131-
You can edit the file directly to customize hotkeys or other settings:
154+
You normally don't need to touch this file -- everything (home URL, hotkeys, opacity, auto-refresh, bookmarks) can be edited from Settings. Direct editing is for power users or recovery from a corrupt config. A `.bak` snapshot is created on every write.
132155

133156
```json
134157
{
@@ -148,14 +171,17 @@ You can edit the file directly to customize hotkeys or other settings:
148171
"auto_refresh_minutes": 0,
149172
"bookmarks": [],
150173
"hotkeys": {
151-
"toggle_on_top": "Alt+Shift+T",
152-
"toggle_locked": "Alt+Shift+D",
153-
"opacity_up": "Alt+Shift+Up",
154-
"opacity_down": "Alt+Shift+Down",
174+
"toggle_on_top": "Alt+Shift+T",
175+
"toggle_locked": "Alt+Shift+D",
176+
"opacity_up": "Alt+Shift+Up",
177+
"opacity_down": "Alt+Shift+Down",
155178
"toggle_visibility": "Alt+Shift+H",
156-
"media_play_pause": "Alt+Shift+P",
157-
"media_next": "Alt+Shift+Right",
158-
"media_previous": "Alt+Shift+Left"
179+
"media_play_pause": "Alt+Shift+P",
180+
"media_next": "Alt+Shift+Right",
181+
"media_previous": "Alt+Shift+Left",
182+
"media_mute": "Alt+Shift+M",
183+
"zoom_video": "Alt+Shift+V",
184+
"show_strip": "Alt+Shift+S"
159185
}
160186
}
161187
```
@@ -197,7 +223,7 @@ src/index.html -- Landing page (URL input)
197223
src-tauri/src/main.rs -- Rust backend (commands, hotkeys, tray, platform interop)
198224
src-tauri/src/config.rs -- Config types with serde
199225
src-tauri/src/opacity.rs -- Cross-platform opacity management
200-
src-tauri/src/injection.js -- Shadow DOM control strip + tutorial (~2300 lines)
226+
src-tauri/src/injection.js -- Shadow DOM control strip + tutorial (~4000 lines)
201227
```
202228

203229
### Why not Electron?

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "floatview",
3-
"version": "1.4.0",
3+
"version": "1.4.1",
44
"description": "A minimal floating browser window for streaming media on a secondary monitor",
55
"scripts": {
66
"tauri": "tauri",

src-tauri/Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src-tauri/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "floatview"
3-
version = "1.4.0"
3+
version = "1.4.1"
44
description = "A minimal floating browser window for streaming media"
55
authors = ["David Torcivia"]
66
license = "MIT"

src-tauri/src/injection.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1956,6 +1956,11 @@
19561956
let cropOverlayEl = null;
19571957

19581958
function enterCropSelection() {
1959+
// Guard against repeat clicks. Without this, each click stacks
1960+
// another overlay (each with its own dimming + listeners), and
1961+
// the compounded background opacity blacks out the page in a
1962+
// way only Esc-spam can recover.
1963+
if (cropOverlayEl) return;
19591964
cropOverlayEl = document.createElement('div');
19601965
cropOverlayEl.className = 'crop-overlay';
19611966
const instructions = document.createElement('div');

src-tauri/tauri.conf.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"$schema": "https://schema.tauri.app/config/2",
33
"productName": "FloatView",
4-
"version": "1.4.0",
4+
"version": "1.4.1",
55
"identifier": "com.floatview.desktop",
66
"build": {
77
"frontendDist": "../src",

0 commit comments

Comments
 (0)