From f54c523e85f5c16ab323f0fc900376e16cd06411 Mon Sep 17 00:00:00 2001
From: c4pp4
Date: Tue, 22 Jul 2025 23:38:39 +0200
Subject: [PATCH 1/1] Remove window buttons when window is maximized

Signed-off-by: c4pp4
---
 gtk/gtkheaderbar.c | 57 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/gtk/gtkheaderbar.c b/gtk/gtkheaderbar.c
index 5c88744..44256e6 100644
--- a/gtk/gtkheaderbar.c
+++ b/gtk/gtkheaderbar.c
@@ -346,6 +346,46 @@ gtk_header_bar_get_title_widget (GtkHeaderBar *bar)
   return bar->title_widget;
 }
 
+static gboolean
+in_desktop (const gchar *name)
+{
+  const gchar *desktop_name_list;
+  gchar **names;
+  gboolean in_list = FALSE;
+  gint i;
+
+  desktop_name_list = g_getenv ("XDG_CURRENT_DESKTOP");
+  if (!desktop_name_list)
+    return FALSE;
+
+  names = g_strsplit (desktop_name_list, ":", -1);
+  for (i = 0; names[i] && !in_list; i++)
+    if (strcmp (names[i], name) == 0) {
+      in_list = TRUE;
+      break;
+    }
+  g_strfreev (names);
+
+  return in_list;
+}
+
+static void
+on_window_state_changed (GtkWindow *window, GParamSpec *pspec, GtkHeaderBar *bar)
+{
+  gboolean maximized = gtk_window_is_maximized (window);
+
+  if (GTK_IS_WIDGET(bar->start_window_controls)) {
+    GtkWidget *parent = gtk_widget_get_parent(bar->start_window_controls);
+    if (parent)
+      gtk_widget_set_visible(bar->start_window_controls, !maximized);
+  }
+  if (GTK_IS_WIDGET(bar->end_window_controls)) {
+    GtkWidget *parent = gtk_widget_get_parent(bar->end_window_controls);
+    if (parent)
+      gtk_widget_set_visible(bar->end_window_controls, !maximized);
+  }
+}
+
 static void
 gtk_header_bar_root (GtkWidget *widget)
 {
@@ -360,6 +400,14 @@ gtk_header_bar_root (GtkWidget *widget)
                               G_CALLBACK (update_title), widget);
 
   update_title (GTK_HEADER_BAR (widget));
+
+  if (in_desktop("Unity")) {
+    if (GTK_IS_WINDOW (root)) {
+      g_signal_connect (root, "notify::maximized",
+                        G_CALLBACK (on_window_state_changed), widget);
+      on_window_state_changed(GTK_WINDOW(root), NULL, GTK_HEADER_BAR(widget));
+    }
+  }
 }
 
 static void
@@ -368,6 +416,15 @@ gtk_header_bar_unroot (GtkWidget *widget)
   g_signal_handlers_disconnect_by_func (gtk_widget_get_root (widget),
                                         update_title, widget);
 
+  if (in_desktop("Unity")) {
+    GtkWidget *root = GTK_WIDGET (gtk_widget_get_root (widget));
+
+    if (GTK_IS_WINDOW (root)) {
+      g_signal_handlers_disconnect_by_func (root,
+                                            on_window_state_changed, widget);
+    }
+  }
+
   GTK_WIDGET_CLASS (gtk_header_bar_parent_class)->unroot (widget);
 }
 
-- 
2.49.1

