diff --git a/clients/window.c b/clients/window.c index 1529dac1..b19c579d 100644 --- a/clients/window.c +++ b/clients/window.c @@ -238,6 +238,7 @@ struct output { struct wl_output *output; struct rectangle allocation; struct wl_list link; + int transform; display_output_handler_t destroy_handler; void *user_data; @@ -3454,6 +3455,7 @@ display_handle_geometry(void *data, output->allocation.x = x; output->allocation.y = y; + output->transform = transform; } static void @@ -3546,9 +3548,22 @@ output_set_destroy_handler(struct output *output, } void -output_get_allocation(struct output *output, struct rectangle *allocation) +output_get_allocation(struct output *output, struct rectangle *base) { - *allocation = output->allocation; + struct rectangle allocation = output->allocation; + + switch (output->transform) { + case WL_OUTPUT_TRANSFORM_90: + case WL_OUTPUT_TRANSFORM_270: + case WL_OUTPUT_TRANSFORM_FLIPPED_90: + case WL_OUTPUT_TRANSFORM_FLIPPED_270: + /* Swap width and height */ + allocation.width = output->allocation.height; + allocation.height = output->allocation.width; + break; + } + + *base = allocation; } struct wl_output *