Mercurial > octave
changeset 33221:bd8a946093d7
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 | 3af3c114f706 |
children | 461f5517c06c |
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 Mon Mar 18 17:30:43 2024 +0100 +++ b/libgui/src/files-dock-widget.cc Mon Mar 18 20:00:53 2024 +0100 @@ -406,10 +406,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); @@ -468,6 +464,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
--- a/libgui/src/files-dock-widget.h Mon Mar 18 17:30:43 2024 +0100 +++ 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 Mon Mar 18 17:30:43 2024 +0100 +++ 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
--- a/libgui/src/workspace-view.h Mon Mar 18 17:30:43 2024 +0100 +++ 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 ();