This happens on 32-bit and 64-bit Linux (at least for me) when I right-click into the preview-window to open the context-menu.
The PreviewWindow is a
cbStyledTextCtrl, but as first parameter it gets a
wxPanel* not an
EditorBase*, so every ContextMenuEvent is skipped, because the
dynamic_cast in
cbStyledTextCtrl's
OnContextmenu will never be true.
I put a static int in
cbStyledTextCtrl::OnContextMenu to count how often we come to it after pressing the right mouse button and send it's value to the Debug Log C::B crashes after about 22750 with a segmentation fault.
I think it's because of a buffer overflow in
wxEvents Hashtable.
On Windows it works correctly.
Here is a patch that makes the plugin behave the same on Windows and Linux.
In both OSes the event is skipped exactly one time with this patch and the context-menu pops up.
Tested on Linux and W2K.
--- codeblocks-1.0svn.orig/src/plugins/contrib/ThreadSearch/ThreadSearchView.h 2008-01-23 12:50:35.000000000 +0100
+++ codeblocks-1.0svn.work/src/plugins/contrib/ThreadSearch/ThreadSearchView.h 2008-02-02 11:10:59.000000000 +0100
@@ -228,7 +228,6 @@
void OnMarginClick(wxScintillaEvent& event);
void OnContextMenu(wxContextMenuEvent& event);
- void OnMouseRightUp(wxMouseEvent& event);
void OnLoggerClick (const wxString& file, long line); // Called by ThreadSearchLoggerBase derived instance^M
// when user clicks on a search result
void OnLoggerDoubleClick(const wxString& file, long line); // Called by ThreadSearchLoggerBase derived instance^M
--- codeblocks-1.0svn.orig/src/plugins/contrib/ThreadSearch/ThreadSearchView.cpp 2008-01-28 22:16:25.000000000 +0100
+++ codeblocks-1.0svn.work/src/plugins/contrib/ThreadSearch/ThreadSearchView.cpp 2008-02-02 11:11:37.000000000 +0100
@@ -81,10 +81,6 @@
(wxObjectEventFunction) (wxEventFunction) (wxContextMenuEventFunction)
&ThreadSearchView::OnContextMenu);
- Connect(id, wxEVT_RIGHT_UP,
- (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction)
- &ThreadSearchView::OnMouseRightUp);
-
Connect(idTxtSearchDirPath, wxEVT_COMMAND_TEXT_UPDATED,
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
&ThreadSearchView::OnTxtSearchDirPathTextEvent);
@@ -113,10 +109,6 @@
(wxObjectEventFunction) (wxEventFunction) (wxContextMenuEventFunction)
&ThreadSearchView::OnContextMenu);
- Disconnect(id, wxEVT_RIGHT_UP,
- (wxObjectEventFunction) (wxEventFunction) (wxMouseEventFunction)
- &ThreadSearchView::OnMouseRightUp);
-
Disconnect(idTxtSearchDirPath, wxEVT_COMMAND_TEXT_UPDATED,
(wxObjectEventFunction) (wxEventFunction) (wxCommandEventFunction)
&ThreadSearchView::OnTxtSearchDirPathTextEvent);
@@ -520,17 +512,10 @@
void ThreadSearchView::OnContextMenu(wxContextMenuEvent& event)
{
- // Default cbStyledTextCtrl contextual menu
- m_pSearchPreview->ProcessEvent(event);
+ event.StopPropagation();
}
-void ThreadSearchView::OnMouseRightUp(wxMouseEvent& event)
-{
- // Default cbStyledTextCtrl contextual menu
- m_pSearchPreview->ProcessEvent(event);
-}
-
void ThreadSearchView::AddExpressionToSearchCombos(const wxString& expression)
{
There are two dos/windows line-endings in the ThreadSearchView.h part, so it might not apply correctly when copied from here, but it's just one line two delete (in header).