Wayland: match montitor by name before trying to match by place

This commit is contained in:
dec05eba
2024-06-10 17:14:25 +02:00
parent f02f5a9d00
commit 55266f2a68

View File

@@ -296,28 +296,57 @@ bool get_monitor_by_name(const gsr_egl *egl, gsr_connection_type connection_type
typedef struct { typedef struct {
const gsr_monitor *monitor; const gsr_monitor *monitor;
gsr_monitor_rotation rotation; gsr_monitor_rotation rotation;
bool match_found;
} get_monitor_by_connector_id_userdata; } get_monitor_by_connector_id_userdata;
static bool vec2i_eql(vec2i a, vec2i b) {
return a.x == b.x && a.y == b.y;
}
static void get_monitor_by_name_and_size_callback(const gsr_monitor *monitor, void *userdata) {
get_monitor_by_connector_id_userdata *data = (get_monitor_by_connector_id_userdata*)userdata;
if(monitor->name && data->monitor->name && strcmp(monitor->name, data->monitor->name) == 0 && vec2i_eql(monitor->size, data->monitor->size)) {
data->rotation = monitor->rotation;
data->match_found = true;
}
}
static void get_monitor_by_connector_id_callback(const gsr_monitor *monitor, void *userdata) { static void get_monitor_by_connector_id_callback(const gsr_monitor *monitor, void *userdata) {
get_monitor_by_connector_id_userdata *data = (get_monitor_by_connector_id_userdata*)userdata; get_monitor_by_connector_id_userdata *data = (get_monitor_by_connector_id_userdata*)userdata;
if(monitor->connector_id == data->monitor->connector_id || if(monitor->connector_id == data->monitor->connector_id ||
(!monitor->connector_id && monitor->monitor_identifier == data->monitor->monitor_identifier)) (!monitor->connector_id && monitor->monitor_identifier == data->monitor->monitor_identifier))
{ {
data->rotation = monitor->rotation; data->rotation = monitor->rotation;
data->match_found = true;
} }
} }
gsr_monitor_rotation drm_monitor_get_display_server_rotation(const gsr_egl *egl, const gsr_monitor *monitor) { gsr_monitor_rotation drm_monitor_get_display_server_rotation(const gsr_egl *egl, const gsr_monitor *monitor) {
if(egl->wayland.dpy) { if(egl->wayland.dpy) {
get_monitor_by_connector_id_userdata userdata; {
userdata.monitor = monitor; get_monitor_by_connector_id_userdata userdata;
userdata.rotation = GSR_MONITOR_ROT_0; userdata.monitor = monitor;
for_each_active_monitor_output_wayland(egl, get_monitor_by_connector_id_callback, &userdata); userdata.rotation = GSR_MONITOR_ROT_0;
return userdata.rotation; userdata.match_found = false;
for_each_active_monitor_output_wayland(egl, get_monitor_by_name_and_size_callback, &userdata);
if(userdata.match_found) {
fprintf(stderr, "found!\n");
return userdata.rotation;
}
}
{
get_monitor_by_connector_id_userdata userdata;
userdata.monitor = monitor;
userdata.rotation = GSR_MONITOR_ROT_0;
userdata.match_found = false;
for_each_active_monitor_output_wayland(egl, get_monitor_by_connector_id_callback, &userdata);
return userdata.rotation;
}
} else { } else {
get_monitor_by_connector_id_userdata userdata; get_monitor_by_connector_id_userdata userdata;
userdata.monitor = monitor; userdata.monitor = monitor;
userdata.rotation = GSR_MONITOR_ROT_0; userdata.rotation = GSR_MONITOR_ROT_0;
userdata.match_found = false;
for_each_active_monitor_output_x11(egl->x11.dpy, get_monitor_by_connector_id_callback, &userdata); for_each_active_monitor_output_x11(egl->x11.dpy, get_monitor_by_connector_id_callback, &userdata);
return userdata.rotation; return userdata.rotation;
} }