Slightly better multihead support

This commit is contained in:
Drew DeVault 2015-08-10 23:54:23 -04:00
parent dd115cece3
commit 96d7ff1e19
4 changed files with 20 additions and 4 deletions

View file

@ -27,6 +27,15 @@ void handle_output_resolution_change(wlc_handle output, const struct wlc_size *f
arrange_windows(&root_container, -1, -1); arrange_windows(&root_container, -1, -1);
} }
void handle_output_focused(wlc_handle output, bool focus) {
swayc_t *c = get_swayc_for_handle(output, &root_container);
if (!c) return;
if (focus) {
unfocus_all(&root_container);
focus_view(c);
}
}
bool handle_view_created(wlc_handle view) { bool handle_view_created(wlc_handle view) {
add_view(view); add_view(view);
return true; return true;

View file

@ -7,6 +7,7 @@
bool handle_output_created(wlc_handle output); bool handle_output_created(wlc_handle output);
void handle_output_destroyed(wlc_handle output); void handle_output_destroyed(wlc_handle output);
void handle_output_resolution_change(wlc_handle output, const struct wlc_size *from, const struct wlc_size *to); void handle_output_resolution_change(wlc_handle output, const struct wlc_size *from, const struct wlc_size *to);
void handle_output_focused(wlc_handle output, bool focus);
bool handle_view_created(wlc_handle view); bool handle_view_created(wlc_handle view);
void handle_view_destroyed(wlc_handle view); void handle_view_destroyed(wlc_handle view);

View file

@ -44,10 +44,16 @@ void arrange_windows(swayc_t *container, int width, int height) {
sway_log(L_DEBUG, "Arranging output at %d", x); sway_log(L_DEBUG, "Arranging output at %d", x);
child->x = x; child->x = x;
child->y = y; child->y = y;
arrange_windows(child, child->width, child->height); arrange_windows(child, -1, -1);
x += child->width; x += child->width;
} }
return; return;
case C_OUTPUT:
container->width = width;
container->height = height;
x -= container->x;
y -= container->y;
break;
case C_VIEW: case C_VIEW:
{ {
struct wlc_geometry geometry = { struct wlc_geometry geometry = {
@ -342,9 +348,8 @@ void add_output(wlc_handle output) {
add_child(container, workspace); add_child(container, workspace);
sway_log(L_DEBUG, "Added workspace %s for output %d", workspace->name, output); sway_log(L_DEBUG, "Added workspace %s for output %d", workspace->name, output);
workspace_switch(workspace);
if (root_container.focused == NULL) { if (root_container.focused == NULL) {
workspace_switch(workspace);
unfocus_all(&root_container); unfocus_all(&root_container);
focus_view(workspace); focus_view(workspace);
} }

View file

@ -17,7 +17,8 @@ int main(int argc, char **argv) {
.output = { .output = {
.created = handle_output_created, .created = handle_output_created,
.destroyed = handle_output_destroyed, .destroyed = handle_output_destroyed,
.resolution = handle_output_resolution_change .resolution = handle_output_resolution_change,
.focus = handle_output_focused
}, },
.view = { .view = {
.created = handle_view_created, .created = handle_view_created,