Integrate native Rime and stabilize input, output, and rendering
- Add optional modifier-only Super binding whose tap is cancelled by other input, focus changes, grabs, locks, and session teardown. - Ship the native ferese-rime user service, Rime defaults, installer inventory, package dependencies, session environment, and docs. - Vendor Smithay 8a27023 with the SHM texture-cache format fix and add GPU regressions for format changes and resize snapshots. - Release reused CRTC owners before staging output modes, then restore changed outputs before former owners when a transaction fails. - Wait for resize-capture GPU completion, expand filtered surface damage, and preserve IME popup origin under fractional scaling. - Mark weekends like holidays in both calendar layouts.
This commit is contained in:
1 parent
a2be421974
commit
993bc0f88f
391 files changed
+130908
-76
No files matched your search
@@ -450,8 +450,8 @@ impl crate::output_transaction::HardwareTransaction for DeviceTransaction<'_> {
|
||||
}
|
||||
}
|
||||
|
||||
/// All allocations/tests precede commits. Logical publication waits for the
|
||||
/// final usable inventory; devices are independently applied and restored.
|
||||
/// A complete device test precedes application. Release former connector owners
|
||||
/// before per-surface tests; publish only after the final inventory is usable.
|
||||
pub(super) fn apply_device(
|
||||
state: &mut Ferese,
|
||||
node: DrmNode,
|
||||
@@ -483,6 +483,17 @@ pub(super) fn apply_device(
|
||||
.filter(|crtc| !selections.contains_key(crtc))
|
||||
.copied()
|
||||
.collect::<Vec<_>>();
|
||||
// A connector replacement can reuse the same CRTC, so it is not a removal
|
||||
// from the keyed inventory. Its old routing/resources must still be released
|
||||
// before staging any other output's new mode (for example HDMI -> DP).
|
||||
let mut releases = removals.clone();
|
||||
releases.extend(selections.iter().filter_map(|(crtc, selection)| {
|
||||
device
|
||||
.outputs
|
||||
.get(crtc)
|
||||
.and_then(|output| (output.connector != selection.connector.handle()).then_some(*crtc))
|
||||
}));
|
||||
releases.sort_by_key(|crtc| u32::from(*crtc));
|
||||
let hardware_changes = changed
|
||||
.iter()
|
||||
.filter(|crtc| {
|
||||
@@ -500,7 +511,7 @@ pub(super) fn apply_device(
|
||||
staged: HashMap::new(),
|
||||
replaced: HashSet::new(),
|
||||
};
|
||||
let result = crate::output_transaction::apply(&mut driver, &hardware_changes, &removals);
|
||||
let result = crate::output_transaction::apply(&mut driver, &hardware_changes, &releases);
|
||||
let mut staged = std::mem::take(&mut driver.staged);
|
||||
if let Err(failure) = result {
|
||||
for crtc in failure.unavailable {
|
||||
|
||||
Reference in new issue
Block a user