From 247de1d3e53316898b23dc28557724f9e81091df Mon Sep 17 00:00:00 2001
From: c4pp4
Date: Tue, 22 Jul 2025 09:26:59 +0200
Subject: [PATCH 1/1] Remove window buttons when window is maximized

Signed-off-by: c4pp4
---
 src/adw-header-bar.c | 62 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 62 insertions(+)

diff --git a/src/adw-header-bar.c b/src/adw-header-bar.c
index 65b8b8f..403cc3f 100644
--- a/src/adw-header-bar.c
+++ b/src/adw-header-bar.c
@@ -496,6 +496,49 @@ find_sheet (GtkWidget *widget)
   return NULL;
 }
 
+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, AdwHeaderBar *self)
+{
+  if (self->dialog)
+    return;
+
+  gboolean maximized = gtk_window_is_maximized (window);
+
+  if (GTK_IS_WIDGET(self->start_controls)) {
+    GtkWidget *parent = gtk_widget_get_parent(self->start_controls);
+    if (parent)
+      gtk_widget_set_visible (self->start_controls, !maximized);
+  }
+  if (GTK_IS_WIDGET(self->end_controls)) {
+    GtkWidget *parent = gtk_widget_get_parent(self->end_controls);
+    if (parent)
+      gtk_widget_set_visible (self->end_controls, !maximized);
+  }
+}
+
 static void
 adw_header_bar_root (GtkWidget *widget)
 {
@@ -585,6 +628,16 @@ adw_header_bar_root (GtkWidget *widget)
   update_title (self);
   update_title_buttons (self);
   update_decoration_layout (self, TRUE, TRUE);
+
+  if (in_desktop("Unity")) {
+    GtkRoot *root = gtk_widget_get_root (widget);
+
+    if (GTK_IS_WINDOW (root)) {
+      g_signal_connect (root, "notify::maximized",
+                        G_CALLBACK (on_window_state_changed), self);
+      on_window_state_changed(GTK_WINDOW(root), NULL, self);
+    }
+  }
 }
 
 static void
@@ -609,6 +662,15 @@ adw_header_bar_unroot (GtkWidget *widget)
                                           update_title, widget);
   }
 
+  if (in_desktop("Unity")) {
+    GtkRoot *root = gtk_widget_get_root (widget);
+
+    if (GTK_IS_WINDOW (root)) {
+      g_signal_handlers_disconnect_by_func (root,
+                                            on_window_state_changed, self);
+    }
+  }
+
   self->title_navigation_page = NULL;
   self->dialog = NULL;
   self->sheet = FALSE;
-- 
2.49.1

