diff options
-rw-r--r-- | sway/handlers.c | 14 | ||||
-rw-r--r-- | sway/layout.c | 45 |
2 files changed, 50 insertions, 9 deletions
diff --git a/sway/handlers.c b/sway/handlers.c index fc473640..54326dd0 100644 --- a/sway/handlers.c +++ b/sway/handlers.c | |||
@@ -349,13 +349,13 @@ static void handle_view_geometry_request(wlc_handle handle, const struct wlc_geo | |||
349 | view->desired_width = geometry->size.w; | 349 | view->desired_width = geometry->size.w; |
350 | view->desired_height = geometry->size.h; | 350 | view->desired_height = geometry->size.h; |
351 | 351 | ||
352 | /* if (view->is_floating) { */ | 352 | if (view->is_floating) { |
353 | /* view->width = view->desired_width; */ | 353 | view->width = view->desired_width; |
354 | /* view->height = view->desired_height; */ | 354 | view->height = view->desired_height; |
355 | /* view->x = geometry->origin.x; */ | 355 | view->x = geometry->origin.x; |
356 | /* view->y = geometry->origin.y; */ | 356 | view->y = geometry->origin.y; |
357 | /* /1* arrange_windows(view->parent, -1, -1); *1/ */ | 357 | arrange_windows(view->parent, -1, -1); |
358 | /* } */ | 358 | } |
359 | } | 359 | } |
360 | } | 360 | } |
361 | 361 | ||
diff --git a/sway/layout.c b/sway/layout.c index a282f36e..3f271caf 100644 --- a/sway/layout.c +++ b/sway/layout.c | |||
@@ -374,6 +374,46 @@ void move_workspace_to(swayc_t* workspace, swayc_t* destination) { | |||
374 | update_visibility(src_op); | 374 | update_visibility(src_op); |
375 | } | 375 | } |
376 | 376 | ||
377 | static void update_border_geometry_floating(swayc_t *c, struct wlc_geometry *geometry) { | ||
378 | struct wlc_geometry g = *geometry; | ||
379 | c->actual_geometry = g; | ||
380 | |||
381 | switch (c->border_type) { | ||
382 | case B_NONE: | ||
383 | break; | ||
384 | case B_PIXEL: | ||
385 | g.origin.x -= c->border_thickness; | ||
386 | g.origin.y -= c->border_thickness; | ||
387 | g.size.w += (c->border_thickness * 2); | ||
388 | g.size.h += (c->border_thickness * 2); | ||
389 | break; | ||
390 | case B_NORMAL: | ||
391 | g.origin.x -= c->border_thickness; | ||
392 | uint32_t title_bar_height = config->font_height + 4; // borders + padding | ||
393 | g.origin.y -= title_bar_height; | ||
394 | g.size.w += (c->border_thickness * 2); | ||
395 | g.size.h += (c->border_thickness + title_bar_height); | ||
396 | |||
397 | struct wlc_geometry title_bar = { | ||
398 | .origin = { | ||
399 | .x = g.origin.x, | ||
400 | .y = g.origin.y | ||
401 | }, | ||
402 | .size = { | ||
403 | .w = g.size.w, | ||
404 | .h = title_bar_height | ||
405 | } | ||
406 | }; | ||
407 | c->title_bar_geometry = title_bar; | ||
408 | break; | ||
409 | } | ||
410 | |||
411 | c->border_geometry = g; | ||
412 | *geometry = c->actual_geometry; | ||
413 | |||
414 | update_view_border(c); | ||
415 | } | ||
416 | |||
377 | void update_geometry(swayc_t *container) { | 417 | void update_geometry(swayc_t *container) { |
378 | if (container->type != C_VIEW) { | 418 | if (container->type != C_VIEW) { |
379 | return; | 419 | return; |
@@ -431,8 +471,9 @@ void update_geometry(swayc_t *container) { | |||
431 | if (swayc_is_fullscreen(container)) { | 471 | if (swayc_is_fullscreen(container)) { |
432 | container->border_geometry = (const struct wlc_geometry){0}; | 472 | container->border_geometry = (const struct wlc_geometry){0}; |
433 | container->title_bar_geometry = (const struct wlc_geometry){0}; | 473 | container->title_bar_geometry = (const struct wlc_geometry){0}; |
434 | } else { | 474 | } else if (container->is_floating) { // allocate border for floating window |
435 | // make room for border | 475 | update_border_geometry_floating(container, &geometry); |
476 | } else if (!container->is_floating) { // allocate border for titled window | ||
436 | container->border_geometry = geometry; | 477 | container->border_geometry = geometry; |
437 | 478 | ||
438 | int border_top = container->border_thickness; | 479 | int border_top = container->border_thickness; |