}
bool
-wlr_output_test(struct wlr_output *wlr_output)
+output_state_commit(struct output *output)
{
- struct output *output = wlr_output->data;
- return wlr_output_test_state(wlr_output, &output->pending);
-}
-
-bool
-wlr_output_commit(struct wlr_output *wlr_output)
-{
- struct output *output = wlr_output->data;
- bool committed = wlr_output_commit_state(wlr_output, &output->pending);
+ bool committed =
+ wlr_output_commit_state(output->wlr_output, &output->pending);
if (committed) {
wlr_output_state_finish(&output->pending);
wlr_output_state_init(&output->pending);
}
return committed;
}
-
-void
-wlr_output_enable(struct wlr_output *wlr_output, bool enabled)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_enabled(&output->pending, enabled);
-}
-
-void
-wlr_output_set_mode(struct wlr_output *wlr_output, struct wlr_output_mode *mode)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_mode(&output->pending, mode);
-}
-
-void
-wlr_output_set_custom_mode(struct wlr_output *wlr_output,
- int32_t width, int32_t height, int32_t refresh)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_custom_mode(&output->pending, width, height, refresh);
-}
-
-void
-wlr_output_set_scale(struct wlr_output *wlr_output, float scale)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_scale(&output->pending, scale);
-}
-
-void
-wlr_output_set_transform(struct wlr_output *wlr_output,
- enum wl_output_transform transform)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_transform(&output->pending, transform);
-}
-
-void
-wlr_output_enable_adaptive_sync(struct wlr_output *wlr_output, bool enabled)
-{
- struct output *output = wlr_output->data;
- wlr_output_state_set_adaptive_sync_enabled(&output->pending, enabled);
-}
/* Only the mode has changed */
switch (event->state->mode_type) {
case WLR_OUTPUT_STATE_MODE_FIXED:
- wlr_output_set_mode(output->wlr_output, event->state->mode);
+ wlr_output_state_set_mode(&output->pending,
+ event->state->mode);
break;
case WLR_OUTPUT_STATE_MODE_CUSTOM:
- wlr_output_set_custom_mode(output->wlr_output,
+ wlr_output_state_set_custom_mode(&output->pending,
event->state->custom_mode.width,
event->state->custom_mode.height,
event->state->custom_mode.refresh);
static void do_output_layout_change(struct server *server);
static bool
-can_reuse_mode(struct wlr_output *wlr_output)
+can_reuse_mode(struct output *output)
{
- return wlr_output->current_mode && wlr_output_test(wlr_output);
+ struct wlr_output *wo = output->wlr_output;
+ return wo->current_mode && wlr_output_test_state(wo, &output->pending);
}
static void
output_state_init(output);
wlr_log(WLR_DEBUG, "enable output");
- wlr_output_enable(wlr_output, true);
+ wlr_output_state_set_enabled(&output->pending, true);
/*
* Try to re-use the existing mode if configured to do so.
* Failing that, try to set the preferred mode.
*/
struct wlr_output_mode *preferred_mode = NULL;
- if (!rc.reuse_output_mode || !can_reuse_mode(wlr_output)) {
+ if (!rc.reuse_output_mode || !can_reuse_mode(output)) {
wlr_log(WLR_DEBUG, "set preferred mode");
/* The mode is a tuple of (width, height, refresh rate). */
preferred_mode = wlr_output_preferred_mode(wlr_output);
if (preferred_mode) {
- wlr_output_set_mode(wlr_output, preferred_mode);
+ wlr_output_state_set_mode(&output->pending,
+ preferred_mode);
}
}
* cases it's better to fallback to lower modes than to end up with
* a black screen. See sway@4cdc4ac6
*/
- if (!wlr_output_test(wlr_output)) {
+ if (!wlr_output_test_state(wlr_output, &output->pending)) {
wlr_log(WLR_DEBUG,
"preferred mode rejected, falling back to another mode");
struct wlr_output_mode *mode;
if (mode == preferred_mode) {
continue;
}
- wlr_output_set_mode(wlr_output, mode);
- if (wlr_output_test(wlr_output)) {
+ wlr_output_state_set_mode(&output->pending, mode);
+ if (wlr_output_test_state(wlr_output, &output->pending)) {
break;
}
}
}
if (rc.adaptive_sync == LAB_ADAPTIVE_SYNC_ENABLED) {
- output_enable_adaptive_sync(wlr_output, true);
+ output_enable_adaptive_sync(output, true);
}
- wlr_output_commit(wlr_output);
+ output_state_commit(output);
wlr_output_effective_resolution(wlr_output,
&output->usable_area.width, &output->usable_area.height);
wl_list_for_each(head, &config->heads, link) {
struct wlr_output *o = head->state.output;
struct output *output = output_from_wlr_output(server, o);
+ struct wlr_output_state *os = &output->pending;
bool output_enabled = head->state.enabled && !output->leased;
bool need_to_add = output_enabled && !o->enabled;
bool need_to_remove = !output_enabled && o->enabled;
- wlr_output_enable(o, output_enabled);
+ wlr_output_state_set_enabled(os, output_enabled);
if (output_enabled) {
/* Output specific actions only */
if (head->state.mode) {
- wlr_output_set_mode(o, head->state.mode);
+ wlr_output_state_set_mode(os, head->state.mode);
} else {
- int32_t width = head->state.custom_mode.width;
- int32_t height = head->state.custom_mode.height;
- int32_t refresh = head->state.custom_mode.refresh;
- wlr_output_set_custom_mode(o, width,
- height, refresh);
+ wlr_output_state_set_custom_mode(os,
+ head->state.custom_mode.width,
+ head->state.custom_mode.height,
+ head->state.custom_mode.refresh);
}
- wlr_output_set_scale(o, head->state.scale);
- wlr_output_set_transform(o, head->state.transform);
- output_enable_adaptive_sync(o, head->state.adaptive_sync_enabled);
+ wlr_output_state_set_scale(os, head->state.scale);
+ wlr_output_state_set_transform(os, head->state.transform);
+ output_enable_adaptive_sync(output,
+ head->state.adaptive_sync_enabled);
}
- if (!wlr_output_commit(o)) {
+ if (!output_state_commit(output)) {
/*
* FIXME: This is only part of the story, we should revert
* all previously commited outputs as well here.
static void
handle_output_manager_test(struct wl_listener *listener, void *data)
{
- struct server *server = wl_container_of(listener, server, output_manager_test);
struct wlr_output_configuration_v1 *config = data;
if (verify_output_config_v1(config)) {
static void
handle_gamma_control_set_gamma(struct wl_listener *listener, void *data)
{
- struct server *server = wl_container_of(listener, server, gamma_control_set_gamma);
const struct wlr_gamma_control_manager_v1_set_gamma_event *event = data;
struct output *output = event->output->data;
struct server *server = wl_container_of(listener, server,
output_power_manager_set_mode);
struct wlr_output_power_v1_set_mode_event *event = data;
+ struct output *output = event->output->data;
+ assert(output);
switch (event->mode) {
case ZWLR_OUTPUT_POWER_V1_MODE_OFF:
- wlr_output_enable(event->output, false);
- wlr_output_commit(event->output);
+ wlr_output_state_set_enabled(&output->pending, false);
+ output_state_commit(output);
break;
case ZWLR_OUTPUT_POWER_V1_MODE_ON:
- wlr_output_enable(event->output, true);
- wlr_output_commit(event->output);
+ wlr_output_state_set_enabled(&output->pending, true);
+ output_state_commit(output);
/*
* Re-set the cursor image so that the cursor
* isn't invisible on the newly enabled output.
}
void
-output_enable_adaptive_sync(struct wlr_output *output, bool enabled)
+output_enable_adaptive_sync(struct output *output, bool enabled)
{
- wlr_output_enable_adaptive_sync(output, enabled);
- if (!wlr_output_test(output)) {
- wlr_output_enable_adaptive_sync(output, false);
+ wlr_output_state_set_adaptive_sync_enabled(&output->pending, enabled);
+ if (!wlr_output_test_state(output->wlr_output, &output->pending)) {
+ wlr_output_state_set_adaptive_sync_enabled(&output->pending, false);
wlr_log(WLR_DEBUG,
- "failed to enable adaptive sync for output %s", output->name);
+ "failed to enable adaptive sync for output %s",
+ output->wlr_output->name);
} else {
wlr_log(WLR_INFO, "adaptive sync %sabled for output %s",
- enabled ? "en" : "dis", output->name);
+ enabled ? "en" : "dis", output->wlr_output->name);
}
}