[R-SIG-Mac] R GUI copy/save PDF drawing bug

stefano iacus stefano.iacus at unimi.it
Fri Feb 16 21:45:40 CET 2007


That timer was set just to show current working directory.
WD can be changed by setwd() or via R.app menus or during/by the  
execution of a script.
If you have some code  which avoids timers, please provide it.
I'm not sure about the class you suggest to use though.

stefano

On 16/feb/07, at 18:28, thatsanicehatyouhave at mac.com wrote:

> 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
> R-SIG-Mac at stat.math.ethz.ch
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>



More information about the R-SIG-Mac mailing list