Patch by Psy-Fi + my minor changes
Adds conformation on exit for windows. Needs to be enabled in user perf. Tried to edit blender.exe.manifest for more modern dialog look, but didn't work out.
This commit is contained in:
@@ -842,6 +842,14 @@ extern void GHOST_putClipboard(GHOST_TInt8 *buffer, int selection);
|
||||
*/
|
||||
extern int GHOST_toggleConsole(int action);
|
||||
|
||||
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
extern int GHOST_confirmQuit(GHOST_WindowHandle windowhandle);
|
||||
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -392,7 +392,11 @@ public:
|
||||
*/
|
||||
virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0;
|
||||
|
||||
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
virtual int confirmQuit(GHOST_IWindow * window) const = 0;
|
||||
protected:
|
||||
/**
|
||||
* Initialize the system.
|
||||
|
||||
@@ -865,3 +865,9 @@ int GHOST_toggleConsole(int action)
|
||||
GHOST_ISystem* system = GHOST_ISystem::getSystem();
|
||||
return system->toggleConsole(action);
|
||||
}
|
||||
|
||||
|
||||
int GHOST_confirmQuit(GHOST_WindowHandle windowhandle){
|
||||
GHOST_ISystem* system = GHOST_ISystem::getSystem();
|
||||
return system->confirmQuit((GHOST_IWindow*) windowhandle);
|
||||
}
|
||||
|
||||
@@ -366,3 +366,9 @@ GHOST_TSuccess GHOST_System::createFullScreenWindow(GHOST_Window** window, const
|
||||
}
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
int GHOST_System::confirmQuit(GHOST_IWindow * window) const
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -297,6 +297,13 @@ public:
|
||||
*/
|
||||
virtual void putClipboard(GHOST_TInt8 *buffer, bool selection) const = 0;
|
||||
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
virtual int confirmQuit(GHOST_IWindow * window) const;
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
/**
|
||||
|
||||
@@ -1356,3 +1356,9 @@ int GHOST_SystemWin32::toggleConsole(int action)
|
||||
|
||||
return m_consoleStatus;
|
||||
}
|
||||
|
||||
int GHOST_SystemWin32::confirmQuit(GHOST_IWindow * window) const
|
||||
{
|
||||
return (MessageBox(window ? ((GHOST_WindowWin32*)window)->getHWND() : 0, "Some changes have not been saved.\nDo you really want to quit ?",
|
||||
"Exit Blender", MB_OKCANCEL | MB_ICONWARNING | MB_TOPMOST) == IDOK);
|
||||
}
|
||||
@@ -200,7 +200,13 @@ public:
|
||||
* @return Indication whether the event was handled.
|
||||
*/
|
||||
static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType,GHOST_IWindow* window, int mouseX, int mouseY, void* data);
|
||||
|
||||
|
||||
/**
|
||||
* Confirms quitting he program when there is just one window left open
|
||||
* in the application
|
||||
*/
|
||||
virtual int confirmQuit(GHOST_IWindow * window) const;
|
||||
|
||||
protected:
|
||||
/**
|
||||
* Initializes the system.
|
||||
|
||||
@@ -244,6 +244,9 @@ class USERPREF_PT_interface(Panel):
|
||||
|
||||
col.prop(view, "show_splash")
|
||||
|
||||
if os.name == 'nt':
|
||||
col.prop(view, "quit_dialog")
|
||||
|
||||
|
||||
class USERPREF_PT_edit(Panel):
|
||||
bl_space_type = 'USER_PREFERENCES'
|
||||
|
||||
@@ -510,6 +510,7 @@ extern UserDef U; /* from blenkernel blender.c */
|
||||
#define USER_SPLASH_DISABLE (1 << 27)
|
||||
#define USER_HIDE_RECENT (1 << 28)
|
||||
#define USER_SHOW_THUMBNAILS (1 << 29)
|
||||
#define USER_QUIT_PROMPT (1 << 30)
|
||||
|
||||
/* Auto-Keying mode */
|
||||
/* AUTOKEY_ON is a bitflag */
|
||||
|
||||
@@ -2369,6 +2369,11 @@ static void rna_def_userdef_view(BlenderRNA *brna)
|
||||
RNA_def_property_ui_text(prop, "Sub Level Menu Open Delay",
|
||||
"Time delay in 1/10 seconds before automatically opening sub level menus");
|
||||
|
||||
prop = RNA_def_property(srna, "quit_dialog", PROP_BOOLEAN, PROP_NONE);
|
||||
RNA_def_property_boolean_sdna(prop, NULL, "uiflag", USER_QUIT_PROMPT);
|
||||
RNA_def_property_ui_text(prop, "Prompt Quit",
|
||||
"Asks for confirmation when quitting through the window close button");
|
||||
|
||||
/* Toolbox click-hold delay */
|
||||
prop = RNA_def_property(srna, "open_left_mouse_delay", PROP_INT, PROP_NONE);
|
||||
RNA_def_property_int_sdna(prop, NULL, "tb_leftmouse");
|
||||
|
||||
@@ -250,8 +250,25 @@ wmWindow *wm_window_copy(bContext *C, wmWindow *winorig)
|
||||
/* this is event from ghost, or exit-blender op */
|
||||
void wm_window_close(bContext *C, wmWindowManager *wm, wmWindow *win)
|
||||
{
|
||||
wmWindow *tmpwin;
|
||||
bScreen *screen= win->screen;
|
||||
|
||||
/* first check if we have any non-temp remaining windows */
|
||||
if((U.uiflag & USER_QUIT_PROMPT) && !wm->file_saved){
|
||||
if(wm->windows.first) {
|
||||
for(tmpwin = wm->windows.first; tmpwin; tmpwin = tmpwin->next){
|
||||
if(tmpwin == win)
|
||||
continue;
|
||||
if(tmpwin->screen->temp == 0)
|
||||
break;
|
||||
}
|
||||
if(tmpwin == NULL){
|
||||
if(!GHOST_confirmQuit(win->ghostwin))
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
BLI_remlink(&wm->windows, win);
|
||||
|
||||
wm_draw_window_clear(win);
|
||||
|
||||
Reference in New Issue
Block a user