]> Dogcows Code - chaz/openbox/blobdiff - openbox/actions.c
action.h not needed here
[chaz/openbox] / openbox / actions.c
index b56d834a4f4efacd557c1d15289bcab985fff85b..67dc3d31ee38c79b26ea780d4e972d341619999b 100644 (file)
 #include "gettext.h"
 #include "grab.h"
 #include "screen.h"
+#include "event.h"
+#include "config.h"
+#include "client.h"
+#include "debug.h"
 
 #include "actions/all.h"
 
@@ -193,6 +197,7 @@ static void actions_setup_data(ObActionsData *data,
                                guint state,
                                gint x,
                                gint y,
+                               gint button,
                                ObFrameContext con,
                                struct _ObClient *client)
 {
@@ -200,6 +205,7 @@ static void actions_setup_data(ObActionsData *data,
     data->state = state;
     data->x = x;
     data->y = y;
+    data->button = button;
     data->context = con;
     data->client = client;
 }
@@ -209,6 +215,7 @@ void actions_run_acts(GSList *acts,
                       guint state,
                       gint x,
                       gint y,
+                      gint button,
                       ObFrameContext con,
                       struct _ObClient *client)
 {
@@ -227,7 +234,7 @@ void actions_run_acts(GSList *acts,
         ObActionsAct *act = it->data;
         gboolean ok = TRUE;
 
-        actions_setup_data(&data, uact, state, x, y, con, client);
+        actions_setup_data(&data, uact, state, x, y, button, con, client);
 
         if (actions_act_is_interactive(act) &&
             (!interactive_act || interactive_act->def != act->def))
@@ -304,3 +311,31 @@ gboolean actions_interactive_input_event(XEvent *e)
     }
     return used;
 }
+
+void actions_client_move(ObActionsData *data, gboolean start)
+{
+    static gulong ignore_start = 0;
+    if (start)
+        ignore_start = event_start_ignore_all_enters();
+    else if (config_focus_follow &&
+             data->context != OB_FRAME_CONTEXT_CLIENT)
+    {
+        if (!data->button && data->client && !config_focus_under_mouse)
+            event_end_ignore_all_enters(ignore_start);
+        else {
+            struct _ObClient *c;
+
+            /* usually this is sorta redundant, but with a press action
+               that moves windows our from under the cursor, the enter
+               event will come as a GrabNotify which is ignored, so this
+               makes a fake enter event
+            */
+            if ((c = client_under_pointer()) && c != data->client) {
+                ob_debug_type(OB_DEBUG_FOCUS,
+                              "Generating fake enter because we did a "
+                              "mouse-event action");
+                event_enter_client(c);
+            }
+        }
+    }
+}
This page took 0.021633 seconds and 4 git commands to generate.