Use shorter 'FAQ' prefix for search results instead of full
'Telegram FAQ' that's used for the main FAQ button label.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Now FAQ entries appear in filtered search results when the query
matches, not just when query is empty. Uses same button cache and
first-letter index for both settings and FAQ entries.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Build search index once when the section is created instead
of recomputing on every query. Use first-letter lookup for
O(1) candidate filtering, following the pattern from theme
editor's searchByQuery implementation.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use the stepDataReference mechanism to save and restore the
search query when navigating from results to a section and back.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use TextUtilities::PrepareSearchWords() to normalize query and
entry text: split into words, remove accents, and lowercase.
Match by word prefix: each query word must match at least one
entry word by startsWith().
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
SearchEntry now has an optional `deeplink` field. When set, clicking
the search result activates the deeplink URL instead of navigating.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
The custom build method in Main::setupContent() was missing the
HighlightRegistry setup, so widgets added via builder.add() with
search entries weren't being registered for highlighting.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
sectionPath() was starting with parentId instead of the section itself,
causing subtitles to skip the section name the entry belongs to.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Advanced class definition into .cpp file anonymous namespace
- Export only Type AdvancedId() in header
- Keep exported helper functions (SetupConnectionType, HasUpdate, etc.)
- Remove unused SetupWindowCloseBehaviorContent declaration
- Update callers to use AdvancedId() instead of Advanced::Id()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Main class definition from header to .cpp file
- Export only Type MainId() from header
- Update all external references from Main::Id() to MainId()
- Remove Builder::MainSection export from namespace
- Add missing includes for settings_common_session.h where needed
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move LocalPasscodeManage class into anonymous namespace
- Remove Builder::LocalPasscodeManageSection export from header
- Use inline buildMethod for setupContent()
- Keep Create/Check/Change enter-type sections as-is (form-based)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Calls class to anonymous namespace in .cpp
- Export only Type CallsId() from header
- Move AddCameraSubsection to be a free function (exported)
- Keep all device helper functions exported
- Update all references to use CallsId() and AddCameraSubsection()
- Add missing include to calls_group_settings.cpp
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Information class to anonymous namespace in .cpp
- Export only Type InformationId() from header
- Keep exported helpers: SetupAccounts, UpdatePhotoLocally, Badge::*
- Use custom buildMethod with HighlightRegistry for all profile widgets
- Update all references to use InformationId() instead of Information::Id()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Shortcuts class to anonymous namespace in .cpp
- Export only Type ShortcutsId() from header
- Use custom buildMethod with HighlightRegistry for reset button
- Update settings_chat.cpp to use ShortcutsId() instead of Shortcuts::Id()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move widget creation into BuildNotificationsTypeContent() builder function
- Use builder.add() with widget and search callbacks for indexed controls
- Update setupContent() to use build() with custom buildMethod that captures _type
- Remove manual highlight tracking (QPointer fields and showFinished() registrations)
- Class remains in header due to parameterized constructor (takes Notify type)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move create passkey button to builder.addButton() with proper ID
- Use builder.add() for dynamic passkeys list
- Move Passkeys class from header to .cpp (anonymous namespace)
- Remove extern SectionBuildMethod from header
- Have setupContent() call build() with custom build method
- Simplify header to only export Type PasskeysId() and PasskeysNoneBox()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move stats/gift/earn buttons to builder.addButton() with proper IDs
- Use builder.add() for dynamic subscriptions/history lists
- Have setupContent() call build(content, buildMethod)
- Remove extern SectionBuildMethod from header
- Extract BuildCurrencyWithdrawalSection helper function
- Add forward declarations for builder functions
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add BusinessState struct for shared state between setupContent and builder
- Update setupContent() to call build() with custom method
- Remove duplicate widget creation code
- Use state->setPaused and state->sponsoredButton instead of class members
- Remove extern SectionBuildMethod from header
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Move Blocked class to anonymous namespace in .cpp, export only
Type BlockedPeersId() in header. Remove extern SectionBuildMethod
from header. Update references in privacy_security and deep_links.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Sessions class to anonymous namespace in .cpp file
- Export only Type SessionsId() in header
- Use builder pattern with custom buildMethod for widget creation
- Handle highlights registration through WidgetContext
- Rename local Type enum to DeviceType to avoid conflict with Settings::Type
- Update all references to Sessions::Id() in other files to use SessionsId()
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move Folders class to anonymous namespace in .cpp
- Export only Type FoldersId() from header
- setupContent() uses custom SectionBuildMethod capturing state
- Widget creation through builder.add() callbacks
- Highlight registration via push_back
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Move settings_premium.h/cpp from settings/ to settings/sections/
- Add BuildHelper with kMeta for search indexing
- Index premium features and subscribe button for search
- Keep complex Premium section UI (custom top bar, feature list) as non-indexed
- Update all include paths across the codebase
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>