changeset 33421:3d37f529ee65 stable

fix restoring headers in file browser and workspace view (bug #65030) * files-dock-widget.cc (files_dock_widget): move restoring header from constructor into separate slot, use one-shot timer to schedule this slot * files-dock-widget.h: new slot restore_header_state * workspace-view.cc (workspace_view): see files-doc-widget * workspace-view.h: see files-dock-widget
author Torsten Lilge <ttl-octave@mailbox.org>
date Mon, 18 Mar 2024 20:00:53 +0100
parents 370a2de931a0
children 1edbab3fae48
files libgui/src/files-dock-widget.cc libgui/src/files-dock-widget.h libgui/src/workspace-view.cc libgui/src/workspace-view.h
diffstat 4 files changed, 37 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/libgui/src/files-dock-widget.cc	Tue Apr 16 06:56:56 2024 +0200
+++ b/libgui/src/files-dock-widget.cc	Mon Mar 18 20:00:53 2024 +0100
@@ -408,10 +408,6 @@
      // FIXME: use value<Qt::SortOrder> instead of static cast after
      //        dropping support of Qt 5.4
 
-  if (settings.contains (fb_column_state.settings_key ()))
-    m_file_tree_view->header ()->restoreState
-      (settings.value (fb_column_state.settings_key ()).toByteArray ());
-
   // Set header properties for sorting
   m_file_tree_view->header ()->setSectionsClickable (true);
   m_file_tree_view->header ()->setSectionsMovable (true);
@@ -470,6 +466,23 @@
 
   if (! p)
     make_window ();
+
+  // Initialize column order and width of the file browser. From this post,
+  // https://www.qtcentre.org/threads/26675-QTableView-saving-restoring-columns-widths
+  // this might fail if done directly in the constructor. This effect shows
+  // up in the GUI since Qt 6.6.x. As a solution, the following timer ensures
+  // that the header is restored when the event loop is idle.
+  QTimer::singleShot (0, this, SLOT(restore_header_state ()));
+}
+
+void
+files_dock_widget::restore_header_state ()
+{
+  gui_settings settings;
+
+  if (settings.contains (fb_column_state.settings_key ()))
+    m_file_tree_view->header ()->restoreState
+      (settings.value (fb_column_state.settings_key ()).toByteArray ());
 }
 
 void files_dock_widget::save_settings ()
--- a/libgui/src/files-dock-widget.h	Tue Apr 16 06:56:56 2024 +0200
+++ b/libgui/src/files-dock-widget.h	Mon Mar 18 20:00:53 2024 +0100
@@ -136,6 +136,7 @@
 
 private slots:
 
+  void restore_header_state ();
   void headercontextmenu_requested (const QPoint& pos);
   void toggle_header (int col);
 
--- a/libgui/src/workspace-view.cc	Tue Apr 16 06:56:56 2024 +0200
+++ b/libgui/src/workspace-view.cc	Mon Mar 18 20:00:53 2024 +0100
@@ -39,6 +39,7 @@
 #include <QMessageBox>
 #include <QPushButton>
 #include <QSignalMapper>
+#include <QTimer>
 #include <QVBoxLayout>
 
 #include "gui-preferences-ws.h"
@@ -107,9 +108,6 @@
 
   //enable sorting (setting column and order after model was set)
   m_view->setSortingEnabled (true);
-  // Initialize column order and width of the workspace
-  m_view->horizontalHeader ()->restoreState
-    (settings.value (ws_column_state.settings_key ()).toByteArray ());
 
   // Set header properties for sorting
   m_view->horizontalHeader ()->setSectionsClickable (true);
@@ -151,6 +149,23 @@
 
   if (! p)
     make_window ();
+
+  // Initialize column order and width of the workspace. From this post,
+  // https://www.qtcentre.org/threads/26675-QTableView-saving-restoring-columns-widths
+  // this might fail if done directly in the constructor. This effect shows
+  // up in the GUI since Qt 6.6.x. As a solution, the following timer ensures
+  // that the header is restored when the event loop is idle.
+  QTimer::singleShot (0, this, SLOT(restore_header_state ()));
+}
+
+void
+workspace_view::restore_header_state ()
+{
+  gui_settings settings;
+
+  if (settings.contains (ws_column_state.settings_key ()))
+    m_view->horizontalHeader ()->restoreState
+      (settings.value (ws_column_state.settings_key ()).toByteArray ());
 }
 
 void workspace_view::setModel (workspace_model *model)
--- a/libgui/src/workspace-view.h	Tue Apr 16 06:56:56 2024 +0200
+++ b/libgui/src/workspace-view.h	Mon Mar 18 20:00:53 2024 +0100
@@ -78,6 +78,7 @@
 
 protected slots:
 
+  void restore_header_state ();
   void filter_update (const QString& expression);
   void filter_activate (bool enable);
   void update_filter_history ();