don't try to move outputs when its x,y hasn't change

when using wlr_output_layout_move() wlroots internally
change the state of the output to manually configured and
when updating the layout these outputs aren't ignored by
wlroots, leaving us at our own
このコミットが含まれているのは:
Leonardo Hernández Hernández 2022-09-10 23:45:57 -05:00
コミット ba7dcb2dea
この署名に対応する既知のキーがデータベースに存在しません
GPGキーID: E538897EE11B9624

8
dwl.c
ファイルの表示

@ -1607,6 +1607,7 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)
/* Then enable outputs that need to */ /* Then enable outputs that need to */
wl_list_for_each(config_head, &config->heads, link) { wl_list_for_each(config_head, &config->heads, link) {
struct wlr_output *wlr_output = config_head->state.output; struct wlr_output *wlr_output = config_head->state.output;
Monitor *m = wlr_output->data;
if (!config_head->state.enabled) if (!config_head->state.enabled)
continue; continue;
@ -1619,8 +1620,11 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)
config_head->state.custom_mode.height, config_head->state.custom_mode.height,
config_head->state.custom_mode.refresh); config_head->state.custom_mode.refresh);
wlr_output_layout_move(output_layout, wlr_output, /* Don't move monitors if position wouldn't change, this to avoid
config_head->state.x, config_head->state.y); * wlroots marking the output as manually configured */
if (m->m.x != config_head->state.x || m->m.y != config_head->state.y)
wlr_output_layout_move(output_layout, wlr_output,
config_head->state.x, config_head->state.y);
wlr_output_set_transform(wlr_output, config_head->state.transform); wlr_output_set_transform(wlr_output, config_head->state.transform);
wlr_output_set_scale(wlr_output, config_head->state.scale); wlr_output_set_scale(wlr_output, config_head->state.scale);