#include "menuframe.h"
#include "keyboard.h"
#include "mouse.h"
+#include "hooks.h"
#include "focus.h"
#include "focus_cycle.h"
#include "moveresize.h"
/* keyboard layout changes for modifier mapping changes. reload the
modifier map, and rebind all the key bindings as appropriate */
ob_debug("Kepboard map changed. Reloading keyboard bindings.");
+ ob_set_state(OB_STATE_RECONFIGURING);
obt_keyboard_reload();
keyboard_rebind();
+ ob_set_state(OB_STATE_RUNNING);
}
else if (e->type == ClientMessage) {
/* This is for _NET_WM_REQUEST_FRAME_EXTENTS messages. They come for
e->type == MotionNotify)
event_handle_user_input(client, e);
+ XFlush(obt_display);
+
+ /* run all the hooks at once */
+ hooks_run_queue();
+
/* if something happens and it's not from an XEvent, then we don't know
the time */
event_curtime = CurrentTime;
move = TRUE;
}
-
if (e->xconfigurerequest.value_mask & CWStackMode) {
ObClient *sibling = NULL;
gulong ignore_start;
} else
ob_debug_type(OB_DEBUG_APP_BUGS,
"_NET_ACTIVE_WINDOW message for window %s is "
- "missing source indication");
+ "missing source indication", client->title);
client_activate(client, TRUE, TRUE, TRUE,
(e->xclient.data.l[0] == 0 ||
e->xclient.data.l[0] == 2));
else if (keycode == ob_keycode(OB_KEY_LEFT)) {
/* Left goes to the parent menu */
- menu_frame_select(frame, NULL, TRUE);
+ if (frame->parent)
+ menu_frame_select(frame, NULL, TRUE);
ret = TRUE;
}
if (!client || !frame_iconify_animating(client->frame))
mouse_event(client, e);
} else
- keyboard_event((focus_cycle_target ? focus_cycle_target :
- (client ? client : focus_client)), e);
+ keyboard_event(event_target_client(client), e);
}
}
+ObClient* event_target_client(ObClient *client)
+{
+ return (focus_cycle_target ? focus_cycle_target :
+ (client ? client : focus_client));
+}
+
static void focus_delay_dest(gpointer data)
{
g_free(data);
XSync(obt_display, FALSE);
}
-gboolean event_time_after(Time t1, Time t2)
+gboolean event_time_after(guint32 t1, guint32 t2)
{
g_assert(t1 != CurrentTime);
g_assert(t2 != CurrentTime);
- http://tronche.com/gui/x/xlib/input/pointer-grabbing.html
*/
- /* TIME_HALF is half of the number space of a Time type variable */
-#define TIME_HALF (Time)(1 << (sizeof(Time)*8-1))
+ /* TIME_HALF is not half of the number space of a Time type variable.
+ * Rather, it is half the number space of a timestamp value, which is
+ * always 32 bits. */
+#define TIME_HALF (guint32)(1 << 31)
if (t2 >= TIME_HALF)
/* t2 is in the second half so t1 might wrap around and be smaller than