@@ -298,6 +298,15 @@ - (BOOL)shouldDragWindowForEvent:(NSEvent *)event {
298298
299299- (void )showContextMenuForEvent : (NSEvent *)event {
300300 NSMenu *menu = [[NSMenu alloc ] initWithTitle: @" Contextual Menu" ];
301+ if ([_component respondsToSelector: @selector (statusBarComponentCopyableString )]) {
302+ NSString *copyableString = [_component statusBarComponentCopyableString ];
303+ if (copyableString.length > 0 ) {
304+ [menu addItemWithTitle: @" Copy"
305+ action: @selector (copyComponentValue: )
306+ keyEquivalent: @" " ];
307+ [menu addItem: [NSMenuItem separatorItem ]];
308+ }
309+ }
301310 if (![_component statusBarComponentIsInternal ]) {
302311 if ([[_component statusBarComponentKnobs ] count ]) {
303312 [menu addItemWithTitle: [NSString stringWithFormat: @" Configure %@ " , [self .component statusBarComponentShortDescription ]]
@@ -331,6 +340,16 @@ - (void)showContextMenuForEvent:(NSEvent *)event {
331340 [NSMenu popUpContextMenu: menu withEvent: event forView: self ];
332341}
333342
343+ - (void )copyComponentValue : (id )sender {
344+ if ([_component respondsToSelector: @selector (statusBarComponentCopyableString )]) {
345+ NSString *string = [_component statusBarComponentCopyableString ];
346+ if (string.length > 0 ) {
347+ [[NSPasteboard generalPasteboard ] clearContents ];
348+ [[NSPasteboard generalPasteboard ] setString: string forType: NSPasteboardTypeString ];
349+ }
350+ }
351+ }
352+
334353- (void )configureComponent : (id )sender {
335354 [self .delegate statusBarContainerView: self configureComponent: self .component];
336355}
0 commit comments