From f092dac9793b80c29a669b0d676ee3e4f55f682e Mon Sep 17 00:00:00 2001
From: est31 <est31@users.noreply.github.com>
Date: Sat, 20 Aug 2016 21:26:44 +0200
Subject: [PATCH] Also support X11 icon for minetest copies installed via make
 install (#4407)

Fixes #4323.
---
 CMakeLists.txt                |  3 +++
 src/client/clientlauncher.cpp |  3 +--
 src/cmake_config.h.in         |  1 +
 src/porting.cpp               | 19 ++++++++++++++++++-
 src/porting.h                 |  4 +++-
 5 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/CMakeLists.txt b/CMakeLists.txt
index 592feb997..fbf6bb7fa 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -175,6 +175,9 @@ if(UNIX AND NOT APPLE)
 	install(FILES "misc/minetest.desktop" DESTINATION "${XDG_APPS_DIR}")
 	install(FILES "misc/minetest.appdata.xml" DESTINATION "${APPDATADIR}")
 	install(FILES "misc/minetest.svg" DESTINATION "${ICONDIR}/hicolor/scalable/apps")
+	install(FILES "misc/minetest-xorg-icon-128.png"
+		DESTINATION "${ICONDIR}/hicolor/128x128/apps"
+		RENAME "minetest.png")
 endif()
 
 if(APPLE)
diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp
index aa3c2d548..6145e3dde 100644
--- a/src/client/clientlauncher.cpp
+++ b/src/client/clientlauncher.cpp
@@ -114,8 +114,7 @@ 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");
+	porting::setXorgWindowIcon(device);
 
 	/*
 		This changes the minimum allowed number of vertices in a VBO.
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index 50f34a0b8..4b731020a 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -14,6 +14,7 @@
 #define STATIC_SHAREDIR "@SHAREDIR@"
 #define STATIC_LOCALEDIR "@LOCALEDIR@"
 #define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
+#define ICON_DIR "@ICONDIR@"
 #cmakedefine01 RUN_IN_PLACE
 #cmakedefine01 USE_GETTEXT
 #cmakedefine01 USE_CURL
diff --git a/src/porting.cpp b/src/porting.cpp
index acd047232..ae9114ac8 100644
--- a/src/porting.cpp
+++ b/src/porting.cpp
@@ -611,7 +611,24 @@ void setXorgClassHint(const video::SExposedVideoData &video_data,
 #endif
 }
 
-bool setXorgWindowIcon(IrrlichtDevice *device,
+bool setXorgWindowIcon(IrrlichtDevice *device)
+{
+#if RUN_IN_PLACE
+	return setXorgWindowIconFromPath(device,
+			path_share + "/misc/" PROJECT_NAME "-xorg-icon-128.png");
+#else
+	// We have semi-support for reading in-place data if we are
+	// compiled with RUN_IN_PLACE. Don't break with this and
+	// also try the path_share location.
+	return
+		setXorgWindowIconFromPath(device,
+			ICON_DIR "/hicolor/128x128/apps/" PROJECT_NAME ".png") ||
+		setXorgWindowIconFromPath(device,
+			path_share + "/misc/" PROJECT_NAME "-xorg-icon-128.png");
+#endif
+}
+
+bool setXorgWindowIconFromPath(IrrlichtDevice *device,
 	const std::string &icon_file)
 {
 #ifdef XORG_USED
diff --git a/src/porting.h b/src/porting.h
index 40f6b4dc3..f5c7efcb2 100644
--- a/src/porting.h
+++ b/src/porting.h
@@ -367,7 +367,9 @@ inline const char *getPlatformName()
 void setXorgClassHint(const video::SExposedVideoData &video_data,
 	const std::string &name);
 
-bool setXorgWindowIcon(IrrlichtDevice *device,
+bool setXorgWindowIcon(IrrlichtDevice *device);
+
+bool setXorgWindowIconFromPath(IrrlichtDevice *device,
 	const std::string &icon_file);
 
 // This only needs to be called at the start of execution, since all future
-- 
GitLab