diff --git a/ui/platform/linux/ui_utility_linux.cpp b/ui/platform/linux/ui_utility_linux.cpp index aff221c..2479325 100644 --- a/ui/platform/linux/ui_utility_linux.cpp +++ b/ui/platform/linux/ui_utility_linux.cpp @@ -548,6 +548,8 @@ void ShowWindowMenu(not_null widget, const QPoint &point) { } } +namespace internal { + TitleControls::Layout TitleControlsLayout() { [[maybe_unused]] static const auto Inited = [] { #ifndef DESKTOP_APP_DISABLE_X11_INTEGRATION @@ -634,5 +636,6 @@ TitleControls::Layout TitleControlsLayout() { }; } +} // namespace internal } // namespace Platform } // namespace Ui diff --git a/ui/platform/mac/ui_utility_mac.mm b/ui/platform/mac/ui_utility_mac.mm index 8ada998..857db1e 100644 --- a/ui/platform/mac/ui_utility_mac.mm +++ b/ui/platform/mac/ui_utility_mac.mm @@ -147,6 +147,8 @@ std::optional IsOverlapped( return false; } +namespace internal { + TitleControls::Layout TitleControlsLayout() { return TitleControls::Layout{ .left = { @@ -157,5 +159,6 @@ TitleControls::Layout TitleControlsLayout() { }; } +} // namespace internal } // namespace Platform } // namespace Ui diff --git a/ui/platform/ui_platform_utility.cpp b/ui/platform/ui_platform_utility.cpp index 9a5d462..cb8286d 100644 --- a/ui/platform/ui_platform_utility.cpp +++ b/ui/platform/ui_platform_utility.cpp @@ -8,26 +8,33 @@ namespace Ui { namespace Platform { +namespace internal { namespace { -rpl::event_stream TitleControlsLayoutChanges; +auto &CachedTitleControlsLayout() { + using Layout = TitleControls::Layout; + static rpl::variable Result = TitleControlsLayout(); + return Result; +}; } // namespace +void NotifyTitleControlsLayoutChanged() { + CachedTitleControlsLayout() = TitleControlsLayout(); +} + +} // namespace internal + +TitleControls::Layout TitleControlsLayout() { + return internal::CachedTitleControlsLayout().current(); +} + rpl::producer TitleControlsLayoutValue() { - return rpl::single( - TitleControlsLayout() - ) | rpl::then( - TitleControlsLayoutChanged() - ); + return internal::CachedTitleControlsLayout().value(); } rpl::producer TitleControlsLayoutChanged() { - return TitleControlsLayoutChanges.events(); -} - -void NotifyTitleControlsLayoutChanged() { - TitleControlsLayoutChanges.fire_copy(TitleControlsLayout()); + return internal::CachedTitleControlsLayout().changes(); } } // namespace Platform diff --git a/ui/platform/ui_platform_utility.h b/ui/platform/ui_platform_utility.h index db24bcb..3def532 100644 --- a/ui/platform/ui_platform_utility.h +++ b/ui/platform/ui_platform_utility.h @@ -17,6 +17,13 @@ class PopupMenu; } // namespace Ui namespace Ui::Platform { +namespace internal { + +// Actual requestor, cached by the public interface +[[nodiscard]] TitleControls::Layout TitleControlsLayout(); +void NotifyTitleControlsLayoutChanged(); + +} // namespace internal [[nodiscard]] bool IsApplicationActive(); @@ -48,7 +55,6 @@ void ShowWindowMenu(not_null widget, const QPoint &point); [[nodiscard]] TitleControls::Layout TitleControlsLayout(); [[nodiscard]] rpl::producer TitleControlsLayoutValue(); [[nodiscard]] rpl::producer TitleControlsLayoutChanged(); -void NotifyTitleControlsLayoutChanged(); void FixPopupMenuNativeEmojiPopup(not_null menu); diff --git a/ui/platform/win/ui_utility_win.cpp b/ui/platform/win/ui_utility_win.cpp index 90b9108..bb1cc32 100644 --- a/ui/platform/win/ui_utility_win.cpp +++ b/ui/platform/win/ui_utility_win.cpp @@ -134,6 +134,8 @@ void ShowWindowMenu(not_null widget, const QPoint &point) { MAKELPARAM(p.x, p.y)); } +namespace internal { + TitleControls::Layout TitleControlsLayout() { return TitleControls::Layout{ .right = { @@ -144,6 +146,8 @@ TitleControls::Layout TitleControlsLayout() { }; } +} // namespace internal + void FixPopupMenuNativeEmojiPopup(not_null menu) { // Windows native emoji selector, that can be called by Win+. shortcut, // is behaving strangely within an input field in a popup menu.