Hello, I have been going through the R GUI code trying to fix a specific bug. I reported this a while ago and tried to fix it then but with no luck:
https://stat.ethz.ch/pipermail/r-sig-mac/2006-March/002723.html I've had another stab at it, and this is what I think is going on. There is an NSTimer that fires every 0.5 s that calls showWorkingDir: in RController.m. My guess is that when copy: is called in RQuartz.m and the operation takes more than 0.5 s that the working directory text field (WDirView) is being drawn on that view since the focus is locked onto it. This depends on the relative positions and sizes of the windows as well, which makes sense with the relative coordinate systems. You'll much more likely to see this on plots with a large amount of data since they take more time to draw (relatively). This is very typical for me so I see the problem all the time. Here's my solution: R.Controller.h add instance: NSMutableString *currentWorkingDirectory; RController.m in init add: currentWorkingDirectory = [[NSMutableString string] retain]; Replace showWorkingDir with: - (IBAction) showWorkingDir:(id)sender { NSString *wd = [[NSFileManager defaultManager] currentDirectoryPath]; if (!wd) wd = NLS(@"<deleted>"); if (![currentWorkingDirectory isEqualToString:wd]) { [WDirView setStringValue: [wd stringByAbbreviatingWithTildeInPath]]; [currentWorkingDirectory setString:wd]; } } ...and then to clean up, in dealloc add: [currentWorkingDirectory release]; Note that it is unnecessary to call setEditable:. This is only used to make the text field editable by the user which is never the case. This function only attempts to update the view if the current directory has actually changed which will never happen in the middle of a copy/paste/save operation. Well, I suppose it will if the working directory is somehow deleted while someone copies or saves, but I'm willing to live with that. Finally, is the timer in place only to see if the folder has been removed from underneath R? If so, it might be cleaner to set something up to notify us when a particular directory (e.g. the current working directory) has been removed. There is a class called DRFileNotificationSubscription described here that does exactly that. http://www.cocoadev.com/index.pl?FileSystemNotifications If you'd like, I can code it up and test it, but I wanted to ask if there was another purpose for the timer before spending the time on it. Cheers, Demitri _______________________________________________ R-SIG-Mac mailing list [email protected] https://stat.ethz.ch/mailman/listinfo/r-sig-mac
