Author: rmottola Date: Wed Jun 1 01:19:39 2016 New Revision: 39825 URL: http://svn.gna.org/viewcvs/gnustep?rev=39825&view=rev Log: Partially revert, but fix and complete using a class instead of a separate Task, Rename Resizer to ImageResizer to avid class name clash
Modified: apps/gworkspace/trunk/ChangeLog apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.h apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.m apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/Resizer.m Modified: apps/gworkspace/trunk/ChangeLog URL: http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/ChangeLog?rev=39825&r1=39824&r2=39825&view=diff ============================================================================== --- apps/gworkspace/trunk/ChangeLog (original) +++ apps/gworkspace/trunk/ChangeLog Wed Jun 1 01:19:39 2016 @@ -1,3 +1,10 @@ +2016-06-01 Riccardo Mottola <r...@gnu.org> + + * Inspector/ContentViewers/ImageViewer/ImageViewer.h + * Inspector/ContentViewers/ImageViewer/ImageViewer.m + * Inspector/ContentViewers/ImageViewer/Resizer.m + Partially revert, but fix and complete using a class instead of a separate Task, Rename Resizer to ImageResizer to avid class name clash. + 2016-04-28 Riccardo Mottola <r...@gnu.org> * GWorkspace/GWorkspace.m Modified: apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.h URL: http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.h?rev=39825&r1=39824&r2=39825&view=diff ============================================================================== --- apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.h (original) +++ apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.h Wed Jun 1 01:19:39 2016 @@ -44,8 +44,10 @@ @protocol ImageResizerProtocol -- (void)readImageAtPath:(NSString *)path +- (oneway void)readImageAtPath:(NSString *)path setSize:(NSSize)imsize; + +- (oneway void)terminate; @end @@ -77,9 +79,16 @@ NSWorkspace *ws; } +- (void)checkResizer:(id)sender; + - (void)setResizer:(id)anObject; -- (void)imageReady:(NSDictionary *)info; +- (BOOL)connection:(NSConnection *)ancestor + shouldMakeNewConnection:(NSConnection *)newConn; + +- (void)connectionDidDie:(NSNotification *)notification; + +- (void)imageReady:(NSData *)data; - (void)editFile:(id)sender; Modified: apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.m URL: http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.m?rev=39825&r1=39824&r2=39825&view=diff ============================================================================== --- apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.m (original) +++ apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/ImageViewer.m Wed Jun 1 01:19:39 2016 @@ -1,6 +1,6 @@ /* ImageViewer.m * - * Copyright (C) 2004-2016 Free Software Foundation, Inc. + * Copyright (C) 2004-2013 Free Software Foundation, Inc. * * Author: Enrico Sersale <enr...@imago.ro> * Date: January 2004 @@ -26,16 +26,7 @@ #import "ImageViewer.h" #include <math.h> -@interface Resizer : NSObject -{ - id viewer; - NSNotificationCenter *nc; -} - -- (void)readImageAtPath:(NSString *)path - setSize:(NSSize)imsize; - -@end +#import "Resizer.h" @implementation ImageViewer @@ -43,11 +34,13 @@ { [nc removeObserver: self]; - if (resizerConn != nil) - { - DESTROY (resizer); - DESTROY (resizerConn); - } + if (resizerConn != nil) { + if (resizer != nil) { + [resizer terminate]; + } + DESTROY (resizer); + DESTROY (resizerConn); + } RELEASE (imagePath); RELEASE (image); @@ -172,12 +165,33 @@ } ASSIGN (imagePath, path); + + if (conn == nil) { + NSString *cname = [NSString stringWithFormat: @"search_%lu", (unsigned long)self]; + + conn = [[NSConnection alloc] initWithReceivePort: (NSPort *)[NSPort port] + sendPort: nil]; + [conn setRootObject: self]; + [conn registerName: cname]; + [conn setDelegate: self]; + + [nc addObserver: self + selector: @selector(connectionDidDie:) + name: NSConnectionDidDieNotification + object: conn]; + } if ((resizer == nil) && (waitingResizer == NO)) { + NSString *cname = [NSString stringWithFormat: @"search_%lu", (unsigned long)self]; waitingResizer = YES; - resizer = [[Resizer alloc] init]; - + + [NSTimer scheduledTimerWithTimeInterval: 5.0 + target: self + selector: @selector(checkResizer:) + userInfo: nil + repeats: NO]; + ImageResizer *resizer = [[ImageResizer alloc] initWithConnectionName: cname]; } else { NSSize imsize = [imview bounds].size; @@ -201,6 +215,16 @@ } } +- (void)checkResizer:(id)sender +{ + if (waitingResizer && (resizer == nil)) { + NSRunAlertPanel(nil, + NSLocalizedString(@"unable to launch the resizer task.", @""), + NSLocalizedString(@"Continue", @""), + nil, + nil); + } +} - (void)setResizer:(id)anObject { @@ -209,7 +233,9 @@ imsize.width -= 4; imsize.height -= 4; - resizer = [[Resizer alloc] init]; + [anObject setProtocolForProxy: @protocol(ImageResizerProtocol)]; + resizer = (id <ImageResizerProtocol>)anObject; + RETAIN (resizer); waitingResizer = NO; [self addSubview: progView]; [progView start]; @@ -217,14 +243,61 @@ } } - - -- (void)imageReady:(NSDictionary *)imginfo -{ +- (BOOL)connection:(NSConnection *)ancestor + shouldMakeNewConnection:(NSConnection *)newConn +{ + if (ancestor == conn) { + ASSIGN (resizerConn, newConn); + [resizerConn setDelegate: self]; + + [nc addObserver: self + selector: @selector(connectionDidDie:) + name: NSConnectionDidDieNotification + object: resizerConn]; + } + + return YES; +} + +- (void)connectionDidDie:(NSNotification *)notification +{ + id diedconn = [notification object]; + + [nc removeObserver: self + name: NSConnectionDidDieNotification + object: diedconn]; + + if ((diedconn == conn) || (resizerConn && (diedconn == resizerConn))) { + DESTROY (resizer); + DESTROY (resizerConn); + waitingResizer = NO; + + if ([[self subviews] containsObject: progView]) { + [progView stop]; + [progView removeFromSuperview]; + } + + if (diedconn == conn) { + DESTROY (conn); + } + + DESTROY (imagePath); + + NSRunAlertPanel(nil, + NSLocalizedString(@"resizer connection died.", @""), + NSLocalizedString(@"Continue", @""), + nil, + nil); + } +} + +- (void)imageReady:(NSData *)data +{ + NSDictionary *imginfo = [NSUnarchiver unarchiveObjectWithData: data]; NSData *imgdata = [imginfo objectForKey: @"imgdata"]; BOOL imgok = YES; NSString *lastPath; - NSLog(@"ImageViewer - imageReady"); + if ([self superview]) { [inspector contentsReadyAt: imagePath]; } Modified: apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/Resizer.m URL: http://svn.gna.org/viewcvs/gnustep/apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/Resizer.m?rev=39825&r1=39824&r2=39825&view=diff ============================================================================== --- apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/Resizer.m (original) +++ apps/gworkspace/trunk/Inspector/ContentViewers/ImageViewer/Resizer.m Wed Jun 1 01:19:39 2016 @@ -22,10 +22,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111 USA. */ -#include <Foundation/Foundation.h> -#include <AppKit/AppKit.h> +#import <Foundation/Foundation.h> +#import <AppKit/AppKit.h> #include <math.h> -#include "config.h" + +#import "Resizer.h" #define GWDebugLog(format, args...) \ do { if (GW_DEBUG_LOG) \ @@ -33,27 +34,69 @@ @protocol ImageViewerProtocol -- (void)setResizer:(id)anObject; - -- (void)imageReady:(NSDictionary *)info; +- (oneway void)setResizer:(id)anObject; + +- (oneway void)imageReady:(NSData *)data; @end -@interface Resizer : NSObject -{ - id viewer; - NSNotificationCenter *nc; -} - -- (void)readImageAtPath:(NSString *)path - setSize:(NSSize)imsize; - -@end - - -@implementation Resizer - + + + +@implementation ImageResizer + +- (void)dealloc +{ + [nc removeObserver: self]; + DESTROY (viewer); + [super dealloc]; +} + +- (id)initWithConnectionName:(NSString *)cname +{ + self = [super init]; + + if (self) { + NSConnection *conn; + id anObject; + + nc = [NSNotificationCenter defaultCenter]; + + conn = [NSConnection connectionWithRegisteredName: cname host: nil]; + + if (conn == nil) { + NSLog(@"failed to contact the Image Viewer - bye."); + exit(1); + } + + [nc addObserver: self + selector: @selector(connectionDidDie:) + name: NSConnectionDidDieNotification + object: conn]; + + anObject = [conn rootProxy]; + [anObject setProtocolForProxy: @protocol(ImageViewerProtocol)]; + viewer = (id <ImageViewerProtocol>)anObject; + RETAIN (viewer); + + [viewer setResizer: self]; + } + + return self; +} + +- (void)connectionDidDie:(NSNotification *)notification +{ + id conn = [notification object]; + + [nc removeObserver: self + name: NSConnectionDidDieNotification + object: conn]; + + NSLog(@"Image Viewer connection has been destroyed."); + exit(0); +} #define MIX_LIM 16 @@ -63,7 +106,7 @@ CREATE_AUTORELEASE_POOL(arp); NSMutableDictionary *info = [NSMutableDictionary dictionary]; NSImage *srcImage = [[NSImage alloc] initWithContentsOfFile: path]; - NSLog(@"Resizer - readImage"); + if (srcImage && [srcImage isValid]) { NSData *srcData = [srcImage TIFFRepresentation]; @@ -172,10 +215,16 @@ RELEASE (srcImage); } - [viewer imageReady: info]; + [viewer imageReady: [NSArchiver archivedDataWithRootObject: info]]; RELEASE (arp); } +- (void)terminate +{ + NSLog(@"Should terminate - doing nothing"); +} @end + + _______________________________________________ Gnustep-cvs mailing list Gnustep-cvs@gna.org https://mail.gna.org/listinfo/gnustep-cvs