diff --git a/src/PowderToy.cpp b/src/PowderToy.cpp index 270b78539..6de44ea8e 100644 --- a/src/PowderToy.cpp +++ b/src/PowderToy.cpp @@ -444,6 +444,7 @@ int Main(int argc, char *argv[]) engine.ShowAvatars = showAvatars; engine.Begin(); engine.SetFastQuit(prefs.Get("FastQuit", true)); + engine.SetGlobalQuit(prefs.Get("GlobalQuit", true)); engine.TouchUI = prefs.Get("TouchUI", DEFAULT_TOUCH_UI); engine.windowFrameOps = windowFrameOps; diff --git a/src/PowderToyFontEditor.cpp b/src/PowderToyFontEditor.cpp index aa1ea690c..a491be9b5 100644 --- a/src/PowderToyFontEditor.cpp +++ b/src/PowderToyFontEditor.cpp @@ -68,6 +68,7 @@ int main(int argc, char * argv[]) engine.Begin(); engine.SetFastQuit(true); + engine.SetGlobalQuit(true); if (argc >= 2) { diff --git a/src/PowderToySDL.cpp b/src/PowderToySDL.cpp index 0fa07836e..20460ff2b 100644 --- a/src/PowderToySDL.cpp +++ b/src/PowderToySDL.cpp @@ -291,7 +291,7 @@ static void EventProcess(const SDL_Event &event) { break; } - if (ALLOW_QUIT && !event.key.repeat && event.key.keysym.sym == 'q' && (event.key.keysym.mod&KMOD_CTRL) && !(event.key.keysym.mod&KMOD_ALT)) + if (engine.GetGlobalQuit() && ALLOW_QUIT && !event.key.repeat && event.key.keysym.sym == 'q' && (event.key.keysym.mod&KMOD_CTRL) && !(event.key.keysym.mod&KMOD_ALT)) engine.ConfirmExit(); else engine.onKeyPress(event.key.keysym.sym, event.key.keysym.scancode, event.key.repeat, event.key.keysym.mod&KMOD_SHIFT, event.key.keysym.mod&KMOD_CTRL, event.key.keysym.mod&KMOD_ALT); diff --git a/src/gui/interface/Engine.cpp b/src/gui/interface/Engine.cpp index 6d8e72caa..515e08204 100644 --- a/src/gui/interface/Engine.cpp +++ b/src/gui/interface/Engine.cpp @@ -16,6 +16,7 @@ Engine::Engine(): state_(NULL), windowTargetPosition(0, 0), FastQuit(1), + GlobalQuit(true), lastTick(0), mouseb_(0), mousex_(0), diff --git a/src/gui/interface/Engine.h b/src/gui/interface/Engine.h index 7738c9e47..9d6fa1ce8 100644 --- a/src/gui/interface/Engine.h +++ b/src/gui/interface/Engine.h @@ -51,6 +51,8 @@ namespace ui inline int GetDrawingFrequencyLimit() {return drawingFrequencyLimit;} void SetFastQuit(bool fastquit) { FastQuit = fastquit; } inline bool GetFastQuit() {return FastQuit; } + void SetGlobalQuit(bool newGlobalQuit) { GlobalQuit = newGlobalQuit; } + inline bool GetGlobalQuit() {return GlobalQuit; } void Tick(); void Draw(); @@ -110,6 +112,7 @@ namespace ui bool running_; bool FastQuit; + bool GlobalQuit; long unsigned int lastTick; int mouseb_; diff --git a/src/gui/options/OptionsController.cpp b/src/gui/options/OptionsController.cpp index 8c4881338..cd25ea798 100644 --- a/src/gui/options/OptionsController.cpp +++ b/src/gui/options/OptionsController.cpp @@ -127,6 +127,11 @@ void OptionsController::SetFastQuit(bool fastquit) model->SetFastQuit(fastquit); } +void OptionsController::SetGlobalQuit(bool newGlobalQuit) +{ + model->SetGlobalQuit(newGlobalQuit); +} + void OptionsController::SetDecoSpace(int decoSpace) { model->SetDecoSpace(decoSpace); diff --git a/src/gui/options/OptionsController.h b/src/gui/options/OptionsController.h index 65a6de9a4..a9ea5a1b0 100644 --- a/src/gui/options/OptionsController.h +++ b/src/gui/options/OptionsController.h @@ -34,6 +34,7 @@ public: void SetNativeClipoard(bool nativeClipoard); void SetResizable(bool resizable); void SetFastQuit(bool fastquit); + void SetGlobalQuit(bool newGlobalQuit); void SetDecoSpace(int decoSpace); void SetShowAvatars(bool showAvatars); void SetMouseClickrequired(bool mouseClickRequired); diff --git a/src/gui/options/OptionsModel.cpp b/src/gui/options/OptionsModel.cpp index cfcffc27f..b721fdf85 100644 --- a/src/gui/options/OptionsModel.cpp +++ b/src/gui/options/OptionsModel.cpp @@ -256,6 +256,17 @@ void OptionsModel::SetFastQuit(bool fastquit) notifySettingsChanged(); } +bool OptionsModel::GetGlobalQuit() +{ + return ui::Engine::Ref().GetGlobalQuit(); +} +void OptionsModel::SetGlobalQuit(bool newGlobalQuit) +{ + ui::Engine::Ref().SetGlobalQuit(newGlobalQuit); + GlobalPrefs::Ref().Set("GlobalQuit", newGlobalQuit); + notifySettingsChanged(); +} + int OptionsModel::GetDecoSpace() { return gModel->GetDecoSpace(); diff --git a/src/gui/options/OptionsModel.h b/src/gui/options/OptionsModel.h index 1e41a30d2..165717fef 100644 --- a/src/gui/options/OptionsModel.h +++ b/src/gui/options/OptionsModel.h @@ -57,6 +57,8 @@ public: void SetBlurryScaling(bool newBlurryScaling); bool GetFastQuit(); void SetFastQuit(bool fastquit); + bool GetGlobalQuit(); + void SetGlobalQuit(bool newGlobalQuit); int GetDecoSpace(); void SetDecoSpace(int decoSpace); bool GetMouseClickRequired(); diff --git a/src/gui/options/OptionsView.cpp b/src/gui/options/OptionsView.cpp index 9bccb8f9d..b1a9e8968 100644 --- a/src/gui/options/OptionsView.cpp +++ b/src/gui/options/OptionsView.cpp @@ -286,6 +286,9 @@ OptionsView::OptionsView() : ui::Window(ui::Point(-1, -1), ui::Point(320, 340)) fastquit = addCheckbox(0, "Fast quit", "Always exit completely when hitting close", [this] { c->SetFastQuit(fastquit->GetChecked()); }); + globalQuit = addCheckbox(0, "Global quit shortcut", "Ctrl+q works everywhere", [this] { + c->SetGlobalQuit(globalQuit->GetChecked()); + }); } showAvatars = addCheckbox(0, "Show avatars", "Disable if you have a slow connection", [this] { c->SetShowAvatars(showAvatars->GetChecked()); @@ -487,6 +490,10 @@ void OptionsView::NotifySettingsChanged(OptionsModel * sender) { fastquit->SetChecked(sender->GetFastQuit()); } + if (globalQuit) + { + globalQuit->SetChecked(sender->GetGlobalQuit()); + } if (nativeClipoard) { nativeClipoard->SetChecked(sender->GetNativeClipoard()); diff --git a/src/gui/options/OptionsView.h b/src/gui/options/OptionsView.h index 1daf2d5fb..15e0a6be2 100644 --- a/src/gui/options/OptionsView.h +++ b/src/gui/options/OptionsView.h @@ -33,6 +33,7 @@ class OptionsView: public ui::Window ui::Checkbox *forceIntegerScaling{}; ui::Checkbox *blurryScaling{}; ui::Checkbox *fastquit{}; + ui::Checkbox *globalQuit{}; ui::DropDown *decoSpace{}; ui::Checkbox *showAvatars{}; ui::Checkbox *momentumScroll{};