From 4ddbd0142fec70c8c9575d6f2f9b5ef93a93bd90 Mon Sep 17 00:00:00 2001
From: Lucas Fryzek <lucas.fryzek@fryzekconcepts.com>
Date: Sun, 6 Oct 2024 22:22:03 +0100
Subject: chat,main: Fix client crashes on Fedora version of Gtk4

---
 src/chat.py |  6 +++++-
 src/main.py | 14 +++++++++++++-
 2 files changed, 18 insertions(+), 2 deletions(-)

diff --git a/src/chat.py b/src/chat.py
index b82b4a3..743778e 100644
--- a/src/chat.py
+++ b/src/chat.py
@@ -102,6 +102,10 @@ class WeegtkChat(Adw.Bin):
             self.messages.scroll_to(n_items - 1, Gtk.ListScrollFlags.FOCUS)
             self.window.emit("scroll_child", Gtk.ScrollType.END, False)
 
+    def update_prompt(self):
+        # TODO code copied from QWeechat, figure out what I should do with it
+        pass
+
     def setup_list_item(self, factory, list_item, *user_data):
         message = WeegtkMessage()
         list_item.set_child(message)
@@ -161,7 +165,7 @@ class WeegtkChat(Adw.Bin):
         text = entry_buffer.get_text()
         entry_buffer.set_text("", 0)
         self.emit("buffer_input", self.data['full_name'], text)
-        
+
     def open_file_dialog(self, dialog, result, caller):
         try:
             file = dialog.open_finish(result)
diff --git a/src/main.py b/src/main.py
index 53206be..5334516 100644
--- a/src/main.py
+++ b/src/main.py
@@ -50,6 +50,10 @@ class WeegtkApplication(Adw.Application):
         self.network.connect("message_from_weechat", self._network_weechat_msg)
 
         self.buffers = []
+        # We need to keep track of buffer pages because some versions of Gtk
+        # crash. I believe its related to this:
+        # https://gitlab.gnome.org/GNOME/gtk/-/issues/5917
+        self.pages = []
 
         conf = config.read()
         if config.str_to_bool(conf["relay"]["autoconnect"]):
@@ -66,8 +70,15 @@ class WeegtkApplication(Adw.Application):
                                          conf["relay"]["password"])
     def clear_buffers(self):
         for buffer in self.buffers:
-            self.props.active_window.stack.remove(buffer)
+            res = self.props.active_window.stack.remove(buffer)
         self.buffers = []
+        self.pages = []
+
+    def remove_buffer(self, index):
+        buf = self.buffers[index]
+        self.props.active_window.stack.remove(buf)
+        self.buffers.pop(index)
+        self.pages.pop(index)
 
     def disconnect(self, *args):
         self.network.disconnect_weechat()
@@ -339,6 +350,7 @@ class WeegtkApplication(Adw.Application):
             page = self.props.active_window.stack.add_titled(buf, name=buf_name, title=buf_name)
             if buf.data["full_name"] == "core.weechat":
                 self.props.active_window.set_page(page)
+            self.pages.insert(index, page)
 
     def buffer_input(self, source_object, full_name, text):
         if self.network.is_connected():
-- 
cgit v1.2.3