mirror of
https://github.com/swaywm/sway.git
synced 2026-05-03 06:46:26 -04:00
Send frame done to floating views
Also centers them on the screen when initially floated In the future we'll need a more sophisticated solution than that
This commit is contained in:
parent
409cce7d7b
commit
76938c3fdd
5 changed files with 21 additions and 8 deletions
|
|
@ -34,7 +34,6 @@ enum sway_container_layout {
|
|||
L_VERT,
|
||||
L_STACKED,
|
||||
L_TABBED,
|
||||
L_FLOATING,
|
||||
};
|
||||
|
||||
enum sway_container_border {
|
||||
|
|
|
|||
|
|
@ -3,9 +3,11 @@
|
|||
#include "sway/commands.h"
|
||||
#include "sway/input/seat.h"
|
||||
#include "sway/ipc-server.h"
|
||||
#include "sway/output.h"
|
||||
#include "sway/tree/arrange.h"
|
||||
#include "sway/tree/container.h"
|
||||
#include "sway/tree/layout.h"
|
||||
#include "sway/tree/view.h"
|
||||
#include "list.h"
|
||||
|
||||
struct cmd_results *cmd_floating(int argc, char **argv) {
|
||||
|
|
@ -38,6 +40,17 @@ struct cmd_results *cmd_floating(int argc, char **argv) {
|
|||
container, C_WORKSPACE);
|
||||
container_remove_child(container);
|
||||
container_add_floating(workspace, container);
|
||||
|
||||
struct sway_output *output = workspace->parent->sway_output;
|
||||
output_damage_whole_container(output, container);
|
||||
// Reset to sane size and position
|
||||
container->width = 640;
|
||||
container->height = 480;
|
||||
container->x = workspace->width / 2 - container->width / 2;
|
||||
container->y = workspace->height / 2 - container->height / 2;
|
||||
view_autoconfigure(container->sway_view);
|
||||
output_damage_whole_container(output, container);
|
||||
|
||||
seat_set_focus(config->handler_context.seat, container);
|
||||
arrange_workspace(workspace);
|
||||
} else if (container->is_floating && !wants_floating) {
|
||||
|
|
|
|||
|
|
@ -22,8 +22,6 @@ static const char *layout_to_str(enum sway_container_layout layout) {
|
|||
return "L_STACKED";
|
||||
case L_TABBED:
|
||||
return "L_TABBED";
|
||||
case L_FLOATING:
|
||||
return "L_FLOATING";
|
||||
case L_NONE:
|
||||
default:
|
||||
return "L_NONE";
|
||||
|
|
|
|||
|
|
@ -457,9 +457,6 @@ static void render_container(struct sway_output *output,
|
|||
case L_TABBED:
|
||||
render_container_tabbed(output, con);
|
||||
break;
|
||||
case L_FLOATING:
|
||||
// TODO
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -524,6 +521,8 @@ static void render_output(struct sway_output *output, struct timespec *when,
|
|||
|
||||
render_container(output, workspace);
|
||||
|
||||
// TODO: iterate over all floating views of all active workspaces and
|
||||
// render them in layout space
|
||||
for (int i = 0; i < workspace->sway_workspace->floating->length; ++i) {
|
||||
struct sway_container *c =
|
||||
workspace->sway_workspace->floating->items[0];
|
||||
|
|
@ -607,6 +606,12 @@ static void send_frame_done(struct sway_output *output, struct timespec *when) {
|
|||
struct sway_container *workspace = output_get_active_workspace(output);
|
||||
send_frame_done_container(&data, workspace);
|
||||
|
||||
for (int i = 0; i < workspace->sway_workspace->floating->length; ++i) {
|
||||
struct sway_container *c =
|
||||
workspace->sway_workspace->floating->items[0];
|
||||
send_frame_done_container_iterator(c, &data);
|
||||
}
|
||||
|
||||
send_frame_done_unmanaged(&data,
|
||||
&root_container.sway_root->xwayland_unmanaged);
|
||||
|
||||
|
|
|
|||
|
|
@ -21,8 +21,6 @@ static const char *ipc_json_layout_description(enum sway_container_layout l) {
|
|||
return "tabbed";
|
||||
case L_STACKED:
|
||||
return "stacked";
|
||||
case L_FLOATING:
|
||||
return "floating";
|
||||
case L_NONE:
|
||||
break;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue