# HG changeset patch # User John W. Eaton # Date 1572905109 18000 # Node ID fd009322dd9fe49fe687056d419525c9505153d0 # Parent 2f38c2681b3ea44c66cae424c8f1b2685f9ec248 eliminate static variable in file_editor_tab class * file_editor_tab.h, file_editor_tab.cc (file_editor_tab::m_cancelled): Delete static variable and all uses. (file_editor_tab::reset_cancel, file_editor_tab::was_cancelled): Delete static functions. (file_editor_tab::check_modified_file): Delete slot. (file_editor_tab::check_file_modified): Declare public. * file-editor.h, file-editor.cc (file_editor_tab_widget::tab_list): New function to get list of widgets managed by QTabWidget object directly. (file_editor::check_closing): Directly loop over list of widgets to check for closing status. Break from loop if closing is canceled. (file_editor::fetab_check_modified_file): Delete signal. (file_editor::make_file_editor_tab): Delete connection from fetab_check_modified_file to check_modified_file. diff -r 2f38c2681b3e -r fd009322dd9f libgui/src/m-editor/file-editor-tab.cc --- a/libgui/src/m-editor/file-editor-tab.cc Mon Nov 04 12:22:23 2019 -0800 +++ b/libgui/src/m-editor/file-editor-tab.cc Mon Nov 04 17:05:09 2019 -0500 @@ -86,8 +86,6 @@ namespace octave { - bool file_editor_tab::m_cancelled = false; - //! A file_editor_tab object consists of a text area and three left margins. //! The first holds breakpoints, bookmarks, and the debug program counter. //! The second holds line numbers. The third holds "fold" marks, to hide @@ -309,9 +307,6 @@ void file_editor_tab::closeEvent (QCloseEvent *e) { - m_cancelled = false; // prevent unwanted interaction of previous - // exits of octave which were canceled by the user - int save_dialog = check_file_modified (true); if ((save_dialog == QMessageBox::Cancel) || (save_dialog == QMessageBox::Save)) @@ -1001,15 +996,6 @@ m_edit_area->context_edit (); } - void file_editor_tab::check_modified_file (void) - { - if (m_cancelled) - return; - - if (check_file_modified (false) == QMessageBox::Cancel) - m_cancelled = true; - } - void file_editor_tab::save_file (const QWidget *ID) { if (ID != this) @@ -1875,10 +1861,7 @@ decision = msgBox->exec (); // show_dialog (msgBox, true); if (decision == QMessageBox::Cancel) - { - m_cancelled = true; - m_edit_area->setReadOnly (false); - } + m_edit_area->setReadOnly (false); else if (decision == QMessageBox::Save) save_file (m_file_name, remove, false); // Remove on success } diff -r 2f38c2681b3e -r fd009322dd9f libgui/src/m-editor/file-editor-tab.h --- a/libgui/src/m-editor/file-editor-tab.h Mon Nov 04 12:22:23 2019 -0800 +++ b/libgui/src/m-editor/file-editor-tab.h Mon Nov 04 17:05:09 2019 -0500 @@ -63,9 +63,6 @@ // Will initiate close if associated with the identifier tag. bool conditional_close (void); - static void reset_cancel (void) { m_cancelled = false; } - static bool was_cancelled (void) { return m_cancelled; } - void update_breakpoints (); signals: @@ -150,7 +147,6 @@ void set_current_directory (const QString& dir); void context_help (const QWidget *ID, bool); void context_edit (const QWidget *ID); - void check_modified_file (void); void save_file (const QWidget *ID); void save_file (const QWidget *ID, const QString& fileName, bool remove_on_success); @@ -299,7 +295,9 @@ void update_lexer_settings (void); void show_dialog (QDialog *dlg, bool modal); + public: int check_file_modified (bool remove = false); + private: void do_comment_selected_text (bool comment, bool input_str = false); void do_indent_selected_text (bool indent); void do_smart_indent_line_or_selected_text (void); @@ -346,8 +344,6 @@ QString m_prep_apis_path; QString m_prep_apis_file; - static bool m_cancelled; - int m_line_break; bool m_line_break_comments; int m_line; diff -r 2f38c2681b3e -r fd009322dd9f libgui/src/m-editor/file-editor.cc --- a/libgui/src/m-editor/file-editor.cc Mon Nov 04 12:22:23 2019 -0800 +++ b/libgui/src/m-editor/file-editor.cc Mon Nov 04 17:05:09 2019 -0500 @@ -81,6 +81,14 @@ return qobject_cast (tabBar ()); } + std::list + file_editor_tab_widget::tab_list (void) const + { + std::list retval; + for (int i = 0; i < count (); i++) + retval.push_back (static_cast (widget (i))); + return retval; + } // File editor @@ -379,40 +387,36 @@ bool file_editor::check_closing (void) { - // When the application or the editor is closing and the user wants to close - // all files in the latter case all editor tabs are checked whether - // they need to be saved. During these ckecked the tabs are not closed - // since the user might cancel closing octave during one of these saving - // dialogs. Therefore, saving the session for restoring at next start - // is not done before the application is definitely closing - - // Have all file editor tabs signal what their filenames are. - m_editor_tab_map.clear (); - emit fetab_file_name_query (nullptr); - - // Save all tabs with confirmation. - file_editor_tab::reset_cancel (); - emit fetab_check_modified_file (); - - // If there was a cancellation, make the already saved/discarded tabs - // recovering from the exit by removing the read-only state and by - // recovering the debugger breakpoints. Finally return false in order to - // cancel closing the application or the editor - if (file_editor_tab::was_cancelled ()) + // When the application or the editor is closing and the user wants + // to close all files in the latter case all editor tabs are checked + // whether they need to be saved. During these ckecked the tabs are + // not closed since the user might cancel closing octave during one + // of these saving dialogs. Therefore, saving the session for + // restoring at next start is not done before the application is + // definitely closing. + + std::list fe_tab_lst = m_tab_widget->tab_list (); + + for (auto fe_tab : fe_tab_lst) { - emit fetab_recover_from_exit (); - return false; + // If there was a cancellation, make the already saved/discarded + // tabs recovering from the exit by removing the read-only state + // and by recovering the debugger breakpoints. Finally return + // false in order to cancel closing the application or the + // editor + + if (fe_tab->check_file_modified (false) == QMessageBox::Cancel) + { + emit fetab_recover_from_exit (); + return false; + } } - // Wait for all editor tabs to have saved their files if required - m_number_of_tabs = m_editor_tab_map.size (); - - for (auto p = m_editor_tab_map.cbegin (); - p != m_editor_tab_map.cend (); p++) + for (auto fe_tab : fe_tab_lst) { - QString file_name = p->first; // get file name of tab - connect (static_cast (m_editor_tab_map[file_name].fet_ID), - SIGNAL (tab_ready_to_close (void)), + // Wait for all editor tabs to have saved their files if required + + connect (fe_tab, SIGNAL (tab_ready_to_close (void)), this, SLOT (handle_tab_ready_to_close (void))); } @@ -2293,9 +2297,6 @@ bool)), f, SLOT (save_file (const QWidget*, const QString&, bool))); - connect (this, SIGNAL (fetab_check_modified_file (void)), - f, SLOT (check_modified_file (void))); - // Signals from the file_editor trivial operations connect (this, SIGNAL (fetab_recover_from_exit (void)), f, SLOT (recover_from_exit (void))); diff -r 2f38c2681b3e -r fd009322dd9f libgui/src/m-editor/file-editor.h --- a/libgui/src/m-editor/file-editor.h Mon Nov 04 12:22:23 2019 -0800 +++ b/libgui/src/m-editor/file-editor.h Mon Nov 04 17:05:09 2019 -0500 @@ -23,6 +23,7 @@ #if ! defined (octave_file_editor_h) #define octave_file_editor_h 1 +#include #include #include @@ -56,6 +57,8 @@ ~file_editor_tab_widget (void) = default; tab_bar * get_tab_bar (void) const; + + std::list tab_list (void) const; }; // the class for the file editor @@ -134,7 +137,6 @@ // No fetab_new, functionality in editor void fetab_context_help (const QWidget *ID, bool); void fetab_context_edit (const QWidget *ID); - void fetab_check_modified_file (void); void fetab_save_file (const QWidget *ID); void fetab_save_file_as (const QWidget *ID); void fetab_print_file (const QWidget *ID);