From 5ba5254ec1ebba6c1e89b663592d716b92e13165 Mon Sep 17 00:00:00 2001 From: Campbell Barton Date: Wed, 21 Mar 2018 16:00:18 +0100 Subject: UI: Optional prompt to quit for non win32 systems D566 by @januz Use Blender native dialog when OS dialog's aren't supported. --- intern/ghost/GHOST_C-api.h | 5 +++++ intern/ghost/GHOST_ISystem.h | 6 ++++++ intern/ghost/intern/GHOST_C-api.cpp | 5 +++++ intern/ghost/intern/GHOST_System.cpp | 5 +++++ intern/ghost/intern/GHOST_System.h | 4 ++++ intern/ghost/intern/GHOST_SystemNULL.h | 1 + intern/ghost/intern/GHOST_SystemSDL.cpp | 5 +++++ intern/ghost/intern/GHOST_SystemSDL.h | 4 ++++ intern/ghost/intern/GHOST_SystemX11.cpp | 5 +++++ intern/ghost/intern/GHOST_SystemX11.h | 4 ++++ 10 files changed, 44 insertions(+) (limited to 'intern/ghost') diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h index 967d3f58143..55a56b1b09f 100644 --- a/intern/ghost/GHOST_C-api.h +++ b/intern/ghost/GHOST_C-api.h @@ -897,6 +897,11 @@ extern int GHOST_toggleConsole(int action); */ extern int GHOST_confirmQuit(GHOST_WindowHandle windowhandle); +/** + * Informs if the system provides native dialogs (eg. confirm quit) + */ +extern int GHOST_SupportsNativeDialogs(void); + /** * Use native pixel size (MacBook pro 'retina'), if supported. */ diff --git a/intern/ghost/GHOST_ISystem.h b/intern/ghost/GHOST_ISystem.h index 03193d6e1da..6f719572b73 100644 --- a/intern/ghost/GHOST_ISystem.h +++ b/intern/ghost/GHOST_ISystem.h @@ -418,6 +418,12 @@ public: * in the application */ virtual int confirmQuit(GHOST_IWindow *window) const = 0; + + /** + * Informs if the system provides native dialogs (eg. confirm quit) + */ + virtual bool supportsNativeDialogs(void) = 0; + protected: /** * Initialize the system. diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp index ce653188760..daafe3640e0 100644 --- a/intern/ghost/intern/GHOST_C-api.cpp +++ b/intern/ghost/intern/GHOST_C-api.cpp @@ -893,6 +893,11 @@ int GHOST_toggleConsole(int action) return system->toggleConsole(action); } +int GHOST_SupportsNativeDialogs(void) +{ + GHOST_ISystem *system = GHOST_ISystem::getSystem(); + return system->supportsNativeDialogs(); +} int GHOST_confirmQuit(GHOST_WindowHandle windowhandle) { diff --git a/intern/ghost/intern/GHOST_System.cpp b/intern/ghost/intern/GHOST_System.cpp index 56d68b98ce0..4db2f0616d7 100644 --- a/intern/ghost/intern/GHOST_System.cpp +++ b/intern/ghost/intern/GHOST_System.cpp @@ -380,6 +380,11 @@ int GHOST_System::confirmQuit(GHOST_IWindow * /*window*/) const return 1; } +bool GHOST_System::supportsNativeDialogs(void) +{ + return 1; +} + bool GHOST_System::useNativePixel(void) { m_nativePixel = true; diff --git a/intern/ghost/intern/GHOST_System.h b/intern/ghost/intern/GHOST_System.h index af083996d91..50c893b1113 100644 --- a/intern/ghost/intern/GHOST_System.h +++ b/intern/ghost/intern/GHOST_System.h @@ -319,6 +319,10 @@ public: */ virtual int confirmQuit(GHOST_IWindow *window) const; + /** + * Informs if the system provides native dialogs (eg. confirm quit) + */ + virtual bool supportsNativeDialogs(void); protected: diff --git a/intern/ghost/intern/GHOST_SystemNULL.h b/intern/ghost/intern/GHOST_SystemNULL.h index 868416cd227..7c8d26d7486 100644 --- a/intern/ghost/intern/GHOST_SystemNULL.h +++ b/intern/ghost/intern/GHOST_SystemNULL.h @@ -52,6 +52,7 @@ public: GHOST_TSuccess setCursorPosition(GHOST_TInt32 x, GHOST_TInt32 y) { return GHOST_kFailure; } void getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const { /* nop */ } void getAllDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const { /* nop */ } + bool supportsNativeDialogs(void) { return false;} GHOST_TSuccess init() { GHOST_TSuccess success = GHOST_System::init(); diff --git a/intern/ghost/intern/GHOST_SystemSDL.cpp b/intern/ghost/intern/GHOST_SystemSDL.cpp index e9768e4b845..db555910f4b 100644 --- a/intern/ghost/intern/GHOST_SystemSDL.cpp +++ b/intern/ghost/intern/GHOST_SystemSDL.cpp @@ -635,6 +635,11 @@ GHOST_SystemSDL::addDirtyWindow(GHOST_WindowSDL *bad_wind) m_dirty_windows.push_back(bad_wind); } +bool +GHOST_SystemSDL::supportsNativeDialogs(void) +{ + return false +} GHOST_TSuccess GHOST_SystemSDL::getButtons(GHOST_Buttons& buttons) const { diff --git a/intern/ghost/intern/GHOST_SystemSDL.h b/intern/ghost/intern/GHOST_SystemSDL.h index 6f4ecec586b..41f110ed15d 100644 --- a/intern/ghost/intern/GHOST_SystemSDL.h +++ b/intern/ghost/intern/GHOST_SystemSDL.h @@ -95,6 +95,10 @@ public: getMainDisplayDimensions(GHOST_TUns32& width, GHOST_TUns32& height) const; + /** + * Informs if the system provides native dialogs (eg. confirm quit) + */ + virtual bool supportsNativeDialogs(void); private: GHOST_TSuccess diff --git a/intern/ghost/intern/GHOST_SystemX11.cpp b/intern/ghost/intern/GHOST_SystemX11.cpp index 9b617a34e1a..7fde6791d78 100644 --- a/intern/ghost/intern/GHOST_SystemX11.cpp +++ b/intern/ghost/intern/GHOST_SystemX11.cpp @@ -379,6 +379,11 @@ createWindow(const STR_String& title, return window; } +bool GHOST_SystemX11::supportsNativeDialogs(void) +{ + return false; +} + #if defined(WITH_X11_XINPUT) && defined(X_HAVE_UTF8_STRING) static void destroyIMCallback(XIM /*xim*/, XPointer ptr, XPointer /*data*/) { diff --git a/intern/ghost/intern/GHOST_SystemX11.h b/intern/ghost/intern/GHOST_SystemX11.h index e60cab6a194..9973f6e133f 100644 --- a/intern/ghost/intern/GHOST_SystemX11.h +++ b/intern/ghost/intern/GHOST_SystemX11.h @@ -97,6 +97,10 @@ public: init( ); + /** + * Informs if the system provides native dialogs (eg. confirm quit) + */ + virtual bool supportsNativeDialogs(void); /** * \section Interface Inherited from GHOST_ISystem -- cgit v1.2.3