Lock some stuff in event.c too.
authorMikael Magnusson <mikachu@comhem.se>
Thu, 28 Feb 2008 01:23:25 +0000 (02:23 +0100)
committerMikael Magnusson <mikachu@gmail.com>
Sat, 11 Oct 2014 00:17:19 +0000 (02:17 +0200)
openbox/event.c

index 243f207817723de69646955489f9a59bad0b309f..72f47fc639c213c89ec24bc84cb7d707365f040f 100644 (file)
@@ -1163,6 +1163,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
     }
     case ConfigureRequest:
     {
+        if (client->locked)
+            break;
+
         /* dont compress these unless you're going to watch for property
            notifies in between (these can change what the configure would
            do to the window).
@@ -1401,7 +1404,8 @@ static void event_handle_client(ObClient *client, XEvent *e)
         msgtype = e->xclient.message_type;
         if (msgtype == OBT_PROP_ATOM(WM_CHANGE_STATE)) {
             if (!more_client_message_event(client->window, msgtype))
-                client_set_wm_state(client, e->xclient.data.l[0]);
+                if (!client->locked)
+                    client_set_wm_state(client, e->xclient.data.l[0]);
         } else if (msgtype == OBT_PROP_ATOM(NET_WM_DESKTOP)) {
             if (!more_client_message_event(client->window, msgtype) &&
                 ((unsigned)e->xclient.data.l[0] < screen_num_desktops ||
@@ -1421,16 +1425,19 @@ static void event_handle_client(ObClient *client, XEvent *e)
                      e->xclient.data.l[1], e->xclient.data.l[2],
                      client->window);
 
-            /* ignore enter events caused by these like ob actions do */
-            if (!config_focus_under_mouse)
-                ignore_start = event_start_ignore_all_enters();
-            client_set_state(client, e->xclient.data.l[0],
-                             e->xclient.data.l[1], e->xclient.data.l[2]);
-            if (!config_focus_under_mouse)
-                event_end_ignore_all_enters(ignore_start);
+            if (!client->locked) {
+                /* ignore enter events caused by these like ob actions do */
+                if (!config_focus_under_mouse)
+                    ignore_start = event_start_ignore_all_enters();
+                client_set_state(client, e->xclient.data.l[0],
+                                 e->xclient.data.l[1], e->xclient.data.l[2]);
+                if (!config_focus_under_mouse)
+                    event_end_ignore_all_enters(ignore_start);
+            }
         } else if (msgtype == OBT_PROP_ATOM(NET_CLOSE_WINDOW)) {
             ob_debug("net_close_window for 0x%lx", client->window);
-            client_close(client);
+            if (!client->locked)
+                client_close(client);
         } else if (msgtype == OBT_PROP_ATOM(NET_ACTIVE_WINDOW)) {
             ob_debug("net_active_window for 0x%lx source=%s",
                      client->window,
@@ -1504,6 +1511,9 @@ static void event_handle_client(ObClient *client, XEvent *e)
                 if (moveresize_client)
                     moveresize_end(TRUE);
         } else if (msgtype == OBT_PROP_ATOM(NET_MOVERESIZE_WINDOW)) {
+            if (client->locked)
+                break;
+
             gint ograv, x, y, w, h;
 
             ograv = client->gravity;