How to properly create a wxIconBundle under Linux?

Do you have a typical platform dependent issue you're battling with ? Ask it here. Make sure you mention your platform, compiler, and wxWidgets version.
Post Reply
a little bit
In need of some credit
In need of some credit
Posts: 6
Joined: Sat Apr 10, 2021 11:46 am

How to properly create a wxIconBundle under Linux?

Post by a little bit » Thu Apr 22, 2021 7:23 pm

I would like to create a wxIconBundle under Linux for a given file type (e.g., "pdf") with different icon sizes. Currently, I have the following code for my wxArtProvider-derived art_provider:

Code: Select all

	wxArtID const& art_id,
	wxArtClient const& WXUNUSED(art_client)
) {
    wxIconBundle icon_bundle;

    if (auto const file_type = get_file_type(art_id); !file_type)

    else {
        create_icon_bundle(icon_bundle, *file_type);
        delete file_type;

    return icon_bundle;

Code: Select all

static wxFileType*
	wxString const& key
) {
    if (auto const file_type = wxTheMimeTypesManager->GetFileTypeFromMimeType(key))
        return file_type;
    if (auto const file_type = wxTheMimeTypesManager->GetFileTypeFromExtension(key))
        return file_type;
    return nullptr;

static void
	wxIconBundle& icon_bundle,
	wxFileType const& file_type
) {
    if (wxIconLocation icon_loc; file_type.GetIcon(&icon_loc)) {
         * icon_loc denotes the path name of an icon with one *particular*
         * size; we now need to collect all other sizes of that icon as well
         * in order to build our icon bundle
         // ???
In section "???" I do some nasty heuristic function calls to find all the files containing the same icon but with a different size. For instance, the icons might be distributed in directories /usr/share/icons/gnome/MxM/mimetypes/ with M = 16, 32, 48, 128, ... with icon_loc then containing one particular icon file from those directories. Hence, in that case, I check the other existing directories for the respective icon file. That feels messy. Is there a better and more portable way to create the icon bundle under Linux using a wxWidgets call sequence?

Part Of The Furniture
Part Of The Furniture
Posts: 5154
Joined: Sat Apr 16, 2005 7:22 am
Location: USA, Ukraine

Re: How to properly create a wxIconBundle under Linux?

Post by ONEEYEMAN » Thu Apr 22, 2021 9:53 pm

Why do you need an icon bundle?

Just use XPM on Linux, png on Windows and pack the 2 icons inside the Application Bundle on Mac.

Thank you.

Knows some wx things
Knows some wx things
Posts: 48
Joined: Sun Oct 18, 2015 9:31 am

Re: How to properly create a wxIconBundle under Linux?

Post by thoray » Fri Apr 23, 2021 8:33 am

Here's my code for all three platforms. Using an icon bundle looks good with hidpi.

Code: Select all

wxIconBundle icons;

#ifdef __WXMSW__
icons.AddIcon("resname_icon",0); // add icons from windows resource file
// TODO find out how to load __WXOSX__ .icns file here

// Repeat the next line for different icon sizes

// optionally call in frame's constructor

Post Reply