changeset 1958:156d7e77edf6 default tip

cross-platform keys
author Franklin Schmidt <fschmidt@gmail.com>
date Fri, 30 May 2025 13:16:54 -0600
parents 269e78ad8a85
children
files src/luan/modules/Bitwise.luan src/luan/modules/BitwiseLuan.java src/luan/modules/swing/Menu_item.luan
diffstat 3 files changed, 32 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/luan/modules/Bitwise.luan	Fri May 30 13:16:54 2025 -0600
@@ -0,0 +1,9 @@
+require "java"
+local BitwiseLuan = require "java:luan.modules.BitwiseLuan"
+
+
+local Bitwise = {}
+
+Bitwise.bitwise_or = BitwiseLuan["or"]
+
+return Bitwise
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/luan/modules/BitwiseLuan.java	Fri May 30 13:16:54 2025 -0600
@@ -0,0 +1,10 @@
+package luan.modules;
+
+
+public final class BitwiseLuan {
+
+	public static int or(int i1,int i2) {
+		return i1 | i2;
+	}
+
+}
--- a/src/luan/modules/swing/Menu_item.luan	Thu May 29 22:29:15 2025 -0600
+++ b/src/luan/modules/swing/Menu_item.luan	Fri May 30 13:16:54 2025 -0600
@@ -1,6 +1,8 @@
 local Luan = require "luan:Luan.luan"
 local error = Luan.error
 local set_metatable = Luan.set_metatable or error()
+local Bitwise = require "luan:Bitwise.luan"
+local bitwise_or = Bitwise.bitwise_or or error()
 local Utils = require "luan:swing/Utils.luan"
 local fail = Utils.fail or error()
 local make_metatable = Utils.make_metatable or error()
@@ -15,10 +17,19 @@
 local KeyStroke = require "java:javax.swing.KeyStroke"
 local KeyEvent = require "java:java.awt.event.KeyEvent"
 local InputEvent = require "java:java.awt.event.InputEvent"
+local Toolkit = require "java:java.awt.Toolkit"
 
 
 local Menu_item = {}
 
+local shortcut_key_mask = Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()
+
+local function get_key_stroke(s) 
+	local key = KeyStroke.getKeyStroke(s) or error "Invalid accelerator"
+	local modifiers = bitwise_or( key.getModifiers(), shortcut_key_mask )
+	return KeyStroke.getKeyStroke( key.getKeyCode(), modifiers )
+end
+
 function Menu_item.__index(menu_item,key)
 	local rtn = super__index(menu_item,key)
 	if rtn ~= fail then return rtn end
@@ -32,8 +43,7 @@
 	local rtn = super__new_index(menu_item,key,value)
 	if rtn ~= fail then return end
 	if key == "accelerator" then
-		menu_item.java.setAccelerator(KeyStroke.getKeyStroke(value))
-		--menu_item.java.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.META_DOWN_MASK))
+		menu_item.java.setAccelerator(get_key_stroke(value))
 		return
 	end
 	return fail
@@ -45,7 +55,7 @@
 	super_construct(menu_item,props)
 	local jmenu_item = menu_item.java
 	local accelerator = remove(props,"accelerator")
-	if accelerator~=nil then jmenu_item.setAccelerator(KeyStroke.getKeyStroke(accelerator)) end
+	if accelerator~=nil then jmenu_item.setAccelerator(get_key_stroke(accelerator)) end
 	return menu_item
 end
 Menu_item.construct = construct