summaryrefslogtreecommitdiff
blob: 006ca00a45865dd99e9f2f272ccff25f7d7bf564 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
diff -purN kdelibs-4.3.80.orig/kdeui/util/kkeyserver_mac.cpp kdelibs-4.3.80/kdeui/util/kkeyserver_mac.cpp
--- a/kdelibs-4.3.80.orig/kdeui/util/kkeyserver_mac.cpp	2009-12-14 17:05:26.284881642 -0500
+++ b/kdelibs-4.3.80/kdeui/util/kkeyserver_mac.cpp	2009-12-14 17:11:23.393094384 -0500
@@ -68,7 +68,7 @@ namespace KKeyServer {
 #ifdef QT_MAC_USE_COCOA
     static TISInputSourceRef lastLayout = 0;
 #else
-    static KeyboardLayoutRef lastLayout = NULL;
+    static TISInputSourceRef lastLayout = NULL;
 #endif
     
     void updateScancodes() {
@@ -125,16 +125,27 @@ namespace KKeyServer {
 #endif
             lastLayout = layout;
             scancodes.clear();
-            void *kchr;
-            if (KLGetKeyboardLayoutProperty(layout, kKLKCHRData, const_cast<const void**>(&kchr)) != noErr) {
+            UCKeyboardLayout *uchr = (UCKeyboardLayout *)TISGetInputSourceProperty(layout, kTISPropertyUnicodeKeyLayoutData);
+            if (uchr == NULL) {
                 kWarning() << "Couldn't load active keyboard layout";
             } else {
                 for (int i = 0; i < 128; i++) {
                     UInt32 tmpState = 0;
-                    UInt32 chr = KeyTranslate(kchr, i, &tmpState);
-                    if (chr && chr != kFunctionKeyCharCode) {
-                        scancodes.insert(chr, i);
-                    }
+                    UInt32 deadKeyState = 0;
+                    UInt32 flags = 0;
+                    UniCharCount maxStringLength = 255;
+                    UniCharCount actualStringLength = 0;
+                    UniChar unicodeString[maxStringLength];
+                    
+                    UCKeyTranslate(uchr, i, kUCKeyActionDown,
+                            flags, LMGetKbdType(),
+                            1, &deadKeyState, maxStringLength, &actualStringLength, unicodeString);
+                    fprintf(stderr, "Got key: %s\n", unicodeString);
+                    fflush(stderr);
+                    //UInt32 chr = KeyTranslate(kchr, i, &tmpState);
+                    //if (chr && chr != kFunctionKeyCharCode) {
+                    //    scancodes.insert(chr, i);
+                    //}
                 }
             }
         }