aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenny Levinsen <kl@kl.wtf>2024-10-17 00:19:29 +0200
committerSimon Ser <contact@emersion.fr>2024-10-20 22:10:37 +0200
commit124a96c501734b737258b0302f1e4cfe353a551a (patch)
tree493b792b1e68b2f22d88faea8c1b0d6872507237
parentfb4969610c2f9461d55507dfbdf237174c615d4c (diff)
config/output: Always set output states from config
queue_output_config had some remaining logic that would avoid setting output states if they already appeared to be in effect. That is not what most of the states did nor what is currently expected, so clean that up. (cherry picked from commit 7e0c0dda42183cf3f6a64bace230252cbeadbbd6)
-rw-r--r--sway/config/output.c53
1 files changed, 21 insertions, 32 deletions
diff --git a/sway/config/output.c b/sway/config/output.c
index d774d17e..b9fb773a 100644
--- a/sway/config/output.c
+++ b/sway/config/output.c
@@ -451,54 +451,41 @@ static void queue_output_config(struct output_config *oc,
wlr_output_state_set_mode(pending, preferred_mode);
}
- if (oc && (oc->subpixel != WL_OUTPUT_SUBPIXEL_UNKNOWN || config->reloading)) {
- sway_log(SWAY_DEBUG, "Set %s subpixel to %s", oc->name,
- sway_wl_output_subpixel_to_string(oc->subpixel));
+ if (oc && oc->subpixel != WL_OUTPUT_SUBPIXEL_UNKNOWN) {
wlr_output_state_set_subpixel(pending, oc->subpixel);
+ } else {
+ wlr_output_state_set_subpixel(pending, output->detected_subpixel);
}
- enum wl_output_transform tr = WL_OUTPUT_TRANSFORM_NORMAL;
if (oc && oc->transform >= 0) {
- tr = oc->transform;
+ wlr_output_state_set_transform(pending, oc->transform);
#if WLR_HAS_DRM_BACKEND
} else if (wlr_output_is_drm(wlr_output)) {
- tr = wlr_drm_connector_get_panel_orientation(wlr_output);
- sway_log(SWAY_DEBUG, "Auto-detected output transform: %d", tr);
+ wlr_output_state_set_transform(pending,
+ wlr_drm_connector_get_panel_orientation(wlr_output));
#endif
- }
- if (wlr_output->transform != tr) {
- sway_log(SWAY_DEBUG, "Set %s transform to %d", wlr_output->name, tr);
- wlr_output_state_set_transform(pending, tr);
+ } else {
+ wlr_output_state_set_transform(pending, WL_OUTPUT_TRANSFORM_NORMAL);
}
- // Apply the scale last before the commit, because the scale auto-detection
- // reads the pending output size
- float scale;
+ // Apply the scale after sorting out the mode, because the scale
+ // auto-detection reads the pending output size
if (oc && oc->scale > 0) {
- scale = oc->scale;
-
// The factional-scale-v1 protocol uses increments of 120ths to send
// the scale factor to the client. Adjust the scale so that we use the
// same value as the clients'.
- float adjusted_scale = round(scale * 120) / 120;
- if (scale != adjusted_scale) {
- sway_log(SWAY_INFO, "Adjusting output scale from %f to %f",
- scale, adjusted_scale);
- scale = adjusted_scale;
- }
+ wlr_output_state_set_scale(pending, round(oc->scale * 120) / 120);
} else {
- scale = compute_default_scale(wlr_output, pending);
- sway_log(SWAY_DEBUG, "Auto-detected output scale: %f", scale);
- }
- if (scale != wlr_output->scale) {
- sway_log(SWAY_DEBUG, "Set %s scale to %f", wlr_output->name, scale);
- wlr_output_state_set_scale(pending, scale);
+ wlr_output_state_set_scale(pending,
+ compute_default_scale(wlr_output, pending));
}
- if (oc && oc->adaptive_sync != -1 && wlr_output->adaptive_sync_supported) {
- sway_log(SWAY_DEBUG, "Set %s adaptive sync to %d", wlr_output->name,
- oc->adaptive_sync);
- wlr_output_state_set_adaptive_sync_enabled(pending, oc->adaptive_sync == 1);
+ if (wlr_output->adaptive_sync_supported) {
+ if (oc && oc->adaptive_sync != -1) {
+ wlr_output_state_set_adaptive_sync_enabled(pending, oc->adaptive_sync == 1);
+ } else {
+ wlr_output_state_set_adaptive_sync_enabled(pending, false);
+ }
}
if (oc && oc->render_bit_depth != RENDER_BIT_DEPTH_DEFAULT) {
@@ -513,6 +500,8 @@ static void queue_output_config(struct output_config *oc,
} else {
wlr_output_state_set_render_format(pending, DRM_FORMAT_XRGB8888);
}
+ } else {
+ wlr_output_state_set_render_format(pending, DRM_FORMAT_XRGB8888);
}
}