I tried this little hack inside BatchJob:
int CodeBlocksApp::BatchJob()
{
if (!m_Batch)
return -1;
// find compiler plugin
PluginsArray arr = Manager::Get()->GetPluginManager()->GetCompilerOffers();
if (arr.GetCount() == 0)
return -2;
cbCompilerPlugin* compiler = static_cast<cbCompilerPlugin*>(arr[0]);
if (!compiler)
return -3;
wxTaskBarIcon cbTaskBarIcon;
#ifdef __WXMSW__
cbTaskBarIcon.SetIcon(wxICON(A_MAIN_ICON),_("Now compiling ") + wxString(argv[argc-1]));
#else
cbTaskBarIcon.SetIcon(wxIcon(app),_("Now compiling ") + wxString(argv[argc-1]));
#endif // __WXMSW__
if (m_ReBuild)
compiler->RebuildWorkspace(m_BatchTarget);
else if (m_Build)
compiler->BuildWorkspace(m_BatchTarget);
// wait for compiler to finish
while (compiler->IsRunning())
{
wxMilliSleep(10);
Manager::Yield();
}
int exitCode = compiler->GetExitCode();
cbTaskBarIcon.RemoveIcon();
if (m_BatchNotify)
{
wxString msg;
msg.Printf(_("Batch build is complete.\nProcess exited with status code %d."), exitCode);
wxMessageBox(msg, APP_NAME, exitCode == 0 ? wxICON_INFORMATION : wxICON_WARNING);
}
return exitCode;
}
...and it worked, at least until the compiler was done, then the application crashed.
I will try to make it (so other devs please keep this for me :P)
--edit-- hmm. very strange indeed:
...and it worked, at least until the compiler was done, then the application crashed.
I got an RPT file on my laptop, I will post it when I am back home...
I don;t know where the problem is, but I don't think it is in that little code that is added. I saw the destructor of wxFlatbook ... :shock:
Here is the RPT file..
-------------------
Error occured on Wednesday, January 25, 2006 at 10:28:25.
C:\Program Files\CodeBlocks\codeblocks.exe caused an Access Violation at location 60639f85 in module C:\Program Files\CodeBlocks\codeblocks.dll Writing to location 00000160.
Registers:
eax=00000000 ebx=01619208 ecx=01f23cdc edx=0022f610 esi=10590730 edi=00090000
eip=60639f85 esp=0022f620 ebp=0022f7b8 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=003b gs=0000 efl=00010246
Call stack:
60639F85 C:\Program Files\CodeBlocks\codeblocks.dll:60639F85 wxPageContainer::DoDeletePage(unsigned) C:/Development/codeblocks/src/sdk/wxFlatNotebook/wxFlatNotebook.cpp:1202
606346D2 C:\Program Files\CodeBlocks\codeblocks.dll:606346D2 wxFlatNotebook::RemovePage(unsigned, bool) C:/Development/codeblocks/src/sdk/wxFlatNotebook/wxFlatNotebook.cpp:471
6052C6A7 C:\Program Files\CodeBlocks\codeblocks.dll:6052C6A7 EditorManager::RemoveEditorBase(EditorBase*, bool) C:/Development/codeblocks/src/sdk/editormanager.cpp:628
6052C5DD C:\Program Files\CodeBlocks\codeblocks.dll:6052C5DD EditorManager::RemoveCustomEditor(EditorBase*) C:/Development/codeblocks/src/sdk/editormanager.cpp:600
60511B6A C:\Program Files\CodeBlocks\codeblocks.dll:60511B6A EditorBase::~EditorBase() C:/Development/codeblocks/src/sdk/editorbase.cpp:92
604CF633 C:\Program Files\CodeBlocks\codeblocks.dll:604CF633 cbEditor::~cbEditor() C:/Development/codeblocks/src/sdk/cbeditor.cpp:354
10209566 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:10209566 _ZN12wxWindowBase15DestroyChildrenEv
1010C362 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:1010C362 _ZN8wxWindowD2Ev
10230827 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:10230827 _ZN7wxPanelD2Ev
6063319C C:\Program Files\CodeBlocks\codeblocks.dll:6063319C wxFlatNotebook::~wxFlatNotebook() C:/Development/codeblocks/src/sdk/wxFlatNotebook/wxFlatNotebook.cpp:60
10209566 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:10209566 _ZN12wxWindowBase15DestroyChildrenEv
1010C362 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:1010C362 _ZN8wxWindowD2Ev
10203998 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:10203998 _ZN20wxTopLevelWindowBaseD2Ev
101073E2 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:101073E2 _ZN19wxTopLevelWindowMSWD2Ev
101B3341 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:101B3341 _ZN11wxFrameBaseD2Ev
1013A4DF C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:1013A4DF _ZN7wxFrameD2Ev
0041DCFC C:\Program Files\CodeBlocks\codeblocks.exe:0041DCFC MainFrame::~MainFrame() C:/Development/codeblocks/src/src/main.cpp:459
10187588 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:10187588 _ZN9wxAppBase7CleanUpEv
100CB4B1 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:100CB4B1 _ZN5wxApp7CleanUpEv
100432F3 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:100432F3 _Z14wxEntryCleanupv
100435B2 C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:100435B2 _Z14wxUninitializev
100B309A C:\Development\wxWidgetsDLL\wxmsw26u_gcc.dll:100B309A _Z7wxEntryP11HINSTANCE__S0_Pci
004014DA C:\Program Files\CodeBlocks\codeblocks.exe:004014DA WinMain C:/Development/codeblocks/src/src/app.cpp:297
0045B2DA C:\Program Files\CodeBlocks\codeblocks.exe:0045B2DA
00401237 C:\Program Files\CodeBlocks\codeblocks.exe:00401237
004012A8 C:\Program Files\CodeBlocks\codeblocks.exe:004012A8
7C816D4F C:\WINDOWS\system32\kernel32.dll:7C816D4F RegisterWaitForInputIdle
Could someone look at it? I don't know anymore :(
I just used this feature in it's original form (without the taskbar icon code) on the codeblocks project file, and the behaviour was exactly the same - crash after compiler finishes build. I agree with mispunt that the crash is coming from somewhere else.
CodeBlocks.RPT:
-------------------
Error occured on Thursday, January 26, 2006 at 23:20:37.
C:\CodeBlocks\codeblocks.exe caused an Access Violation at location 00ecd23a Reading from location ffffffff.
Registers:
eax=00ecd238 ebx=ffffffff ecx=ffffffff edx=003e0408 esi=6199cb90 edi=00000000
eip=00ecd23a esp=0022f4ec ebp=0022f5a8 iopl=0 nv up ei pl zr na po nc
cs=001b ss=0023 ds=0023 es=0023 fs=0038 gs=0000 efl=00010246
Call stack:
00ECD23A
100DF764 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100DF764 _ZN10wxWindowDC6InitDCEv
100DFCC5 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100DFCC5 _ZN10wxClientDCC1EP8wxWindow
61995B26 C:\CodeBlocks\codeblocks.dll:61995B26 _ZN15wxPageContainer12DoDeletePageEj
61995D3C C:\CodeBlocks\codeblocks.dll:61995D3C _ZN14wxFlatNotebook10RemovePageEjb
618593B5 C:\CodeBlocks\codeblocks.dll:618593B5 _ZN13EditorManager16RemoveEditorBaseEP10EditorBaseb
61859425 C:\CodeBlocks\codeblocks.dll:61859425 _ZN13EditorManager18RemoveCustomEditorEP10EditorBase
6183077C C:\CodeBlocks\codeblocks.dll:6183077C _ZN10EditorBaseD2Ev
617E2012 C:\CodeBlocks\codeblocks.dll:617E2012 _ZN8cbEditorD0Ev
10206056 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:10206056 _ZN12wxWindowBase15DestroyChildrenEv
10109592 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:10109592 _ZN8wxWindowD2Ev
1022D107 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:1022D107 _ZN7wxPanelD2Ev
6199354B C:\CodeBlocks\codeblocks.dll:6199354B _ZN14wxFlatNotebookD0Ev
10206056 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:10206056 _ZN12wxWindowBase15DestroyChildrenEv
10109592 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:10109592 _ZN8wxWindowD2Ev
10200488 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:10200488 _ZN20wxTopLevelWindowBaseD2Ev
101046C2 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:101046C2 _ZN19wxTopLevelWindowMSWD2Ev
101AFD91 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:101AFD91 _ZN11wxFrameBaseD2Ev
101376EF C:\CodeBlocks\wxmsw26u_gcc_cb.dll:101376EF _ZN7wxFrameD2Ev
00420C5E C:\CodeBlocks\codeblocks.exe:00420C5E
101846F8 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:101846F8 _ZN9wxAppBase7CleanUpEv
100CB781 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100CB781 _ZN5wxApp7CleanUpEv
100435E3 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100435E3 _Z14wxEntryCleanupv
100438A2 C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100438A2 _Z14wxUninitializev
100B336A C:\CodeBlocks\wxmsw26u_gcc_cb.dll:100B336A _Z7wxEntryP11HINSTANCE__S0_Pci
00401497 C:\CodeBlocks\codeblocks.exe:00401497
0046E308 C:\CodeBlocks\codeblocks.exe:0046E308
00401236 C:\CodeBlocks\codeblocks.exe:00401236
00401288 C:\CodeBlocks\codeblocks.exe:00401288
77E814C7 C:\WINDOWS\system32\kernel32.dll:77E814C7 GetCurrentDirectoryW
I also agree with mispunt's suspicion on the wxFlatNotebook cleanup.
Since using a wxTaskBarIcon seems not to be the problem, I'll post a patch proposing this addition to app.cpp in sourceforge regardless.