From 5d4d3f8366b74d9c3da892d94188defc49407ebf Mon Sep 17 00:00:00 2001
From: est31 <MTest31@outlook.com>
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();
-- 
GitLab