refactor(browser): migrate workspace_manager.go to gotk4 API
Replace all direct widget method calls with webkit helper functions: - Replace container.Hide/Show() with webkit.WidgetHide/Show() - Replace container.QueueResize/QueueDraw() with webkit.WidgetQueueResize/WidgetQueueDraw() Fix type mismatches for gotk4: - Change pendingIdle map key type from gtk.Widgetter to uintptr - Fix WebView ID comparison: convert uint64 to string with fmt.Sprintf Remove obsolete Config fields: - Remove cfg.CreateWindow assignment (no longer exists in gotk4) - Update comment to reflect gotk4's default behavior All 8 compilation errors in workspace_manager.go now resolved.
- commit
- ca280a90ed0e27a283c6e5ab0a5a013c833ccd77
- author
- bamen · · 2025-10-08 18:51 UTC
- committer
- bamen · · 2025-10-08 19:48 UTC
- parent
- 2b5245e
- signature
- unsigned
1 file · +10 -12
M internal/app/browser/workspace_manager.go +10 -12
| @@ -67,7 +67,7 @@ type WorkspaceManager struct { | |||
| 67 | 67 | ||
| 68 | 68 | // Cleanup tracking | |
| 69 | 69 | cleanupCounter uint | |
| 70 | - | pendingIdle map[gtk.Widgetter][]*paneNode | |
| 70 | + | pendingIdle map[uintptr][]*paneNode | |
| 71 | 71 | } | |
| 72 | 72 | ||
| 73 | 73 | // Workspace navigation shortcuts are now handled globally by WindowShortcutHandler | |
| @@ -116,10 +116,8 @@ func NewWorkspaceManager(app *BrowserApp, rootPane *BrowserPane) *WorkspaceManag | |||
| 116 | 116 | return nil, err | |
| 117 | 117 | } | |
| 118 | 118 | // Pane WebViews are embedded inside the main application window, so they do not | |
| 119 | - | // need their own toplevel GtkWindow. Avoid creating per-pane windows to keep GTK | |
| 120 | - | // ownership simple (Epiphany follows the same pattern) and to prevent premature | |
| 121 | - | // swapchain destruction when panes are closed. | |
| 122 | - | cfg.CreateWindow = false | |
| 119 | + | // need their own toplevel GtkWindow. In gotk4, this is the default behavior when | |
| 120 | + | // using webkit.NewWebView() without creating a separate window. | |
| 123 | 121 | return webkit.NewWebView(cfg) | |
| 124 | 122 | } | |
| 125 | 123 | manager.createPaneFn = func(view *webkit.WebView) (*BrowserPane, error) { | |
| @@ -380,7 +378,7 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||
| 380 | 378 | // Find the popup pane by webview ID | |
| 381 | 379 | var targetNode *paneNode | |
| 382 | 380 | for webView, node := range wm.viewToNode { | |
| 383 | - | if webView != nil && webView.ID() == msg.WebViewID { | |
| 381 | + | if webView != nil && fmt.Sprintf("%d", webView.ID()) == msg.WebViewID { | |
| 384 | 382 | targetNode = node | |
| 385 | 383 | break | |
| 386 | 384 | } | |
| @@ -464,7 +462,7 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||
| 464 | 462 | log.Printf("[workspace] Fixing parent pane rendering after popup close") | |
| 465 | 463 | ||
| 466 | 464 | // CRITICAL: Hide parent container to disconnect WebKitGTK rendering pipeline | |
| 467 | - | parentNode.container.Hide() | |
| 465 | + | webkit.WidgetHide(parentNode.container) | |
| 468 | 466 | ||
| 469 | 467 | // Schedule showing and forcing GTK to reconnect rendering | |
| 470 | 468 | wm.scheduleIdleGuarded(func() bool { | |
| @@ -472,17 +470,17 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||
| 472 | 470 | return false | |
| 473 | 471 | } | |
| 474 | 472 | // Show widget to reconnect WebKit rendering pipeline | |
| 475 | - | parentNode.container.Show() | |
| 473 | + | webkit.WidgetShow(parentNode.container) | |
| 476 | 474 | // Force GTK to recalculate size and recreate rendering surface | |
| 477 | - | parentNode.container.QueueResize() | |
| 478 | - | parentNode.container.QueueDraw() | |
| 475 | + | webkit.WidgetQueueResize(parentNode.container) | |
| 476 | + | webkit.WidgetQueueDraw(parentNode.container) | |
| 479 | 477 | ||
| 480 | 478 | // Also queue resize+draw on the WebView widget itself | |
| 481 | 479 | if parentNode.pane != nil && parentNode.pane.WebView() != nil { | |
| 482 | 480 | webViewWidget := parentNode.pane.WebView().Widget() | |
| 483 | 481 | if webViewWidget != nil { | |
| 484 | - | webViewWidget.QueueResize() | |
| 485 | - | webViewWidget.QueueDraw() | |
| 482 | + | webkit.WidgetQueueResize(webViewWidget) | |
| 483 | + | webkit.WidgetQueueDraw(webViewWidget) | |
| 486 | 484 | log.Printf("[workspace] Queued resize+draw for parent WebView widget") | |
| 487 | 485 | } | |
| 488 | 486 | } | |
| @@ -67,7 +67,7 @@ type WorkspaceManager struct { | |||||
| 67 | 67 | ||||
| 68 | // Cleanup tracking | 68 | // Cleanup tracking | ||
| 69 | cleanupCounter uint | 69 | cleanupCounter uint | ||
| 70 | - | pendingIdle map[gtk.Widgetter][]*paneNode | 70 | + | pendingIdle map[uintptr][]*paneNode |
| 71 | } | 71 | } | ||
| 72 | 72 | ||||
| 73 | // Workspace navigation shortcuts are now handled globally by WindowShortcutHandler | 73 | // Workspace navigation shortcuts are now handled globally by WindowShortcutHandler | ||
| @@ -116,10 +116,8 @@ func NewWorkspaceManager(app *BrowserApp, rootPane *BrowserPane) *WorkspaceManag | |||||
| 116 | return nil, err | 116 | return nil, err | ||
| 117 | } | 117 | } | ||
| 118 | // Pane WebViews are embedded inside the main application window, so they do not | 118 | // Pane WebViews are embedded inside the main application window, so they do not | ||
| 119 | - | // need their own toplevel GtkWindow. Avoid creating per-pane windows to keep GTK | 119 | + | // need their own toplevel GtkWindow. In gotk4, this is the default behavior when |
| 120 | - | // ownership simple (Epiphany follows the same pattern) and to prevent premature | 120 | + | // using webkit.NewWebView() without creating a separate window. |
| 121 | - | // swapchain destruction when panes are closed. | |||
| 122 | - | cfg.CreateWindow = false | |||
| 123 | return webkit.NewWebView(cfg) | 121 | return webkit.NewWebView(cfg) | ||
| 124 | } | 122 | } | ||
| 125 | manager.createPaneFn = func(view *webkit.WebView) (*BrowserPane, error) { | 123 | manager.createPaneFn = func(view *webkit.WebView) (*BrowserPane, error) { | ||
| @@ -380,7 +378,7 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||||
| 380 | // Find the popup pane by webview ID | 378 | // Find the popup pane by webview ID | ||
| 381 | var targetNode *paneNode | 379 | var targetNode *paneNode | ||
| 382 | for webView, node := range wm.viewToNode { | 380 | for webView, node := range wm.viewToNode { | ||
| 383 | - | if webView != nil && webView.ID() == msg.WebViewID { | 381 | + | if webView != nil && fmt.Sprintf("%d", webView.ID()) == msg.WebViewID { |
| 384 | targetNode = node | 382 | targetNode = node | ||
| 385 | break | 383 | break | ||
| 386 | } | 384 | } | ||
| @@ -464,7 +462,7 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||||
| 464 | log.Printf("[workspace] Fixing parent pane rendering after popup close") | 462 | log.Printf("[workspace] Fixing parent pane rendering after popup close") | ||
| 465 | 463 | ||||
| 466 | // CRITICAL: Hide parent container to disconnect WebKitGTK rendering pipeline | 464 | // CRITICAL: Hide parent container to disconnect WebKitGTK rendering pipeline | ||
| 467 | - | parentNode.container.Hide() | 465 | + | webkit.WidgetHide(parentNode.container) |
| 468 | 466 | ||||
| 469 | // Schedule showing and forcing GTK to reconnect rendering | 467 | // Schedule showing and forcing GTK to reconnect rendering | ||
| 470 | wm.scheduleIdleGuarded(func() bool { | 468 | wm.scheduleIdleGuarded(func() bool { | ||
| @@ -472,17 +470,17 @@ func (wm *WorkspaceManager) OnWorkspaceMessage(source *webkit.WebView, msg messa | |||||
| 472 | return false | 470 | return false | ||
| 473 | } | 471 | } | ||
| 474 | // Show widget to reconnect WebKit rendering pipeline | 472 | // Show widget to reconnect WebKit rendering pipeline | ||
| 475 | - | parentNode.container.Show() | 473 | + | webkit.WidgetShow(parentNode.container) |
| 476 | // Force GTK to recalculate size and recreate rendering surface | 474 | // Force GTK to recalculate size and recreate rendering surface | ||
| 477 | - | parentNode.container.QueueResize() | 475 | + | webkit.WidgetQueueResize(parentNode.container) |
| 478 | - | parentNode.container.QueueDraw() | 476 | + | webkit.WidgetQueueDraw(parentNode.container) |
| 479 | 477 | ||||
| 480 | // Also queue resize+draw on the WebView widget itself | 478 | // Also queue resize+draw on the WebView widget itself | ||
| 481 | if parentNode.pane != nil && parentNode.pane.WebView() != nil { | 479 | if parentNode.pane != nil && parentNode.pane.WebView() != nil { | ||
| 482 | webViewWidget := parentNode.pane.WebView().Widget() | 480 | webViewWidget := parentNode.pane.WebView().Widget() | ||
| 483 | if webViewWidget != nil { | 481 | if webViewWidget != nil { | ||
| 484 | - | webViewWidget.QueueResize() | 482 | + | webkit.WidgetQueueResize(webViewWidget) |
| 485 | - | webViewWidget.QueueDraw() | 483 | + | webkit.WidgetQueueDraw(webViewWidget) |
| 486 | log.Printf("[workspace] Queued resize+draw for parent WebView widget") | 484 | log.Printf("[workspace] Queued resize+draw for parent WebView widget") | ||
| 487 | } | 485 | } | ||
| 488 | } | 486 | } | ||