static ACTION process_key_event(PLAYER *player, XKeyEvent *evnt) { KeySym ks; ACTION act = ACT_NONE; int player_type = player && player->type; int shift_state; ks = XLookupKeysym(evnt, 0); /* printf ("KeySym = %lx\n", ks); */ if (ks >= XK_a && ks <= XK_z) ks -= (XK_a - XK_A); else if (ks >= XK_KP_Home && ks <= XK_KP_Begin) ks -= (XK_KP_Home - XK_Home); if (ks >= XK_KP_0 && ks <= XK_KP_9) ks -= (XK_KP_0 - XK_0); else if (ks == 0) ks = XK_Begin; if (HelpMode || game.level == SummaryLevel) shift_state = 1; else shift_state = evnt->state & (ShiftMask | Mod1Mask); #ifdef USE_VOLUME_CONTROL if (shift_state || (player_type > 0 && game.level < Levels)) act = get_key_action(ks, VolumeKeys, VolumeKeysCount); if (act == ACT_NONE && player_type == 0) #else if (player_type == 0) #endif { if (shift_state) act = get_key_action(ks, ShiftKeys, ShiftKeysCount); else act = get_key_action(ks, PlayerKeys, PlayerKeysCount); } if (act == ACT_NONE) { act = get_key_action(ks, CommonKeys, CommonKeysCount); if(shift_state && act == ACT_ROTATEFWD) act = ACT_ROTATEBACK; } if ((act == ACT_TAB || act == ACT_DROP) && shift_state) act = ACT_BACKTAB; return act; }
static ACTION process_key_pressed_edit(PLAYER *player, int key) { // if (isprint(key)) return (ACTION) (0x100 | key); if (key >= ' ' && key <= 0x100) return (ACTION) (0x100 | key); return get_key_action(key, EditKeys, EditKeysCount); }
static ACTION process_key_event_edit(PLAYER *player, XKeyEvent *xkey) { KeySym ks; char buffer[2]; int c; c = XLookupString(xkey, buffer, 2, &ks, 0); if (c == 1) { c = buffer[0]; // if (!isprint(c)) if (!iscntrl(c)) return (ACTION) (0x100 | c); } return get_key_action(ks, EditKeys, EditKeysCount); }
static ACTION process_key_pressed(PLAYER *player, int key) { int player_type = player && player->type; int shift_state; ACTION act = ACT_NONE; if (key >= 'a' && key <= 'z') key -= ('a' - 'A'); if (HelpMode || game.level == SummaryLevel) shift_state = 1; else shift_state = get_kbd_shift() & 9; #ifdef USE_VOLUME_CONTROL if (shift_state || (player_type > 0 && game.level < Levels)) act = get_key_action(key, VolumeKeys, VolumeKeysCount); if (act == ACT_NONE && player_type == 0) #else if (player_type == 0) #endif { if (shift_state) act = get_key_action(key, ShiftKeys, ShiftKeysCount); else act = get_key_action(key, PlayerKeys, PlayerKeysCount); } if (act == ACT_NONE) { act = get_key_action(key, CommonKeys, CommonKeysCount); if(shift_state && act == ACT_ROTATEFWD) act = ACT_ROTATEBACK; } if ((act == ACT_TAB || act == ACT_DROP) && shift_state) act = ACT_BACKTAB; return act; }
void get_key_pres(gpointer data,XEvent *event) { AConvert *aconv = (AConvert *)data; WInfo *info = win_find(aconv->keyboard->win,aconv); if(info) { int action=0; int slen; if(!info) { return ; } action=get_key_action (event); slen = aconv->keyboard->gstr->len;//g_list_length(aconv->keyboard->ks); switch (action) { case KLB_NO_ACTION: free_keysym_to_list(aconv); return ; case KLB_CLEAR: free_keysym_to_list(aconv); return ; case KLB_ENTER: free_keysym_to_list(aconv); return ; case KLB_FLUSH: add_char_to_win(aconv,event,info); break; case KLB_SWITCH_MODE: if (KLB_INSERT_MODE == info->mode) info->mode = KLB_REPLACE_MODE; else info->mode = KLB_INSERT_MODE; return ; case KLB_MOVE_LEFT: if ((slen >0) && (aconv->keyboard->iterator <= slen)) aconv->keyboard->iterator++; else { free_keysym_to_list(aconv); } return ; case KLB_MOVE_RIGHT: if (aconv->keyboard->iterator <= slen) aconv->keyboard->iterator--; else { free_keysym_to_list(aconv); } return; case KLB_DEL_SYM_LEFT: if (aconv->keyboard->iterator <= 0) { if(slen>0) { dell_keysym_to_list(aconv,slen); } } else if (aconv->keyboard->iterator >= 1) { if(slen>0) { dell_keysym_to_list(aconv,slen-aconv->keyboard->iterator); } } else { free_keysym_to_list(aconv); } break; case KLB_DEL_SYM_RIGHT: if (aconv->keyboard->iterator <= 0) { free_keysym_to_list(aconv); } else if (aconv->keyboard->iterator >= 1) { dell_keysym_to_list(aconv,(slen-aconv->keyboard->iterator)+1); aconv->keyboard->iterator--; } break; case KLB_ADD_SYM: add_char_to_win(aconv,event,info); break; default: break; } } }