Commit 380cfdc
committed
feat: focus management redesign — FocusManager replaces FocusCoordinator/FocusStateService
Introduces a unified FocusManager as the single source of truth for focus
within each Window, replacing the old FocusCoordinator/FocusStateService
pair and all _hasFocus fields across controls.
Key changes:
- New FocusManager, WindowRootScope, IFocusScope interface
- IFocusScope implemented on SPC, HGrid, NavigationView, ToolbarControl
- All controls use FocusManager.IsFocused() / IsInFocusPath() for HasFocus
- FocusCoordinator and FocusStateService removed
- Tab routing goes through FocusManager.MoveFocus (not ProcessKey)
- HGrid/SPC GetFocusableChildren handle nested transparent scopes
- NavigationView wraps nav→toolbar→content→nav with toolbar skip when hidden
- Comprehensive test suite: FocusNavigationTests, TabTraversalTests,
FocusRegressionTests, NavigationViewFocusScopeTests, etc.
All 2450 tests pass.1 parent c348e89 commit 380cfdc
120 files changed
Lines changed: 3645 additions & 4289 deletions
File tree
- SharpConsoleUI.Tests
- Controls
- FocusManagement
- InputHandling
- Rendering/Unit
- MiddleLayer
- TopLayer
- SharpConsoleUI
- Controls
- CanvasControl
- DatePickerControl
- DropdownControl
- HorizontalGridControl
- ListControl
- MenuControl
- MultilineEdit
- RangeSliderControl
- ScrollablePanelControl
- SliderControl
- TabControl
- TableControl
- Terminal
- TimePickerControl
- TreeControl
- Core
- Dialogs
- Extensions
- Helpers
- Windows
Some content is hidden
Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.
Large diffs are not rendered by default.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
6 | 6 | | |
7 | 7 | | |
8 | 8 | | |
| 9 | + | |
9 | 10 | | |
10 | 11 | | |
11 | 12 | | |
| |||
32 | 33 | | |
33 | 34 | | |
34 | 35 | | |
35 | | - | |
| 36 | + | |
36 | 37 | | |
| 38 | + | |
| 39 | + | |
37 | 40 | | |
38 | | - | |
39 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
40 | 44 | | |
41 | 45 | | |
42 | 46 | | |
| |||
335 | 339 | | |
336 | 340 | | |
337 | 341 | | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
| 345 | + | |
338 | 346 | | |
339 | | - | |
340 | | - | |
341 | | - | |
342 | | - | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
343 | 356 | | |
344 | 357 | | |
345 | 358 | | |
346 | 359 | | |
347 | 360 | | |
348 | 361 | | |
349 | | - | |
350 | | - | |
351 | | - | |
352 | | - | |
353 | | - | |
| 362 | + | |
| 363 | + | |
| 364 | + | |
| 365 | + | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
354 | 372 | | |
355 | 373 | | |
356 | 374 | | |
357 | 375 | | |
358 | 376 | | |
359 | 377 | | |
360 | | - | |
361 | | - | |
362 | | - | |
| 378 | + | |
| 379 | + | |
| 380 | + | |
363 | 381 | | |
364 | 382 | | |
365 | 383 | | |
| |||
518 | 536 | | |
519 | 537 | | |
520 | 538 | | |
521 | | - | |
| 539 | + | |
522 | 540 | | |
523 | 541 | | |
524 | 542 | | |
| |||
529 | 547 | | |
530 | 548 | | |
531 | 549 | | |
532 | | - | |
| 550 | + | |
533 | 551 | | |
534 | 552 | | |
535 | 553 | | |
536 | 554 | | |
537 | 555 | | |
538 | 556 | | |
539 | 557 | | |
540 | | - | |
| 558 | + | |
541 | 559 | | |
542 | 560 | | |
543 | 561 | | |
| |||
548 | 566 | | |
549 | 567 | | |
550 | 568 | | |
551 | | - | |
| 569 | + | |
552 | 570 | | |
553 | 571 | | |
554 | 572 | | |
| |||
558 | 576 | | |
559 | 577 | | |
560 | 578 | | |
561 | | - | |
| 579 | + | |
562 | 580 | | |
563 | 581 | | |
564 | 582 | | |
| |||
568 | 586 | | |
569 | 587 | | |
570 | 588 | | |
571 | | - | |
| 589 | + | |
572 | 590 | | |
573 | 591 | | |
574 | 592 | | |
| |||
578 | 596 | | |
579 | 597 | | |
580 | 598 | | |
581 | | - | |
| 599 | + | |
582 | 600 | | |
583 | 601 | | |
584 | 602 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
237 | 237 | | |
238 | 238 | | |
239 | 239 | | |
240 | | - | |
| 240 | + | |
241 | 241 | | |
242 | 242 | | |
243 | 243 | | |
| |||
256 | 256 | | |
257 | 257 | | |
258 | 258 | | |
259 | | - | |
| 259 | + | |
260 | 260 | | |
261 | 261 | | |
262 | 262 | | |
| |||
278 | 278 | | |
279 | 279 | | |
280 | 280 | | |
281 | | - | |
| 281 | + | |
282 | 282 | | |
283 | 283 | | |
284 | 284 | | |
| |||
300 | 300 | | |
301 | 301 | | |
302 | 302 | | |
303 | | - | |
| 303 | + | |
304 | 304 | | |
305 | 305 | | |
306 | 306 | | |
| |||
353 | 353 | | |
354 | 354 | | |
355 | 355 | | |
356 | | - | |
| 356 | + | |
357 | 357 | | |
358 | 358 | | |
359 | 359 | | |
| |||
374 | 374 | | |
375 | 375 | | |
376 | 376 | | |
377 | | - | |
| 377 | + | |
378 | 378 | | |
379 | 379 | | |
380 | 380 | | |
| |||
397 | 397 | | |
398 | 398 | | |
399 | 399 | | |
400 | | - | |
| 400 | + | |
401 | 401 | | |
402 | 402 | | |
403 | 403 | | |
| |||
421 | 421 | | |
422 | 422 | | |
423 | 423 | | |
424 | | - | |
| 424 | + | |
425 | 425 | | |
426 | 426 | | |
427 | 427 | | |
| |||
Lines changed: 31 additions & 25 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
277 | 277 | | |
278 | 278 | | |
279 | 279 | | |
280 | | - | |
281 | | - | |
282 | 280 | | |
283 | 281 | | |
284 | 282 | | |
| |||
302 | 300 | | |
303 | 301 | | |
304 | 302 | | |
305 | | - | |
306 | | - | |
307 | 303 | | |
308 | 304 | | |
309 | 305 | | |
| |||
325 | 321 | | |
326 | 322 | | |
327 | 323 | | |
328 | | - | |
329 | | - | |
330 | 324 | | |
331 | 325 | | |
332 | 326 | | |
| |||
350 | 344 | | |
351 | 345 | | |
352 | 346 | | |
353 | | - | |
| 347 | + | |
| 348 | + | |
| 349 | + | |
| 350 | + | |
354 | 351 | | |
355 | | - | |
| 352 | + | |
356 | 353 | | |
357 | 354 | | |
358 | 355 | | |
| |||
372 | 369 | | |
373 | 370 | | |
374 | 371 | | |
375 | | - | |
| 372 | + | |
| 373 | + | |
| 374 | + | |
| 375 | + | |
| 376 | + | |
| 377 | + | |
| 378 | + | |
376 | 379 | | |
377 | 380 | | |
378 | 381 | | |
| |||
634 | 637 | | |
635 | 638 | | |
636 | 639 | | |
637 | | - | |
638 | | - | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
639 | 643 | | |
640 | 644 | | |
641 | 645 | | |
| |||
661 | 665 | | |
662 | 666 | | |
663 | 667 | | |
664 | | - | |
665 | | - | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
666 | 671 | | |
667 | 672 | | |
668 | 673 | | |
| |||
691 | 696 | | |
692 | 697 | | |
693 | 698 | | |
694 | | - | |
695 | | - | |
696 | 699 | | |
697 | 700 | | |
698 | 701 | | |
| |||
722 | 725 | | |
723 | 726 | | |
724 | 727 | | |
725 | | - | |
726 | | - | |
| 728 | + | |
| 729 | + | |
| 730 | + | |
727 | 731 | | |
728 | 732 | | |
729 | 733 | | |
| |||
745 | 749 | | |
746 | 750 | | |
747 | 751 | | |
748 | | - | |
749 | | - | |
750 | 752 | | |
751 | 753 | | |
752 | 754 | | |
| |||
763 | 765 | | |
764 | 766 | | |
765 | 767 | | |
766 | | - | |
767 | | - | |
| 768 | + | |
| 769 | + | |
| 770 | + | |
768 | 771 | | |
| 772 | + | |
769 | 773 | | |
770 | 774 | | |
771 | 775 | | |
| |||
793 | 797 | | |
794 | 798 | | |
795 | 799 | | |
796 | | - | |
797 | | - | |
| 800 | + | |
| 801 | + | |
| 802 | + | |
798 | 803 | | |
799 | 804 | | |
800 | 805 | | |
| |||
822 | 827 | | |
823 | 828 | | |
824 | 829 | | |
825 | | - | |
826 | | - | |
| 830 | + | |
| 831 | + | |
| 832 | + | |
827 | 833 | | |
828 | 834 | | |
829 | 835 | | |
| |||
0 commit comments