From: Robert Roebling Date: Mon, 15 Jun 2009 18:35:24 +0000 (+0000) Subject: Fix sending wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, fixes #10894: Missing OSX... X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/8ba01d3546ba25eee6f2990fbc7cddbef9ef4e41 Fix sending wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK, fixes #10894: Missing OSX-Carbon DataView control header click events git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@61062 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/osx/carbon/dataview.h b/include/wx/osx/carbon/dataview.h index d55d0b62ef..336c577f23 100644 --- a/include/wx/osx/carbon/dataview.h +++ b/include/wx/osx/carbon/dataview.h @@ -129,6 +129,7 @@ public: wxMacDataBrowserTableViewControl(void) { } + ~wxMacDataBrowserTableViewControl(void); // // callback handling @@ -310,6 +311,11 @@ protected : virtual Boolean DataBrowserAddDragItemProc(DragReference dragRef, DataBrowserItemID itemID, ItemReference* itemRef) = 0; virtual Boolean DataBrowserReceiveDragProc(DragReference dragRef, DataBrowserItemID itemID) = 0; +// +// event handler for hit testing +/// + void* m_macDataViewCtrlEventHandler; + private: // // wxWidget internal stuff diff --git a/include/wx/osx/dataview.h b/include/wx/osx/dataview.h index 80c6f5c377..b1b692eede 100644 --- a/include/wx/osx/dataview.h +++ b/include/wx/osx/dataview.h @@ -406,6 +406,10 @@ public: { m_width = NewWidth; } + void SetSortOrderVariable(bool NewOrder) + { + m_ascending = NewOrder; + } private: // common part of all ctors diff --git a/src/osx/carbon/dataview.cpp b/src/osx/carbon/dataview.cpp index ecacdf72b1..bbc49a00d6 100644 --- a/src/osx/carbon/dataview.cpp +++ b/src/osx/carbon/dataview.cpp @@ -66,6 +66,12 @@ static DataBrowserItemID* CreateDataBrowserItemIDArray(size_t& noOfEntries, wxDa return itemIDs; } +static const EventTypeSpec eventList[] = +{ + { kEventClassControl, kEventControlHit }, + { kEventClassControl, kEventControlDraw } +}; + static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler, EventRef EventReference, void* Data) { wxDataViewCtrl* DataViewCtrlPtr((wxDataViewCtrl*) Data); // the 'Data' variable always contains a pointer to the data view control that installed the handler @@ -89,7 +95,9 @@ static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler, { ControlRef controlReference; DataBrowserPropertyID columnPropertyID; + DataBrowserSortOrder order; unsigned long columnIndex; + wxDataViewColumn* column; OSStatus status; wxDataViewEvent DataViewEvent(wxEVT_COMMAND_DATAVIEW_COLUMN_HEADER_CLICK,DataViewCtrlPtr->GetId()); @@ -101,10 +109,15 @@ static pascal OSStatus DataBrowserCtrlEventHandler(EventHandlerCallRef handler, if (status == errDataBrowserPropertyNotFound) // user clicked into part of the header that does not have a property return ::CallNextEventHandler(handler,EventReference); wxCHECK(status == noErr,status); + column = DataViewCtrlPtr->GetColumn(columnIndex); + // set the column sort order: + status = ::GetDataBrowserSortOrder(controlReference,&order); + wxCHECK(status == noErr,status); + column->SetSortOrderVariable(order == kDataBrowserOrderIncreasing); // initialize wxWidget event handler: DataViewEvent.SetEventObject(DataViewCtrlPtr); DataViewEvent.SetColumn(columnIndex); - DataViewEvent.SetDataViewColumn(DataViewCtrlPtr->GetColumn(columnIndex)); + DataViewEvent.SetDataViewColumn(column); // finally sent the equivalent wxWidget event: DataViewCtrlPtr->HandleWindowEvent(DataViewEvent); return ::CallNextEventHandler(handler,EventReference); @@ -312,6 +325,9 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee SetReferenceInNativeControl(); verify_noerr(err); + + ::InstallControlEventHandler(this->m_controlRef, GetDataBrowserCtrlEventHandlerUPP(), GetEventTypeCount(eventList), eventList, peer, (EventHandlerRef *)&m_macDataViewCtrlEventHandler); + // setup standard callbacks: if (gDataBrowserTableViewGetContextualMenuUPP == NULL) gDataBrowserTableViewGetContextualMenuUPP = NewDataBrowserGetContextualMenuUPP(wxMacDataBrowserTableViewControl::DataBrowserGetContextualMenuProc); if (gDataBrowserTableViewItemCompareUPP == NULL) gDataBrowserTableViewItemCompareUPP = NewDataBrowserItemCompareUPP (wxMacDataBrowserTableViewControl::DataBrowserCompareProc); @@ -390,6 +406,11 @@ wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow* pee this->SetHeaderButtonHeight(0); } /* wxMacDataBrowserTableViewControl::wxMacDataBrowserTableViewControl(wxWindow*, wxPoint const&, wxSize const&, long) */ +wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void) +{ + ::RemoveEventHandler((EventHandlerRef) m_macDataViewCtrlEventHandler); +} /* wxMacDataBrowserTableViewControl::~wxMacDataBrowserTableViewControl(void) */ + // // callback handling //