|
|
@ -24,7 +24,9 @@ |
|
|
|
#include <ev.h> |
|
|
|
#include <sys/mman.h> |
|
|
|
#include <xkbcommon/xkbcommon.h> |
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
#include <xkbcommon/xkbcommon-compose.h> |
|
|
|
#endif |
|
|
|
#include <xkbcommon/xkbcommon-x11.h> |
|
|
|
#include <cairo.h> |
|
|
|
#include <cairo/cairo-xcb.h> |
|
|
@ -88,8 +90,10 @@ bool show_failed_attempts = false; |
|
|
|
static struct xkb_state *xkb_state; |
|
|
|
static struct xkb_context *xkb_context; |
|
|
|
static struct xkb_keymap *xkb_keymap; |
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
static struct xkb_compose_table *xkb_compose_table; |
|
|
|
static struct xkb_compose_state *xkb_compose_state; |
|
|
|
#endif |
|
|
|
static uint8_t xkb_base_event; |
|
|
|
static uint8_t xkb_base_error; |
|
|
|
|
|
|
@ -145,6 +149,7 @@ static bool load_keymap(void) { |
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
/*
|
|
|
|
* Loads the XKB compose table from the given locale. |
|
|
|
* |
|
|
@ -168,6 +173,7 @@ static bool load_compose_table(const char *locale) { |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
#endif /* XKBCOMPOSE */ |
|
|
|
|
|
|
|
/*
|
|
|
|
* Clears the memory which stored the password to be a bit safer against |
|
|
@ -353,7 +359,9 @@ static void handle_key_press(xcb_key_press_event_t *event) { |
|
|
|
char buffer[128]; |
|
|
|
int n; |
|
|
|
bool ctrl; |
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
bool composed = false; |
|
|
|
#endif |
|
|
|
|
|
|
|
ksym = xkb_state_key_get_one_sym(xkb_state, event->detail); |
|
|
|
ctrl = xkb_state_mod_name_is_active(xkb_state, XKB_MOD_NAME_CTRL, XKB_STATE_MODS_DEPRESSED); |
|
|
@ -361,6 +369,7 @@ static void handle_key_press(xcb_key_press_event_t *event) { |
|
|
|
/* The buffer will be null-terminated, so n >= 2 for 1 actual character. */ |
|
|
|
memset(buffer, '\0', sizeof(buffer)); |
|
|
|
|
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
if (xkb_compose_state && xkb_compose_state_feed(xkb_compose_state, ksym) == XKB_COMPOSE_FEED_ACCEPTED) { |
|
|
|
switch (xkb_compose_state_get_status(xkb_compose_state)) { |
|
|
|
case XKB_COMPOSE_NOTHING: |
|
|
@ -383,6 +392,9 @@ static void handle_key_press(xcb_key_press_event_t *event) { |
|
|
|
if (!composed) { |
|
|
|
n = xkb_keysym_to_utf8(ksym, buffer, sizeof(buffer)); |
|
|
|
} |
|
|
|
#else |
|
|
|
n = xkb_keysym_to_utf8(ksym, buffer, sizeof(buffer)); |
|
|
|
#endif |
|
|
|
|
|
|
|
switch (ksym) { |
|
|
|
case XKB_KEY_Return: |
|
|
@ -1060,6 +1072,7 @@ int main(int argc, char *argv[]) { |
|
|
|
if (!load_keymap()) |
|
|
|
errx(EXIT_FAILURE, "Could not load keymap"); |
|
|
|
|
|
|
|
#if XKBCOMPOSE == 1 |
|
|
|
const char *locale = getenv("LC_ALL"); |
|
|
|
if (!locale) |
|
|
|
locale = getenv("LC_CTYPE"); |
|
|
@ -1072,6 +1085,7 @@ int main(int argc, char *argv[]) { |
|
|
|
} |
|
|
|
|
|
|
|
load_compose_table(locale); |
|
|
|
#endif |
|
|
|
|
|
|
|
xinerama_init(); |
|
|
|
xinerama_query_screens(); |
|
|
|