From 0c029da344b45154d4c68debe127d8cdf3843751 Mon Sep 17 00:00:00 2001 From: Stanislaw Halik Date: Sun, 12 Jun 2016 18:32:49 +0200 Subject: gui, spline-widget, compat/options: ensure no qsettings IO when not modified Turns out every MainWindow::save() and friends were doing useless IO several times during each save. I blame the bundle abstraction. For bundles we track the modified state, but the spline widget needs equality check since it doesn't use the options api. It was found by accident when adding qDebug() into the slider_value {de,}serializer code. The .ini file was being rewritten over and over again causing hundres of milliseconds pauses on Windows. Remove the save timer kludge from gui. Saves are now fast. --- gui/ui.cpp | 25 +++---------------------- gui/ui.h | 5 +---- 2 files changed, 4 insertions(+), 26 deletions(-) (limited to 'gui') diff --git a/gui/ui.cpp b/gui/ui.cpp index fabcb5e4..40ac6c8d 100644 --- a/gui/ui.cpp +++ b/gui/ui.cpp @@ -74,9 +74,6 @@ MainWindow::MainWindow() : connect(&pose_update_timer, SIGNAL(timeout()), this, SLOT(showHeadPose())); connect(&kbd_quit, SIGNAL(activated()), this, SLOT(exit())); - save_timer.setSingleShot(true); - connect(&save_timer, SIGNAL(timeout()), this, SLOT(_save())); - profile_menu.addAction("Create new empty config", this, SLOT(make_empty_config())); profile_menu.addAction("Create new copied config", this, SLOT(make_copied_config())); profile_menu.addAction("Open configuration directory", this, SLOT(open_config_directory())); @@ -156,11 +153,10 @@ bool MainWindow::get_new_config_name_from_dialog(QString& ret) MainWindow::~MainWindow() { - maybe_save(); - if (tray) tray->hide(); stopTracker(); + save(); } void MainWindow::set_working_directory() @@ -168,30 +164,15 @@ void MainWindow::set_working_directory() QDir::setCurrent(QCoreApplication::applicationDirPath()); } -void MainWindow::save_mappings() { +void MainWindow::save_mappings() +{ pose.save_mappings(); } void MainWindow::save() { - save_timer.stop(); - save_timer.start(5000); -} - -void MainWindow::maybe_save() -{ - if (save_timer.isActive()) - { - save_timer.stop(); - _save(); - } -} - -void MainWindow::_save() { s.b->save(); save_mappings(); - mem settings = group::ini_file(); - settings->sync(); #if defined(__unix) || defined(__linux) QString currentFile = group::ini_pathname(); diff --git a/gui/ui.h b/gui/ui.h index fbfd1237..42c4630c 100644 --- a/gui/ui.h +++ b/gui/ui.h @@ -38,7 +38,7 @@ using namespace options; class MainWindow : public QMainWindow, private State { Q_OBJECT - + Shortcuts global_shortcuts; Ui::OpentrackUI ui; @@ -55,7 +55,6 @@ class MainWindow : public QMainWindow, private State process_detector_worker det; QMenu profile_menu; bool is_refreshing_profiles; - QTimer save_timer; mem current_tracker() { @@ -79,10 +78,8 @@ class MainWindow : public QMainWindow, private State void set_title(const QString& game_title = QStringLiteral("")); static bool get_new_config_name_from_dialog(QString &ret); void set_profile(const QString& profile); - void maybe_save(); void register_shortcuts(); private slots: - void _save(); void save(); void exit(); void profileSelected(QString name); -- cgit v1.2.3