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

+17 -5
View File
@@ -35,16 +35,24 @@ def check_tag(tag, release_version):
def licenses(destination, metadata):
destination.mkdir(parents=True, exist_ok=True)
report = []
workspace_members = set(metadata.get('workspace_members', []))
workspace_root = Path(metadata.get('workspace_root', ROOT))
for package in sorted(metadata['packages'], key=lambda p: (p['name'], p['version'])):
if package['source'] is None:
if package.get('id') in workspace_members:
continue
directory = Path(package['manifest_path']).parent
source_hash = hashlib.sha256(package['source'].encode()).hexdigest()[:8]
source = package['source']
if source is None:
# A vendored/path dependency is third-party code even though Cargo
# gives it no registry/Git source. Keep notices reproducible across
# checkout locations without exporting absolute manifest paths.
source = 'path+' + Path(os.path.relpath(directory, workspace_root)).as_posix()
source_hash = hashlib.sha256(source.encode()).hexdigest()[:8]
name = f"{package['name']}-{package['version']}-{source_hash}"
files = set()
search = [directory]
if package['source'].startswith('git+'):
if source.startswith('git+'):
for ancestor in directory.parents:
search.append(ancestor)
if (ancestor / '.git').exists():
@@ -66,7 +74,7 @@ def licenses(destination, metadata):
shutil.copyfile(path, target)
report.append({'name': package['name'], 'version': package['version'],
'source': package['source'], 'license': package['license'],
'source': source, 'license': package['license'],
'notice_directory': name})
(destination / 'dependencies.json').write_text(json.dumps(report, indent=2) + '\n')
@@ -113,7 +121,11 @@ def stage(destdir, binary_dir, pam):
planned.extend([(ROOT / f'packaging/pam.d/ferese-lock.{pam}', 'etc/pam.d/ferese-lock', 0o644),
(ROOT / 'LICENSE', 'usr/share/licenses/ferese/LICENSE', 0o644),
(ROOT / 'README.md', 'usr/share/doc/ferese/README.md', 0o644)])
(ROOT / 'README.md', 'usr/share/doc/ferese/README.md', 0o644),
(ROOT / 'vendor/smithay/UPSTREAM.md',
'usr/share/doc/ferese/vendor/smithay/UPSTREAM.md', 0o644),
(ROOT / 'vendor/smithay/patches/shm-texture-cache-format.patch',
'usr/share/doc/ferese/vendor/smithay/shm-texture-cache-format.patch', 0o644)])
# Validate the complete inventory before writing any part of the package.
for source, _, _ in planned:
if not source.is_file():