Fix negative relative coordinate placement
[dana/openbox.git] / openbox / place.c
index 91f87dc..1dc16c4 100644 (file)
@@ -296,24 +296,27 @@ static gboolean place_per_app_setting_position(ObClient *client, Rect *screen,
     ob_debug("placing by per-app settings");
 
     if (settings->position.x.center)
-        *x = screen->x + screen->width / 2 - client->area.width / 2;
-    else if (settings->position.x.opposite)
-        *x = screen->x + screen->width - frame_size.width -
-            settings->position.x.pos;
-    else
-        *x = screen->x + settings->position.x.pos;
-    if (settings->position.x.denom)
-        *x = (*x * screen->width) / settings->position.x.denom;
+        *x = screen->width / 2 - client->area.width / 2;
+    else {
+        *x = settings->position.x.pos;
+        if (settings->position.x.denom)
+            *x = (*x * screen->width) / settings->position.x.denom;
+        if (settings->position.x.opposite)
+            *x = screen->width - frame_size.width - *x;
+    }
 
     if (settings->position.y.center)
-        *y = screen->y + screen->height / 2 - client->area.height / 2;
-    else if (settings->position.y.opposite)
-        *y = screen->y + screen->height - frame_size.height -
-            settings->position.y.pos;
-    else
-        *y = screen->y + settings->position.y.pos;
-    if (settings->position.y.denom)
-        *y = (*y * screen->height) / settings->position.y.denom;
+        *y = screen->height / 2 - client->area.height / 2;
+    else {
+        *y = settings->position.y.pos;
+        if (settings->position.y.denom)
+            *y = (*y * screen->height) / settings->position.y.denom;
+        if (settings->position.y.opposite)
+            *y = screen->height - frame_size.height - *y;
+    }
+
+    *x += screen->x;
+    *y += screen->y;
 
     return TRUE;
 }