Blob Blame Raw
#ifndef INPUT_H
#define INPUT_H


#include "common.h"

#include <X11/Xlib.h>
#include <X11/keysym.h>
#include <X11/keysymdef.h>


#define IN_MAXKEYS 256

enum {
  IM_SHIFT,
  IM_CAPSLOCK,
  IM_SHIFTLOCK,
  IM_NUMLOCK,
  IM_GROUP,
  IM_SCRLOCK,
  IM_COUNT };

enum {
  IM_SHIFT_BIT     = 1 << IM_SHIFT,
  IM_CAPSLOCK_BIT  = 1 << IM_CAPSLOCK,
  IM_SHIFTLOCK_BIT = 1 << IM_SHIFTLOCK,
  IM_NUMLOCK_BIT   = 1 << IM_NUMLOCK,
  IM_GROUP_BIT     = 1 << IM_GROUP,
  IM_SCRLOCK_BIT   = 1 << IM_SCRLOCK };


typedef struct Input {
  App *app;
  Display *dpy;
  int key0, key1;
  unsigned int keys[IN_MAXKEYS][1 << IM_COUNT];
  unsigned int masks[IM_COUNT];
  
  int mapKey;
  int mapDown;
  int updated;
  unsigned int modifiers;
} Input;


void inputPrepareKeysyms(unsigned int *ks0, unsigned int *ks1, int *isLetter, int *isKeypad);
int inputChooseKeysym(unsigned int modifiers, unsigned int ks0, unsigned int ks1, int isLetter, int isKeypad);

int inputInit(Input *in, App *app);
void inputDeinit(Input *in);
void inputUpdateLayout(Input *in);
void inputUpdateModifiers(Input *in);
int inputKeycode(Input *in, unsigned int keySym);
void inputEvent(Input *in, int keycode, int press);



#endif