From 5d4d3f8366b74d9c3da892d94188defc49407ebf Mon Sep 17 00:00:00 2001 From: est31 Date: Mon, 4 Jul 2016 01:33:46 +0200 Subject: [PATCH] Finally set a window icon on X11 Since the creation of minetest, it had no window icon on X11. Now we have one. The misc/minetest-xorg-icon-128.png file is a rendering of the misc/minetest.svg file with inkscape, created with something like: inkscape -z -e misc/minetest-xorg-icon-128.png -w 128 -h 128 misc/minetest.svg --- misc/minetest-xorg-icon-128.png | Bin 0 -> 11241 bytes src/client/clientlauncher.cpp | 3 ++ src/porting.cpp | 87 ++++++++++++++++++++++++++++++++ src/porting.h | 3 ++ 4 files changed, 93 insertions(+) create mode 100644 misc/minetest-xorg-icon-128.png diff --git a/misc/minetest-xorg-icon-128.png b/misc/minetest-xorg-icon-128.png new file mode 100644 index 0000000000000000000000000000000000000000..0241a911ce70586f2b1a59a665661ef4115e14cf GIT binary patch literal 11241 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 TH&;SP00000NkvXXu0mjf3!wJT literal 0 HcmV?d00001 diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index a0781ef37..aa3c2d548 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -114,6 +114,9 @@ bool ClientLauncher::run(GameParams &game_params, const Settings &cmd_args) porting::setXorgClassHint(video_driver->getExposedVideoData(), PROJECT_NAME_C); + porting::setXorgWindowIcon(device, + porting::path_share + "/misc/minetest-xorg-icon-128.png"); + /* This changes the minimum allowed number of vertices in a VBO. Default is 500. diff --git a/src/porting.cpp b/src/porting.cpp index 02ce6174b..ddf8139ea 100644 --- a/src/porting.cpp +++ b/src/porting.cpp @@ -611,6 +611,93 @@ void setXorgClassHint(const video::SExposedVideoData &video_data, #endif } +bool setXorgWindowIcon(IrrlichtDevice *device, + const std::string &icon_file) +{ +#ifdef XORG_USED + + video::IVideoDriver *v_driver = device->getVideoDriver(); + + video::IImageLoader *image_loader = NULL; + for (u32 i = v_driver->getImageLoaderCount() - 1; i >= 0; i--) { + if (v_driver->getImageLoader(i)->isALoadableFileExtension(icon_file.c_str())) { + image_loader = v_driver->getImageLoader(i); + break; + } + } + + if (!image_loader) { + warningstream << "Could not find image loader for file '" + << icon_file << "'" << std::endl; + return false; + } + + io::IReadFile *icon_f = device->getFileSystem()->createAndOpenFile(icon_file.c_str()); + + if (!icon_f) { + warningstream << "Could not load icon file '" + << icon_file << "'" << std::endl; + return false; + } + + video::IImage *img = image_loader->loadImage(icon_f); + + if (!img) { + warningstream << "Could not load icon file '" + << icon_file << "'" << std::endl; + icon_f->drop(); + return false; + } + + u32 height = img->getDimension().Height; + u32 width = img->getDimension().Width; + + size_t icon_buffer_len = 2 + height * width; + long *icon_buffer = new long[icon_buffer_len]; + + icon_buffer[0] = width; + icon_buffer[1] = height; + + for (u32 x = 0; x < width; x++) { + for (u32 y = 0; y < height; y++) { + video::SColor col = img->getPixel(x, y); + long pixel_val = 0; + pixel_val |= (u8)col.getAlpha() << 24; + pixel_val |= (u8)col.getRed() << 16; + pixel_val |= (u8)col.getGreen() << 8; + pixel_val |= (u8)col.getBlue(); + icon_buffer[2 + x + y * width] = pixel_val; + } + } + + img->drop(); + icon_f->drop(); + + const video::SExposedVideoData &video_data = v_driver->getExposedVideoData(); + + Display *x11_dpl = (Display *)video_data.OpenGLLinux.X11Display; + + if (x11_dpl == NULL) { + warningstream << "Could not find x11 display for setting its icon." + << std::endl; + delete [] icon_buffer; + return false; + } + + Window x11_win = (Window)video_data.OpenGLLinux.X11Window; + + Atom net_wm_icon = XInternAtom(x11_dpl, "_NET_WM_ICON", False); + Atom cardinal = XInternAtom(x11_dpl, "CARDINAL", False); + XChangeProperty(x11_dpl, x11_win, + net_wm_icon, cardinal, 32, + PropModeReplace, (const unsigned char *)icon_buffer, + icon_buffer_len); + + delete [] icon_buffer; + + return true; +#endif +} //// //// Video/Display Information (Client-only) diff --git a/src/porting.h b/src/porting.h index d101a7324..40f6b4dc3 100644 --- a/src/porting.h +++ b/src/porting.h @@ -367,6 +367,9 @@ inline const char *getPlatformName() void setXorgClassHint(const video::SExposedVideoData &video_data, const std::string &name); +bool setXorgWindowIcon(IrrlichtDevice *device, + const std::string &icon_file); + // This only needs to be called at the start of execution, since all future // threads in the process inherit this exception handler void setWin32ExceptionHandler();