From 8608a1c38b4579b09042a52668d2198f22fffad8 Mon Sep 17 00:00:00 2001
From: Jason Nader <jason.nader@protonmail.com>
Date: Thu, 13 Feb 2020 07:20:33 +0900
Subject: [PATCH] i3compat: add `window_type` to IPC response

i3 added these in i3/i3#3797
---
 sway/ipc-json.c     | 36 ++++++++++++++++++++++++++++++++++++
 sway/sway-ipc.7.scd |  2 +-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/sway/ipc-json.c b/sway/ipc-json.c
index 2e75b5951..19fdba111 100644
--- a/sway/ipc-json.c
+++ b/sway/ipc-json.c
@@ -85,6 +85,35 @@ static const char *ipc_json_output_transform_description(enum wl_output_transfor
 	return NULL;
 }
 
+#if HAVE_XWAYLAND
+static const char *ipc_json_xwindow_type_description(enum atom_name window_type) {
+	switch (window_type) {
+	case NET_WM_WINDOW_TYPE_NORMAL:
+		return "normal";
+	case NET_WM_WINDOW_TYPE_DIALOG:
+		return "dialog";
+	case NET_WM_WINDOW_TYPE_UTILITY:
+		return "utility";
+	case NET_WM_WINDOW_TYPE_TOOLBAR:
+		return "toolbar";
+	case NET_WM_WINDOW_TYPE_SPLASH:
+		return "splash";
+	case NET_WM_WINDOW_TYPE_MENU:
+		return "menu";
+	case NET_WM_WINDOW_TYPE_DROPDOWN_MENU:
+		return "dropdown_menu";
+	case NET_WM_WINDOW_TYPE_POPUP_MENU:
+		return "popup_menu";
+	case NET_WM_WINDOW_TYPE_TOOLTIP:
+		return "tooltip";
+	case NET_WM_WINDOW_TYPE_NOTIFICATION:
+		return "notification";
+	default:
+		return "unknown";
+	}
+}
+#endif
+
 json_object *ipc_json_get_version(void) {
 	int major = 0, minor = 0, patch = 0;
 	json_object *version = json_object_new_object();
@@ -452,6 +481,13 @@ static void ipc_json_describe_view(struct sway_container *c, json_object *object
 			json_object_object_add(window_props, "window_role", json_object_new_string(role));
 		}
 
+		uint32_t window_type = view_get_window_type(c->view);
+		if (window_type) {
+			json_object_object_add(window_props, "window_type",
+				json_object_new_string(
+					ipc_json_xwindow_type_description(window_type)));
+		}
+
 		json_object_object_add(object, "window_properties", window_props);
 	}
 #endif
diff --git a/sway/sway-ipc.7.scd b/sway/sway-ipc.7.scd
index 6725b2552..ab61f8643 100644
--- a/sway/sway-ipc.7.scd
+++ b/sway/sway-ipc.7.scd
@@ -382,7 +382,7 @@ node and will have the following properties:
 |- window_properties
 :  object
 :  (Only xwayland views) An object containing the _title_, _class_, _instance_,
-   _window\_role_, and _transient\_for_ for the view
+   _window\_role_, _window\_type_, and _transient\_for_ for the view
 
 
 *Example Reply:*