diff --git a/CHANGELOG.md b/CHANGELOG.md
index 338ef06..985abd8 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -25,6 +25,7 @@ and this project does adhere to [Semantic Versioning](https://semver.org/spec/v2
- *UI:* Accessibility hints for most UI elements
- *UI*: Show welcome message upon first usage (empty db)
- *UI*: Custom colors via user defaults plist (bar icon tint & unread indicator)
+- *UI:* Unread indicator for groups
- Welcome message also adds Github releases feed
- Config URL scheme `barss:` with `open/preferences`, `config/fixcache`, and `backup/show`
diff --git a/baRSS/Helper/UserPrefs.h b/baRSS/Helper/UserPrefs.h
index eda8088..5c4fa80 100644
--- a/baRSS/Helper/UserPrefs.h
+++ b/baRSS/Helper/UserPrefs.h
@@ -36,23 +36,24 @@
// ------ General settings ------ (Preferences > General Tab) ------
/** default: @c nil */ static NSString* const Pref_defaultHttpApplication = @"defaultHttpApplication";
// ------ Appearance matrix ------ (Preferences > Appearance Tab) ------
-/** default: @c YES */ static NSString* const Pref_globalTintMenuIcon = @"globalTintMenuBarIcon";
-/** default: @c YES */ static NSString* const Pref_globalUpdateAll = @"globalUpdateAll";
-/** default: @c YES */ static NSString* const Pref_globalOpenUnread = @"globalOpenUnread";
-/** default: @c YES */ static NSString* const Pref_globalMarkRead = @"globalMarkRead";
-/** default: @c YES */ static NSString* const Pref_globalMarkUnread = @"globalMarkUnread";
-/** default: @c YES */ static NSString* const Pref_globalUnreadCount = @"globalUnreadCount";
-/** default: @c YES */ static NSString* const Pref_groupOpenUnread = @"groupOpenUnread";
-/** default: @c YES */ static NSString* const Pref_groupMarkRead = @"groupMarkRead";
-/** default: @c YES */ static NSString* const Pref_groupMarkUnread = @"groupMarkUnread";
-/** default: @c YES */ static NSString* const Pref_groupUnreadCount = @"groupUnreadCount";
-/** default: @c YES */ static NSString* const Pref_feedOpenUnread = @"feedOpenUnread";
-/** default: @c YES */ static NSString* const Pref_feedMarkRead = @"feedMarkRead";
-/** default: @c YES */ static NSString* const Pref_feedMarkUnread = @"feedMarkUnread";
-/** default: @c YES */ static NSString* const Pref_feedUnreadCount = @"feedUnreadCount";
-/** default: @c YES */ static NSString* const Pref_feedUnreadIndicator = @"feedUnreadIndicator";
-/** default: @c NO */ static NSString* const Pref_feedTruncateTitle = @"feedTruncateTitle";
-/** default: @c NO */ static NSString* const Pref_feedLimitArticles = @"feedLimitArticles";
+/** default: @c YES */ static NSString* const Pref_globalTintMenuIcon = @"globalTintMenuBarIcon";
+/** default: @c YES */ static NSString* const Pref_globalUpdateAll = @"globalUpdateAll";
+/** default: @c YES */ static NSString* const Pref_globalOpenUnread = @"globalOpenUnread";
+/** default: @c YES */ static NSString* const Pref_globalMarkRead = @"globalMarkRead";
+/** default: @c YES */ static NSString* const Pref_globalMarkUnread = @"globalMarkUnread";
+/** default: @c YES */ static NSString* const Pref_globalUnreadCount = @"globalUnreadCount";
+/** default: @c YES */ static NSString* const Pref_groupOpenUnread = @"groupOpenUnread";
+/** default: @c YES */ static NSString* const Pref_groupMarkRead = @"groupMarkRead";
+/** default: @c YES */ static NSString* const Pref_groupMarkUnread = @"groupMarkUnread";
+/** default: @c YES */ static NSString* const Pref_groupUnreadCount = @"groupUnreadCount";
+/** default: @c NO */ static NSString* const Pref_groupUnreadIndicator = @"groupUnreadIndicator";
+/** default: @c YES */ static NSString* const Pref_feedOpenUnread = @"feedOpenUnread";
+/** default: @c YES */ static NSString* const Pref_feedMarkRead = @"feedMarkRead";
+/** default: @c YES */ static NSString* const Pref_feedMarkUnread = @"feedMarkUnread";
+/** default: @c YES */ static NSString* const Pref_feedUnreadCount = @"feedUnreadCount";
+/** default: @c YES */ static NSString* const Pref_feedUnreadIndicator = @"feedUnreadIndicator";
+/** default: @c NO */ static NSString* const Pref_feedTruncateTitle = @"feedTruncateTitle";
+/** default: @c NO */ static NSString* const Pref_feedLimitArticles = @"feedLimitArticles";
// ------ Hidden preferences ------ only modifiable via `defaults write de.relikd.baRSS {KEY}` ------
/** default: @c 10 */ static NSString* const Pref_openFewLinksLimit = @"openFewLinksLimit";
/** default: @c 60 */ static NSString* const Pref_shortArticleNamesLimit = @"shortArticleNamesLimit";
diff --git a/baRSS/Helper/UserPrefs.m b/baRSS/Helper/UserPrefs.m
index e2b029a..2fd3c0d 100644
--- a/baRSS/Helper/UserPrefs.m
+++ b/baRSS/Helper/UserPrefs.m
@@ -39,7 +39,8 @@ void UserPrefsInit(void) {
Pref_globalMarkUnread, Pref_groupMarkUnread, Pref_feedMarkUnread,
Pref_globalUnreadCount, Pref_groupUnreadCount, Pref_feedUnreadCount,
Pref_feedUnreadIndicator]);
- defaultsAppend(defs, @NO, @[Pref_feedTruncateTitle,
+ defaultsAppend(defs, @NO, @[Pref_groupUnreadIndicator,
+ Pref_feedTruncateTitle,
Pref_feedLimitArticles]);
// Display limits & truncation ( defaults write de.relikd.baRSS {KEY} -int 10 )
[defs setObject:[NSNumber numberWithUnsignedInteger:10] forKey:Pref_openFewLinksLimit];
diff --git a/baRSS/Info.plist b/baRSS/Info.plist
index 90d1b57..369dfe4 100644
--- a/baRSS/Info.plist
+++ b/baRSS/Info.plist
@@ -70,7 +70,7 @@
CFBundleVersion
- 14336
+ 14344
LSApplicationCategoryType
public.app-category.news
LSMinimumSystemVersion
diff --git a/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m b/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m
index 344bb88..e22a221 100644
--- a/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m
+++ b/baRSS/Preferences/Appearance Tab/SettingsAppearanceView.m
@@ -51,7 +51,7 @@
[self entry:NSLocalizedString(@"Mark all read", nil) c1:Pref_globalMarkRead c2:Pref_groupMarkRead c3:Pref_feedMarkRead];
[self entry:NSLocalizedString(@"Mark all unread", nil) c1:Pref_globalMarkUnread c2:Pref_groupMarkUnread c3:Pref_feedMarkUnread];
[self entry:NSLocalizedString(@"Number of unread articles", nil) c1:Pref_globalUnreadCount c2:Pref_groupUnreadCount c3:Pref_feedUnreadCount];
- [self entry:NSLocalizedString(@"Indicator for unread articles", nil) c1:nil c2:nil c3:Pref_feedUnreadIndicator];
+ [self entry:NSLocalizedString(@"Indicator for unread articles", nil) c1:nil c2:Pref_groupUnreadIndicator c3:Pref_feedUnreadIndicator];
[[self entry:NSLocalizedString(@"Truncate article title", nil) c1:nil c2:nil c3:Pref_feedTruncateTitle]
tooltip:NSLocalizedString(@"Truncate article title after 60 characters", nil)];
[[self entry:NSLocalizedString(@"Limit number of articles", nil) c1:nil c2:nil c3:Pref_feedLimitArticles]
diff --git a/baRSS/Status Bar Menu/NSMenu+Ext.m b/baRSS/Status Bar Menu/NSMenu+Ext.m
index 8ba0d3b..4961b8e 100644
--- a/baRSS/Status Bar Menu/NSMenu+Ext.m
+++ b/baRSS/Status Bar Menu/NSMenu+Ext.m
@@ -246,6 +246,7 @@ typedef NS_ENUM(NSInteger, MenuItemTag) {
- (void)setTitleCount:(NSUInteger)count {
if (self.tag == TagTitleCountVisible) {
self.tag = 0; // clear mask
+ self.state = NSControlStateValueOff;
NSUInteger loc = [self.title rangeOfString:@" (" options:NSLiteralSearch | NSBackwardsSearch].location;
if (loc != NSNotFound)
self.title = [self.title substringToIndex:loc];
@@ -253,6 +254,9 @@ typedef NS_ENUM(NSInteger, MenuItemTag) {
if (count > 0 && UserPrefsBool(self.submenu.isFeedMenu ? Pref_feedUnreadCount : Pref_groupUnreadCount)) {
self.tag = TagTitleCountVisible; // apply new mask
self.title = [self.title stringByAppendingFormat:@" (%ld)", count];
+ self.onStateImage = [NSImage imageNamed:RSSImageMenuItemUnread];
+ if (UserPrefsBool(Pref_groupUnreadIndicator))
+ self.state = NSControlStateValueOn;
}
}