+inline void client_action_start(union ActionData *data)
+{
+ if (config_focus_follow)
+ if (data->any.context != OB_FRAME_CONTEXT_CLIENT && !data->any.button)
+ grab_pointer(TRUE, OB_CURSOR_NONE);
+}
+
+inline void client_action_end(union ActionData *data)
+{
+ if (config_focus_follow)
+ if (data->any.context != OB_FRAME_CONTEXT_CLIENT) {
+ if (!data->any.button) {
+ grab_pointer(FALSE, OB_CURSOR_NONE);
+ } else {
+ ObClient *c;
+
+ /* usually this is sorta redundant, but with a press action
+ the enter event will come as a GrabNotify which is
+ ignored, so this will handle that case */
+ if ((c = client_under_pointer()))
+ event_enter_client(c);
+ }
+ }
+}
+
+typedef struct
+{
+ const gchar *name;