Revision: 44851
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44851
Author:   campbellbarton
Date:     2012-03-13 15:44:48 +0000 (Tue, 13 Mar 2012)
Log Message:
-----------
patch [#30511] from r44792, broke setting the window state from the command 
line (-W / -w).

Fix this by storing if the border is set - before this was only done for the 
window dimensions.
also move these variables into a static struct so this logic is easier to 
follow.

Revision Links:
--------------
    
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44792

Modified Paths:
--------------
    trunk/blender/source/blender/windowmanager/intern/wm_window.c

Modified: trunk/blender/source/blender/windowmanager/intern/wm_window.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_window.c       
2012-03-13 14:28:58 UTC (rev 44850)
+++ trunk/blender/source/blender/windowmanager/intern/wm_window.c       
2012-03-13 15:44:48 UTC (rev 44851)
@@ -78,10 +78,21 @@
 /* the global to talk to ghost */
 static GHOST_SystemHandle g_system= NULL;
 
+typedef enum WinOverrideFlag {
+       WIN_OVERRIDE_GEOM     = (1 << 0),
+       WIN_OVERRIDE_WINSTATE = (1 << 1)
+} WinOverrideFlag;
+
 /* set by commandline */
-static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0, initialstate= 
GHOST_kWindowStateNormal;
-static unsigned short useprefsize= 0;
+static struct WMInitStruct {
+       /* window geometry */
+       int size_x, size_y;
+       int start_x, start_y;
 
+       int windowstate;
+       WinOverrideFlag override_flag;
+} wm_init_state = {0, 0, 0, 0, GHOST_kWindowStateNormal, 0};
+
 /* ******** win open & close ************ */
 
 /* XXX this one should correctly check for apple top header...
@@ -370,33 +381,37 @@
         * Note that these values will be used only
         * when there is no startup.blend yet.
         */
-       if (!prefsizx) {
-               wm_get_screensize(&prefsizx, &prefsizy);
+       if (wm_init_state.size_x == 0) {
+               wm_get_screensize(&wm_init_state.size_x, &wm_init_state.size_y);
                
 #if defined(__APPLE__) && !defined(GHOST_COCOA)
 //Cocoa provides functions to get correct max window size
                {
                        extern void wm_set_apple_prefsize(int, int);    /* 
wm_apple.c */
                        
-                       wm_set_apple_prefsize(prefsizx, prefsizy);
+                       wm_set_apple_prefsize(wm_init_state.size_x, 
wm_init_state.size_y);
                }
 #else
-               prefstax= 0;
-               prefstay= 0;
+               wm_init_state.start_x = 0;
+               wm_init_state.start_y = 0;
                
 #endif
        }
        
-       for(win= wm->windows.first; win; win= win->next) {
-               if(win->ghostwin==NULL) {
-                       if(win->sizex==0 || useprefsize) {
-                               win->posx= prefstax;
-                               win->posy= prefstay;
-                               win->sizex= prefsizx;
-                               win->sizey= prefsizy;
-                               win->windowstate= initialstate;
-                               useprefsize= 0;
+       for (win= wm->windows.first; win; win= win->next) {
+               if (win->ghostwin==NULL) {
+                       if ((win->sizex == 0) || (wm_init_state.override_flag & 
WIN_OVERRIDE_GEOM)) {
+                               win->posx = wm_init_state.start_x;
+                               win->posy = wm_init_state.start_y;
+                               win->sizex = wm_init_state.size_x;
+                               win->sizey = wm_init_state.size_y;
+                               wm_init_state.override_flag &= 
~WIN_OVERRIDE_GEOM;
                        }
+
+                       if (wm_init_state.override_flag & 
WIN_OVERRIDE_WINSTATE) {
+                               win->windowstate = wm_init_state.windowstate;
+                       }
+
                        wm_window_add_ghostwindow("Blender", win);
                }
                /* happens after fileread */
@@ -1144,22 +1159,24 @@
 /* called whem no ghost system was initialized */
 void WM_setprefsize(int stax, int stay, int sizx, int sizy)
 {
-       prefstax= stax;
-       prefstay= stay;
-       prefsizx= sizx;
-       prefsizy= sizy;
-       useprefsize= 1;
+       wm_init_state.start_x = stax; /* left hand pos */
+       wm_init_state.start_y = stay; /* bottom pos */
+       wm_init_state.size_x = sizx;
+       wm_init_state.size_y = sizy;
+       wm_init_state.override_flag |= WIN_OVERRIDE_GEOM;
 }
 
 /* for borderless and border windows set from command-line */
 void WM_setinitialstate_fullscreen(void)
 {
-       initialstate= GHOST_kWindowStateFullScreen;
+       wm_init_state.windowstate = GHOST_kWindowStateFullScreen;
+       wm_init_state.override_flag |= WIN_OVERRIDE_WINSTATE;
 }
 
 void WM_setinitialstate_normal(void)
 {
-       initialstate= GHOST_kWindowStateNormal;
+       wm_init_state.windowstate = GHOST_kWindowStateNormal;
+       wm_init_state.override_flag |= WIN_OVERRIDE_WINSTATE;
 }
 
 /* This function requires access to the GHOST_SystemHandle (g_system) */

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to