]> Dogcows Code - chaz/openbox/blobdiff - openbox/moveresize.c
define DEBUG, NDEBUG, and G_DISABLE_ASSERTS
[chaz/openbox] / openbox / moveresize.c
index 8df3a0806c22e78107ab5ad83992c7613e8a2ada..9f0f41ba7e51c546aea225c22b97f93fab07761b 100644 (file)
@@ -1,3 +1,21 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   moveresize.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 "grab.h"
 #include "framerender.h"
 #include "screen.h"
@@ -28,7 +46,7 @@ static ObCorner lockcorner;
 
 static ObPopup *popup = NULL;
 
-static void client_dest(gpointer client)
+static void client_dest(ObClient *client, gpointer data)
 {
     if (moveresize_client == client)
         moveresize_end(TRUE);    
@@ -39,13 +57,16 @@ void moveresize_startup(gboolean reconfig)
     popup = popup_new(FALSE);
 
     if (!reconfig)
-        client_add_destructor(client_dest);
+        client_add_destructor(client_dest, NULL);
 }
 
 void moveresize_shutdown(gboolean reconfig)
 {
-    if (!reconfig)
+    if (!reconfig) {
+        if (moveresize_in_progress)
+            moveresize_end(FALSE);
         client_remove_destructor(client_dest);
+    }
 
     popup_free(popup);
     popup = NULL;
@@ -69,9 +90,13 @@ void moveresize_start(ObClient *c, int x, int y, guint b, guint32 cnr)
 {
     ObCursor cur;
 
-    g_assert(!moveresize_in_progress);
+    moving = (cnr == prop_atoms.net_wm_moveresize_move ||
+              cnr == prop_atoms.net_wm_moveresize_move_keyboard);
 
-    if (!c->frame->visible)
+    if (moveresize_in_progress || !c->frame->visible ||
+        !(moving ?
+          (c->functions & OB_CLIENT_FUNC_MOVE) :
+          (c->functions & OB_CLIENT_FUNC_RESIZE)))
         return;
 
     moveresize_client = c;
@@ -97,15 +122,12 @@ void moveresize_start(ObClient *c, int x, int y, guint b, guint32 cnr)
                      c->area.width / 2, c->area.height / 2);
     */
 
-    if (corner == prop_atoms.net_wm_moveresize_move ||
-        corner == prop_atoms.net_wm_moveresize_move_keyboard) {
+    if (moving) {
         cur_x = start_cx;
         cur_y = start_cy;
-        moving = TRUE;
     } else {
         cur_x = start_cw;
         cur_y = start_ch;
-        moving = FALSE;
     }
 
     moveresize_in_progress = TRUE;
This page took 0.022206 seconds and 4 git commands to generate.