[nautilus/gnome-3-6] desktop-canvas: set margins according to the primary workarea



commit d13a585a69fb686cf32dca313a0ae012d8d00806
Author: Cosimo Cecchi <cosimoc gnome org>
Date:   Thu Oct 4 16:16:25 2012 -0400

    desktop-canvas: set margins according to the primary workarea
    
    This ensures desktop icons are pinned to the primary monitor, instead of
    moving around when plugging in a new display.
    There's also a slight change in behavior introduced by this patch - that
    is for multihead configurations where the first monitor in visible order
    is not the primary one, it won't be possible to move desktop icons to
    monitors to the left, or to the top, of the primary monitor - in other
    words, desktop icons layout starts from the primary monitor and expands
    rightwards/downwards.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=420624

 src/nautilus-desktop-canvas-view.c |   26 +++++++++++++-------------
 1 files changed, 13 insertions(+), 13 deletions(-)
---
diff --git a/src/nautilus-desktop-canvas-view.c b/src/nautilus-desktop-canvas-view.c
index e0c9ca5..7162055 100644
--- a/src/nautilus-desktop-canvas-view.c
+++ b/src/nautilus-desktop-canvas-view.c
@@ -102,27 +102,27 @@ canvas_container_set_workarea (NautilusCanvasContainer *canvas_container,
 			     int                    n_items)
 {
 	int left, right, top, bottom;
-	int screen_width, screen_height;
 	int i;
+	GdkRectangle geometry;
 
 	left = right = top = bottom = 0;
-
-	screen_width  = gdk_screen_get_width (screen);
-	screen_height = gdk_screen_get_height (screen);
+	gdk_screen_get_monitor_geometry (screen, gdk_screen_get_primary_monitor (screen), &geometry);
 
 	for (i = 0; i < n_items; i += 4) {
-		int x      = workareas [i];
-		int y      = workareas [i + 1];
-		int width  = workareas [i + 2];
-		int height = workareas [i + 3];
+		GdkRectangle workarea;
+
+		workarea.x = workareas[i];
+		workarea.y = workareas[i + 1];
+		workarea.width = workareas[i + 2];
+		workarea.height = workareas[i + 3];
 
-		if ((x + width) > screen_width || (y + height) > screen_height)
+		if (!gdk_rectangle_intersect (&geometry, &workarea, &workarea))
 			continue;
 
-		left   = MAX (left, x);
-		right  = MAX (right, screen_width - width - x);
-		top    = MAX (top, y);
-		bottom = MAX (bottom, screen_height - height - y);
+		left   = MAX (left, workarea.x);
+		right  = MAX (right, (geometry.x + geometry.width) - (workarea.x + workarea.width));
+		top    = MAX (top, workarea.y);
+		bottom = MAX (bottom, (geometry.y + geometry.height) - (workarea.y + workarea.height));
 	}
 
 	nautilus_canvas_container_set_margins (canvas_container,



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]