Begin handling X keyboard events

This commit is contained in:
Josh Holtrop 2017-09-30 21:23:22 -04:00
parent 52b3c9faa9
commit 30a38a1487
3 changed files with 57 additions and 2 deletions

View File

@ -2,6 +2,7 @@
#define JTK_H
#include "Jtk_event.h"
#include "Jtk_keys.h"
#include "Jtk_time.h"
#include "Jtk_timer.h"
#include "Jtk_window.h"

View File

@ -11,6 +11,48 @@
/** Do not wait longer than 100ms */
#define MAX_WAIT_TIME 100000u
/**
* Process an X keyboard event.
*
* @param x_event
* Pointer to the X event.
* @param event
* Pointer to the Jtk event.
*/
static bool ProcessXKeyEvent(XEvent * x_event, Jtk_Event * event)
{
char buffer;
KeySym keysym;
if (XLookupString(&x_event->xkey, &buffer, 1, &keysym, nullptr) > 0)
{
uint8_t mods = 0u;
if (x_event->xkey.state & ShiftMask)
{
mods |= JTK_KEY_MODS_SHIFT;
}
if (x_event->xkey.state & LockMask)
{
mods |= JTK_KEY_MODS_LOCK;
}
if (x_event->xkey.state & ControlMask)
{
mods |= JTK_KEY_MODS_CTRL;
}
event->key.key = buffer;
event->key.mods = mods;
}
else
{
switch (keysym)
{
case XK_F1: event->key.key = JTK_KEY_F1; break;
default:
return false;
}
}
return true;
}
/**
* Process an X event.
*
@ -29,10 +71,12 @@ static bool ProcessXEvent(XEvent * x_event, Jtk_Event * event)
switch (x_event->type)
{
case KeyPress:
break;
event->type = JTK_EVENT_KEY_PRESS;
return ProcessXKeyEvent(x_event, event);
case KeyRelease:
break;
event->type = JTK_EVENT_KEY_RELEASE;
return ProcessXKeyEvent(x_event, event);
case ButtonPress:
break;

10
src/gui/jtk/Jtk_keys.h Normal file
View File

@ -0,0 +1,10 @@
#ifndef JTK_KEYS_H
#define JTK_KEYS_H
#define JTK_KEY_MODS_SHIFT 0x1u
#define JTK_KEY_MODS_LOCK 0x2u
#define JTK_KEY_MODS_CTRL 0x4u
#define JTK_KEY_F1 0xFF000001u
#endif