From 10d22d20865f49b0a25b405d8fb7867084f53744 Mon Sep 17 00:00:00 2001 From: Fred Kiefer Date: Wed, 11 Mar 2009 09:46:59 +0000 Subject: [PATCH] * Source/NSApplication.m (-setApplicationIconImage:): Copy the new application image before assigning the name "NSApplicationIcon" to it. This solves bug #25793. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/gui/trunk@28064 72102866-910b-0410-8b05-ffd578937521 --- ChangeLog | 6 ++++++ Source/NSApplication.m | 28 ++++++++++++++++------------ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/ChangeLog b/ChangeLog index c99690f4d..c93ac6cd4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2009-03-11 Fred Kiefer + + * Source/NSApplication.m (-setApplicationIconImage:): Copy the new + application image before assigning the name "NSApplicationIcon" to + it. This solves bug #25793. + 2009-03-05 Fred Kiefer * Resources/GNUmakefile: Add French localisation. diff --git a/Source/NSApplication.m b/Source/NSApplication.m index 0d09a3f87..727f84a99 100644 --- a/Source/NSApplication.m +++ b/Source/NSApplication.m @@ -2178,16 +2178,20 @@ image.

See Also: -applicationIconImage

*/ - (void) setApplicationIconImage: (NSImage*)anImage { - NSEnumerator *iterator = [[self windows] objectEnumerator]; - NSWindow *current; + NSEnumerator *iterator; + NSWindow *current; NSImage *old_app_icon = _app_icon; - NSSize miniWindowSize = [GSCurrentServer() iconSize]; - NSSize imageSize = [anImage size]; + NSSize miniWindowSize = [GSCurrentServer() iconSize]; + NSSize imageSize = [anImage size]; RETAIN(old_app_icon); [_app_icon setName: nil]; - [anImage setName: @"NSApplicationIcon"]; - [anImage setScalesWhenResized: YES]; + + // Use a copy as we change the name and size + ASSIGNCOPY(_app_icon, anImage); + + [_app_icon setName: @"NSApplicationIcon"]; + [_app_icon setScalesWhenResized: YES]; if (miniWindowSize.width <= 0 || miniWindowSize.height <= 0) { @@ -2198,23 +2202,23 @@ image.

See Also: -applicationIconImage

if (imageSize.width > miniWindowSize.width || imageSize.height > miniWindowSize.height) { - [anImage setSize: miniWindowSize]; + [_app_icon setSize: miniWindowSize]; } - ASSIGN(_app_icon, anImage); - - [_main_menu _organizeMenu]; // Let horizontal menu change icon + // Let horizontal menu change icon + [_main_menu _organizeMenu]; if (_app_icon_window != nil) { - [(NSAppIconView *)[_app_icon_window contentView] setImage: anImage]; + [(NSAppIconView *)[_app_icon_window contentView] setImage: _app_icon]; } // Swap the old image for the new one wherever it's used + iterator = [[self windows] objectEnumerator]; while ((current = [iterator nextObject]) != nil) { if ([current miniwindowImage] == old_app_icon) - [current setMiniwindowImage: anImage]; + [current setMiniwindowImage: _app_icon]; } DESTROY(old_app_icon);