diff --git a/client/preferences.c b/client/preferences.c index 616fb17c0..7fa01ee3a 100644 --- a/client/preferences.c +++ b/client/preferences.c @@ -49,6 +49,7 @@ int preferences_load (void) { // Set all defaults session.client_debug_level = OFF; + session.window_changed = false; session.window_plot_xpos = 10; session.window_plot_ypos = 30; session.window_plot_hsize = 400; @@ -61,6 +62,7 @@ int preferences_load (void) { session.show_hints = false; session.supports_colors = false; + // loadFileJson wants these, so pass in place holder values, though not used // in settings load; uint8_t dummyData = 0x00; @@ -78,6 +80,7 @@ int preferences_load (void) { // Save all settings from memory (struct) to file int preferences_save (void) { // Note sure if backup has value ? + char backupFilename[FILENAME_MAX+sizeof(preferencesFilename)+10] = {0}; PrintAndLogEx(INFO,"Saving preferences ..."); @@ -353,6 +356,7 @@ static int setCmdEmoji (const char *Cmd) { showEmojiState (prefShowOLD); session.emoji_mode = newValue; showEmojiState (prefShowNEW); + preferences_save (); } else { PrintAndLogEx(INFO,"nothing changed"); showEmojiState (prefShowNone); @@ -399,6 +403,7 @@ static int setCmdColor (const char *Cmd) showColorState (prefShowOLD); session.supports_colors = newValue; showColorState (prefShowNEW); + preferences_save (); } else { PrintAndLogEx(INFO,"nothing changed"); showColorState (prefShowNone); @@ -450,6 +455,7 @@ static int setCmdDebug (const char *Cmd) session.client_debug_level = newValue; g_debugMode = newValue; showClientDebugState (prefShowNEW); + preferences_save (); } else { PrintAndLogEx(INFO,"nothing changed"); showClientDebugState (prefShowNone); @@ -496,6 +502,7 @@ static int setCmdHint (const char *Cmd) showHintsState (prefShowOLD); session.show_hints = newValue; showHintsState (prefShowNEW); + preferences_save (); } else { PrintAndLogEx(INFO,"nothing changed"); showHintsState (prefShowNone); @@ -546,8 +553,8 @@ static int CmdPrefShow (const char *Cmd) { showEmojiState (prefShowNone); showColorState (prefShowNone); - showPlotPosState (); - showOverlayPosState (); + // showPlotPosState (); + // showOverlayPosState (); showClientDebugState(prefShowNone); showHintsState (prefShowNone); @@ -555,18 +562,18 @@ static int CmdPrefShow (const char *Cmd) { return PM3_SUCCESS; } - +/* static int CmdPrefSave (const char *Cmd) { preferences_save(); return PM3_SUCCESS; } - +*/ static command_t CommandTable[] = { {"help", CmdHelp, AlwaysAvailable, "This help"}, {"set", CmdPrefSet, AlwaysAvailable, "Set a preference"}, {"show", CmdPrefShow, AlwaysAvailable, "Show preferences"}, - {"save", CmdPrefSave, AlwaysAvailable, "Save preferences now"}, +// {"save", CmdPrefSave, AlwaysAvailable, "Save preferences now"}, {NULL, NULL, NULL, NULL} }; diff --git a/client/proxguiqt.cpp b/client/proxguiqt.cpp index dfa9aa9fc..7caf695ce 100644 --- a/client/proxguiqt.cpp +++ b/client/proxguiqt.cpp @@ -28,6 +28,8 @@ #include #include "ui.h" +extern "C" int preferences_save (void); + extern "C" { #include "util_darwin.h" } @@ -145,11 +147,14 @@ SliderWidget::SliderWidget() { void SliderWidget::resizeEvent (QResizeEvent *event) { session.window_overlay_hsize = event->size().height(); session.window_overlay_wsize = event->size().width(); + session.window_changed = true; + } void SliderWidget::moveEvent (QMoveEvent *event) { session.window_overlay_xpos = event->pos().x(); session.window_overlay_ypos = event->pos().y(); + session.window_changed = true; } //-------------------- @@ -246,6 +251,10 @@ ProxWidget::ProxWidget(QWidget *parent, ProxGuiQT *master) : QWidget(parent) { controlWidget->setWindowTitle(ct); controlWidget->show(); + + // now that is up, reset pos/size change flags + session.window_changed = false; + } // not 100% sure what i need in this block @@ -268,6 +277,7 @@ ProxWidget::~ProxWidget(void) { plot = NULL; } } + void ProxWidget::closeEvent(QCloseEvent *event) { event->ignore(); this->hide(); @@ -284,11 +294,12 @@ void ProxWidget::showEvent(QShowEvent *event) { void ProxWidget::moveEvent(QMoveEvent *event) { session.window_plot_xpos = event->pos().x(); session.window_plot_ypos = event->pos().y(); - + session.window_changed = true; } void ProxWidget::resizeEvent(QResizeEvent *event) { session.window_plot_hsize = event->size().height(); session.window_plot_wsize = event->size().width(); + session.window_changed = true; } //----------- Plotting diff --git a/client/proxmark3.c b/client/proxmark3.c index b981d1758..940a000b2 100644 --- a/client/proxmark3.c +++ b/client/proxmark3.c @@ -949,7 +949,8 @@ int main(int argc, char *argv[]) { } #ifdef USE_PREFERENCE_FILE - preferences_save (); + if (session.window_changed) // Plot/Overlay moved or resized + preferences_save (); #endif exit(EXIT_SUCCESS); } diff --git a/client/ui.h b/client/ui.h index 3875c27c8..e28eca530 100644 --- a/client/ui.h +++ b/client/ui.h @@ -30,6 +30,7 @@ typedef struct { bool pm3_present; bool help_dump_mode; bool show_hints; + bool window_changed; // track if plot/overlay pos/size changed to save on exit int window_plot_xpos; int window_plot_ypos; int window_plot_hsize;