mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2025-12-23 08:56:29 -05:00
Merge remote-tracking branch 'upstream/master' into fix-freebsd-direct-session
This commit is contained in:
commit
3b2b8c1844
16 changed files with 107 additions and 60 deletions
|
|
@ -344,7 +344,8 @@ static void drm_connector_start_renderer(struct wlr_drm_connector *conn) {
|
|||
|
||||
void enable_drm_connector(struct wlr_output *output, bool enable) {
|
||||
struct wlr_drm_connector *conn = (struct wlr_drm_connector *)output;
|
||||
if (conn->state != WLR_DRM_CONN_CONNECTED) {
|
||||
if (conn->state != WLR_DRM_CONN_CONNECTED
|
||||
&& conn->state != WLR_DRM_CONN_NEEDS_MODESET) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -563,7 +564,7 @@ static bool drm_connector_set_mode(struct wlr_output *output,
|
|||
struct wlr_drm_crtc *crtc = conn->crtc;
|
||||
if (!crtc) {
|
||||
wlr_log(WLR_ERROR, "Unable to match %s with a CRTC", conn->output.name);
|
||||
goto error_conn;
|
||||
return false;
|
||||
}
|
||||
wlr_log(WLR_DEBUG, "%s: crtc=%td ovr=%td pri=%td cur=%td", conn->output.name,
|
||||
crtc - drm->crtcs,
|
||||
|
|
@ -867,7 +868,9 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) {
|
|||
// +1 so length can never be 0, which is undefined behaviour.
|
||||
// Last element isn't used.
|
||||
bool seen[seen_len + 1];
|
||||
memset(seen, 0, sizeof(seen));
|
||||
memset(seen, false, sizeof(seen));
|
||||
size_t new_outputs_len = 0;
|
||||
struct wlr_drm_connector *new_outputs[res->count_connectors + 1];
|
||||
|
||||
for (int i = 0; i < res->count_connectors; ++i) {
|
||||
drmModeConnector *drm_conn = drmModeGetConnector(drm->fd,
|
||||
|
|
@ -973,13 +976,10 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) {
|
|||
wl_list_insert(&wlr_conn->output.modes, &mode->wlr_mode.link);
|
||||
}
|
||||
|
||||
wlr_output_update_enabled(&wlr_conn->output, true);
|
||||
wlr_output_update_enabled(&wlr_conn->output, wlr_conn->crtc != NULL);
|
||||
|
||||
wlr_conn->state = WLR_DRM_CONN_NEEDS_MODESET;
|
||||
wlr_log(WLR_INFO, "Sending modesetting signal for '%s'",
|
||||
wlr_conn->output.name);
|
||||
wlr_signal_emit_safe(&drm->backend.events.new_output,
|
||||
&wlr_conn->output);
|
||||
new_outputs[new_outputs_len++] = wlr_conn;
|
||||
} else if (wlr_conn->state == WLR_DRM_CONN_CONNECTED &&
|
||||
drm_conn->connection != DRM_MODE_CONNECTED) {
|
||||
wlr_log(WLR_INFO, "'%s' disconnected", wlr_conn->output.name);
|
||||
|
|
@ -1010,6 +1010,15 @@ void scan_drm_connectors(struct wlr_drm_backend *drm) {
|
|||
wl_list_remove(&conn->link);
|
||||
free(conn);
|
||||
}
|
||||
|
||||
for (size_t i = 0; i < new_outputs_len; ++i) {
|
||||
struct wlr_drm_connector *conn = new_outputs[i];
|
||||
|
||||
wlr_log(WLR_INFO, "Requesting modeset for '%s'",
|
||||
conn->output.name);
|
||||
wlr_signal_emit_safe(&drm->backend.events.new_output,
|
||||
&conn->output);
|
||||
}
|
||||
}
|
||||
|
||||
static void page_flip_handler(int fd, unsigned seq,
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ static void add_pad_group_from_libinput(struct wlr_tablet_pad *pad,
|
|||
++group->ring_count;
|
||||
}
|
||||
}
|
||||
group->rings = calloc(sizeof(int), group->ring_count);
|
||||
group->rings = calloc(sizeof(unsigned int), group->ring_count);
|
||||
size_t ring = 0;
|
||||
for (size_t i = 0; i < pad->ring_count; ++i) {
|
||||
if (libinput_tablet_pad_mode_group_has_ring(li_group, i)) {
|
||||
|
|
@ -41,7 +41,7 @@ static void add_pad_group_from_libinput(struct wlr_tablet_pad *pad,
|
|||
++group->strip_count;
|
||||
}
|
||||
}
|
||||
group->strips = calloc(sizeof(int), group->strip_count);
|
||||
group->strips = calloc(sizeof(unsigned int), group->strip_count);
|
||||
size_t strip = 0;
|
||||
for (size_t i = 0; i < pad->strip_count; ++i) {
|
||||
if (libinput_tablet_pad_mode_group_has_strip(li_group, i)) {
|
||||
|
|
@ -54,7 +54,7 @@ static void add_pad_group_from_libinput(struct wlr_tablet_pad *pad,
|
|||
++group->button_count;
|
||||
}
|
||||
}
|
||||
group->buttons = calloc(sizeof(int), group->button_count);
|
||||
group->buttons = calloc(sizeof(unsigned int), group->button_count);
|
||||
size_t button = 0;
|
||||
for (size_t i = 0; i < pad->button_count; ++i) {
|
||||
if (libinput_tablet_pad_mode_group_has_button(li_group, i)) {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue