]> Dogcows Code - chaz/openbox/blobdiff - openbox/client.c
when ending actions which can move windows, and we were using the mouse, instead...
[chaz/openbox] / openbox / client.c
index 59af202a6d426a9b28d14eb41da3c36026161ad7..c4b106beaef6b2232041d08bcb2e005e8587bdb3 100644 (file)
@@ -1,3 +1,21 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   client.c for the Openbox window manager
+   Copyright (c) 2003        Ben Jansens
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
 #include "client.h"
 #include "debug.h"
 #include "startupnotify.h"
@@ -1942,8 +1960,8 @@ void client_configure_full(ObClient *self, ObCorner anchor,
                                     (resized && config_redraw_resize))));
 
     /* if the client is enlarging, the resize the client before the frame */
-    if (send_resize_client && (w > oldw || h > oldh))
-       XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh));
+    if (send_resize_client && user && (w > oldw || h > oldh))
+        XResizeWindow(ob_display, self->window, MAX(w, oldw), MAX(h, oldh));
 
     /* move/resize the frame to match the request */
     if (self->frame) {
@@ -1973,12 +1991,12 @@ void client_configure_full(ObClient *self, ObCorner anchor,
             event.xconfigure.override_redirect = FALSE;
             XSendEvent(event.xconfigure.display, event.xconfigure.window,
                        FALSE, StructureNotifyMask, &event);
-       }
+        }
     }
 
     /* if the client is shrinking, then resize the frame before the client */
-    if (send_resize_client && (w <= oldw || h <= oldh))
-       XResizeWindow(ob_display, self->window, w, h);
+    if (send_resize_client && (!user || (w <= oldw || h <= oldh)))
+        XResizeWindow(ob_display, self->window, w, h);
 
     XFlush(ob_display);
 }
@@ -2576,11 +2594,12 @@ gboolean client_focus(ObClient *self)
 
 void client_unfocus(ObClient *self)
 {
-    g_assert(focus_client == self);
+    if (focus_client == self) {
 #ifdef DEBUG_FOCUS
-    ob_debug("client_unfocus for %lx\n", self->window);
+        ob_debug("client_unfocus for %lx\n", self->window);
 #endif
-    focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
+        focus_fallback(OB_FOCUS_FALLBACK_UNFOCUSING);
+    }
 }
 
 void client_activate(ObClient *self, gboolean here)
@@ -2998,3 +3017,24 @@ int client_directional_edge_search(ObClient *c, ObDirection dir)
     }
     return dest;
 }
+
+ObClient* client_under_pointer()
+{
+    int x, y;
+    GList *it;
+    ObClient *ret = NULL;
+
+    if (screen_pointer_pos(&x, &y)) {
+        for (it = stacking_list; it != NULL; it = it->next) {
+            if (WINDOW_IS_CLIENT(it->data)) {
+                ObClient *c = WINDOW_AS_CLIENT(it->data);
+                if (c->desktop == screen_desktop &&
+                    RECT_CONTAINS(c->frame->area, x, y)) {
+                    ret = c;
+                    break;
+                }
+            }
+        }
+    }
+    return ret;
+}
This page took 0.02569 seconds and 4 git commands to generate.