Use output dimensions to detect landscape mode

Most displays are in landscape mode by default, so checking to see if
it's rotated will produce the exact opposite of the expected results.

Signed-off-by: Maarten van Gompel <proycon@anaproy.nl>
This commit is contained in:
ArenM 2022-07-04 23:46:18 -04:00 committed by Maarten van Gompel
parent b974877be4
commit f540cf36fa

19
main.c
View File

@ -251,21 +251,24 @@ static void
display_handle_geometry(void *data, struct wl_output *wl_output, int x, int y,
int physical_width, int physical_height, int subpixel,
const char *make, const char *model, int transform) {
if (transform % 2 == 0 && keyboard.landscape) {
keyboard.landscape = false;
height = normal_height;
} else if (transform % 2 != 0 && !keyboard.landscape) {
keyboard.landscape = true;
height = landscape_height;
} else {
return; // no changes
// Swap width and height on rotated displays
if (transform % 2 != 0) {
int tmp = physical_width;
physical_width = physical_height;
physical_height = tmp;
}
bool landscape = physical_width > physical_height;
if (landscape == keyboard.landscape) return;
keyboard.landscape = landscape;
enum layout_id layer;
if (keyboard.landscape) {
layer = keyboard.landscape_layers[0];
height = landscape_height;
} else {
layer = keyboard.layers[0];
height = normal_height;
}
keyboard.layout = &keyboard.layouts[layer];