Ken Thomases : winemac: Add registry settings to make Option keys send Alt rather than accessing additional characters from the keyboard layout .

Alexandre Julliard julliard at winehq.org
Thu Oct 10 13:26:51 CDT 2013


Module: wine
Branch: master
Commit: 79d45585bcd7b884fb195ce59bc8b5dada9ad4f0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=79d45585bcd7b884fb195ce59bc8b5dada9ad4f0

Author: Ken Thomases <ken at codeweavers.com>
Date:   Wed Oct  9 16:30:59 2013 -0500

winemac: Add registry settings to make Option keys send Alt rather than accessing additional characters from the keyboard layout.

---

 dlls/winemac.drv/cocoa_window.m |   22 ++++++++++++++++++++--
 dlls/winemac.drv/macdrv_cocoa.h |    2 ++
 dlls/winemac.drv/macdrv_main.c  |    7 +++++++
 3 files changed, 29 insertions(+), 2 deletions(-)

diff --git a/dlls/winemac.drv/cocoa_window.m b/dlls/winemac.drv/cocoa_window.m
index 7371cbc..2bb9aef 100644
--- a/dlls/winemac.drv/cocoa_window.m
+++ b/dlls/winemac.drv/cocoa_window.m
@@ -117,6 +117,24 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
         *modifiers &= ~NX_ALTERNATEMASK;
 }
 
+static inline NSUInteger adjusted_modifiers_for_option_behavior(NSUInteger modifiers)
+{
+    fix_device_modifiers_by_generic(&modifiers);
+    if (left_option_is_alt && (modifiers & NX_DEVICELALTKEYMASK))
+    {
+        modifiers |= NX_DEVICELCMDKEYMASK;
+        modifiers &= ~NX_DEVICELALTKEYMASK;
+    }
+    if (right_option_is_alt && (modifiers & NX_DEVICERALTKEYMASK))
+    {
+        modifiers |= NX_DEVICERCMDKEYMASK;
+        modifiers &= ~NX_DEVICERALTKEYMASK;
+    }
+    fix_generic_modifiers_by_device(&modifiers);
+
+    return modifiers;
+}
+
 
 @interface WineContentView : NSView <NSTextInputClient>
 {
@@ -1253,7 +1271,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
         [self flagsChanged:theEvent];
         [self postKey:[theEvent keyCode]
               pressed:[theEvent type] == NSKeyDown
-            modifiers:[theEvent modifierFlags]
+            modifiers:adjusted_modifiers_for_option_behavior([theEvent modifierFlags])
                 event:theEvent];
     }
 
@@ -1416,7 +1434,7 @@ static inline void fix_generic_modifiers_by_device(NSUInteger* modifiers)
             { NX_DEVICERCMDKEYMASK,     kVK_RightCommand },
         };
 
-        NSUInteger modifierFlags = [theEvent modifierFlags];
+        NSUInteger modifierFlags = adjusted_modifiers_for_option_behavior([theEvent modifierFlags]);
         NSUInteger changed;
         int i, last_changed;
 
diff --git a/dlls/winemac.drv/macdrv_cocoa.h b/dlls/winemac.drv/macdrv_cocoa.h
index 1a38b56..1c2d140 100644
--- a/dlls/winemac.drv/macdrv_cocoa.h
+++ b/dlls/winemac.drv/macdrv_cocoa.h
@@ -143,6 +143,8 @@ struct macdrv_display {
 extern int macdrv_err_on;
 extern int topmost_float_inactive DECLSPEC_HIDDEN;
 extern int capture_displays_for_fullscreen DECLSPEC_HIDDEN;
+extern int left_option_is_alt DECLSPEC_HIDDEN;
+extern int right_option_is_alt DECLSPEC_HIDDEN;
 
 extern int macdrv_start_cocoa_app(unsigned long long tickcount) DECLSPEC_HIDDEN;
 extern void macdrv_window_rejected_focus(const struct macdrv_event *event) DECLSPEC_HIDDEN;
diff --git a/dlls/winemac.drv/macdrv_main.c b/dlls/winemac.drv/macdrv_main.c
index dd032f3..d27ce94 100644
--- a/dlls/winemac.drv/macdrv_main.c
+++ b/dlls/winemac.drv/macdrv_main.c
@@ -50,6 +50,8 @@ int capture_displays_for_fullscreen = 0;
 BOOL skip_single_buffer_flushes = FALSE;
 BOOL allow_vsync = TRUE;
 BOOL allow_set_gamma = TRUE;
+int left_option_is_alt = 0;
+int right_option_is_alt = 0;
 
 
 /**************************************************************************
@@ -168,6 +170,11 @@ static void setup_options(void)
     if (!get_config_key(hkey, appkey, "AllowSetGamma", buffer, sizeof(buffer)))
         allow_set_gamma = IS_OPTION_TRUE(buffer[0]);
 
+    if (!get_config_key(hkey, appkey, "LeftOptionIsAlt", buffer, sizeof(buffer)))
+        left_option_is_alt = IS_OPTION_TRUE(buffer[0]);
+    if (!get_config_key(hkey, appkey, "RightOptionIsAlt", buffer, sizeof(buffer)))
+        right_option_is_alt = IS_OPTION_TRUE(buffer[0]);
+
     if (appkey) RegCloseKey(appkey);
     if (hkey) RegCloseKey(hkey);
 }




More information about the wine-cvs mailing list