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:
aria committed 2026-10-30 03:13:43 +09:00
1 parent a2be421974
commit 993bc0f88f
391 files changed
+130908 -76

No files matched your search

+14 -3
View File
@@ -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 {