|
|
|
@ -520,6 +520,30 @@ static void damage_handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
|
|
transaction_commit_dirty();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void update_output_manager_config(struct sway_server *server) {
|
|
|
|
|
struct wlr_output_configuration_v1 *config =
|
|
|
|
|
wlr_output_configuration_v1_create();
|
|
|
|
|
|
|
|
|
|
struct sway_output *output;
|
|
|
|
|
wl_list_for_each(output, &root->all_outputs, link) {
|
|
|
|
|
if (output == root->noop_output) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
struct wlr_output_configuration_head_v1 *config_head =
|
|
|
|
|
wlr_output_configuration_head_v1_create(config, output->wlr_output);
|
|
|
|
|
struct wlr_box *output_box = wlr_output_layout_get_box(
|
|
|
|
|
root->output_layout, output->wlr_output);
|
|
|
|
|
// We mark the output enabled even if it is switched off by DPMS
|
|
|
|
|
config_head->state.enabled = output->enabled;
|
|
|
|
|
if (output_box) {
|
|
|
|
|
config_head->state.x = output_box->x;
|
|
|
|
|
config_head->state.y = output_box->y;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wlr_output_manager_v1_set_configuration(server->output_manager_v1, config);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
|
|
struct sway_output *output = wl_container_of(listener, output, destroy);
|
|
|
|
|
wl_signal_emit(&output->events.destroy, output);
|
|
|
|
@ -538,6 +562,8 @@ static void handle_destroy(struct wl_listener *listener, void *data) {
|
|
|
|
|
wl_list_remove(&output->damage_frame.link);
|
|
|
|
|
|
|
|
|
|
transaction_commit_dirty();
|
|
|
|
|
|
|
|
|
|
update_output_manager_config(output->server);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_mode(struct wl_listener *listener, void *data) {
|
|
|
|
@ -561,6 +587,8 @@ static void handle_mode(struct wl_listener *listener, void *data) {
|
|
|
|
|
arrange_layers(output);
|
|
|
|
|
arrange_output(output);
|
|
|
|
|
transaction_commit_dirty();
|
|
|
|
|
|
|
|
|
|
update_output_manager_config(output->server);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_transform(struct wl_listener *listener, void *data) {
|
|
|
|
@ -571,6 +599,8 @@ static void handle_transform(struct wl_listener *listener, void *data) {
|
|
|
|
|
arrange_layers(output);
|
|
|
|
|
arrange_output(output);
|
|
|
|
|
transaction_commit_dirty();
|
|
|
|
|
|
|
|
|
|
update_output_manager_config(output->server);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void update_textures(struct sway_container *con, void *data) {
|
|
|
|
@ -578,30 +608,6 @@ static void update_textures(struct sway_container *con, void *data) {
|
|
|
|
|
container_update_marks_textures(con);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void update_output_manager_config(struct sway_server *server) {
|
|
|
|
|
struct wlr_output_configuration_v1 *config =
|
|
|
|
|
wlr_output_configuration_v1_create();
|
|
|
|
|
|
|
|
|
|
struct sway_output *output;
|
|
|
|
|
wl_list_for_each(output, &root->all_outputs, link) {
|
|
|
|
|
if (output == root->noop_output) {
|
|
|
|
|
continue;
|
|
|
|
|
}
|
|
|
|
|
struct wlr_output_configuration_head_v1 *config_head =
|
|
|
|
|
wlr_output_configuration_head_v1_create(config, output->wlr_output);
|
|
|
|
|
struct wlr_box *output_box = wlr_output_layout_get_box(
|
|
|
|
|
root->output_layout, output->wlr_output);
|
|
|
|
|
// We mark the output enabled even if it is switched off by DPMS
|
|
|
|
|
config_head->state.enabled = output->enabled;
|
|
|
|
|
if (output_box) {
|
|
|
|
|
config_head->state.x = output_box->x;
|
|
|
|
|
config_head->state.y = output_box->y;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
wlr_output_manager_v1_set_configuration(server->output_manager_v1, config);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void handle_scale(struct wl_listener *listener, void *data) {
|
|
|
|
|
struct sway_output *output = wl_container_of(listener, output, scale);
|
|
|
|
|
if (!output->enabled || !output->configured) {
|
|
|
|
@ -611,6 +617,8 @@ static void handle_scale(struct wl_listener *listener, void *data) {
|
|
|
|
|
output_for_each_container(output, update_textures, NULL);
|
|
|
|
|
arrange_output(output);
|
|
|
|
|
transaction_commit_dirty();
|
|
|
|
|
|
|
|
|
|
update_output_manager_config(output->server);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
static void send_presented_iterator(struct sway_output *output,
|
|
|
|
|