mirror of
https://github.com/swaywm/sway.git
synced 2025-01-31 05:06:45 +00:00
Merge branch 'master' into sensitivity
This commit is contained in:
commit
8ff53f9094
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -6,6 +6,7 @@ bin/
|
|||
test/
|
||||
build/
|
||||
build-*/
|
||||
.cache/
|
||||
.lvimrc
|
||||
config-debug
|
||||
wayland-*-protocol.*
|
||||
|
|
|
@ -249,6 +249,8 @@ static void set_mode(struct wlr_output *output, struct wlr_output_state *pending
|
|||
// as (int)(1000 * mHz / 1000.f)
|
||||
// round() the result to avoid any error
|
||||
int mhz = (int)roundf(refresh_rate * 1000);
|
||||
// If no target refresh rate is given, match highest available
|
||||
mhz = mhz <= 0 ? INT_MAX : mhz;
|
||||
|
||||
if (wl_list_empty(&output->modes) || custom) {
|
||||
sway_log(SWAY_DEBUG, "Assigning custom mode to %s", output->name);
|
||||
|
@ -258,23 +260,28 @@ static void set_mode(struct wlr_output *output, struct wlr_output_state *pending
|
|||
}
|
||||
|
||||
struct wlr_output_mode *mode, *best = NULL;
|
||||
int best_diff_mhz = INT_MAX;
|
||||
wl_list_for_each(mode, &output->modes, link) {
|
||||
if (mode->width == width && mode->height == height) {
|
||||
if (mode->refresh == mhz) {
|
||||
best = mode;
|
||||
break;
|
||||
}
|
||||
if (best == NULL || mode->refresh > best->refresh) {
|
||||
int diff_mhz = abs(mode->refresh - mhz);
|
||||
if (diff_mhz < best_diff_mhz) {
|
||||
best_diff_mhz = diff_mhz;
|
||||
best = mode;
|
||||
if (best_diff_mhz == 0) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!best) {
|
||||
sway_log(SWAY_ERROR, "Configured mode for %s not available", output->name);
|
||||
sway_log(SWAY_INFO, "Picking preferred mode instead");
|
||||
best = wlr_output_preferred_mode(output);
|
||||
if (best) {
|
||||
sway_log(SWAY_INFO, "Assigning configured mode (%dx%d@%.3fHz) to %s",
|
||||
best->width, best->height, best->refresh / 1000.f, output->name);
|
||||
} else {
|
||||
sway_log(SWAY_DEBUG, "Assigning configured mode to %s", output->name);
|
||||
best = wlr_output_preferred_mode(output);
|
||||
sway_log(SWAY_INFO, "Configured mode (%dx%d@%.3fHz) not available, "
|
||||
"applying preferred mode (%dx%d@%.3fHz)",
|
||||
width, height, refresh_rate,
|
||||
best->width, best->height, best->refresh / 1000.f);
|
||||
}
|
||||
wlr_output_state_set_mode(pending, best);
|
||||
}
|
||||
|
|
|
@ -942,12 +942,15 @@ static void handle_commit(struct wl_listener *listener, void *data) {
|
|||
return;
|
||||
}
|
||||
|
||||
if (event->committed & WLR_OUTPUT_STATE_SCALE) {
|
||||
if (event->state->committed & WLR_OUTPUT_STATE_SCALE) {
|
||||
output_for_each_container(output, update_textures, NULL);
|
||||
output_for_each_surface(output, update_output_scale_iterator, NULL);
|
||||
}
|
||||
|
||||
if (event->committed & (WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_TRANSFORM | WLR_OUTPUT_STATE_SCALE)) {
|
||||
if (event->state->committed & (
|
||||
WLR_OUTPUT_STATE_MODE |
|
||||
WLR_OUTPUT_STATE_TRANSFORM |
|
||||
WLR_OUTPUT_STATE_SCALE)) {
|
||||
arrange_layers(output);
|
||||
arrange_output(output);
|
||||
transaction_commit_dirty();
|
||||
|
@ -955,7 +958,9 @@ static void handle_commit(struct wl_listener *listener, void *data) {
|
|||
update_output_manager_config(output->server);
|
||||
}
|
||||
|
||||
if (event->committed & (WLR_OUTPUT_STATE_MODE | WLR_OUTPUT_STATE_TRANSFORM)) {
|
||||
if (event->state->committed & (
|
||||
WLR_OUTPUT_STATE_MODE |
|
||||
WLR_OUTPUT_STATE_TRANSFORM)) {
|
||||
int width, height;
|
||||
wlr_output_transformed_resolution(output->wlr_output, &width, &height);
|
||||
wlr_damage_ring_set_bounds(&output->damage_ring, width, height);
|
||||
|
|
|
@ -46,7 +46,7 @@ static void handle_surface_commit(struct wl_listener *listener, void *data) {
|
|||
static void handle_output_commit(struct wl_listener *listener, void *data) {
|
||||
struct wlr_output_event_commit *event = data;
|
||||
struct sway_session_lock_surface *surf = wl_container_of(listener, surf, output_commit);
|
||||
if (event->committed & (
|
||||
if (event->state->committed & (
|
||||
WLR_OUTPUT_STATE_MODE |
|
||||
WLR_OUTPUT_STATE_SCALE |
|
||||
WLR_OUTPUT_STATE_TRANSFORM)) {
|
||||
|
|
|
@ -121,11 +121,16 @@ The following commands may only be used in the configuration file.
|
|||
|
||||
*input* <identifier> map_from_region <X1xY1> <X2xY2>
|
||||
Ignores inputs from this device that do not occur within the specified
|
||||
region. Can be in millimeters (e.g. 10x20mm 20x40mm) or in terms of 0..1
|
||||
(e.g. 0.5x0.5 0.7x0.7). Not all devices support millimeters. Only meaningful
|
||||
if the device is not a keyboard and provides events in absolute terms (such
|
||||
as a drawing tablet or touch screen - most pointers provide events relative
|
||||
to the previous frame).
|
||||
region. Can be in millimeters (e.g. 10x20mm 20x40mm) or the fraction of the
|
||||
full available space in terms of 0..1 (e.g. 0.5x0.5 0.7x0.7). Not all
|
||||
devices support millimeters. Only meaningful if the device is not a
|
||||
keyboard and provides events in absolute terms (such as a drawing tablet
|
||||
or touch screen - most pointers provide events relative to the previous
|
||||
frame).
|
||||
|
||||
Commonly used to maintain the aspect ratio of the input device and screen.
|
||||
Cropping a 16:10 input region to match a 16:9 display can use 0x0 1x0.9 as
|
||||
the argument.
|
||||
|
||||
## LIBINPUT CONFIGURATION
|
||||
|
||||
|
|
|
@ -1422,7 +1422,7 @@ static void view_save_buffer_iterator(struct wlr_surface *surface,
|
|||
int sx, int sy, void *data) {
|
||||
struct sway_view *view = data;
|
||||
|
||||
if (surface && wlr_surface_has_buffer(surface)) {
|
||||
if (surface && surface->buffer) {
|
||||
wlr_buffer_lock(&surface->buffer->base);
|
||||
struct sway_saved_buffer *saved_buffer = calloc(1, sizeof(struct sway_saved_buffer));
|
||||
saved_buffer->buffer = surface->buffer;
|
||||
|
|
Loading…
Reference in a new issue