Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kuznetsov <kuzsasha@gmail.com>2012-03-16 21:37:45 +0400
committerAlexander Kuznetsov <kuzsasha@gmail.com>2012-03-16 21:37:45 +0400
commited44ddd816d3bcd9be2e2097e1087dcdbf9b91e1 (patch)
tree357e958f56adb04aa07e20af827c8d0b6ba5532f
parent2caa507b7eaa7d55a0be7bda513f08ecfe4791f1 (diff)
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.
-rw-r--r--intern/ghost/GHOST_C-api.h8
-rw-r--r--intern/ghost/GHOST_ISystem.h6
-rw-r--r--intern/ghost/intern/GHOST_C-api.cpp6
-rw-r--r--intern/ghost/intern/GHOST_System.cpp6
-rw-r--r--intern/ghost/intern/GHOST_System.h7
-rw-r--r--intern/ghost/intern/GHOST_SystemWin32.cpp6
-rw-r--r--intern/ghost/intern/GHOST_SystemWin32.h8
-rw-r--r--release/scripts/startup/bl_ui/space_userpref.py3
-rw-r--r--source/blender/makesdna/DNA_userdef_types.h1
-rw-r--r--source/blender/makesrna/intern/rna_userdef.c5
-rw-r--r--source/blender/windowmanager/intern/wm_window.c17
11 files changed, 71 insertions, 2 deletions
diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h
index a22b6bc371c..3add5ccb60a 100644
--- a/intern/ghost/GHOST_C-api.h
+++ b/intern/ghost/GHOST_C-api.h
@@ -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
diff --git a/intern/ghost/GHOST_ISystem.h b/intern/ghost/GHOST_ISystem.h
index eeee8c0477b..890917f9822 100644
--- a/intern/ghost/GHOST_ISystem.h
+++ b/intern/ghost/GHOST_ISystem.h
@@ -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.
diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp
index 6edfc4287ae..8442f82d886 100644
--- a/intern/ghost/intern/GHOST_C-api.cpp
+++ b/intern/ghost/intern/GHOST_C-api.cpp
@@ -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);
+}
diff --git a/intern/ghost/intern/GHOST_System.cpp b/intern/ghost/intern/GHOST_System.cpp
index 944ade3f22b..974f66c666a 100644
--- a/intern/ghost/intern/GHOST_System.cpp
+++ b/intern/ghost/intern/GHOST_System.cpp
@@ -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;
+}
diff --git a/intern/ghost/intern/GHOST_System.h b/intern/ghost/intern/GHOST_System.h
index de474fe07a5..15a7cf1fdd9 100644
--- a/intern/ghost/intern/GHOST_System.h
+++ b/intern/ghost/intern/GHOST_System.h
@@ -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:
/**
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index f4b39d01d9e..1ccca4bc6ba 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -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);
+} \ No newline at end of file
diff --git a/intern/ghost/intern/GHOST_SystemWin32.h b/intern/ghost/intern/GHOST_SystemWin32.h
index 43387f68349..bc2044e549d 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.h
+++ b/intern/ghost/intern/GHOST_SystemWin32.h
@@ -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.
diff --git a/release/scripts/startup/bl_ui/space_userpref.py b/release/scripts/startup/bl_ui/space_userpref.py
index 9d947f6fb40..81f67bffd62 100644
--- a/release/scripts/startup/bl_ui/space_userpref.py
+++ b/release/scripts/startup/bl_ui/space_userpref.py
@@ -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'
diff --git a/source/blender/makesdna/DNA_userdef_types.h b/source/blender/makesdna/DNA_userdef_types.h
index 2243eb357fc..e014e18d07b 100644
--- a/source/blender/makesdna/DNA_userdef_types.h
+++ b/source/blender/makesdna/DNA_userdef_types.h
@@ -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 */
diff --git a/source/blender/makesrna/intern/rna_userdef.c b/source/blender/makesrna/intern/rna_userdef.c
index 3673d21a9e6..7af1dfa9da9 100644
--- a/source/blender/makesrna/intern/rna_userdef.c
+++ b/source/blender/makesrna/intern/rna_userdef.c
@@ -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");
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 7893ac2f639..4ccebf7a4ff 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -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);