News:

Accounts with zero posts and zero activity during the last months will be deleted periodically to fight SPAM!

Main Menu

hidden state of undocked windows not saved

Started by Jenna, June 08, 2008, 04:48:48 PM

Previous topic - Next topic

Jenna

I just filed a bug-report and a patch at berlios.

Text of the bug-report is:

QuoteIf a layout with an undocked windows was saved (either automatically on close or manually) and the undocked window gets closed, C::B does not recognize the change of the layout, that means the "layout changed"-dialog does not pop up on close.
The next time C::B is opened the closed undocked window is open again.

This happens, because the function that checks for changes does not look at the "state=" parameter of the layouts, because it also reflects if the window is active or not and that leads to popping up the "layout changed"-dialog even if nothing changed substantially.

The patch:


--- codeblocks-1.0svn.orig/src/src/main.cpp     2008-06-07 12:04:42.000000000 +0200
+++ codeblocks-1.0svn.work/src/src/main.cpp     2008-06-08 15:12:39.000000000 +0200
@@ -1220,6 +1221,7 @@
bool MainFrame::LayoutDifferent(const wxString& layout1,const wxString& layout2,const wxString& delimiter)
{
     wxStringTokenizer strTok;
+    unsigned long j;

     strTok.SetString(layout1, delimiter);
     wxArrayString arLayout1;
@@ -1229,7 +1231,14 @@
         while(strTokColon.HasMoreTokens())
         {
             wxString theToken = strTokColon.GetNextToken();
-            if (!theToken.StartsWith(_T("state="))) arLayout1.Add(theToken);
+            if (theToken.StartsWith(_T("state=")))
+            {
+               theToken=theToken.Right(theToken.Len() - wxString(_T("state=")).Len());
+               theToken.ToULong(&j);
+               // we filter out the hidden/show state
+               theToken=wxString::Format(_("state=%d"),j &  wxAuiPaneInfo::optionHidden);
+            }
+               arLayout1.Add(theToken);
         }
     }

@@ -1241,7 +1250,14 @@
         while(strTokColon.HasMoreTokens())
         {
             wxString theToken = strTokColon.GetNextToken();
-            if (!theToken.StartsWith(_T("state="))) arLayout2.Add(theToken);
+            if (theToken.StartsWith(_T("state=")))
+            {
+               theToken=theToken.Right(theToken.Len() - wxString(_T("state=")).Len());
+               theToken.ToULong(&j);
+               // we filter out the hidden/show state
+               theToken=wxString::Format(_("state=%d"),j &  wxAuiPaneInfo::optionHidden);
+            }
+               arLayout2.Add(theToken);
         }
     }