detached aef040f

fix(webkit): resolve OAuth popup rendering and sizing issues

commit
aef040f9d2dd5dfbdd92ff76a6c28b4c05c59419
author
bamen · · 2025-09-21 03:01 UTC
parent
8f9dae0
signature
unsigned
2 files · +22 -2
M internal/app/browser/workspace_manager.go +10 -0
@@ -1359,6 +1359,10 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web
13591359 if err := newView.LoadURL(url); err != nil {
13601360 log.Printf("[workspace] failed to load popup URL: %v", err)
13611361 }
1362+ // Ensure the WebView is visible after loading URL
1363+ if err := newView.Show(); err != nil {
1364+ log.Printf("[workspace] failed to show popup WebView: %v", err)
1365+ }
13621366 }
13631367
13641368 log.Printf("[workspace] Created popup pane for URL: %s", url)
@@ -1389,6 +1393,12 @@ func (wm *WorkspaceManager) insertPopupPane(target *paneNode, newPane *BrowserPa
13891393 webkit.WidgetSetVExpand(newContainer, true)
13901394 webkit.WidgetRealizeInContainer(newContainer)
13911395
1396+ // Also realize the WebView widget itself for proper popup rendering
1397+ webViewWidget := newPane.webView.Widget()
1398+ if webViewWidget != 0 {
1399+ webkit.WidgetRealizeInContainer(webViewWidget)
1400+ }
1401+
13921402 existingContainer := target.container
13931403 if existingContainer == 0 {
13941404 return errors.New("existing pane missing container")
@@ -1359,6 +1359,10 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web
1359 if err := newView.LoadURL(url); err != nil {1359 if err := newView.LoadURL(url); err != nil {
1360 log.Printf("[workspace] failed to load popup URL: %v", err)1360 log.Printf("[workspace] failed to load popup URL: %v", err)
1361 }1361 }
1362+ // Ensure the WebView is visible after loading URL
1363+ if err := newView.Show(); err != nil {
1364+ log.Printf("[workspace] failed to show popup WebView: %v", err)
1365+ }
1362 }1366 }
1363 1367
1364 log.Printf("[workspace] Created popup pane for URL: %s", url)1368 log.Printf("[workspace] Created popup pane for URL: %s", url)
@@ -1389,6 +1393,12 @@ func (wm *WorkspaceManager) insertPopupPane(target *paneNode, newPane *BrowserPa
1389 webkit.WidgetSetVExpand(newContainer, true)1393 webkit.WidgetSetVExpand(newContainer, true)
1390 webkit.WidgetRealizeInContainer(newContainer)1394 webkit.WidgetRealizeInContainer(newContainer)
1391 1395
1396+ // Also realize the WebView widget itself for proper popup rendering
1397+ webViewWidget := newPane.webView.Widget()
1398+ if webViewWidget != 0 {
1399+ webkit.WidgetRealizeInContainer(webViewWidget)
1400+ }
1401+
1392 existingContainer := target.container1402 existingContainer := target.container
1393 if existingContainer == 0 {1403 if existingContainer == 0 {
1394 return errors.New("existing pane missing container")1404 return errors.New("existing pane missing container")
M pkg/webkit/webview_cgo.go +12 -2
@@ -265,10 +265,9 @@ static GtkWidget* new_webview_related(WebKitWebView* related_view, WebKitUserCon
265265 g_object_ref(u); // Add ref since we'll pass it to new WebView
266266 }
267267
268- // Create WebView with same session and content manager for process sharing
268+ // Create WebView with related view for process sharing (network session is inherited)
269269 GtkWidget* w = GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW,
270270 "user-content-manager", u,
271- "network-session", related_session,
272271 "related-view", related_view,
273272 NULL));
274273
@@ -1485,6 +1484,17 @@ func NewWebViewWithRelated(cfg *Config, relatedView *WebView) (*WebView, error)
14851484
14861485 C.gtk_box_append((*C.GtkBox)(unsafe.Pointer(container)), viewWidget)
14871486
1487+ // Make the WebView widget visible and expandable for popup rendering
1488+ C.gtk_widget_set_visible(viewWidget, C.gboolean(1))
1489+ C.gtk_widget_set_visible(container, C.gboolean(1))
1490+ C.gtk_widget_set_hexpand(viewWidget, C.gboolean(1))
1491+ C.gtk_widget_set_vexpand(viewWidget, C.gboolean(1))
1492+ C.gtk_widget_set_hexpand(container, C.gboolean(1))
1493+ C.gtk_widget_set_vexpand(container, C.gboolean(1))
1494+ // Remove any size constraints from popup WebView to let it fill the pane
1495+ C.gtk_widget_set_size_request(viewWidget, -1, -1)
1496+ C.gtk_widget_set_size_request(container, -1, -1)
1497+
14881498 if cfg.CreateWindow {
14891499 win = C.new_window()
14901500 if win == nil {
@@ -265,10 +265,9 @@ static GtkWidget* new_webview_related(WebKitWebView* related_view, WebKitUserCon
265 g_object_ref(u); // Add ref since we'll pass it to new WebView265 g_object_ref(u); // Add ref since we'll pass it to new WebView
266 }266 }
267 267
268- // Create WebView with same session and content manager for process sharing268+ // Create WebView with related view for process sharing (network session is inherited)
269 GtkWidget* w = GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW,269 GtkWidget* w = GTK_WIDGET(g_object_new(WEBKIT_TYPE_WEB_VIEW,
270 "user-content-manager", u,270 "user-content-manager", u,
271- "network-session", related_session,
272 "related-view", related_view,271 "related-view", related_view,
273 NULL));272 NULL));
274 273
@@ -1485,6 +1484,17 @@ func NewWebViewWithRelated(cfg *Config, relatedView *WebView) (*WebView, error)
1485 1484
1486 C.gtk_box_append((*C.GtkBox)(unsafe.Pointer(container)), viewWidget)1485 C.gtk_box_append((*C.GtkBox)(unsafe.Pointer(container)), viewWidget)
1487 1486
1487+ // Make the WebView widget visible and expandable for popup rendering
1488+ C.gtk_widget_set_visible(viewWidget, C.gboolean(1))
1489+ C.gtk_widget_set_visible(container, C.gboolean(1))
1490+ C.gtk_widget_set_hexpand(viewWidget, C.gboolean(1))
1491+ C.gtk_widget_set_vexpand(viewWidget, C.gboolean(1))
1492+ C.gtk_widget_set_hexpand(container, C.gboolean(1))
1493+ C.gtk_widget_set_vexpand(container, C.gboolean(1))
1494+ // Remove any size constraints from popup WebView to let it fill the pane
1495+ C.gtk_widget_set_size_request(viewWidget, -1, -1)
1496+ C.gtk_widget_set_size_request(container, -1, -1)
1497+
1488 if cfg.CreateWindow {1498 if cfg.CreateWindow {
1489 win = C.new_window()1499 win = C.new_window()
1490 if win == nil {1500 if win == nil {

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 8

Tags 42

↑↓ moveenter openesc close