mirror of
https://github.com/gnustep/libs-gui.git
synced 2025-04-22 16:10:48 +00:00
Updates to support services
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@3317 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
1d359b7866
commit
8840d05e2e
4 changed files with 1353 additions and 620 deletions
|
@ -70,6 +70,7 @@ extern NSString *NSEventTrackingRunLoopMode;
|
|||
id key_window;
|
||||
id main_window;
|
||||
id delegate;
|
||||
id listener;
|
||||
int window_count;
|
||||
NSMenu *main_menu;
|
||||
NSMenuItem *windows_menu;
|
||||
|
@ -210,7 +211,9 @@ extern NSString *NSEventTrackingRunLoopMode;
|
|||
- (void)registerServicesMenuSendTypes:(NSArray *)sendTypes
|
||||
returnTypes:(NSArray *)returnTypes;
|
||||
- (NSMenu *)servicesMenu;
|
||||
- (id)servicesProvider;
|
||||
- (void)setServicesMenu:(NSMenu *)aMenu;
|
||||
- (void)setServicesProvider:(id)anObject;
|
||||
- validRequestorForSendType:(NSString *)sendType
|
||||
returnType:(NSString *)returnType;
|
||||
|
||||
|
@ -331,6 +334,11 @@ BOOL NSPerformService(NSString *item, NSPasteboard *pboard);
|
|||
//
|
||||
void NSUpdateDynamicServices(void);
|
||||
|
||||
//
|
||||
// Register object to handle services requests.
|
||||
//
|
||||
void
|
||||
NSRegisterServicesProvider(id provider, NSString *name);
|
||||
|
||||
int NSApplicationMain(int argc, const char **argv);
|
||||
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -59,8 +59,15 @@
|
|||
#include <Foundation/NSData.h>
|
||||
|
||||
static NSRange MakeRangeFromAbs(int a1,int a2) // not the same as NSMakeRange!
|
||||
{ if(a1< a2) return NSMakeRange(a1,a2-a1);
|
||||
else return NSMakeRange(a2,a1-a2);
|
||||
{
|
||||
if (a1 < 0)
|
||||
a1 = 0;
|
||||
if (a2 < 0)
|
||||
a2 = 0;
|
||||
if (a1 < a2)
|
||||
return NSMakeRange(a1,a2-a1);
|
||||
else
|
||||
return NSMakeRange(a2,a1-a2);
|
||||
}
|
||||
|
||||
extern BOOL NSEqualRanges(NSRange range1, NSRange range2); // should define in base FIX ME FAR
|
||||
|
@ -334,9 +341,19 @@ typedef enum
|
|||
//
|
||||
+ (void)initialize
|
||||
{
|
||||
if (self == [NSText class])
|
||||
{ [self setVersion:1]; // Initial version
|
||||
}
|
||||
if (self == [NSText class])
|
||||
{
|
||||
NSArray *r;
|
||||
NSArray *s;
|
||||
|
||||
[self setVersion:1]; // Initial version
|
||||
|
||||
r = [NSArray arrayWithObjects: NSStringPboardType, nil];
|
||||
s = [NSArray arrayWithObjects: NSStringPboardType, nil];
|
||||
|
||||
[[NSApplication sharedApplication] registerServicesMenuSendTypes: s
|
||||
returnTypes: r];
|
||||
}
|
||||
}
|
||||
|
||||
//<!>
|
||||
|
@ -407,6 +424,65 @@ typedef enum
|
|||
nil];
|
||||
}
|
||||
|
||||
/*
|
||||
* Handle enabling/disabling of services menu items.
|
||||
*/
|
||||
- (id) validRequestorForSendType: (NSString*)sendType
|
||||
returnType: (NSString*)returnType
|
||||
{
|
||||
if ((!sendType || [sendType isEqual: NSStringPboardType]) &&
|
||||
(!returnType || [returnType isEqual: NSStringPboardType]))
|
||||
{
|
||||
if (([self selectedRange].length || !sendType) &&
|
||||
([self isEditable] || !returnType))
|
||||
{
|
||||
return self;
|
||||
}
|
||||
}
|
||||
return [super validRequestorForSendType: sendType
|
||||
returnType: returnType];
|
||||
|
||||
}
|
||||
|
||||
- (BOOL) readSelectionFromPasteboard: (NSPasteboard*)pb
|
||||
{
|
||||
NSArray *types;
|
||||
NSString *string;
|
||||
NSRange range;
|
||||
|
||||
types = [pb types];
|
||||
if ([types containsObject: NSStringPboardType] == NO)
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
string = [pb stringForType: NSStringPboardType];
|
||||
range = [self selectedRange];
|
||||
[self deleteRange: range backspace: NO];
|
||||
[self insertText: string];
|
||||
range.length = [string length];
|
||||
[self setSelectedRange: range];
|
||||
|
||||
return YES;
|
||||
}
|
||||
|
||||
- (BOOL) writeSelectionToPasteboard: (NSPasteboard*)pb
|
||||
types: (NSArray*)sendTypes
|
||||
{
|
||||
NSArray *types;
|
||||
NSRange range;
|
||||
NSString *string;
|
||||
|
||||
if ([sendTypes containsObject: NSStringPboardType] == NO)
|
||||
{
|
||||
return NO;
|
||||
}
|
||||
types = [NSArray arrayWithObjects: NSStringPboardType, nil];
|
||||
[pb declareTypes: types owner: nil];
|
||||
range = [self selectedRange];
|
||||
string = [self string];
|
||||
string = [string substringWithRange: range];
|
||||
return [pb setString: string forType: NSStringPboardType];
|
||||
}
|
||||
|
||||
// <!>
|
||||
// handle font pasteboard as well!
|
||||
|
|
|
@ -1022,7 +1022,17 @@ NSView *v;
|
|||
- validRequestorForSendType:(NSString *)sendType
|
||||
returnType:(NSString *)returnType
|
||||
{
|
||||
return nil;
|
||||
id result = nil;
|
||||
|
||||
if (delegate && [delegate respondsToSelector: _cmd])
|
||||
result = [delegate validRequestorForSendType: sendType
|
||||
returnType: returnType];
|
||||
|
||||
if (result == nil)
|
||||
result = [[NSApplication sharedApplication]
|
||||
validRequestorForSendType: sendType
|
||||
returnType: returnType];
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
|
|
Loading…
Reference in a new issue