mirror of
https://github.com/niri-wm/niri.git
synced 2026-06-23 02:05:33 +07:00
tty: Add hack to make resume from sleep work
This commit is contained in:
+39
-14
@@ -217,19 +217,45 @@ impl Tty {
|
|||||||
// It hasn't been removed, update its state as usual.
|
// It hasn't been removed, update its state as usual.
|
||||||
output_device.drm.activate();
|
output_device.drm.activate();
|
||||||
|
|
||||||
// Refresh the connectors.
|
// HACK: force reset the connectors to make resuming work across
|
||||||
tty.device_changed(output_device_id, niri);
|
// sleep.
|
||||||
|
|
||||||
// Refresh the state on unchanged connectors.
|
|
||||||
let output_device = tty.output_device.as_mut().unwrap();
|
let output_device = tty.output_device.as_mut().unwrap();
|
||||||
for drm_compositor in output_device.surfaces.values_mut() {
|
let crtcs: Vec<_> = output_device
|
||||||
if let Err(err) = drm_compositor.surface().reset_state() {
|
.drm_scanner
|
||||||
warn!("error resetting DRM surface state: {err}");
|
.crtcs()
|
||||||
}
|
.map(|(conn, crtc)| (conn.clone(), crtc))
|
||||||
drm_compositor.reset_buffers();
|
.collect();
|
||||||
|
for (conn, crtc) in crtcs {
|
||||||
|
tty.connector_disconnected(niri, conn, crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
niri.queue_redraw_all();
|
let output_device = tty.output_device.as_mut().unwrap();
|
||||||
|
let _ = output_device
|
||||||
|
.drm_scanner
|
||||||
|
.scan_connectors(&output_device.drm);
|
||||||
|
let crtcs: Vec<_> = output_device
|
||||||
|
.drm_scanner
|
||||||
|
.crtcs()
|
||||||
|
.map(|(conn, crtc)| (conn.clone(), crtc))
|
||||||
|
.collect();
|
||||||
|
for (conn, crtc) in crtcs {
|
||||||
|
if let Err(err) = tty.connector_connected(niri, conn, crtc) {
|
||||||
|
warn!("error connecting connector: {err:?}");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// // Refresh the connectors.
|
||||||
|
// tty.device_changed(output_device_id, niri);
|
||||||
|
//
|
||||||
|
// // Refresh the state on unchanged connectors.
|
||||||
|
// for drm_compositor in output_device.surfaces.values_mut() {
|
||||||
|
// if let Err(err) = drm_compositor.surface().reset_state() {
|
||||||
|
// warn!("error resetting DRM surface state: {err}");
|
||||||
|
// }
|
||||||
|
// drm_compositor.reset_buffers();
|
||||||
|
// }
|
||||||
|
|
||||||
|
// niri.queue_redraw_all();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// We didn't have an output device, check if it's been added.
|
// We didn't have an output device, check if it's been added.
|
||||||
@@ -406,12 +432,10 @@ impl Tty {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn device_removed(&mut self, device_id: dev_t, niri: &mut Niri) {
|
fn device_removed(&mut self, device_id: dev_t, niri: &mut Niri) {
|
||||||
let Some(device) = self.output_device.take() else {
|
let Some(device) = &mut self.output_device else {
|
||||||
return;
|
return;
|
||||||
};
|
};
|
||||||
if device.id != device_id {
|
if device_id != device.id {
|
||||||
// It wasn't the output device, put it back in.
|
|
||||||
self.output_device = Some(device);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -425,6 +449,7 @@ impl Tty {
|
|||||||
self.connector_disconnected(niri, connector, crtc);
|
self.connector_disconnected(niri, connector, crtc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let device = self.output_device.take().unwrap();
|
||||||
niri.event_loop.remove(device.token);
|
niri.event_loop.remove(device.token);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user