> There is another problem with X11 icon:
> window.icon((char *)p); does not support transparency.
> The reason is simple: transparency information is carried by the other
> pixmax ,the variable "mask" in your program and it is not transmitted to
> window.icon().
> To get icon with transparency you have to use Xlib functions:
> XGetWMHints() and  XSetWMHints() to get X11 to communicate both pixmap to
> the window manager.
> See the previously posted message fore more details:
> http://fltk.org/newsgroups.php?gfltk.general+v:24241

In case anyone finds it useful, here's a snippet of code showing what I usually 
do.

I've used this in a few places, and with a few different WM, and it appears to 
do the Right Thing...



// in the headers I have...


// Application icon setting
#ifdef WIN32
#  include "media/win32icon.h"
#elif !defined(__APPLE__) /* Not Apple and not win32 - assume Xlib applies */
#  include <X11/xpm.h>
//#  include "media/fn-edit-icon.xbm" -- monochrome XBM, not used
#  include "media/fn5x64.xpm"
#endif // !WIN32




// then in the entry code, just before I show the first window, I have...


  // Set icon for window before we show it (MacOS uses app bundle for icon...)
#ifdef WIN32
    main_window->icon((char *)LoadIcon(fl_display, MAKEINTRESOURCE(IDI_ICON)));
#elif !defined(__APPLE__)
    fl_open_display(); // Make sure the display is available before we try and 
change it!
    Pixmap pixmap, mask; // create pixmaps to hold the icon image and its mask
    // load the XPM and prepare the mask
    XpmCreatePixmapFromData(fl_display, DefaultRootWindow(fl_display), 
(char**)fn5x64_xpm_data, &pixmap, &mask, 0);
    // assign to the fltk main window
    // note that the fltk icon handling DOES NOT honour transparency,
    // so we fix that AFTER the window is shown (see below)
    main_window->icon((char*)pixmap);
#endif // WIN32

    main_window->show(argc, argv);

#ifdef WIN32
// The fltk icon code above only loads the default icon.
// Here, once the window is shown, we can assign
// additional icons, just to make things a bit nicer.
{
    HANDLE bigicon = LoadImage(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON), 
IMAGE_ICON, 32, 32, 0);
    SendMessage(fl_xid(main_window), WM_SETICON, ICON_BIG, (LPARAM)bigicon);
    HANDLE smallicon = LoadImage(GetModuleHandle(0), MAKEINTRESOURCE(IDI_ICON), 
IMAGE_ICON, 16, 16, 0);
    SendMessage(fl_xid(main_window), WM_SETICON, ICON_SMALL, (LPARAM)smallicon);
}
#elif !defined(__APPLE__) /* Not Apple and not win32 - assume Xlib */
// The fltk icon code doesn't handle XPM transparency well, work around that 
here...
{
    // read in the current window hints, then modify them to allow icon 
transparency
    XWMHints* hints = XGetWMHints(fl_display, fl_xid(main_window));
    hints->flags |= IconMaskHint; // ensure transparency mask is enabled for 
the XPM icon
    hints->icon_mask = mask;      // set the transparency mask
    XSetWMHints(fl_display, fl_xid(main_window), hints);
    XFree(hints);
}
#endif // !WIN32





SELEX Galileo Ltd
Registered Office: Sigma House, Christopher Martin Road, Basildon, Essex SS14 
3EL
A company registered in England & Wales.  Company no. 02426132
********************************************************************
This email and any attachments are confidential to the intended
recipient and may also be privileged. If you are not the intended
recipient please delete it from your system and notify the sender.
You should not copy it or use it for any purpose nor disclose or
distribute its contents to any other person.
********************************************************************

_______________________________________________
fltk mailing list
[email protected]
http://lists.easysw.com/mailman/listinfo/fltk

Reply via email to