aboutsummaryrefslogtreecommitdiff
path: root/src/backend
diff options
context:
space:
mode:
authorIvan Molodetskikh <yalterz@gmail.com>2024-01-22 16:08:51 +0400
committerIvan Molodetskikh <yalterz@gmail.com>2024-01-22 16:13:39 +0400
commitcbbb7a26fc0bff426d67bb2804167f01ade5fbe4 (patch)
treec887a439a67d46eb741c2bab3664ac045cab907f /src/backend
parent18566e336699fbf933dbd5584e9228b04196e893 (diff)
downloadniri-cbbb7a26fc0bff426d67bb2804167f01ade5fbe4.tar.gz
niri-cbbb7a26fc0bff426d67bb2804167f01ade5fbe4.tar.bz2
niri-cbbb7a26fc0bff426d67bb2804167f01ade5fbe4.zip
Update Smithay, use device changed session resume code
Should fix most cases of monitors failing to light up after a TTY switch.
Diffstat (limited to 'src/backend')
-rw-r--r--src/backend/tty.rs46
1 files changed, 7 insertions, 39 deletions
diff --git a/src/backend/tty.rs b/src/backend/tty.rs
index cecb0e29..ee689ef0 100644
--- a/src/backend/tty.rs
+++ b/src/backend/tty.rs
@@ -280,7 +280,7 @@ impl Tty {
self.libinput.suspend();
- for device in self.devices.values() {
+ for device in self.devices.values_mut() {
device.drm.pause();
}
}
@@ -323,47 +323,13 @@ impl Tty {
device_list.remove(&node.dev_id());
// It hasn't been removed, update its state as usual.
- let device = &self.devices[&node];
- device.drm.activate();
-
- // HACK: force reset the connectors to make resuming work across sleep.
- let device = &self.devices[&node];
- let crtcs: Vec<_> = device
- .drm_scanner
- .crtcs()
- .map(|(_conn, crtc)| crtc)
- .collect();
- for crtc in crtcs {
- self.connector_disconnected(niri, node, crtc);
- }
-
let device = self.devices.get_mut(&node).unwrap();
- let _ = device.drm_scanner.scan_connectors(&device.drm);
- let crtcs: Vec<_> = device
- .drm_scanner
- .crtcs()
- .map(|(conn, crtc)| (conn.clone(), crtc))
- .collect();
- for (conn, crtc) in crtcs {
- if let Err(err) = self.connector_connected(niri, node, conn, crtc) {
- warn!("error connecting connector: {err:?}");
- }
+ if let Err(err) = device.drm.activate(true) {
+ warn!("error activating DRM device: {err:?}");
}
- // // Refresh the connectors.
- // self.device_changed(node.dev_id(), niri);
-
- // // Refresh the state on unchanged connectors.
- // let device = self.devices.get_mut(&node).unwrap();
- // for surface in device.surfaces.values_mut() {
- // let compositor = &mut surface.compositor;
- // if let Err(err) = compositor.surface().reset_state() {
- // warn!("error resetting DRM surface state: {err}");
- // }
- // compositor.reset_buffers();
- // }
-
- // niri.queue_redraw_all();
+ // Refresh the connectors.
+ self.device_changed(node.dev_id(), niri);
}
// Add new devices.
@@ -378,6 +344,8 @@ impl Tty {
}
self.refresh_ipc_outputs();
+
+ niri.queue_redraw_all();
}
}
}