Zdenek Kotala wrote:
>> I'm still not sure how you're getting into that code when you close
>> the form though...
>
> The root cause is destructor of frmQuery dialog. It removes all
> connection from combo box exclude last item - "new connection". Each
> deletion invoke frmQuery::OnChangeConnection event and the
> OnChangeConnection method invokes "new connection dialog" in the last
> step. And because there are some empty combo boxes on this dialog, gtk
> generates core.
Ah, of course - well spotted.
> My suggestion is disable event generation for cbConnection in the
> destructor.
Agreed. Can one or both of you test the attached patch please?
Thanks, Dave.
Index: frmQuery.cpp
===================================================================
--- frmQuery.cpp (revision 5791)
+++ frmQuery.cpp (working copy)
@@ -62,7 +62,6 @@
BEGIN_EVENT_TABLE(frmQuery, pgFrame)
EVT_ERASE_BACKGROUND( frmQuery::OnEraseBackground)
EVT_SIZE( frmQuery::OnSize)
- EVT_COMBOBOX(CTRLID_CONNECTION, frmQuery::OnChangeConnection)
EVT_CLOSE( frmQuery::OnClose)
EVT_SET_FOCUS( frmQuery::OnSetFocus)
EVT_MENU(MNU_NEW, frmQuery::OnNew)
@@ -280,6 +279,7 @@
outputPane->AddPage(msgResult, _("Messages"));
outputPane->AddPage(msgHistory, _("History"));
+ this->Connect(CTRLID_CONNECTION, wxEVT_COMMAND_COMBOBOX_SELECTED,
wxCommandEventHandler(frmQuery::OnChangeConnection));
sqlQuery->Connect(wxID_ANY, wxEVT_SET_FOCUS,wxFocusEventHandler(frmQuery::OnFocus));
sqlResult->Connect(wxID_ANY, wxEVT_SET_FOCUS, wxFocusEventHandler(frmQuery::OnFocus));
msgResult->Connect(wxID_ANY, wxEVT_SET_FOCUS, wxFocusEventHandler(frmQuery::OnFocus));
@@ -369,6 +369,7 @@
sqlResult->Disconnect(wxID_ANY, wxEVT_SET_FOCUS, wxFocusEventHandler(frmQuery::OnFocus));
msgResult->Disconnect(wxID_ANY, wxEVT_SET_FOCUS, wxFocusEventHandler(frmQuery::OnFocus));
msgHistory->Disconnect(wxID_ANY, wxEVT_SET_FOCUS, wxFocusEventHandler(frmQuery::OnFocus));
+ this->Disconnect(CTRLID_CONNECTION, wxEVT_COMMAND_COMBOBOX_SELECTED,
wxCommandEventHandler(frmQuery::OnChangeConnection));
if (mainForm)
mainForm->RemoveFrame(this);
@@ -632,10 +633,6 @@
void frmQuery::OnChangeConnection(wxCommandEvent &ev)
{
- // On Solaris, this event seems to get fired when the form closes(!!)
- if(!IsVisible())
- return;
-
unsigned int sel=cbConnection->GetCurrentSelection();
if (sel == cbConnection->GetCount()-1)
{