mirror of
https://github.com/jjsullivan5196/wvkbd.git
synced 2025-08-29 07:12:02 +02:00
Fix landscape appearance bug in multi-monitor setup
In a multi-monitor setup, the keyboard didn't appear correctly since
commit 9cc8931b46
. This affected only
landscape mode and only on multi-monitor setups where wvkbd is launched
on anything but the first output (and perhaps even only in
multi-monitor setups where one is portrait mode and one landscape like
mine, I'm not sure).
In the mentioned commit Willow commented:
> On situation where multiple screens are present, it will eventually need
> a second loop (roundtrip)
It seems that second loop never really made it all the way to drawing.
Adding an explicit drwsurf_attach() unconditionally in
layer_surface_configure fixes this.
I'm not sure if this is the best way but this fixes this bug, and as far
as I know doesn't cause extra redraws/resizes in the normal
single-monitor scenario.
Signed-off-by: Maarten van Gompel <proycon@anaproy.nl>
This commit is contained in:
@@ -111,6 +111,7 @@ struct kbd {
|
|||||||
size_t last_abc_index; //the layer index of the last alphabetical layout
|
size_t last_abc_index; //the layer index of the last alphabetical layout
|
||||||
|
|
||||||
struct layout *layouts;
|
struct layout *layouts;
|
||||||
|
struct Output *output; //only used to keep track of landscape flipping, never dereferenced
|
||||||
enum layout_id *layers;
|
enum layout_id *layers;
|
||||||
enum layout_id *landscape_layers;
|
enum layout_id *landscape_layers;
|
||||||
|
|
||||||
|
3
main.c
3
main.c
@@ -611,7 +611,7 @@ layer_surface_configure(void *data, struct zwlr_layer_surface_v1 *surface,
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (keyboard.w != w || keyboard.h != h || keyboard.scale != scale ||
|
if (keyboard.w != w || keyboard.h != h || keyboard.scale != scale ||
|
||||||
hidden) {
|
keyboard.output != current_output || hidden) {
|
||||||
|
|
||||||
keyboard.w = w;
|
keyboard.w = w;
|
||||||
keyboard.h = h;
|
keyboard.h = h;
|
||||||
@@ -665,6 +665,7 @@ layer_surface_configure(void *data, struct zwlr_layer_surface_v1 *surface,
|
|||||||
zwlr_layer_surface_v1_ack_configure(surface, serial);
|
zwlr_layer_surface_v1_ack_configure(surface, serial);
|
||||||
kbd_resize(&keyboard, layouts, NumLayouts);
|
kbd_resize(&keyboard, layouts, NumLayouts);
|
||||||
drwsurf_attach(&draw_surf);
|
drwsurf_attach(&draw_surf);
|
||||||
|
keyboard.output = current_output;
|
||||||
} else {
|
} else {
|
||||||
zwlr_layer_surface_v1_ack_configure(surface, serial);
|
zwlr_layer_surface_v1_ack_configure(surface, serial);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user