feat(linux): res. conf mcompile-dk rename more functions

This commit is contained in:
Sabine 2024-02-13 12:55:18 +01:00
parent 80e044e106
commit cdeeec9e63
6 changed files with 67 additions and 174 deletions

View file

@ -3,9 +3,9 @@
v_dw_1D createLine(std::wstring first, std::wstring second, KMX_DWORD number, std::wstring nameresult) {
v_dw_1D line;
line.push_back(convertNamesToIntegerValue(first));
line.push_back(convertNamesToIntegerValue(second));
//line.push_back(convertNamesToIntegerValue(nameresult));
line.push_back(convertNamesToDWORDValue(first));
line.push_back(convertNamesToDWORDValue(second));
//line.push_back(convertNamesToDWORDValue(nameresult));
line.push_back(number);
return line;
}
@ -414,8 +414,12 @@ void create_DKTable(v_dw_2D & dk_ComposeTable) {
line = createLine(L"dead_circumflex", L"space", 0x005E, L"CIRCUMFLEX_ACCENT");
dk_ComposeTable.push_back(line); line.clear();
line = createLine(L"dead_acute", L"space", 0x0027, L"APOSTROPHE");
dk_ComposeTable.push_back(line); line.clear();
/*line = createLine(L"dead_acute", L"space", 0x00B4, L"ACUTE_ACCENT");
dk_ComposeTable.push_back(line); line.clear();*/
line = createLine(L"dead_grave", L"space", 0x0060, L"GRAVE_ACCENT");
dk_ComposeTable.push_back(line); line.clear();
line = createLine(L"dead_breve", L"space", 0x02D8, L"BREVE");

View file

@ -1,16 +1,17 @@
#include "keymap.h"
#include <xkbcommon/xkbcommon.h>
// unmodified, shift, RALT, shift+RALT
int map_VKShiftState_to_Lin(int VKShiftState) {
int map_VKShiftState_to_LinModifier(int VKShiftState) {
if (VKShiftState == 0 ) return 0; /* 0000 0000 */
else if (VKShiftState == 16) return 1; /* 0001 0000 */
else if (VKShiftState == 9 ) return 2; /* 0000 1001 */
else if (VKShiftState == 25) return 3; /* 0001 1001 */
else return VKShiftState;
else return VKShiftState;
}
KMX_DWORD convertNamesToIntegerValue(std::wstring tok_wstr) {
KMX_DWORD convertNamesToDWORDValue(std::wstring tok_wstr) {
// more on https://manpages.ubuntu.com/manpages/jammy/man3/keysyms.3tk.html
std::map<std::wstring, KMX_DWORD > first;
@ -93,8 +94,8 @@ int createOneVectorFromBothKeyboards(v_dw_3D &All_Vector,GdkKeymap *keymap) {
}
// add contents of other keyboard to All_Vector
if( append_other_ToVector(All_Vector,keymap)) {
wprintf(L"ERROR: can't append Other ToVector \n");
if( append_underlying_ToVector(All_Vector,keymap)) {
wprintf(L"ERROR: can't append underlying ToVector \n");
return 2;
}
return 0;
@ -271,7 +272,7 @@ int split_US_To_3D_Vector(v_dw_3D &all_US,v_str_1D completeList) {
for ( int i = 1; i< (int) tokens.size();i++) {
// replace a name with a single character ( a -> a ; equal -> = )
tokens_int = convertNamesToIntegerValue( wstring_from_string(tokens[i]));
tokens_int = convertNamesToDWORDValue( wstring_from_string(tokens[i]));
tokens_dw.push_back(tokens_int);
}
@ -304,16 +305,16 @@ v_dw_2D create_empty_2D_Vector( int dim_rows,int dim_ss) {
return Vector_2D;
}
int append_other_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) {
int append_underlying_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) {
// create a 2D vector all filled with " " and push to 3D-Vector
v_dw_2D Other_Vector2D = create_empty_2D_Vector(All_Vector[0].size(),All_Vector[0][0].size());
v_dw_2D underlying_Vector2D = create_empty_2D_Vector(All_Vector[0].size(),All_Vector[0][0].size());
if (Other_Vector2D.size() == 0) {
if (underlying_Vector2D.size() == 0) {
wprintf(L"ERROR: can't create empty 2D-Vector\n");
return 1;
}
All_Vector.push_back(Other_Vector2D);
All_Vector.push_back(underlying_Vector2D);
if (All_Vector.size() < 2) {
wprintf(L"ERROR: creation of 3D-Vector failed\n");
@ -322,10 +323,10 @@ int append_other_ToVector(v_dw_3D &All_Vector,GdkKeymap * keymap) {
for(int i =0; i< (int) All_Vector[1].size();i++) {
// get key name US stored in [0][i][0] and copy to name in "other"-block[1][i][0]
// get key name US stored in [0][i][0] and copy to name in "underlying"-block[1][i][0]
All_Vector[1][i][0] = All_Vector[0][i][0];
// get Keyvals of this key and copy to unshifted/shifted in "other"-block[1][i][1] / block[1][i][2]
// get Keyvals of this key and copy to unshifted/shifted in "underlying"-block[1][i][1] / block[1][i][2]
All_Vector[1][i][0+1] = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,All_Vector[0][i][0],0); //shift state: unshifted:0
All_Vector[1][i][1+1] = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,All_Vector[0][i][0],1); //shift state: shifted:1
}
@ -362,8 +363,7 @@ bool IsKeymanUsedChar(int KV) {
}
std::wstring convert_DeadkeyValues_ToChar(int in) {
std::wstring convert_DeadkeyValues_ToWstr(int in) {
KMX_DWORD lname;
@ -381,7 +381,7 @@ std::wstring convert_DeadkeyValues_ToChar(int in) {
return std::wstring(1, in);
}
lname = convertNamesToIntegerValue( wstring_from_string(long_name)); // 65106 => "dead_circumflex " => 94 => "^"
lname = convertNamesToDWORDValue( wstring_from_string(long_name)); // 65106 => "dead_circumflex " => 94 => "^"
if (lname != returnIfCharInvalid) {
return std::wstring(1, lname );
@ -389,8 +389,7 @@ std::wstring convert_DeadkeyValues_ToChar(int in) {
else
return L"\0";
}
//_S2 REview and change??
//_S2 REview and change??
//_S2 ToDo REview and change??
std::u16string convert_DeadkeyValues_To_U16str(int in) {
KMX_DWORD lname;
@ -409,7 +408,7 @@ std::u16string convert_DeadkeyValues_To_U16str(int in) {
return CodePointToString_16(in-0x1000000);
// it's a descriptive name like "dead_circumflex"
lname = convertNamesToIntegerValue( wstring_from_string(long_name)); // "dead_circumflex" => 94 => "^"
lname = convertNamesToDWORDValue( wstring_from_string(long_name)); // "dead_circumflex" => 94 => "^"
if (lname != returnIfCharInvalid) {
return std::u16string(1, lname );
@ -420,6 +419,7 @@ std::u16string convert_DeadkeyValues_To_U16str(int in) {
return u"\0";
}
// base function to get keyvals
int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps) {
GdkModifierType consumed;
@ -507,7 +507,6 @@ int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss
return (int) *keyvals;
}
// _S2 TODO
KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky) {
GdkKeymapKey *maps;
guint *keyvals;
@ -523,44 +522,8 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap
if (!(shift_state_pos <= count))
return 0;
// _S2 94 as variable/const
if (!(keycode <= 94))
return 0;
// _S2 TODO take caps to this function
// _S2 TODO take caps to this function
// here I get all kvals: normal char , my Deadkeys, allothr DK
KMX_DWORD All_Keyvals = KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), 0);
if(( (All_Keyvals >= deadkey_min) && (All_Keyvals <= deadkey_max)))
deadkey = All_Keyvals;
dky = (PKMX_WCHAR) (convert_DeadkeyValues_To_U16str((int) deadkey)).c_str();
out = KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0);
g_free(keyvals);
g_free(maps);
return out;
}
// _S2 TODO
KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky) {
GdkKeymapKey *maps;
guint *keyvals;
gint count;
KMX_DWORD out;
KMX_DWORD deadkey=0;
if (!gdk_keymap_get_entries_for_keycode(keymap, keycode, &maps, &keyvals, &count))
return 0;
//if(!gdk_wayland_keymap_get_entries_for_keycode(keymap, keycode, &maps, &keyvals, &count))
// return 0; https://codebrowser.dev/gtk/gtk/gdk/wayland/gdkkeys-wayland.c.html
if (!(shift_state_pos <= count))
return 0;
// _S2 94 as variable/const
if (!(keycode <= 94))
if (!(keycode <= keycode_max))
return 0;
// _S2 TODO take caps to this function
@ -568,23 +531,8 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(GdkKeymap *ke
KMX_DWORD All_Keyvals = KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), 0);
if(( (All_Keyvals >= deadkey_min) && (All_Keyvals <= deadkey_max)))
deadkey = All_Keyvals;
// _S2 check if naming is correct: does get_char... return a char or a string or a DWORD;...?
// _S2 TODO check if naming is correct: does get_char... return a char or a string or a DWORD;...?
dky = (PKMX_WCHAR) (convert_DeadkeyValues_To_U16str((int) deadkey)).c_str();
/*
// _S2 ToDo
KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps);
// _S2 AHA output for dk4-12 at the top after dk... from here
if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys
return 0xFFFF;
else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range
return 0xFFFE;
else // usable char
return keyvals_dw;
}
*/
g_free(keyvals);
g_free(maps);
@ -596,15 +544,6 @@ KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(Gdk
return 0xFFFE;
else // usable char
return All_Keyvals;
//out = KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0);
}
KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos) {
@ -619,10 +558,10 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap
if (!(shift_state_pos <= count))
return 0;
if (!(keycode <= 94))
if (!(keycode <= keycode_max))
return 0;
out = KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0);
out = KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(keymap, keycode, (ShiftState) shift_state_pos, 0);
g_free(keyvals);
g_free(maps);
@ -630,54 +569,34 @@ KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap
return out;
}
// _S2 ToDo
KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps);
// _S2 same as KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK ??
KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_underlying, PKMX_WCHAR DeadKey) {
// _S2 AHA output for dk4-12 at the top after dk... from here
if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys
if((keyvals_dw >= deadkey_min) && (keyvals_dw <= deadkey_max)) // deadkeys
return 0xFFFF;
else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range
return 0xFFFE;
else // usable char
return keyvals_dw;
}
// _S2 remove term _other and use underlying instead
KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey) {
//takes keymap, shift, scanCode
//fills ref deadkey
//returns character(KMX_DWORD)
PKMX_WCHAR dd;
KMX_DWORD keyvals_dw = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK_New(keymap, SC_OTHER, map_VKShiftState_to_Lin(VKShiftState), dd);
PKMX_WCHAR dky;
KMX_DWORD keyvals_dw = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap, SC_underlying, map_VKShiftState_to_LinModifier(VKShiftState), dky);
// _S2 rename dd
if((keyvals_dw >= deadkey_min) && (keyvals_dw >= deadkey_max)) {
*DeadKey = *dd;
if(keyvals_dw >= deadkey_min) {
*DeadKey = *dky;
return 0xFFFF;
}
else if((keyvals_dw > deadkey_max) || ((keyvals_dw < deadkey_min) && ( keyvals_dw > 0xFF))) // out of range
return 0xFFFE;
else // usable char
return keyvals_dw;
}
KMX_DWORD KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
// _S2 why dio I need this function after all??
KMX_DWORD KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
return (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps);
}
std::wstring KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
std::wstring KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps){
// _S2 QUESTION skip ss 2+3 remove??
int keyvals_int= KMX_get_keyvals_From_Keycode(keymap, keycode, ss, caps);
return convert_DeadkeyValues_ToChar(keyvals_int);
return convert_DeadkeyValues_ToWstr(keyvals_int);
}
// _S2 ToDo // _use gdk_keymap_translate_keyboard_state of other function
@ -728,7 +647,7 @@ KMX_DWORD KMX_get_KeyCodeUnderlying_From_VKUS( KMX_DWORD VK_US) {
KMX_DWORD KMX_get_KeyCodeUnderlying_From_KeycodeUS_GDK(GdkKeymap *keymap, v_dw_3D &All_Vector,KMX_DWORD KC_US, ShiftState ss, int caps) {
KMX_DWORD Character;
std::wstring ws = KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, KC_US, ss, caps);
std::wstring ws = KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, KC_US, ss, caps);
Character = *ws.c_str();
//Find underlying SC of character

View file

@ -65,14 +65,15 @@ const KMX_DWORD KMX_VKMap[] = {
};
static KMX_DWORD returnIfCharInvalid = 0;
static KMX_DWORD keycode_max =94;
static KMX_DWORD deadkey_min = 0xfe50;
static KMX_DWORD deadkey_max = 0xfe93;
int map_VKShiftState_to_Lin(int VKShiftState);
int map_VKShiftState_to_LinModifier(int VKShiftState);
// takes a std::wstring (=contents of line symbols-file ) and returns the (int) value of the character
KMX_DWORD convertNamesToIntegerValue(std::wstring tok_wstr);
KMX_DWORD convertNamesToDWORDValue(std::wstring tok_wstr);
// create a Vector with all entries of both keymaps+ keymap
int createOneVectorFromBothKeyboards(v_dw_3D &All_Vector,GdkKeymap *keymap);
@ -93,8 +94,8 @@ int split_US_To_3D_Vector(v_dw_3D &all_US, v_str_1D completeList);
// create an empty 2D vector containing "--" in all fields
v_dw_2D create_empty_2D_Vector(int dim_rows, int dim_shifts);
// append characters using GDK to 3D-Vector (Data for Other Language on [1][ ][ ] )
int append_other_ToVector(v_dw_3D &All_Vector, GdkKeymap *keymap);
// append characters using GDK to 3D-Vector (Data for underlying Language on [1][ ][ ] )
int append_underlying_ToVector(v_dw_3D &All_Vector, GdkKeymap *keymap);
// initialize GDK
bool InitializeGDK(GdkKeymap **keymap,int argc, gchar *argv[]);
@ -503,34 +504,27 @@ const UINT ScanCodeToUSVirtualKey[128] = {
bool IsKeymanUsedChar(int KV);
// take deadkey-value (e.g.65106) and return wstring (e.g. '^' )
std::wstring convert_DeadkeyValues_ToChar(int in);
std::wstring convert_DeadkeyValues_ToWstr(int in);
std::u16string convert_DeadkeyValues_To_U16str(int in);
// uses gdk_keymap_translate_keyboard_state to get keyval
int KMX_get_keyvals_From_Keycode(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps);
KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos, PKMX_WCHAR &dky);
KMX_DWORD KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(GdkKeymap *keymap, guint keycode, int shift_state_pos);
// returns KeySyms for a given key (for unshifted: finds the Keysym according to Shiftstate e.g. a;A or 1;! )
std::wstring KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint VK, ShiftState ss, int caps);
KMX_DWORD KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps);
std::wstring KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(GdkKeymap *keymap, guint VK, ShiftState ss, int caps);
KMX_DWORD KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps);
// _S2 TODO returns char or FFFF / FFFE ????
KMX_DWORD KMX_get_FFFF_Underlying_according_to_keycode_and_Shiftstate_GDK_dw(GdkKeymap *keymap, guint keycode, ShiftState ss, int caps);
KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey);
KMX_DWORD KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_underlying, PKMX_WCHAR DeadKey);
// return the VirtualKey of the Other Keyboard for given Scancode using GDK
// return the VirtualKey of the underlying Keyboard for given Scancode using GDK
KMX_DWORD KMX_get_VKUS_From_KeyCodeUnderlying_GDK( GdkKeymap *keymap, KMX_DWORD scanCode);
// return the Keycode of the Other Keyboard for given VK_US
// return the Keycode of the underlying Keyboard for given VK_US
KMX_DWORD KMX_get_KeyCodeUnderlying_From_VKUS( KMX_DWORD VK_US);
// return the Keycode of the Other Keyboard for given VK_US using GDK
// return the Keycode of the underlying Keyboard for given VK_US using GDK
KMX_DWORD KMX_get_KeyCodeUnderlying_From_KeycodeUS_GDK(GdkKeymap *keymap, v_dw_3D &All_Vector,KMX_DWORD KC_US, ShiftState ss, int caps);
// converts codePoint to wstring

View file

@ -75,11 +75,11 @@ int KMX_ToUnicodeEx(guint keycode, const BYTE *lpKeyState, PKMX_WCHAR pwszBuff,
if (!(shift_state_pos <= count))
return 0;
if (!(keycode <= 94))
if (!(keycode <= keycode_max))
return 0;
std::wstring character= KMX_get_CharsUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, keycode, ShiftState(shift_state_pos), caps);
pwszBuff[0]= * (PKMX_WCHAR) u16string_from_wstring(character).c_str();
std::wstring str= KMX_get_CharUnderlying_according_to_keycode_and_Shiftstate_GDK(keymap, keycode, ShiftState(shift_state_pos), caps);
pwszBuff[0]= * (PKMX_WCHAR) u16string_from_wstring(str).c_str();
KMX_DWORD keyvals_dw= (KMX_DWORD) KMX_get_keyvals_From_Keycode(keymap, keycode, ShiftState(shift_state_pos), caps);
@ -561,7 +561,7 @@ bool KMX_ImportRules(LPKMX_KEYBOARD kp,v_dw_3D &All_Vector, GdkKeymap **keymap,
continue;
}
sbBuffer[rc] = 0;
//rgKey[iKey]->KMX_SetShiftState(ss, KeyVal_Other, false, (caps==0));
//rgKey[iKey]->KMX_SetShiftState(ss, sbBuffer, false, (caps==0));
rgKey[iKey]->KMX_SetShiftState(ss, sbBuffer, false, (caps)); //_S2 INFO
}
}

View file

@ -226,7 +226,7 @@ void KMX_ReportUnconvertedKeyboardRules(LPKMX_KEYBOARD kbd) {
}
void KMX_TranslateDeadkeyKey(LPKMX_KEY key, KMX_WCHAR deadkey, KMX_WORD vk, UINT shift, KMX_WORD ch) {
// _S2 INFO this produces a different output due to different layouts for Lin<-> win ( foe the same language!!)
// _S2 INFO this produces a different output due to different layouts for Lin<-> win ( for the same language!!)
if((key->ShiftFlags == 0 || key->ShiftFlags & VIRTUALCHARKEY) && key->Key == ch) {
@ -394,7 +394,7 @@ void KMX_ConvertDeadkey(LPKMX_KEYBOARD kbd, KMX_WORD vk, UINT shift, KMX_WCHAR d
pd_S2=pdk;
//pdd_S2=pdk;
// Look up the ch
UINT vkUnderlying = KMX_get_VKUS_From_VKUnderlying_VEC(All_Vector, *pdk);
UINT vkUnderlying = KMX_get_CharUS_From_VKUnderlying_VEC(All_Vector, *pdk);
KMX_TranslateDeadkeyKeyboard(kbd, dkid, vkUnderlying, *(pdk+1), *(pdk+2));
pdk+=3;
@ -425,7 +425,7 @@ KMX_BOOL KMX_SetKeyboardToPositional(LPKMX_KEYBOARD kbd) {
KMX_BOOL KMX_DoConvert(LPKMX_KEYBOARD kbd, KMX_BOOL bDeadkeyConversion, gint argc, gchar *argv[]) {
KMX_WCHAR DeadKey;
KMX_WCHAR DeadKey=0;
if(!KMX_SetKeyboardToPositional(kbd)) return FALSE;
@ -460,16 +460,8 @@ KMX_BOOL KMX_DoConvert(LPKMX_KEYBOARD kbd, KMX_BOOL bDeadkeyConversion, gint arg
// win goes via VK, Lin goes via SC
KMX_WCHAR DeadKey1=0;
DeadKey=0;
UINT scUnderlying = KMX_get_SCUnderlying_From_VKUS(KMX_VKMap[i]);
KMX_WCHAR ch = KMX_get_CharUnderlying_From_SCUnderlying_GDK(keymap, VKShiftState[j], scUnderlying, &DeadKey);
KMX_WCHAR ch1 = KMX_get_CharUnderlying_From_SCUnderlying_GDK_NEW(keymap, VKShiftState[j], scUnderlying, &DeadKey1);
if( ch!=ch1)
wprintf(L"IS DIFFERENT!!!! %i <--> %i\n", ch,ch1);
if( DeadKey!=DeadKey1)
wprintf(L"DDDDKKKK IS DIFFERENT!!!! %i <--> %i\n", DeadKey,DeadKey1);
//wprintf(L"--- VK_%d -> SC_ [%c] dk=%d ( ss %i) \n", VKMap[i], ch == 0 ? 32 : ch, DeadKey, VKShiftState[j]);
@ -509,38 +501,25 @@ void KMX_LogError(const KMX_WCHART* m1,int m2, LPKMX_KEY key) {
}
*/
// takes VK of US keyboard and returns SC of OTHER keyboard
// _S2 why are those not in keymap.cpp/h
// takes VK of US keyboard and returns SC of underlying keyboard
UINT KMX_get_SCUnderlying_From_VKUS(KMX_DWORD VirtualKeyUS) {
UINT SC_US = 8 + USVirtualKeyToScanCode[VirtualKeyUS];
UINT SC_OTHER = SC_US; // not neccessary but to understand what we do
return SC_OTHER;
UINT SC_underlying = SC_US; // not neccessary but to understand what we do
return SC_underlying;
}
KMX_WCHAR KMX_get_VKUS_From_VKUnderlying_VEC(v_dw_3D All_Vector, KMX_DWORD VK_OTHER) {
KMX_WCHAR KMX_get_CharUS_From_VKUnderlying_VEC(v_dw_3D All_Vector, KMX_DWORD VK_underlying) {
KMX_DWORD VK_US;
for( int i=0; i< (int)All_Vector[0].size()-1 ;i++) {
for( int j=1; j< (int)All_Vector[0][0].size();j++) {
if ( ( All_Vector[0][i][j] == VK_OTHER ) ) {
if ( ( All_Vector[0][i][j] == VK_underlying ) ) {
VK_US = All_Vector[1][i][j];;
return VK_US;
}
}
}
return VK_OTHER;
}
// takes SC of underlying keyboard and returns character of underlying keyboard with shiftstate VKShiftState[j] or deadkey
KMX_WCHAR KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey) {
PKMX_WCHAR dky;
int VKShiftState_lin = map_VKShiftState_to_Lin(VKShiftState);
KMX_DWORD KeyvalOther = KMX_get_KeyvalsUnderlying_From_KeyCodeUnderlying_GDK(keymap,SC_OTHER, VKShiftState_lin, dky);
// _S2 < or >
if ((KeyvalOther >= deadkey_min) && (KeyvalOther >= deadkey_max)){
*DeadKey = *dky;
return 0xFFFF;
}
return (KMX_WCHAR) KeyvalOther;
return VK_underlying;
}
int KMX_GetDeadkeys(v_dw_2D & dk_Table, KMX_WORD DeadKey, KMX_WORD *OutputPairs, GdkKeymap* keymap) {

View file

@ -42,10 +42,7 @@ PKMX_WCHAR KMX_incxstr(PKMX_WCHAR p);
UINT KMX_get_SCUnderlying_From_VKUS(KMX_DWORD VirtualKeyUS);
// _S2 why is this function not in keymap.cpp/h
KMX_WCHAR KMX_get_CharUnderlying_From_SCUnderlying_GDK(GdkKeymap *keymap, UINT VKShiftState, UINT SC_OTHER, PKMX_WCHAR DeadKey);
KMX_WCHAR KMX_get_VKUS_From_VKUnderlying_VEC(v_dw_3D All_Vector,KMX_DWORD SC_US);
KMX_WCHAR KMX_get_CharUS_From_VKUnderlying_VEC(v_dw_3D All_Vector,KMX_DWORD SC_US);
int KMX_GetDeadkeys(v_dw_2D & dk_Table, KMX_WORD DeadKey, KMX_WORD *OutputPairs, GdkKeymap* keymap);