Single Flutter package at the repo root. All code, tests, assets, and platform directories moved from app/ to root. Package renamed from clide_app to clide — all imports rewritten. Merged pubspec combines core (ffi) and app (flutter, yaml, xterm) dependencies. Makefile simplified: no APP_PRESENT conditionals, no cd, no daemon lifecycle. 317 tests pass. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
29 lines
885 B
Dart
29 lines
885 B
Dart
import 'package:clide/kernel/src/panels/slot_id.dart';
|
|
import 'package:flutter/foundation.dart';
|
|
|
|
/// Tracks the currently focused contribution (tab id + slot). Backs
|
|
/// `clide active`; extensions that need "which tab does the user care
|
|
/// about right now?" read from here instead of poking Flutter's
|
|
/// FocusScope directly.
|
|
class FocusTracker extends ChangeNotifier {
|
|
SlotId? _slot;
|
|
String? _contributionId;
|
|
|
|
SlotId? get activeSlot => _slot;
|
|
String? get activeContributionId => _contributionId;
|
|
|
|
void setActive({required SlotId slot, required String contributionId}) {
|
|
if (_slot == slot && _contributionId == contributionId) return;
|
|
_slot = slot;
|
|
_contributionId = contributionId;
|
|
notifyListeners();
|
|
}
|
|
|
|
void clear() {
|
|
if (_slot == null && _contributionId == null) return;
|
|
_slot = null;
|
|
_contributionId = null;
|
|
notifyListeners();
|
|
}
|
|
}
|