#ifdef __WXMAC__
{
if (m_owner->HasFocus()
-#ifdef __WXMAC__
+#if !defined(__WXUNIVERSAL__)
&& IsControlActive( (ControlRef)m_owner->GetHandle() )
#endif
)
{
int flags = wxCONTROL_SELECTED;
if (m_owner->HasFocus()
-#ifdef __WXMAC__
+#if defined( __WXMAC__ ) && !defined(__WXUNIVERSAL__)
&& IsControlActive( (ControlRef)m_owner->GetHandle() )
#endif
)
if (highlighted)
{
int flags = wxCONTROL_SELECTED;
- if (m_owner->HasFocus()
-#ifdef __WXMAC__
- && IsControlActive( (ControlRef)m_owner->GetHandle() )
-#endif
- )
+ if (m_owner->HasFocus())
flags |= wxCONTROL_FOCUSED;
wxRendererNative::Get().DrawItemSelectionRect( m_owner, *dc, rectHL, flags );
}
RefreshLine(m_current);
}
}
- else // multi sel
+ else // multi selection
{
- HighlightLines(0, GetItemCount() - 1, on);
+ if ( !IsEmpty() )
+ HighlightLines(0, GetItemCount() - 1, on);
}
}
if (event.RightDown())
{
SendNotify( (size_t)-1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() );
- // Allow generation of context menu event
- event.Skip();
+
+ wxContextMenuEvent evtCtx(
+ wxEVT_CONTEXT_MENU,
+ GetParent()->GetId(),
+ ClientToScreen(event.GetPosition()));
+ evtCtx.SetEventObject(GetParent());
+ GetParent()->GetEventHandler()->ProcessEvent(evtCtx);
}
return;
}
if (event.RightDown())
{
SendNotify( (size_t) -1, wxEVT_COMMAND_LIST_ITEM_RIGHT_CLICK, event.GetPosition() );
- // Allow generation of context menu event
- event.Skip();
+
+ wxContextMenuEvent evtCtx(
+ wxEVT_CONTEXT_MENU,
+ GetParent()->GetId(),
+ ClientToScreen(event.GetPosition()));
+ evtCtx.SetEventObject(GetParent());
+ GetParent()->GetEventHandler()->ProcessEvent(evtCtx);
}
else
{
Scroll( -1, rect.y / hLine );
if (rect.y + rect.height + 5 > view_y + client_h)
Scroll( -1, (rect.y + rect.height - client_h + hLine) / hLine );
+
+#ifdef __WXMAC__
+ // At least on Mac the visible lines value will get reset inside of
+ // Scroll *before* it actually scrolls the window because of the
+ // Update() that happens there, so it will still have the wrong value.
+ // So let's reset it again and wait for it to be recalculated in the
+ // next paint event. I would expect this problem to show up in wxGTK
+ // too but couldn't duplicate it there. Perhaps the order of events
+ // is different... --Robin
+ ResetVisibleLinesRange();
+#endif
}
else // !report
{
m_mainWin = new wxListMainWindow( this, wxID_ANY, wxPoint(0, 0), size, style );
-#ifdef __WXMAC_CARBON__
+#ifdef __WXMAC__
// Human Interface Guidelines ask us for a special font in this case
if ( GetWindowVariant() == wxWINDOW_VARIANT_NORMAL )
{
{
CreateHeaderWindow();
-#ifdef __WXMAC_CARBON__
+#ifdef __WXMAC__
if (m_headerWin)
{
wxFont font;