From a60a4e420922edf40ca5244b801d24a23d0ab97b Mon Sep 17 00:00:00 2001 From: Patrick Robertson Date: Mon, 3 Feb 2025 22:11:07 +0100 Subject: [PATCH] Fix bug from pasteboard refactoring + unit test --- .../Code-QuickStepCore/QSObject_Pasteboard.m | 3 ++- .../Quicksilver Tests/Quicksilver_Tests.m | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/Quicksilver/Code-QuickStepCore/QSObject_Pasteboard.m b/Quicksilver/Code-QuickStepCore/QSObject_Pasteboard.m index a5f0b3a07..5b0bc47d1 100644 --- a/Quicksilver/Code-QuickStepCore/QSObject_Pasteboard.m +++ b/Quicksilver/Code-QuickStepCore/QSObject_Pasteboard.m @@ -12,7 +12,8 @@ id objectForPasteboardType(NSPasteboard *pasteboard, NSString *type) { if ([PLISTTYPES containsObject:type]) { return [pasteboard propertyListForType:type]; } - if ([NSPasteboardTypeString isEqualToString:type] || UTTypeConformsTo((__bridge CFStringRef)type, kUTTypeText) || [type hasPrefix:@"QSObject"]) { + // NOTE: The NSStringPboardType is required here, since for some stupid reason NSPasteboardTypeString != NSStringPboardType + if ([NSPasteboardTypeString isEqualToString:type] || UTTypeConformsTo((__bridge CFStringRef)type, kUTTypeText) || [type hasPrefix:@"QSObject"] || [type isEqual:NSStringPboardType]) { if ([pasteboard stringForType:type]) { return [pasteboard stringForType:type]; } diff --git a/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m b/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m index e697c06a0..f9a62cdcc 100644 --- a/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m +++ b/Quicksilver/Quicksilver Tests/Quicksilver_Tests.m @@ -47,6 +47,28 @@ - (void)testRightArrowIntoSynonym { XCTAssertTrue([[i dSelector] objectValue] != proxy); } +- (void)testCreateObjectFromRTFClipboard { + // create an rtf string in the clipboard + NSPasteboard *pboard = [NSPasteboard generalPasteboard]; + + NSAttributedString *rtfString = [[NSAttributedString alloc] initWithRTF:[@"{\\rtf1\\ansi\\ansicpg1252\\cocoartf1187\\cocoasubrtf340\n{\\fonttbl\\f0\\fnil\\fcharset0 Monaco;}\n{\\colortbl;\\red255\\green0\\blue0;}\n\\margl1440\\margr1440\\vieww10800\\viewh8400\\viewkind0\n\\pard\\tx720\\tx1440\\tx2160\\tx2880\\tx3600\\tx4320\\tx5040\\tx5760\\tx6480\\tx7200\\tx7920\\tx8640\\ql\\qnatural\\pardirnatural\n\n\\f0\\fs24 \\cf1 hello}" dataUsingEncoding:NSUTF8StringEncoding] documentAttributes:nil]; + [pboard clearContents]; + [pboard writeObjects:@[rtfString]]; + + // create a QSObject from the clipboard + QSObject *obj = [QSObject objectWithPasteboard:pboard]; + XCTAssertTrue([obj containsType:NSPasteboardTypeRTF] && [[obj primaryType] isEqualToString:NSPasteboardTypeRTF]); + + // now write this object to the pasteboard + [pboard clearContents]; + XCTAssertTrue([obj putOnPasteboard:pboard]); + + // read the object back from the pasteboard + QSObject *obj2 = [QSObject objectWithPasteboard:pboard]; + XCTAssertTrue([obj2 containsType:NSPasteboardTypeRTF] && [[obj2 primaryType] isEqualToString:NSPasteboardTypeRTF]); + +} + // test to make sure when file objects are added to the clipboard, a string of their path is also copied - (void)testAddingFileObjectToPasteboard { NSString *path = @"/Applications/Safari.app";