mirror of
https://github.com/hyprwm/wlroots-hyprland.git
synced 2024-11-02 11:55:59 +01:00
output: only advertise current mode
- Regular clients shouldn't care about modes - Modes exposed are missing metadata such as aspect-ratio, interleaved, etc - Modes exposed cannot be pruned [1] - wlr-output-management provides a better API for privileged clients [1]: https://gitlab.freedesktop.org/wayland/wayland/issues/92 Closes: https://github.com/swaywm/wlroots/issues/1099
This commit is contained in:
parent
8bb2dc68ea
commit
ff29843d87
1 changed files with 3 additions and 30 deletions
|
@ -26,39 +26,12 @@ static void send_geometry(struct wl_resource *resource) {
|
||||||
output->make, output->model, output->transform);
|
output->make, output->model, output->transform);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void send_all_modes(struct wl_resource *resource) {
|
|
||||||
struct wlr_output *output = wlr_output_from_resource(resource);
|
|
||||||
|
|
||||||
struct wlr_output_mode *mode;
|
|
||||||
wl_list_for_each(mode, &output->modes, link) {
|
|
||||||
uint32_t flags = 0;
|
|
||||||
if (mode->preferred) {
|
|
||||||
flags |= WL_OUTPUT_MODE_PREFERRED;
|
|
||||||
}
|
|
||||||
if (output->current_mode == mode) {
|
|
||||||
flags |= WL_OUTPUT_MODE_CURRENT;
|
|
||||||
}
|
|
||||||
wl_output_send_mode(resource, flags, mode->width, mode->height,
|
|
||||||
mode->refresh);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (wl_list_empty(&output->modes)) {
|
|
||||||
// Output has no mode, send the current width/height
|
|
||||||
wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT,
|
|
||||||
output->width, output->height, output->refresh);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void send_current_mode(struct wl_resource *resource) {
|
static void send_current_mode(struct wl_resource *resource) {
|
||||||
struct wlr_output *output = wlr_output_from_resource(resource);
|
struct wlr_output *output = wlr_output_from_resource(resource);
|
||||||
if (output->current_mode != NULL) {
|
if (output->current_mode != NULL) {
|
||||||
struct wlr_output_mode *mode = output->current_mode;
|
struct wlr_output_mode *mode = output->current_mode;
|
||||||
uint32_t flags = WL_OUTPUT_MODE_CURRENT;
|
wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT,
|
||||||
if (mode->preferred) {
|
mode->width, mode->height, mode->refresh);
|
||||||
flags |= WL_OUTPUT_MODE_PREFERRED;
|
|
||||||
}
|
|
||||||
wl_output_send_mode(resource, flags, mode->width, mode->height,
|
|
||||||
mode->refresh);
|
|
||||||
} else {
|
} else {
|
||||||
// Output has no mode
|
// Output has no mode
|
||||||
wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT, output->width,
|
wl_output_send_mode(resource, WL_OUTPUT_MODE_CURRENT, output->width,
|
||||||
|
@ -109,7 +82,7 @@ static void output_bind(struct wl_client *wl_client, void *data,
|
||||||
wl_list_insert(&output->resources, wl_resource_get_link(resource));
|
wl_list_insert(&output->resources, wl_resource_get_link(resource));
|
||||||
|
|
||||||
send_geometry(resource);
|
send_geometry(resource);
|
||||||
send_all_modes(resource);
|
send_current_mode(resource);
|
||||||
send_scale(resource);
|
send_scale(resource);
|
||||||
send_done(resource);
|
send_done(resource);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue