gboolean parse_keys_abe ( void ) { for ( int iter = 0; iter < NUM_ABE; iter++ ) { char *keystr = g_strdup ( abe[iter].keystr ); char *sp = NULL; g_free ( abe[iter].kb ); abe[iter].kb = NULL; abe[iter].num_bindings = 0; // Iter over bindings. const char *const sep = ","; for ( char *entry = strtok_r ( keystr, sep, &sp ); entry != NULL; entry = strtok_r ( NULL, sep, &sp ) ) { abe[iter].kb = g_realloc ( abe[iter].kb, ( abe[iter].num_bindings + 1 ) * sizeof ( KeyBinding ) ); KeyBinding *kb = &( abe[iter].kb[abe[iter].num_bindings] ); memset ( kb, 0, sizeof ( KeyBinding ) ); if ( !x11_parse_key ( entry, &( kb->modmask ), &( kb->keysym ), &( kb->release ) ) ) { g_free ( keystr ); return FALSE; } abe[iter].num_bindings++; } g_free ( keystr ); } return TRUE; }
int mode_grab_key ( Mode *mode, Display *display ) { g_assert ( mode != NULL ); g_assert ( display != NULL ); if ( mode->keystr != NULL ) { x11_parse_key ( mode->keystr, &( mode->modmask ), &( mode->keysym ) ); if ( mode->keysym != NoSymbol ) { x11_grab_key ( display, mode->modmask, mode->keysym ); return TRUE; } } return FALSE; }
int x11_init(glc_t *glc) { x11.glc = glc; get_real_x11(); if (getenv("GLC_HOTKEY")) { if (x11_parse_key(getenv("GLC_HOTKEY"), &x11.capture_key, &x11.capture_key_mask)) { glc_log(x11.glc, GLC_WARNING, "x11", "invalid hotkey '%s'", getenv("GLC_HOTKEY")); glc_log(x11.glc, GLC_WARNING, "x11", "using default <Shift>F8\n"); x11.capture_key_mask = X11_KEY_SHIFT; x11.capture_key = XK_F8; } } else { x11.capture_key_mask = X11_KEY_SHIFT; x11.capture_key = XK_F8; } if (getenv("GLC_RELOAD_HOTKEY")) { if (x11_parse_key(getenv("GLC_RELOAD_HOTKEY"), &x11.reload_key, &x11.reload_key_mask)) { glc_log(x11.glc, GLC_WARNING, "x11", "invalid reload hotkey '%s'", getenv("GLC_HOTKEY")); glc_log(x11.glc, GLC_WARNING, "x11", "using default <Shift>F9\n"); x11.reload_key_mask = X11_KEY_SHIFT; x11.reload_key = XK_F9; } } else { x11.reload_key_mask = X11_KEY_SHIFT; x11.reload_key = XK_F9; } return 0; }
void parse_keys_abe ( void ) { for ( int iter = 0; iter < NUM_ABE; iter++ ) { char *keystr = g_strdup ( abe[iter].keystr ); char *sp = NULL; g_free ( abe[iter].kb ); abe[iter].num_bindings = 0; // Iter over bindings. for ( char *entry = strtok_r ( keystr, ",", &sp ); entry != NULL; entry = strtok_r ( NULL, ",", &sp ) ) { abe[iter].kb = g_realloc ( abe[iter].kb, ( abe[iter].num_bindings + 1 ) * sizeof ( KeyBinding ) ); KeyBinding *kb = &( abe[iter].kb[abe[iter].num_bindings] ); x11_parse_key ( entry, &( kb->modmask ), &( kb->keysym ) ); abe[iter].num_bindings++; } g_free ( keystr ); } }