From 574552f259f51f435da0eb2f245ceb94b977f579 Mon Sep 17 00:00:00 2001 From: Tobias Melcher Date: Mon, 2 Feb 2026 18:02:19 +0100 Subject: [PATCH] Enable zooming on macOS WebKit control with Command +/- keys If keydown events for Command +/= or Command - are not consumed by any event handler, invoke the native methods `makeTextLarger` or `makeTextSmaller` on the WebKit control to provide zooming functionality on macOS. --- .../cocoa/org/eclipse/swt/internal/cocoa/OS.java | 2 ++ .../cocoa/org/eclipse/swt/internal/cocoa/Selector.java | 2 ++ .../cocoa/org/eclipse/swt/internal/cocoa/WebView.java | 8 ++++++++ .../cocoa/org/eclipse/swt/browser/WebKit.java | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java index fffa4837edc..60627d39a56 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/OS.java @@ -991,6 +991,8 @@ public static Selector getSelector (long value) { public static final long sel_canBecomeKeyWindow = Selector.sel_canBecomeKeyWindow.value; public static final long sel_canDragRowsWithIndexes_atPoint_ = Selector.sel_canDragRowsWithIndexes_atPoint_.value; public static final long sel_canGoBack = Selector.sel_canGoBack.value; +public static final long sel_makeTextLarger = Selector.sel_makeTextLarger.value; +public static final long sel_makeTextSmaller = Selector.sel_makeTextSmaller.value; public static final long sel_canGoForward = Selector.sel_canGoForward.value; public static final long sel_canRedo = Selector.sel_canRedo.value; public static final long sel_canShowMIMEType_ = Selector.sel_canShowMIMEType_.value; diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java index d400229e1a4..e92beb2c32f 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/Selector.java @@ -234,6 +234,8 @@ public enum Selector { , sel_canBecomeKeyWindow("canBecomeKeyWindow") , sel_canDragRowsWithIndexes_atPoint_("canDragRowsWithIndexes:atPoint:") , sel_canGoBack("canGoBack") + , sel_makeTextLarger("makeTextLarger:") + , sel_makeTextSmaller("makeTextSmaller:") , sel_canGoForward("canGoForward") , sel_canRedo("canRedo") , sel_canShowMIMEType_("canShowMIMEType:") diff --git a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java index 2b1361f741b..f83482ad1b5 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java +++ b/bundles/org.eclipse.swt/Eclipse SWT PI/cocoa/org/eclipse/swt/internal/cocoa/WebView.java @@ -31,6 +31,14 @@ public boolean canGoBack() { return OS.objc_msgSend_bool(this.id, OS.sel_canGoBack); } +public void makeTextLarger() { + OS.objc_msgSend(this.id, OS.sel_makeTextLarger); +} + +public void makeTextSmaller() { + OS.objc_msgSend(this.id, OS.sel_makeTextSmaller); +} + public boolean canGoForward() { return OS.objc_msgSend_bool(this.id, OS.sel_canGoForward); } diff --git a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java index 7082032846e..1bc719a59e2 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java +++ b/bundles/org.eclipse.swt/Eclipse SWT WebKit/cocoa/org/eclipse/swt/browser/WebKit.java @@ -1586,6 +1586,10 @@ void handleEvent(long evtId) { } else if (translatedKey == 'x') { webView.cut (webView); event.preventDefault(); + } else if (translatedKey == '=' || translatedKey == '+') { + webView.makeTextLarger(); + } else if (translatedKey == '-') { + webView.makeTextSmaller(); } } }