Author: mlytwyn
Date: Thu Jun 25 23:41:30 2015
New Revision: 38684

URL: http://svn.gna.org/viewcvs/gnustep?rev=38684&view=rev
Log:
Make GSFakeNSMenuItem proxy for NSMenuItem selectors

Modified:
    plugins/themes/WinUXTheme/WinNSMenu.m

Modified: plugins/themes/WinUXTheme/WinNSMenu.m
URL: 
http://svn.gna.org/viewcvs/gnustep/plugins/themes/WinUXTheme/WinNSMenu.m?rev=38684&r1=38683&r2=38684&view=diff
==============================================================================
--- plugins/themes/WinUXTheme/WinNSMenu.m       (original)
+++ plugins/themes/WinUXTheme/WinNSMenu.m       Thu Jun 25 23:41:30 2015
@@ -47,33 +47,77 @@
 }
 @end
 
-@interface GSFakeNSMenuItem : NSMenuItem
+@interface GSFakeNSMenuItem : NSObject
 {
   id _originalItem;
 }
 
+- (id) initWithItem: (id)item;
+- (id) target;
+- (SEL)action;
 - (void) action: (id)sender;
-- (id) initWithItem: (id)item;
 @end
 
 @implementation GSFakeNSMenuItem
 - (id) initWithItem: (id)item
 {
-  if(([super initWithTitle: [item title]
-                   action: @selector(action:)
-            keyEquivalent: [item keyEquivalent]]) != nil)
-    {
-      _originalItem = item;
-      [self setTarget: self];
-      [self setEnabled: [item isEnabled]];
-    }
+  self = [super init];
+  if (self)
+  {
+    _originalItem = item;
+  }
   return self;
+}
+
+- (id)target
+{
+  return self;
+}
+
+- (SEL)action
+{
+  return @selector(action:);
 }
 
 - (void) action: (id)sender
 {
   NSMenu *theMenu = [_originalItem menu];
   [theMenu performActionForItemAtIndex:[theMenu indexOfItem:_originalItem]];
+}
+
+#ifndef GNUSTEP
+#pragma mark -
+#pragma mark Act as proxy for actual NSMenuItem methods...
+#endif
+- (id)forwardingTargetForSelector:(SEL)selector
+{
+  if ([_originalItem respondsToSelector:selector])
+    return _originalItem;
+  return nil;
+}
+
+- (void)forwardInvocation:(NSInvocation *)invocation
+{
+  SEL selector = [invocation selector];
+
+  // Forward any invocation to the original item if it supports it...
+  if ([_originalItem respondsToSelector:selector])
+    [invocation invokeWithTarget:_originalItem];
+}
+
+-(NSMethodSignature*)methodSignatureForSelector:(SEL)selector
+{
+       NSMethodSignature *signature = [[_originalItem class] 
instanceMethodSignatureForSelector:selector];
+       if(signature == nil)
+       {
+               signature = [NSMethodSignature signatureWithObjCTypes:"@^v^c"];
+       }
+       return(signature);
+}
+
+- (void)doesNotRecognizeSelector:(SEL)selector
+{
+  NSLog(@"%s:selector not recognized: %@", __PRETTY_FUNCTION__, 
NSStringFromSelector(selector));
 }
 @end
 
@@ -299,12 +343,12 @@
       // If it's enabled and not a seperator or a supermenu (unless submenu is 
empty),
       // determine if it's enabled and set it's state accordingly.
       if([item isSeparatorItem] == NO &&
-        ([item hasSubmenu] == NO || [[item submenu] numberOfItems] == 0) )
-       {
-         flags |= ([item isEnabled]?MF_ENABLED:MF_GRAYED); // shouldn't this 
be :MF_GRAYED|MF_DISABLED ?
+         ([item hasSubmenu] == NO || [[item submenu] numberOfItems] == 0) )
+        {
+          flags |= ([item isEnabled]?MF_ENABLED:MF_GRAYED); // shouldn't this 
be :MF_GRAYED|MF_DISABLED ?
           if ([item state] == NSOnState)
             flags |= MF_CHECKED; // set checkmark
-       }
+        }
 
       const wchar_t *ctitle = (wchar_t*)[title cStringUsingEncoding: 
NSUTF16StringEncoding];
       AppendMenuW(result, flags, (UINT)s, ctitle);


_______________________________________________
Gnustep-cvs mailing list
[email protected]
https://mail.gna.org/listinfo/gnustep-cvs

Reply via email to