# HG changeset patch # User Torsten Lilge # Date 1710788453 -3600 # Node ID 3d37f529ee65b36dac62eeff1b77aee0998dfd3f # Parent 370a2de931a0e015a60ffcc57575cc163f6eaea5 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 diff -r 370a2de931a0 -r 3d37f529ee65 libgui/src/files-dock-widget.cc --- 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 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 () diff -r 370a2de931a0 -r 3d37f529ee65 libgui/src/files-dock-widget.h --- 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); diff -r 370a2de931a0 -r 3d37f529ee65 libgui/src/workspace-view.cc --- 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 #include #include +#include #include #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) diff -r 370a2de931a0 -r 3d37f529ee65 libgui/src/workspace-view.h --- 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 ();