From d4bae3cd09045bec4f65cb95604f42fc32fc0612 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20R=C4=99bacz?= Date: Mon, 12 Jan 2026 08:33:07 +0100 Subject: [PATCH] CtrlCore: Cocoa always use bundled icon (#339) * CtrlCore: Cocoa always use bundled icon. * Reworked * .cosmetics * .simplified --- uppsrc/CtrlCore/CocoCtrl.h | 15 ++++++++++----- uppsrc/CtrlCore/CocoTop.h | 2 ++ uppsrc/CtrlCore/{CocoTop.cpp => CocoTop.mm} | 14 +++++++++++--- uppsrc/CtrlCore/CocoWin.mm | 5 +++++ uppsrc/CtrlCore/CtrlCore.upp | 2 +- uppsrc/ide/ide.cpp | 6 ++++++ uppsrc/ide/main.cpp | 3 +++ 7 files changed, 38 insertions(+), 9 deletions(-) rename uppsrc/CtrlCore/{CocoTop.cpp => CocoTop.mm} (57%) diff --git a/uppsrc/CtrlCore/CocoCtrl.h b/uppsrc/CtrlCore/CocoCtrl.h index b670ff146..aa215a04e 100644 --- a/uppsrc/CtrlCore/CocoCtrl.h +++ b/uppsrc/CtrlCore/CocoCtrl.h @@ -2,8 +2,10 @@ private: friend struct MMCtrl; friend struct MMImp; - static bool local_dnd_copy; - static Ptr lastActive; + static bool local_dnd_copy; + static Ptr lastActive; + + static bool always_use_bundled_icon; friend void CocoInit(int argc, const char **argv, const char **envptr); @@ -15,11 +17,14 @@ protected: static void SyncAppIcon(); static void ResetCocoaMouse(); static void DoCancelPreedit(); - static int GetCaretBlinkTime() { return 500; } + static int GetCaretBlinkTime() { return 500; } public: - static void EndSession() {} - static bool IsEndSession() { return false; } + static void EndSession() {} + static bool IsEndSession() { return false; } + + static void SetAlwaysUseBundledIcon(bool enable = true) { always_use_bundled_icon = enable; } + static bool IsAlwaysUseBundledIcon() { return always_use_bundled_icon; } void *GetNSWindow() const; void *GetNSView() const; diff --git a/uppsrc/CtrlCore/CocoTop.h b/uppsrc/CtrlCore/CocoTop.h index ff9a89d09..69eb75eae 100644 --- a/uppsrc/CtrlCore/CocoTop.h +++ b/uppsrc/CtrlCore/CocoTop.h @@ -21,3 +21,5 @@ public: Event WhenDockMenu; void SetMainMenu(Event menu); + void SetBadgeLabel(const String& label = String()); + \ No newline at end of file diff --git a/uppsrc/CtrlCore/CocoTop.cpp b/uppsrc/CtrlCore/CocoTop.mm similarity index 57% rename from uppsrc/CtrlCore/CocoTop.cpp rename to uppsrc/CtrlCore/CocoTop.mm index 0b94a0f06..8d7a86223 100644 --- a/uppsrc/CtrlCore/CocoTop.cpp +++ b/uppsrc/CtrlCore/CocoTop.mm @@ -2,7 +2,9 @@ #ifdef GUI_COCOA -NAMESPACE_UPP +#include + +namespace Upp { #define LLOG(x) // LOG(x) @@ -25,7 +27,13 @@ bool TopWindow::IsTopMost() const void TopWindow::GuiPlatformConstruct() { } - -END_UPP_NAMESPACE + +void TopWindow::SetBadgeLabel(const String& label) +{ + NSString* nlabel = [NSString stringWithUTF8String:~label]; + [[NSApp dockTile] setBadgeLabel:nlabel]; +} + +} #endif diff --git a/uppsrc/CtrlCore/CocoWin.mm b/uppsrc/CtrlCore/CocoWin.mm index 5c61432ca..1323964ba 100644 --- a/uppsrc/CtrlCore/CocoWin.mm +++ b/uppsrc/CtrlCore/CocoWin.mm @@ -35,6 +35,8 @@ namespace Upp { static Vector> mmtopctrl; // should work without Ptr, but let us be defensive.... +bool Ctrl::always_use_bundled_icon = false; + Ctrl *Ctrl::GetOwner() { GuiLock __; @@ -276,6 +278,9 @@ void TopWindow::SyncTitle() void Ctrl::SyncAppIcon() { + if(always_use_bundled_icon) + return; + Ctrl *q = GetFocusCtrl(); if(!q) q = lastActive; diff --git a/uppsrc/CtrlCore/CtrlCore.upp b/uppsrc/CtrlCore/CtrlCore.upp index 16ccf00c1..3d60540e7 100644 --- a/uppsrc/CtrlCore/CtrlCore.upp +++ b/uppsrc/CtrlCore/CtrlCore.upp @@ -124,7 +124,7 @@ file CocoClip.mm, CocoCtrl.cpp, CocoWnd.cpp, - CocoTop.cpp, + CocoTop.mm, CocoChSysInit.cpp, "RTF support" readonly separator, ParseRTF.cpp, diff --git a/uppsrc/ide/ide.cpp b/uppsrc/ide/ide.cpp index c38953da4..54910ce6d 100644 --- a/uppsrc/ide/ide.cpp +++ b/uppsrc/ide/ide.cpp @@ -570,6 +570,12 @@ void Ide::SetIdeState(int newstate) } void Ide::MakeIcon() { +#ifdef PLATFORM_COCOA + String badge = IsOpen() ? main : ""; + SetBadgeLabel(badge); + return; +#endif + Image li = IdeImg::Icon256(); #ifndef PLATFORM_POSIX // Kubuntu is using this icon for window while ignoring it in taskbar... WString mp = main.ToWString(); diff --git a/uppsrc/ide/main.cpp b/uppsrc/ide/main.cpp index 3df296ee4..78bc14205 100644 --- a/uppsrc/ide/main.cpp +++ b/uppsrc/ide/main.cpp @@ -217,6 +217,9 @@ void AppMain___() Ctrl::SetDarkThemeEnabled(); Ctrl::SkinChangeSensitive(); Ctrl::SetAppName("TheIDE"); +#ifdef PLATFORM_COCOA + Ctrl::SetAlwaysUseBundledIcon(); +#endif SetLanguage(LNG_ENGLISH); SetDefaultCharset(CHARSET_UTF8);