Begin handling X keyboard events
This commit is contained in:
parent
52b3c9faa9
commit
30a38a1487
@ -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"
|
||||
|
@ -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
10
src/gui/jtk/Jtk_keys.h
Normal 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
|
Loading…
x
Reference in New Issue
Block a user