system-controller: fall back on area width/height if we have no request.
authorJan Ekström <jan.ekstrom@intel.com>
Fri, 21 Nov 2014 13:06:56 +0000 (15:06 +0200)
committerKrisztian Litkey <krisztian.litkey@intel.com>
Thu, 8 Jan 2015 16:37:20 +0000 (18:37 +0200)
Remove old nonzero checks that do not seem to be valid, special case
zero width/height to area width/height if available.

Change-Id: I087f0d4ea02c04b145ef7974af51edf7089cd128

src/plugins/system-controller/wayland/glm-window-manager.c

index 3b88e5e..f190b86 100644 (file)
@@ -1022,20 +1022,38 @@ static void surface_destination_rectangle_callback(void *data,
          */
         if ((sf->requested_x <= MAX_COORDINATE && x != sf->requested_x ) ||
             (sf->requested_y <= MAX_COORDINATE && y != sf->requested_y ) ||
-            (sf->requested_width  > 0 && width  != sf->requested_width ) ||
-            (sf->requested_height > 0 && height != sf->requested_height)  )
+            (width != sf->requested_width) || (height != sf->requested_height))
         {
-            mrp_debug("calling ivi_controller_surface_set_destination_"
-                      "rectangle(ivi_controller_surface=%p, x=%d, y=%d, "
-                      "width=%d height=%d)", sf->ctrl_surface,
-                      sf->requested_x, sf->requested_y,
-                      sf->requested_width, sf->requested_height);
+            /*
+             * If our original requested width/height are zero,
+             * override them with the values from the surface's
+             * window's area, if available.
+             */
+            if (!sf->requested_width || !sf->requested_height) {
+                if (sf->win && sf->win->area) {
+                    mrp_debug("overriding requested parameters: width %d -> %d, height %d -> %d",
+                              sf->requested_width, sf->win->area->width,
+                              sf->requested_height, sf->win->area->height);
+
+                    sf->requested_width  = sf->win->area->width;
+                    sf->requested_height = sf->win->area->height;
+                }
+            }
 
-            ivi_controller_surface_set_destination_rectangle(sf->ctrl_surface,
-                                    sf->requested_x, sf->requested_y,
-                                    sf->requested_width, sf->requested_height);
+            /* Only rescale if width and height are nonzero */
+            if (sf->requested_width && sf->requested_height) {
+                mrp_debug("calling ivi_controller_surface_set_destination_"
+                          "rectangle(ivi_controller_surface=%p, x=%d, y=%d, "
+                          "width=%d height=%d)", sf->ctrl_surface,
+                          sf->requested_x, sf->requested_y,
+                          sf->requested_width, sf->requested_height);
 
-            commit_needed = true;
+                ivi_controller_surface_set_destination_rectangle(sf->ctrl_surface,
+                                        sf->requested_x, sf->requested_y,
+                                        sf->requested_width, sf->requested_height);
+
+                commit_needed = true;
+            }
         }
 
         memset(&u, 0, sizeof(u));