X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=openbox%2Fkeyboard.c;h=8f4424ea97d43c8c233b69886def08c1f9e5396f;hb=2ea60e77c085a724b2ec28273e24e12ece0e84f3;hp=92945ab0a0d04dbebd6b95af4022ef0f8d9a2c94;hpb=43d62990e407f409f76f60a405c529f9b15d33f6;p=chaz%2Fopenbox diff --git a/openbox/keyboard.c b/openbox/keyboard.c index 92945ab0..8f4424ea 100644 --- a/openbox/keyboard.c +++ b/openbox/keyboard.c @@ -40,6 +40,7 @@ KeyBindingTree *keyboard_firstnode = NULL; static ObPopup *popup = NULL; static KeyBindingTree *curpos; +static guint chain_timer = 0; static void grab_keys(gboolean grab) { @@ -68,6 +69,11 @@ static gboolean chain_timeout(gpointer data) return FALSE; /* don't repeat */ } +static void chain_done(gpointer data) +{ + chain_timer = 0; +} + static void set_curpos(KeyBindingTree *newpos) { if (curpos == newpos) return; @@ -79,7 +85,7 @@ static void set_curpos(KeyBindingTree *newpos) if (curpos != NULL) { gchar *text = NULL; GList *it; - Rect *a; + const Rect *a; for (it = curpos->keylist; it; it = g_list_next(it)) { gchar *oldtext = text; @@ -93,9 +99,8 @@ static void set_curpos(KeyBindingTree *newpos) a = screen_physical_area_primary(FALSE); popup_position(popup, NorthWestGravity, a->x + 10, a->y + 10); /* 1 second delay for the popup to show */ - popup_delay_show(popup, G_USEC_PER_SEC, text); + popup_delay_show(popup, 1000, text); g_free(text); - g_free(a); } else { popup_hide(popup); } @@ -227,7 +232,7 @@ gboolean keyboard_event(ObClient *client, const XEvent *e) if (e->xkey.keycode == config_keyboard_reset_keycode && mods == config_keyboard_reset_state) { - obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); + if (chain_timer) g_source_remove(chain_timer); keyboard_reset_chains(-1); return TRUE; } @@ -244,11 +249,12 @@ gboolean keyboard_event(ObClient *client, const XEvent *e) menu_frame_hide_all(); if (p->first_child != NULL) { /* part of a chain */ - obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); + if (chain_timer) g_source_remove(chain_timer); /* 3 second timeout for chains */ - obt_main_loop_timeout_add(ob_main_loop, 3 * G_USEC_PER_SEC, - chain_timeout, NULL, - g_direct_equal, NULL); + chain_timer = + g_timeout_add_full(G_PRIORITY_DEFAULT, + 3000, chain_timeout, NULL, + chain_done); set_curpos(p); } else if (p->chroot) /* an empty chroot */ set_curpos(p); @@ -307,7 +313,8 @@ void keyboard_rebind(void) old = keyboard_firstnode; keyboard_firstnode = NULL; - node_rebind(old); + if (old) + node_rebind(old); tree_destroy(old); set_curpos(NULL); @@ -323,7 +330,7 @@ void keyboard_startup(gboolean reconfig) void keyboard_shutdown(gboolean reconfig) { - obt_main_loop_timeout_remove(ob_main_loop, chain_timeout); + if (chain_timer) g_source_remove(chain_timer); keyboard_unbind_all(); set_curpos(NULL);