diff --git a/v3/internal/capabilities/capabilities.go b/v3/internal/capabilities/capabilities.go index 5cf10735e..af9428bb2 100644 --- a/v3/internal/capabilities/capabilities.go +++ b/v3/internal/capabilities/capabilities.go @@ -6,10 +6,6 @@ type Capabilities struct { HasNativeDrag bool } -func NewCapabilities(version string) Capabilities { - return newCapabilities(version) -} - func (c Capabilities) AsBytes() []byte { // JSON encode result, err := json.Marshal(c) diff --git a/v3/internal/capabilities/capabilities_linux.go b/v3/internal/capabilities/capabilities_linux.go index e34b292fa..22b3ffbe1 100644 --- a/v3/internal/capabilities/capabilities_linux.go +++ b/v3/internal/capabilities/capabilities_linux.go @@ -2,8 +2,12 @@ package capabilities -func newCapabilities(_ string) Capabilities { +import "github.com/wailsapp/wails/v3/internal/operatingsystem" + +func NewCapabilities() Capabilities { c := Capabilities{} - c.HasNativeDrag = false + + webkitVersion := operatingsystem.GetWebkitVersion() + c.HasNativeDrag = webkitVersion.IsAtLeast(2, 36, 0) return c } diff --git a/v3/internal/capabilities/capabilities_windows.go b/v3/internal/capabilities/capabilities_windows.go index ac5aabc8c..537b2f618 100644 --- a/v3/internal/capabilities/capabilities_windows.go +++ b/v3/internal/capabilities/capabilities_windows.go @@ -14,7 +14,7 @@ func (v version) IsAtLeast(input string) bool { return result >= 0 } -func newCapabilities(webview2version string) Capabilities { +func NewCapabilities(version string) Capabilities { webview2 := version(webview2version) c := Capabilities{} c.HasNativeDrag = webview2.IsAtLeast("113.0.0.0") diff --git a/v3/internal/operatingsystem/webkit_linux.go b/v3/internal/operatingsystem/webkit_linux.go new file mode 100644 index 000000000..70085d8fa --- /dev/null +++ b/v3/internal/operatingsystem/webkit_linux.go @@ -0,0 +1,40 @@ +package operatingsystem + +/* +#cgo linux pkg-config: gtk+-3.0 webkit2gtk-4.0 javascriptcoregtk-4.1 +#include +*/ +import "C" +import "fmt" + +type WebkitVersion struct { + Major uint + Minor uint + Micro uint +} + +func GetWebkitVersion() WebkitVersion { + var major, minor, micro C.uint + major = C.webkit_get_major_version() + minor = C.webkit_get_minor_version() + micro = C.webkit_get_micro_version() + return WebkitVersion{ + Major: uint(major), + Minor: uint(minor), + Micro: uint(micro), + } +} + +func (v WebkitVersion) String() string { + return fmt.Sprintf("v%d.%d.%d", v.Major, v.Minor, v.Micro) +} + +func (v WebkitVersion) IsAtLeast(major int, minor int, micro int) bool { + if v.Major != uint(major) { + return v.Major > uint(major) + } + if v.Minor != uint(minor) { + return v.Minor > uint(minor) + } + return v.Micro >= uint(micro) +} diff --git a/v3/pkg/application/application_linux.go b/v3/pkg/application/application_linux.go index 2434ea6aa..0d54df1fc 100644 --- a/v3/pkg/application/application_linux.go +++ b/v3/pkg/application/application_linux.go @@ -203,5 +203,9 @@ func (a *App) logPlatformInfo() { return } - a.info("Platform Info:", info.AsLogSlice()...) + wkVersion := operatingsystem.GetWebkitVersion() + platformInfo := info.AsLogSlice() + platformInfo = append(platformInfo, "Webkit2Gtk", wkVersion) + + a.info("Platform Info:", platformInfo...) } diff --git a/v3/pkg/application/webview_window_linux.go b/v3/pkg/application/webview_window_linux.go index 181341053..c6dd9e38b 100644 --- a/v3/pkg/application/webview_window_linux.go +++ b/v3/pkg/application/webview_window_linux.go @@ -4,6 +4,7 @@ package application import ( "fmt" + "github.com/wailsapp/wails/v3/internal/capabilities" "net/url" "github.com/wailsapp/wails/v3/pkg/events" @@ -355,6 +356,9 @@ func (w *linuxWebviewWindow) run() { w.on(eventId) } + // Register the capabilities + globalApplication.capabilities = capabilities.NewCapabilities() + app := getNativeApplication() menu := app.getApplicationMenu()