compositor: Calculate resizing direction
authorBenjamin Franzke <benjaminfranzke@googlemail.com>
Tue, 1 Feb 2011 15:30:31 +0000 (16:30 +0100)
committerKristian Høgsberg <krh@bitplanet.net>
Wed, 2 Feb 2011 01:19:39 +0000 (20:19 -0500)
This applies to resizes initiated by the compositor.

compositor/compositor.c

index 9d7c330..365344a 100644 (file)
@@ -772,6 +772,7 @@ notify_button(struct wl_input_device *device,
                (struct wlsc_compositor *) device->compositor;
 
        surface = (struct wlsc_surface *) device->pointer_focus;
+       uint32_t edges = 0;
 
        if (state && surface && device->grab == NULL) {
                wlsc_surface_raise(surface);
@@ -794,11 +795,22 @@ notify_button(struct wl_input_device *device,
                           (struct wl_shell *) &compositor->shell,
                           &surface->surface, device, time);
        else if (state && surface && button == BTN_MIDDLE &&
-                (wd->modifier_state & MODIFIER_SUPER))
+                (wd->modifier_state & MODIFIER_SUPER)) {
+
+               if ((device->grab_x - surface->x) < surface->width / 2)
+                       edges |= WL_SHELL_RESIZE_LEFT;
+               else
+                       edges |= WL_SHELL_RESIZE_RIGHT;
+
+               if ((device->grab_y - surface->y) < surface->height / 2)
+                       edges |= WL_SHELL_RESIZE_TOP;
+               else
+                       edges |= WL_SHELL_RESIZE_BOTTOM;
+
                shell_resize(NULL,
                             (struct wl_shell *) &compositor->shell,
-                            &surface->surface, device, time,
-                            WL_SHELL_RESIZE_BOTTOM_RIGHT);
+                            &surface->surface, device, time, edges);
+       }
 
        if (device->grab)
                device->grab->interface->button(device->grab, time,