fix(workspace): migrate workspace_popup.go to gotk4 API
- Remove unused gtk import - Remove CreateWindow config field assignments (field doesn't exist) - Convert WebView IDs to string using IDString() helper (uint64 → string) - Fixed popupWebViewID comparisons and append operations - Fixed parentWebViewID in localStorage script injection - Replace widget method calls with webkit helpers: - container.SetSizeRequest() → webkit.WidgetSetSizeRequest() - container.QueueResize() → webkit.WidgetQueueResize() Fixed 23 compilation errors in popup window handling.
- commit
- 042e3deaa72371dfcf80dcf6dc2fecfbc988a5ba
- author
- bamen · · 2025-10-08 20:34 UTC
- committer
- bamen · · 2025-10-08 18:50 UTC
- parent
- f6d1269
- signature
- unsigned
1 file · +8 -14
M internal/app/browser/workspace_popup.go +8 -14
| @@ -9,7 +9,6 @@ import ( | |||
| 9 | 9 | ||
| 10 | 10 | "github.com/bnema/dumber/internal/app/messaging" | |
| 11 | 11 | "github.com/bnema/dumber/pkg/webkit" | |
| 12 | - | "github.com/diamondburned/gotk4/pkg/gtk/v4" | |
| 13 | 12 | ) | |
| 14 | 13 | ||
| 15 | 14 | const ( | |
| @@ -71,7 +70,6 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||
| 71 | 70 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | |
| 72 | 71 | return nil | |
| 73 | 72 | } | |
| 74 | - | webkitCfg.CreateWindow = false | |
| 75 | 73 | // Create as related to avoid WindowFeatures crash; we'll decide final placement later | |
| 76 | 74 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | |
| 77 | 75 | if err != nil { | |
| @@ -107,7 +105,6 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||
| 107 | 105 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | |
| 108 | 106 | return nil | |
| 109 | 107 | } | |
| 110 | - | webkitCfg.CreateWindow = false | |
| 111 | 108 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | |
| 112 | 109 | if err != nil { | |
| 113 | 110 | log.Printf("[workspace] failed to create placeholder WebView: %v - allowing native popup", err) | |
| @@ -143,7 +140,7 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||
| 143 | 140 | ||
| 144 | 141 | // Get the new node and popup WebView ID for tracking | |
| 145 | 142 | newNode := wm.viewToNode[newView] | |
| 146 | - | popupWebViewID := newView.ID() | |
| 143 | + | popupWebViewID := newView.IDString() | |
| 147 | 144 | ||
| 148 | 145 | // Apply different behavior based on target type | |
| 149 | 146 | if isBlankTarget { | |
| @@ -345,7 +342,6 @@ func (wm *WorkspaceManager) handleIntentAsTab(sourceNode *paneNode, url string, | |||
| 345 | 342 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | |
| 346 | 343 | return nil | |
| 347 | 344 | } | |
| 348 | - | webkitCfg.CreateWindow = false | |
| 349 | 345 | ||
| 350 | 346 | newView, err := webkit.NewWebView(webkitCfg) | |
| 351 | 347 | if err != nil { | |
| @@ -402,7 +398,6 @@ func (wm *WorkspaceManager) handleIntentAsPopup(sourceNode *paneNode, url string | |||
| 402 | 398 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | |
| 403 | 399 | return nil | |
| 404 | 400 | } | |
| 405 | - | webkitCfg.CreateWindow = false | |
| 406 | 401 | ||
| 407 | 402 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, sourceNode.pane.webView) | |
| 408 | 403 | if err != nil { | |
| @@ -411,8 +406,8 @@ func (wm *WorkspaceManager) handleIntentAsPopup(sourceNode *paneNode, url string | |||
| 411 | 406 | } | |
| 412 | 407 | ||
| 413 | 408 | // Log the parent-popup WebView ID relationship for OAuth auto-close | |
| 414 | - | parentWebViewID := sourceNode.pane.webView.ID() | |
| 415 | - | popupWebViewID := newView.ID() | |
| 409 | + | parentWebViewID := sourceNode.pane.webView.IDString() | |
| 410 | + | popupWebViewID := newView.IDString() | |
| 416 | 411 | log.Printf("[workspace] Created popup WebView: parentID=%s popupID=%s url=%s", parentWebViewID, popupWebViewID, url) | |
| 417 | 412 | ||
| 418 | 413 | // Store popup WebView ID in parent's localStorage for OAuth callback lookup | |
| @@ -612,7 +607,7 @@ func (wm *WorkspaceManager) configureRelatedPopup(sourceNode *paneNode, webView | |||
| 612 | 607 | return | |
| 613 | 608 | } | |
| 614 | 609 | node := wm.viewToNode[related] | |
| 615 | - | popupWebViewID := related.ID() | |
| 610 | + | popupWebViewID := related.IDString() | |
| 616 | 611 | ||
| 617 | 612 | if node != nil { | |
| 618 | 613 | node.windowType = webkit.WindowTypePopup | |
| @@ -717,15 +712,15 @@ func (wm *WorkspaceManager) applyPopupSizeConstraints(view *webkit.WebView, widt | |||
| 717 | 712 | ||
| 718 | 713 | // Apply to container | |
| 719 | 714 | if container := view.RootWidget(); container != nil { | |
| 720 | - | container.SetSizeRequest(minWidth, minHeight) | |
| 721 | - | container.QueueResize() | |
| 715 | + | webkit.WidgetSetSizeRequest(container, minWidth, minHeight) | |
| 716 | + | webkit.WidgetQueueResize(container) | |
| 722 | 717 | log.Printf("[workspace] Applied minimum size %dx%d to popup container=%p", minWidth, minHeight, container) | |
| 723 | 718 | } | |
| 724 | 719 | ||
| 725 | 720 | // Apply to WebView widget | |
| 726 | 721 | if webViewWidget := view.Widget(); webViewWidget != nil { | |
| 727 | - | webViewWidget.SetSizeRequest(minWidth, minHeight) | |
| 728 | - | webViewWidget.QueueResize() | |
| 722 | + | webkit.WidgetSetSizeRequest(webViewWidget, minWidth, minHeight) | |
| 723 | + | webkit.WidgetQueueResize(webViewWidget) | |
| 729 | 724 | log.Printf("[workspace] Applied minimum size %dx%d to popup webview=%p", minWidth, minHeight, webViewWidget) | |
| 730 | 725 | } | |
| 731 | 726 | } | |
| @@ -797,7 +792,6 @@ func (wm *WorkspaceManager) handleDetectedWindowType(sourceNode *paneNode, webVi | |||
| 797 | 792 | log.Printf("[workspace] failed to build webkit config for tab: %v", err) | |
| 798 | 793 | return | |
| 799 | 794 | } | |
| 800 | - | webkitCfg.CreateWindow = false | |
| 801 | 795 | ||
| 802 | 796 | // Create independent WebView like handleIntentAsTab does | |
| 803 | 797 | independentView, err := webkit.NewWebView(webkitCfg) | |
| @@ -9,7 +9,6 @@ import ( | |||||
| 9 | 9 | ||||
| 10 | "github.com/bnema/dumber/internal/app/messaging" | 10 | "github.com/bnema/dumber/internal/app/messaging" | ||
| 11 | "github.com/bnema/dumber/pkg/webkit" | 11 | "github.com/bnema/dumber/pkg/webkit" | ||
| 12 | - | "github.com/diamondburned/gotk4/pkg/gtk/v4" | |||
| 13 | ) | 12 | ) | ||
| 14 | 13 | ||||
| 15 | const ( | 14 | const ( | ||
| @@ -71,7 +70,6 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||||
| 71 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | 70 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | ||
| 72 | return nil | 71 | return nil | ||
| 73 | } | 72 | } | ||
| 74 | - | webkitCfg.CreateWindow = false | |||
| 75 | // Create as related to avoid WindowFeatures crash; we'll decide final placement later | 73 | // Create as related to avoid WindowFeatures crash; we'll decide final placement later | ||
| 76 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | 74 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | ||
| 77 | if err != nil { | 75 | if err != nil { | ||
| @@ -107,7 +105,6 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||||
| 107 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | 105 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | ||
| 108 | return nil | 106 | return nil | ||
| 109 | } | 107 | } | ||
| 110 | - | webkitCfg.CreateWindow = false | |||
| 111 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | 108 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, source) | ||
| 112 | if err != nil { | 109 | if err != nil { | ||
| 113 | log.Printf("[workspace] failed to create placeholder WebView: %v - allowing native popup", err) | 110 | log.Printf("[workspace] failed to create placeholder WebView: %v - allowing native popup", err) | ||
| @@ -143,7 +140,7 @@ func (wm *WorkspaceManager) HandlePopup(source *webkit.WebView, url string) *web | |||||
| 143 | 140 | ||||
| 144 | // Get the new node and popup WebView ID for tracking | 141 | // Get the new node and popup WebView ID for tracking | ||
| 145 | newNode := wm.viewToNode[newView] | 142 | newNode := wm.viewToNode[newView] | ||
| 146 | - | popupWebViewID := newView.ID() | 143 | + | popupWebViewID := newView.IDString() |
| 147 | 144 | ||||
| 148 | // Apply different behavior based on target type | 145 | // Apply different behavior based on target type | ||
| 149 | if isBlankTarget { | 146 | if isBlankTarget { | ||
| @@ -345,7 +342,6 @@ func (wm *WorkspaceManager) handleIntentAsTab(sourceNode *paneNode, url string, | |||||
| 345 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | 342 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | ||
| 346 | return nil | 343 | return nil | ||
| 347 | } | 344 | } | ||
| 348 | - | webkitCfg.CreateWindow = false | |||
| 349 | 345 | ||||
| 350 | newView, err := webkit.NewWebView(webkitCfg) | 346 | newView, err := webkit.NewWebView(webkitCfg) | ||
| 351 | if err != nil { | 347 | if err != nil { | ||
| @@ -402,7 +398,6 @@ func (wm *WorkspaceManager) handleIntentAsPopup(sourceNode *paneNode, url string | |||||
| 402 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | 398 | log.Printf("[workspace] failed to build webkit config: %v - allowing native popup", err) | ||
| 403 | return nil | 399 | return nil | ||
| 404 | } | 400 | } | ||
| 405 | - | webkitCfg.CreateWindow = false | |||
| 406 | 401 | ||||
| 407 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, sourceNode.pane.webView) | 402 | newView, err := webkit.NewWebViewWithRelated(webkitCfg, sourceNode.pane.webView) | ||
| 408 | if err != nil { | 403 | if err != nil { | ||
| @@ -411,8 +406,8 @@ func (wm *WorkspaceManager) handleIntentAsPopup(sourceNode *paneNode, url string | |||||
| 411 | } | 406 | } | ||
| 412 | 407 | ||||
| 413 | // Log the parent-popup WebView ID relationship for OAuth auto-close | 408 | // Log the parent-popup WebView ID relationship for OAuth auto-close | ||
| 414 | - | parentWebViewID := sourceNode.pane.webView.ID() | 409 | + | parentWebViewID := sourceNode.pane.webView.IDString() |
| 415 | - | popupWebViewID := newView.ID() | 410 | + | popupWebViewID := newView.IDString() |
| 416 | log.Printf("[workspace] Created popup WebView: parentID=%s popupID=%s url=%s", parentWebViewID, popupWebViewID, url) | 411 | log.Printf("[workspace] Created popup WebView: parentID=%s popupID=%s url=%s", parentWebViewID, popupWebViewID, url) | ||
| 417 | 412 | ||||
| 418 | // Store popup WebView ID in parent's localStorage for OAuth callback lookup | 413 | // Store popup WebView ID in parent's localStorage for OAuth callback lookup | ||
| @@ -612,7 +607,7 @@ func (wm *WorkspaceManager) configureRelatedPopup(sourceNode *paneNode, webView | |||||
| 612 | return | 607 | return | ||
| 613 | } | 608 | } | ||
| 614 | node := wm.viewToNode[related] | 609 | node := wm.viewToNode[related] | ||
| 615 | - | popupWebViewID := related.ID() | 610 | + | popupWebViewID := related.IDString() |
| 616 | 611 | ||||
| 617 | if node != nil { | 612 | if node != nil { | ||
| 618 | node.windowType = webkit.WindowTypePopup | 613 | node.windowType = webkit.WindowTypePopup | ||
| @@ -717,15 +712,15 @@ func (wm *WorkspaceManager) applyPopupSizeConstraints(view *webkit.WebView, widt | |||||
| 717 | 712 | ||||
| 718 | // Apply to container | 713 | // Apply to container | ||
| 719 | if container := view.RootWidget(); container != nil { | 714 | if container := view.RootWidget(); container != nil { | ||
| 720 | - | container.SetSizeRequest(minWidth, minHeight) | 715 | + | webkit.WidgetSetSizeRequest(container, minWidth, minHeight) |
| 721 | - | container.QueueResize() | 716 | + | webkit.WidgetQueueResize(container) |
| 722 | log.Printf("[workspace] Applied minimum size %dx%d to popup container=%p", minWidth, minHeight, container) | 717 | log.Printf("[workspace] Applied minimum size %dx%d to popup container=%p", minWidth, minHeight, container) | ||
| 723 | } | 718 | } | ||
| 724 | 719 | ||||
| 725 | // Apply to WebView widget | 720 | // Apply to WebView widget | ||
| 726 | if webViewWidget := view.Widget(); webViewWidget != nil { | 721 | if webViewWidget := view.Widget(); webViewWidget != nil { | ||
| 727 | - | webViewWidget.SetSizeRequest(minWidth, minHeight) | 722 | + | webkit.WidgetSetSizeRequest(webViewWidget, minWidth, minHeight) |
| 728 | - | webViewWidget.QueueResize() | 723 | + | webkit.WidgetQueueResize(webViewWidget) |
| 729 | log.Printf("[workspace] Applied minimum size %dx%d to popup webview=%p", minWidth, minHeight, webViewWidget) | 724 | log.Printf("[workspace] Applied minimum size %dx%d to popup webview=%p", minWidth, minHeight, webViewWidget) | ||
| 730 | } | 725 | } | ||
| 731 | } | 726 | } | ||
| @@ -797,7 +792,6 @@ func (wm *WorkspaceManager) handleDetectedWindowType(sourceNode *paneNode, webVi | |||||
| 797 | log.Printf("[workspace] failed to build webkit config for tab: %v", err) | 792 | log.Printf("[workspace] failed to build webkit config for tab: %v", err) | ||
| 798 | return | 793 | return | ||
| 799 | } | 794 | } | ||
| 800 | - | webkitCfg.CreateWindow = false | |||
| 801 | 795 | ||||
| 802 | // Create independent WebView like handleIntentAsTab does | 796 | // Create independent WebView like handleIntentAsTab does | ||
| 803 | independentView, err := webkit.NewWebView(webkitCfg) | 797 | independentView, err := webkit.NewWebView(webkitCfg) | ||