Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Touch Bar support #345

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions Messenger/AppDelegate.mm
Original file line number Diff line number Diff line change
Expand Up @@ -249,6 +249,11 @@ - (void)applicationDidFinishLaunching:(NSNotification*)notification {
toItem:_curtainView
attribute:NSLayoutAttributeCenterY
multiplier:1.f constant:0.f]];

// Touch bar
if ([NSTouchBar class]) {
[[NSApplication sharedApplication] setAutomaticCustomizeTouchBarMenuItemEnabled:YES];
}

// Present main window
[_window makeKeyAndOrderFront:self];
Expand Down
2 changes: 1 addition & 1 deletion Messenger/FBMWindow.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
@interface FBMWindow : NSWindow <NSWindowDelegate>
@interface FBMWindow : NSWindow <NSWindowDelegate, NSTouchBarDelegate>

@property (nonatomic) CGFloat titlebarHeight;

Expand Down
42 changes: 42 additions & 0 deletions Messenger/FBMWindow.mm
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,48 @@ - (void)hideTitlebarAnimate:(BOOL)animate {



#pragma mark - Touch Bar

static NSString * const touchBarIdentifier = @"me.rsms.fbmessenger.touchbar";
static NSString * const touchBarComposeButtonIdentifier = @"me.rsms.fbmessenger.touchbar.compose";
static NSString * const touchBarConversationNavigationIdentifier = @"me.rsms.fbmessenger.touchbar.conversationNavigation";

- (NSTouchBar *)makeTouchBar {
auto bar = [NSTouchBar new];
bar.delegate = self;
bar.customizationIdentifier = touchBarIdentifier;
bar.defaultItemIdentifiers = @[touchBarComposeButtonIdentifier, NSTouchBarItemIdentifierOtherItemsProxy, NSTouchBarItemIdentifierFlexibleSpace, touchBarConversationNavigationIdentifier];
bar.customizationAllowedItemIdentifiers = @[touchBarComposeButtonIdentifier, touchBarConversationNavigationIdentifier];

return bar;
}

- (NSTouchBarItem *)touchBar:(NSTouchBar *)touchBar makeItemForIdentifier:(NSTouchBarItemIdentifier)identifier {
if ([identifier isEqual:touchBarComposeButtonIdentifier]) {
auto item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
item.customizationLabel = @"New Message";
item.view = [NSButton buttonWithImage:[NSImage imageNamed:NSImageNameTouchBarComposeTemplate] target:[NSApp delegate] action:@selector(composeNewMessage:)];
return item;
}
if ([identifier isEqual:touchBarConversationNavigationIdentifier]) {
auto item = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
item.customizationLabel = @"Conversation Navigation";
auto segmentedControl = [NSSegmentedControl segmentedControlWithImages:@[[NSImage imageNamed:NSImageNameTouchBarGoUpTemplate], [NSImage imageNamed:NSImageNameTouchBarGoDownTemplate]] trackingMode:NSSegmentSwitchTrackingMomentary target:self action:@selector(conversationNavigationSegmentedControlDidSelect:)];
segmentedControl.segmentStyle = NSSegmentStyleSeparated;
item.view = segmentedControl;
return item;
}
return nil;
}

- (void)conversationNavigationSegmentedControlDidSelect:(NSSegmentedControl *)sender {
auto delegate = (AppDelegate *)[NSApp delegate];
if (sender.selectedSegment == 0) [delegate selectNewerConversation:sender];
else if (sender.selectedSegment == 1) [delegate selectOlderConversation:sender];
}



#pragma mark - NSWindowDelegate


Expand Down
6 changes: 5 additions & 1 deletion website/app/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -302,7 +302,11 @@
},

currentConversationItem: function() {
return document.querySelector('li[aria-relevant="additions text"]');
// when a conversation is unread, it has both aria-relevant _and_ aria-live.
// so we are looking for the element with aria-relevant but _not_ aria-live, _unless_ there's only one aria-relevant (then it's selected and unread).
var item = document.querySelector('div[aria-label="Conversations"] li[aria-relevant]:not([aria-live])');
if (!item) item = document.querySelector('div[aria-label="Conversations"] li[aria-relevant]');
return item;
},

canSelectNewerConversation: function () {
Expand Down