XWin Icon Fidelity
Harold L Hunt II
huntharo@msu.edu
Sun Jun 1 20:29:00 GMT 2003
Colin,
Your patch is pretty close to being on the money.
However, it doesn't call DestroyIcon to free the loaded icon, nor does
it specify the LR_SHARED flag which would cause the icon to be
automatically freed when no longer referenced.
Unfortunately, we can't use LR_SHARED because MSDN states:
"Windows 95/98: The function finds the first image with the requested
resource name in the cache, regardless of the size requested."
Thus, using LR_SHARED on Windows 95/98 would defeat the whole purpose of
LoadImage, which is to load the icon with the specified size.
Instead, we must keep a handle to the icon that LoadImage returns in our
screen privates and we must call DestroyIcon on this handle in
winDeleteNotifyIcon(). I went ahead and polished those rough edges for
you. No charge :)
I appreciate your patches... they tend to get the bulk of the problem
fixed, which is the main stumbling point for me. I don't mind handling
those niggling little details as above, as long as somebody gets me
going in the right direction like you did.
Thanks for contributing,
Harold
Colin Harrison wrote:
> Hi,
>
> My fix is only applicable for the tray icon case.
> Elsewhere it's a waste of time and obviously makes the task switcher worse
> for
> apps that default to X, where 32x32 is better.
>
> So only apply to wintrayicon.c
>
> --- save_wintrayicon.c 2003-06-01 14:58:40.000000000 +0100
> +++ wintrayicon.c 2003-06-01 15:16:11.000000000 +0100
> @@ -49,7 +49,12 @@
> nid.uID = pScreenInfo->dwScreen;
> nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
> nid.uCallbackMessage = WM_TRAYICON;
> - nid.hIcon = LoadIcon (g_hInstance, MAKEINTRESOURCE(IDI_XWIN));
> + nid.hIcon = LoadImage (g_hInstance,
> + MAKEINTRESOURCE(IDI_XWIN),
> + IMAGE_ICON,
> + 16,
> + 16,
> + 0);
>
> /* Set display and screen-specific tooltip text */
> snprintf (nid.szTip,
>
>
> Again I've only tested on XP.
>
> Colin
>
>
>
>
More information about the Cygwin-xfree
mailing list