Mercurial Hosting > luan
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