Fix clipboard crash from un-masked scratch on windows

This commit is contained in:
Allen Webster 2020-05-02 10:30:19 -07:00
parent 5b8d22a766
commit b9b44f481a
2 changed files with 10 additions and 10 deletions

View File

@ -1004,7 +1004,7 @@ linux_x11_init(int argc, char** argv, Plat_Settings* settings) {
if(!linuxvars.xkb) { if(!linuxvars.xkb) {
system_error_box("Error getting XKB keyboard map."); system_error_box("Error getting XKB keyboard map.");
} }
if(XkbGetNames(linuxvars.dpy, XkbKeyNamesMask, linuxvars.xkb) != Success) { if(XkbGetNames(linuxvars.dpy, XkbKeyNamesMask, linuxvars.xkb) != Success) {
system_error_box("Error getting XKB key names."); system_error_box("Error getting XKB key names.");
} }
@ -1058,9 +1058,9 @@ linux_keycode_init(Display* dpy){
for(int i = XkbMinLegalKeyCode; i <= XkbMaxLegalKeyCode; ++i) { for(int i = XkbMinLegalKeyCode; i <= XkbMaxLegalKeyCode; ++i) {
const char* name = linuxvars.xkb->names->keys[i].name; const char* name = linuxvars.xkb->names->keys[i].name;
// alphanumeric keys // alphanumeric keys
if(name[0] == 'A' && name[1] >= 'B' && name[1] <= 'E') { if(name[0] == 'A' && name[1] >= 'B' && name[1] <= 'E') {
int row = (nrows - 1) - (name[1] - 'B'); int row = (nrows - 1) - (name[1] - 'B');
int col = (name[2] - '0') * 10 + (name[3] - '0') - 1; int col = (name[2] - '0') * 10 + (name[3] - '0') - 1;
@ -1071,7 +1071,7 @@ linux_keycode_init(Display* dpy){
} }
// numpad // numpad
else if(name[0] == 'K' && name[1] == 'P' && name[2] >= '0' && name[2] <= '9' && !name[3]) { else if(name[0] == 'K' && name[1] == 'P' && name[2] >= '0' && name[2] <= '9' && !name[3]) {
keycode_lookup_table[i] = KeyCode_NumPad0 + name[2] - '0'; keycode_lookup_table[i] = KeyCode_NumPad0 + name[2] - '0';
} }
@ -1141,10 +1141,10 @@ linux_keycode_init(Display* dpy){
const int table_size = p - sym_table; const int table_size = p - sym_table;
Assert(table_size < ArrayCount(sym_table)); Assert(table_size < ArrayCount(sym_table));
Key_Code next_extra = KeyCode_Ex1; Key_Code next_extra = KeyCode_Ex1;
const Key_Code max_extra = KeyCode_Ex29; const Key_Code max_extra = KeyCode_Ex29;
for(int i = XkbMinLegalKeyCode; i <= XkbMaxLegalKeyCode; ++i) { for(int i = XkbMinLegalKeyCode; i <= XkbMaxLegalKeyCode; ++i) {
KeySym sym = NoSymbol; KeySym sym = NoSymbol;
@ -1152,7 +1152,7 @@ linux_keycode_init(Display* dpy){
if(!XkbTranslateKeyCode(linuxvars.xkb, i, XkbBuildCoreState(0, linuxvars.xkb_group), NULL, &sym)) { if(!XkbTranslateKeyCode(linuxvars.xkb, i, XkbBuildCoreState(0, linuxvars.xkb_group), NULL, &sym)) {
continue; continue;
} }
int j; int j;
for(j = 0; j < table_size; ++j) { for(j = 0; j < table_size; ++j) {
if(sym_table[j].sym == sym) { if(sym_table[j].sym == sym) {
@ -1160,7 +1160,7 @@ linux_keycode_init(Display* dpy){
break; break;
} }
} }
// something unknown bound, put it in extra // something unknown bound, put it in extra
if(j == table_size && sym != NoSymbol && next_extra <= max_extra && keycode_lookup_table[i] == 0) { if(j == table_size && sym != NoSymbol && next_extra <= max_extra && keycode_lookup_table[i] == 0) {
keycode_lookup_table[i] = next_extra++; keycode_lookup_table[i] = next_extra++;
@ -1306,7 +1306,7 @@ system_post_clipboard(String_Const_u8 str, i32 index){
// TODO(inso): index? // TODO(inso): index?
//LINUX_FN_DEBUG("%.*s", string_expand(str)); //LINUX_FN_DEBUG("%.*s", string_expand(str));
linalloc_clear(&linuxvars.clipboard_arena); linalloc_clear(&linuxvars.clipboard_arena);
linuxvars.clipboard_contents = push_u8_stringf(&linuxvars.clipboard_arena, "%.*s", str.size, str.str); linuxvars.clipboard_contents = push_u8_stringf(&linuxvars.clipboard_arena, "%.*s", string_expand(str));
XSetSelectionOwner(linuxvars.dpy, linuxvars.atom_CLIPBOARD, linuxvars.win, CurrentTime); XSetSelectionOwner(linuxvars.dpy, linuxvars.atom_CLIPBOARD, linuxvars.win, CurrentTime);
} }

View File

@ -355,7 +355,7 @@ system_get_keyboard_modifiers_sig(){
internal String_Const_u8 internal String_Const_u8
win32_read_clipboard_contents(Thread_Context *tctx, Arena *arena){ win32_read_clipboard_contents(Thread_Context *tctx, Arena *arena){
Scratch_Block scratch(tctx); Scratch_Block scratch(tctx, arena);
String_Const_u8 result = {}; String_Const_u8 result = {};