Skip to content

feat: personalize process-card settings and tiles#253

Open
q2333gh wants to merge 6 commits intoMerrit:mainfrom
q2333gh:personalize-process-card-settings-and-tiles
Open

feat: personalize process-card settings and tiles#253
q2333gh wants to merge 6 commits intoMerrit:mainfrom
q2333gh:personalize-process-card-settings-and-tiles

Conversation

@q2333gh
Copy link

@q2333gh q2333gh commented Feb 9, 2026

Summary

Personalize how process cards and window tiles are displayed in the apps list, with a dedicated settings section and test coverage.

Changes

  • Settings state & cubit

    • Persist the flags: hideProcessPid, showExecutableFirst, and limitWindowTitleToOneLine.
    • Add unit tests to guard default values and persistence paths.
  • Settings UI

    • Add a dedicated “Personalization” section to the settings page.
    • Move the tile pin option out of the behaviour section into this new section.
    • Localize the new labels in EN/DE/IT/ZH.
  • Window tiles

    • Make window tiles react to the new flags:
      • Hide the PID text when hideProcessPid is enabled.
      • Show the executable name first when showExecutableFirst is enabled.
      • Limit titles to a single line when limitWindowTitleToOneLine is enabled.
    • Extend widget tests to cover the new display permutations.

Testing

  • Ran flutter test for:
    • settings cubit/state tests
    • personalization widget tests
    • window tile widget tests
      All test suites passed locally (exit code 0).
  • Manually clicked through the settings UI to verify that the new toggles behave as expected.

Build / Artifacts

Screenshots

image image

@Merrit
Copy link
Owner

Merrit commented Feb 12, 2026

Your PR doesn't build.

ERROR: lib/settings/cubit/settings_state.dart:41:8: Error: The constructor function type '_SettingsState Function({List<AppSpecificHotkey> appSpecificHotKeys, bool autoRefresh, bool autoStart, bool closeToTray, HotKey hotKey, bool minimizeWindows, bool pinSuspendedWindows, int refreshInterval, bool showHiddenWindows, bool startHiddenInTray, bool working})' isn't a subtype of 'SettingsState Function({List<AppSpecificHotkey> appSpecificHotKeys, bool autoRefresh, bool autoStart, bool closeToTray, bool hideProcessPid, HotKey hotKey, bool limitWindowTitleToOneLine, bool minimizeWindows, bool pinSuspendedWindows, int refreshInterval, bool showExecutableFirst, bool showHiddenWindows, bool startHiddenInTray, bool working})'.
ERROR:  - '_SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR:  - 'List' is from 'dart:core'.
ERROR:  - 'AppSpecificHotkey' is from 'package:nyrna/core/models/apps_specific_hotkeys.dart' ('lib/core/models/apps_specific_hotkeys.dart').
ERROR:  - 'HotKey' is from 'package:hotkey_manager_platform_interface/src/hotkey.dart' ('../../.pub-cache/hosted/pub.dev/hotkey_manager_platform_interface-0.2.0/lib/src/hotkey.dart').
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR:   }) = _SettingsState;
ERROR:        ^
ERROR: lib/settings/cubit/settings_cubit.dart:167:25: Error: No named parameter with the name 'hideProcessPid'.
ERROR:     emit(state.copyWith(hideProcessPid: value));
ERROR:                         ^^^^^^^^^^^^^^
ERROR: lib/settings/cubit/settings_cubit.dart:172:25: Error: No named parameter with the name 'showExecutableFirst'.
ERROR:     emit(state.copyWith(showExecutableFirst: value));
ERROR:                         ^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/cubit/settings_cubit.dart:177:25: Error: No named parameter with the name 'limitWindowTitleToOneLine'.
ERROR:     emit(state.copyWith(limitWindowTitleToOneLine: value));
ERROR:                         ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:51:44: Error: The getter 'hideProcessPid' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'hideProcessPid'.
ERROR:       (SettingsCubit cubit) => cubit.state.hideProcessPid,
ERROR:                                            ^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:54:44: Error: The getter 'showExecutableFirst' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'showExecutableFirst'.
ERROR:       (SettingsCubit cubit) => cubit.state.showExecutableFirst,
ERROR:                                            ^^^^^^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:57:44: Error: The getter 'limitWindowTitleToOneLine' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'limitWindowTitleToOneLine'.
ERROR:       (SettingsCubit cubit) => cubit.state.limitWindowTitleToOneLine,
ERROR:                                            ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:45:24: Error: The getter 'hideProcessPid' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'hideProcessPid'.
ERROR:           value: state.hideProcessPid,
ERROR:                        ^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:70:24: Error: The getter 'showExecutableFirst' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'showExecutableFirst'.
ERROR:           value: state.showExecutableFirst,
ERROR:                        ^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:97:24: Error: The getter 'limitWindowTitleToOneLine' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'limitWindowTitleToOneLine'.
ERROR:           value: state.limitWindowTitleToOneLine,
ERROR:                        ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: Target kernel_snapshot_program failed: Exception
Building Linux application...                                           
Build process failed

@q2333gh
Copy link
Author

q2333gh commented Feb 13, 2026

Your PR doesn't build.

ERROR: lib/settings/cubit/settings_state.dart:41:8: Error: The constructor function type '_SettingsState Function({List<AppSpecificHotkey> appSpecificHotKeys, bool autoRefresh, bool autoStart, bool closeToTray, HotKey hotKey, bool minimizeWindows, bool pinSuspendedWindows, int refreshInterval, bool showHiddenWindows, bool startHiddenInTray, bool working})' isn't a subtype of 'SettingsState Function({List<AppSpecificHotkey> appSpecificHotKeys, bool autoRefresh, bool autoStart, bool closeToTray, bool hideProcessPid, HotKey hotKey, bool limitWindowTitleToOneLine, bool minimizeWindows, bool pinSuspendedWindows, int refreshInterval, bool showExecutableFirst, bool showHiddenWindows, bool startHiddenInTray, bool working})'.
ERROR:  - '_SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR:  - 'List' is from 'dart:core'.
ERROR:  - 'AppSpecificHotkey' is from 'package:nyrna/core/models/apps_specific_hotkeys.dart' ('lib/core/models/apps_specific_hotkeys.dart').
ERROR:  - 'HotKey' is from 'package:hotkey_manager_platform_interface/src/hotkey.dart' ('../../.pub-cache/hosted/pub.dev/hotkey_manager_platform_interface-0.2.0/lib/src/hotkey.dart').
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR:   }) = _SettingsState;
ERROR:        ^
ERROR: lib/settings/cubit/settings_cubit.dart:167:25: Error: No named parameter with the name 'hideProcessPid'.
ERROR:     emit(state.copyWith(hideProcessPid: value));
ERROR:                         ^^^^^^^^^^^^^^
ERROR: lib/settings/cubit/settings_cubit.dart:172:25: Error: No named parameter with the name 'showExecutableFirst'.
ERROR:     emit(state.copyWith(showExecutableFirst: value));
ERROR:                         ^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/cubit/settings_cubit.dart:177:25: Error: No named parameter with the name 'limitWindowTitleToOneLine'.
ERROR:     emit(state.copyWith(limitWindowTitleToOneLine: value));
ERROR:                         ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:51:44: Error: The getter 'hideProcessPid' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'hideProcessPid'.
ERROR:       (SettingsCubit cubit) => cubit.state.hideProcessPid,
ERROR:                                            ^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:54:44: Error: The getter 'showExecutableFirst' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'showExecutableFirst'.
ERROR:       (SettingsCubit cubit) => cubit.state.showExecutableFirst,
ERROR:                                            ^^^^^^^^^^^^^^^^^^^
ERROR: lib/apps_list/widgets/window_tile.dart:57:44: Error: The getter 'limitWindowTitleToOneLine' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'limitWindowTitleToOneLine'.
ERROR:       (SettingsCubit cubit) => cubit.state.limitWindowTitleToOneLine,
ERROR:                                            ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:45:24: Error: The getter 'hideProcessPid' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'hideProcessPid'.
ERROR:           value: state.hideProcessPid,
ERROR:                        ^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:70:24: Error: The getter 'showExecutableFirst' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'showExecutableFirst'.
ERROR:           value: state.showExecutableFirst,
ERROR:                        ^^^^^^^^^^^^^^^^^^^
ERROR: lib/settings/widgets/personalization_section.dart:97:24: Error: The getter 'limitWindowTitleToOneLine' isn't defined for the type 'SettingsState'.
ERROR:  - 'SettingsState' is from 'package:nyrna/settings/cubit/settings_cubit.dart' ('lib/settings/cubit/settings_cubit.dart').
ERROR: Try correcting the name to the name of an existing getter, or defining a getter or field named 'limitWindowTitleToOneLine'.
ERROR:           value: state.limitWindowTitleToOneLine,
ERROR:                        ^^^^^^^^^^^^^^^^^^^^^^^^^
ERROR: Target kernel_snapshot_program failed: Exception
Building Linux application...                                           
Build process failed

let me check it out and try to fix soon

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants