Skip not handled mouse events in wxGrid code

Unhandled mouse events should be skipped. Otherwise wxEVT_CONTEXT_MENU
event couldn't be generated by right clicking anywhere inside wxGrid and
could be only generated for the main grid part (but not the labels) by
pressing Shift-F10 under MSW.

Closes https://github.com/wxWidgets/wxWidgets/pull/1697
This commit is contained in:
Vadim Zeitlin
2020-01-07 16:20:00 +01:00
parent 52ae67ef86
commit e3eb05df72

View File

@@ -3582,10 +3582,11 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo
else if ( event.RightDown() )
{
row = YToRow(pos.y);
if ( row >=0 &&
if ( row < 0 ||
!SendEvent( wxEVT_GRID_LABEL_RIGHT_CLICK, row, -1, event ) )
{
// no default action at the moment
event.Skip();
}
}
@@ -3594,10 +3595,11 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo
else if ( event.RightDClick() )
{
row = YToRow(pos.y);
if ( row >= 0 &&
if ( row < 0 ||
!SendEvent( wxEVT_GRID_LABEL_RIGHT_DCLICK, row, -1, event ) )
{
// no default action at the moment
event.Skip();
}
}
@@ -3619,6 +3621,12 @@ void wxGrid::ProcessRowLabelMouseEvent( wxMouseEvent& event, wxGridRowLabelWindo
ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, rowLabelWin, false);
}
}
// Don't consume the remaining events (e.g. right up).
else
{
event.Skip();
}
}
void wxGrid::UpdateCurrentCellOnRedim()
@@ -3992,10 +4000,11 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo
//
else if ( event.RightDown() )
{
if ( col >= 0 &&
if ( col < 0 ||
!SendEvent( wxEVT_GRID_LABEL_RIGHT_CLICK, -1, col, event ) )
{
// no default action at the moment
event.Skip();
}
}
@@ -4003,10 +4012,11 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo
//
else if ( event.RightDClick() )
{
if ( col >= 0 &&
if ( col < 0 ||
!SendEvent( wxEVT_GRID_LABEL_RIGHT_DCLICK, -1, col, event ) )
{
// no default action at the moment
event.Skip();
}
}
@@ -4028,6 +4038,12 @@ void wxGrid::ProcessColLabelMouseEvent( wxMouseEvent& event, wxGridColLabelWindo
ChangeCursorMode(WXGRID_CURSOR_SELECT_CELL, colLabelWin, false);
}
}
// Don't consume the remaining events (e.g. right up).
else
{
event.Skip();
}
}
void wxGrid::ProcessCornerLabelMouseEvent( wxMouseEvent& event )
@@ -4051,6 +4067,7 @@ void wxGrid::ProcessCornerLabelMouseEvent( wxMouseEvent& event )
if ( !SendEvent( wxEVT_GRID_LABEL_RIGHT_CLICK, -1, -1, event ) )
{
// no default action at the moment
event.Skip();
}
}
else if ( event.RightDClick() )
@@ -4058,8 +4075,13 @@ void wxGrid::ProcessCornerLabelMouseEvent( wxMouseEvent& event )
if ( !SendEvent( wxEVT_GRID_LABEL_RIGHT_DCLICK, -1, -1, event ) )
{
// no default action at the moment
event.Skip();
}
}
else
{
event.Skip();
}
}
void wxGrid::HandleColumnAutosize(int col, const wxMouseEvent& event)
@@ -4624,6 +4646,8 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG
// been in progress.
EndDraggingIfNecessary();
bool handled = false;
// deal with various button presses
if ( event.IsButton() )
{
@@ -4632,20 +4656,22 @@ void wxGrid::ProcessGridCellMouseEvent(wxMouseEvent& event, wxGridWindow *eventG
DisableCellEditControl();
if ( event.LeftDown() )
DoGridCellLeftDown(event, coords, pos);
handled = (DoGridCellLeftDown(event, coords, pos), true);
else if ( event.LeftDClick() )
DoGridCellLeftDClick(event, coords, pos);
handled = (DoGridCellLeftDClick(event, coords, pos), true);
else if ( event.RightDown() )
SendEvent(wxEVT_GRID_CELL_RIGHT_CLICK, coords, event);
handled = SendEvent(wxEVT_GRID_CELL_RIGHT_CLICK, coords, event);
else if ( event.RightDClick() )
SendEvent(wxEVT_GRID_CELL_RIGHT_DCLICK, coords, event);
handled = SendEvent(wxEVT_GRID_CELL_RIGHT_DCLICK, coords, event);
}
}
else if ( event.Moving() )
{
DoGridMouseMoveEvent(event, coords, pos, gridWindow);
handled = true;
}
else // unknown mouse event?
if ( !handled )
{
event.Skip();
}