From: Robert Roebling Date: Wed, 25 Nov 1998 17:55:08 +0000 (+0000) Subject: Fixed module code X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/031b2a7b8d8a303e1d012cf63eb989d247005084 Fixed module code Fixed printing and preview Grid: event handlers MUST NOT BE VIRTUAL Corrected init code for all DCs git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@1055 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/generic/gridg.h b/include/wx/generic/gridg.h index ad5246d2cc..22888e7456 100644 --- a/include/wx/generic/gridg.h +++ b/include/wx/generic/gridg.h @@ -150,21 +150,21 @@ class WXDLLEXPORT wxGenericGrid: public wxPanel virtual void OnSelectCellImplementation(wxDC *dc, int row, int col); virtual void OnSelectCell(int WXUNUSED(row), int WXUNUSED(col)) {}; - virtual void _OnSelectCell(wxGridEvent& event); + void _OnSelectCell(wxGridEvent& event); // Override to create your own class of grid cell virtual wxGridCell *OnCreateCell(void); - virtual void _OnCreateCell(wxGridEvent& event); + void _OnCreateCell(wxGridEvent& event); // Override to change labels e.g. creation of grid, inserting/deleting a row/col. // By default, auto-labels the grid. virtual void OnChangeLabels(void); - virtual void _OnChangeLabels(wxGridEvent& event); + void _OnChangeLabels(wxGridEvent& event); // Override to change the label of the edit field when selecting a cell // By default, sets it to e.g. A12 virtual void OnChangeSelectionLabel(void); - virtual void _OnChangeSelectionLabel(wxGridEvent& event); + void _OnChangeSelectionLabel(wxGridEvent& event); // Override for event processing virtual void OnCellChange(int WXUNUSED(row), int WXUNUSED(col)) {}; @@ -173,12 +173,11 @@ class WXDLLEXPORT wxGenericGrid: public wxPanel virtual void OnLabelLeftClick(int WXUNUSED(row), int WXUNUSED(col), int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(control), bool WXUNUSED(shift)) {}; virtual void OnLabelRightClick(int WXUNUSED(row), int WXUNUSED(col), int WXUNUSED(x), int WXUNUSED(y), bool WXUNUSED(control), bool WXUNUSED(shift)) {}; - virtual void _OnCellChange(wxGridEvent& event); - virtual void _OnCellLeftClick(wxGridEvent& event); - virtual void _OnCellRightClick(wxGridEvent& event); - virtual void _OnLabelLeftClick(wxGridEvent& event); - virtual void _OnLabelRightClick(wxGridEvent& event); - + void _OnCellChange(wxGridEvent& event); + void _OnCellLeftClick(wxGridEvent& event); + void _OnCellRightClick(wxGridEvent& event); + void _OnLabelLeftClick(wxGridEvent& event); + void _OnLabelRightClick(wxGridEvent& event); // Activation: call from wxFrame::OnActivate void OnActivate(bool active); diff --git a/samples/printing/printing.cpp b/samples/printing/printing.cpp index af82cf63d8..ffd2edbc78 100644 --- a/samples/printing/printing.cpp +++ b/samples/printing/printing.cpp @@ -38,6 +38,8 @@ #include "wx/print.h" #include "wx/printdlg.h" +#include "wx/accel.h" + #if wxTEST_POSTSCRIPT_IN_MSW #include "wx/generic/printps.h" #include "wx/generic/prntdlgg.h" @@ -91,6 +93,12 @@ bool MyApp::OnInit(void) file_menu->Append(WXPRINT_PAGE_SETUP, "Page Set&up...", "Page setup"); file_menu->Append(WXPRINT_PREVIEW, "Print Pre&view", "Preview"); + // Accelerators + wxAcceleratorEntry entries[1]; + entries[0].Set(wxACCEL_CTRL, (int) 'V', WXPRINT_PREVIEW); + wxAcceleratorTable accel(1, entries); + frame->SetAcceleratorTable(accel); + #if defined(__WXMSW__) && wxTEST_POSTSCRIPT_IN_MSW file_menu->AppendSeparator(); file_menu->Append(WXPRINT_PRINT_PS, "Print PostScript...", "Print (PostScript)"); diff --git a/src/common/prntbase.cpp b/src/common/prntbase.cpp index 6a19cf7ea5..ee3811f915 100644 --- a/src/common/prntbase.cpp +++ b/src/common/prntbase.cpp @@ -22,10 +22,6 @@ #include "wx/defs.h" -#ifndef __WXGTK__ -#define __GOOD_COMPILER__ -#endif - #ifndef WX_PRECOMP #include "wx/utils.h" #include "wx/dc.h" @@ -203,6 +199,7 @@ wxPreviewCanvas::~wxPreviewCanvas() void wxPreviewCanvas::OnPaint(wxPaintEvent& WXUNUSED(event)) { wxPaintDC dc(this); + PrepareDC( dc ); if (m_printPreview) { @@ -313,8 +310,6 @@ void wxPreviewControlBar::OnZoom(wxCommandEvent& WXUNUSED(event)) void wxPreviewControlBar::CreateButtons() { -#ifdef __GOOD_COMPILER__ // Robert Roebling - SetSize(0, 0, 400, 40); #ifdef __WXMSW__ @@ -327,7 +322,11 @@ void wxPreviewControlBar::CreateButtons() SetFont(buttonFont); int buttonWidth = 65; - int buttonHeight = 24; +#ifdef __WXGTK__ + int buttonHeight = -1; +#else + int buttonHeight = 24; +#endif int x = 5; int y = 5; @@ -359,10 +358,33 @@ void wxPreviewControlBar::CreateButtons() x += gap + buttonWidth; } - // Can't be static because gcc bails out - wxString choices[] = { "10%", "20%", "25%", "30%", "35%", "40%", "45%", "50%", "55%", "60%", - "65%", "70%", "75%", "80%", "85%", "90%", "95%", "100%", "110%", "120%", "150%", "200%" }; - int n = 22; + // Yes, this look stupid, but this is because gcc gives up otherwise. + wxString *choices = new wxString[23]; + choices[0] = "10%"; + choices[1] = "15%"; + choices[2] = "20%"; + choices[3] = "25%"; + choices[4] = "30%"; + choices[5] = "35%"; + choices[6] = "40%"; + choices[7] = "45%"; + choices[8] = "50%"; + choices[9] = "55%"; + choices[10] = "60%"; + choices[11] = "65%"; + choices[12] = "70%"; + choices[13] = "75%"; + choices[14] = "80%"; + choices[15] = "85%"; + choices[16] = "90%"; + choices[17] = "95%"; + choices[18] = "100%"; + choices[19] = "110%"; + choices[20] = "120%"; + choices[21] = "150%"; + choices[22] = "200%"; + + int n = 23; if (m_buttonFlags & wxPREVIEW_ZOOM) { m_zoomControl = new wxChoice(this, wxID_PREVIEW_ZOOM, wxPoint(x, y), @@ -370,24 +392,21 @@ void wxPreviewControlBar::CreateButtons() SetZoomControl(m_printPreview->GetZoom()); } - m_closeButton->SetDefault(); + delete[] choices; -#endif + m_closeButton->SetDefault(); } void wxPreviewControlBar::SetZoomControl(int zoom) { -#ifdef __GOOD_COMPILER__ // Robert Roebling char buf[20]; sprintf(buf, "%d%%", zoom); if (m_zoomControl) m_zoomControl->SetStringSelection(buf); -#endif } int wxPreviewControlBar::GetZoomControl() { -#ifdef __GOOD_COMPILER__ // Robert Roebling char buf[20]; if (m_zoomControl && m_zoomControl->GetStringSelection()) { @@ -396,9 +415,6 @@ int wxPreviewControlBar::GetZoomControl() return (int)atoi(buf); } else return 0; -#else - return 0; -#endif } @@ -410,11 +426,9 @@ wxPreviewFrame::wxPreviewFrame(wxPrintPreviewBase *preview, wxFrame *parent, con const wxPoint& pos, const wxSize& size, long style, const wxString& name): wxFrame(parent, -1, title, pos, size, style, name) { -#ifdef __GOOD_COMPILER__ // Robert Roebling m_printPreview = preview; m_controlBar = NULL; m_previewCanvas = NULL; -#endif } wxPreviewFrame::~wxPreviewFrame() @@ -423,8 +437,6 @@ wxPreviewFrame::~wxPreviewFrame() bool wxPreviewFrame::OnClose() { -#ifdef __GOOD_COMPILER__ // Robert Roebling - MakeModal(FALSE); // Need to delete the printout and the print preview @@ -438,16 +450,10 @@ bool wxPreviewFrame::OnClose() } delete m_printPreview; return TRUE; -#else - return FALSE; -#endif } void wxPreviewFrame::Initialize() { - -#ifdef __GOOD_COMPILER__ // Robert Roebling - CreateStatusBar(); CreateCanvas(); @@ -463,7 +469,7 @@ void wxPreviewFrame::Initialize() // int w, h; // m_controlBar->GetSize(&w, &h); int h; -#ifdef __WXMSW__ +#if (defined(__WXMSW__) || defined(__WXGTK__)) h = 40; #else h = 60; @@ -491,30 +497,21 @@ void wxPreviewFrame::Initialize() MakeModal(TRUE); Layout(); - -#endif } void wxPreviewFrame::CreateCanvas() { -#ifdef __GOOD_COMPILER__ // Robert Roebling - m_previewCanvas = new wxPreviewCanvas(m_printPreview, this); - -#endif } void wxPreviewFrame::CreateControlBar() { -#ifdef __GOOD_COMPILER__ // Robert Roebling - long buttons = wxPREVIEW_DEFAULT; if (m_printPreview->GetPrintoutForPrinting()) buttons |= wxPREVIEW_PRINT; m_controlBar = new wxPreviewControlBar(m_printPreview, buttons, this, wxPoint(0, 0), wxSize(400, 40)); m_controlBar->CreateButtons(); -#endif } /* @@ -523,9 +520,6 @@ void wxPreviewFrame::CreateControlBar() wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printoutForPrinting, wxPrintData *data) { - -#ifdef __GOOD_COMPILER__ // Robert Roebling - m_isOk = TRUE; m_previewPrintout = printout; if (m_previewPrintout) @@ -550,27 +544,20 @@ wxPrintPreviewBase::wxPrintPreviewBase(wxPrintout *printout, wxPrintout *printou // Get some parameters from the printout, if defined int selFrom, selTo; printout->GetPageInfo(&m_minPage, &m_maxPage, &selFrom, &selTo); - -#endif } wxPrintPreviewBase::~wxPrintPreviewBase() { -#ifdef __GOOD_COMPILER__ // Robert Roebling - if (m_previewPrintout) delete m_previewPrintout; if (m_previewBitmap) delete m_previewBitmap; if (m_printPrintout) delete m_printPrintout; - -#endif } bool wxPrintPreviewBase::SetCurrentPage(int pageNum) { -#ifdef __GOOD_COMPILER__ // Robert Roebling if (m_currentPage == pageNum) return TRUE; @@ -586,16 +573,11 @@ bool wxPrintPreviewBase::SetCurrentPage(int pageNum) RenderPage(pageNum); m_previewCanvas->Refresh(); } - -#endif return TRUE; } bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) { - -#ifdef __GOOD_COMPILER__ // Robert Roebling - DrawBlankPage(canvas, dc); if (!m_previewBitmap) @@ -626,8 +608,6 @@ bool wxPrintPreviewBase::PaintPage(wxWindow *canvas, wxDC& dc) temp_dc.SelectObject(wxNullBitmap); -#endif - return TRUE; } @@ -635,8 +615,6 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) { int canvasWidth, canvasHeight; -#ifdef __GOOD_COMPILER__ // Robert Roebling - if (!m_previewCanvas) { wxMessageBox(_("wxPrintPreviewBase::RenderPage: must use wxPrintPreviewBase::SetCanvas to let me know about the canvas!"), @@ -695,7 +673,6 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) m_previewPrintout->SetDC(NULL); memoryDC.SelectObject(wxNullBitmap); -#endif char buf[200]; if (m_maxPage != 0) @@ -712,9 +689,6 @@ bool wxPrintPreviewBase::RenderPage(int pageNum) bool wxPrintPreviewBase::DrawBlankPage(wxWindow *canvas, wxDC& dc) { - -#ifdef __GOOD_COMPILER__ // Robert Roebling - int canvasWidth, canvasHeight; canvas->GetSize(&canvasWidth, &canvasHeight); @@ -740,14 +714,11 @@ bool wxPrintPreviewBase::DrawBlankPage(wxWindow *canvas, wxDC& dc) dc.DrawRectangle((int)(x-1), (int)(y-1), (int)(actualWidth+2), (int)(actualHeight+2)); -#endif - return TRUE; } void wxPrintPreviewBase::SetZoom(int percent) { -#ifdef __GOOD_COMPILER__ // Robert Roebling if (m_currentZoom == percent) return; @@ -764,6 +735,4 @@ void wxPrintPreviewBase::SetZoom(int percent) m_previewCanvas->Clear(); m_previewCanvas->Refresh(); } -#endif - } diff --git a/src/generic/gridg.cpp b/src/generic/gridg.cpp index 3fcd53134c..f1bc33d6df 100644 --- a/src/generic/gridg.cpp +++ b/src/generic/gridg.cpp @@ -1406,9 +1406,10 @@ void wxGenericGrid::OnSelectCellImplementation(wxDC *dc, int row, int col) SetGridClippingRegion(dc); - // Why isn't this needed for Windows?? - // Probably because of the SetValue?? - // Arrrrrgh. This isn't needed anywhere, of course. RR. + // 1) Why isn't this needed for Windows?? + // Probably because of the SetValue?? JS. + // 2) Arrrrrgh. This isn't needed anywhere, + // of course. One hour of debugging... RR. #ifndef __WXMSW__ // HighlightCell(dc); #endif @@ -2518,12 +2519,12 @@ void wxGenericGrid::_OnCreateCell(wxGridEvent& ev) ev.m_cell = OnCreateCell(); } -void wxGenericGrid::_OnChangeLabels(wxGridEvent& ev) +void wxGenericGrid::_OnChangeLabels(wxGridEvent& WXUNUSED(ev)) { OnChangeLabels(); } -void wxGenericGrid::_OnChangeSelectionLabel(wxGridEvent& ev) +void wxGenericGrid::_OnChangeSelectionLabel(wxGridEvent& WXUNUSED(ev)) { OnChangeSelectionLabel(); } diff --git a/src/gtk/app.cpp b/src/gtk/app.cpp index 22643c5c5e..05395a5b46 100644 --- a/src/gtk/app.cpp +++ b/src/gtk/app.cpp @@ -20,6 +20,7 @@ #include "wx/font.h" #include "wx/settings.h" #include "wx/resource.h" +#include "wx/module.h" #include "unistd.h" @@ -424,6 +425,9 @@ int wxEntry( int argc, char *argv[] ) wxApp::CommonInit(); + wxModule::RegisterModules(); + if (!wxModule::InitializeModules()) return FALSE; + wxTheApp->OnInitGui(); // Here frames insert themselves automatically @@ -442,6 +446,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->OnExit(); + wxModule::CleanUpModules(); + wxApp::CommonCleanUp(); wxDELETE(wxTheApp); diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 452f2bde09..290d654ddf 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -555,7 +555,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, gdk_gc_set_clip_mask( m_textGC, mask ); gdk_gc_set_clip_origin( m_textGC, xx, yy ); } - + gdk_draw_pixmap( m_window, m_textGC, pmap, source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), @@ -829,6 +829,7 @@ void wxPaintDC::SetBackground( const wxBrush &brush ) m_backgroundBrush.GetColour().CalcPixel( m_cmap ); gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() ); + gdk_gc_set_background( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); GdkFill fillStyle = GDK_SOLID; @@ -950,9 +951,22 @@ void wxPaintDC::SetUpDC(void) m_bgGC = gdk_gc_new( m_window ); SetTextForeground( m_textForegroundColour ); SetTextBackground( m_textBackgroundColour ); - SetPen( m_pen ); - SetFont( m_font ); - SetBrush( m_brush ); + + wxPen tmp_pen( m_pen ); + m_pen = wxNullPen; + SetPen( tmp_pen ); + + wxFont tmp_font( m_font ); + m_font = wxNullFont; + SetFont( tmp_font ); + + wxBrush tmp_brush( m_brush ); + m_brush = wxNullBrush; + SetBrush( tmp_brush ); + + tmp_brush = m_backgroundBrush; + m_backgroundBrush = wxNullBrush; + SetBackground( tmp_brush ); gdk_gc_set_background( m_penGC, wxWHITE->GetColor() ); diff --git a/src/gtk/dcmemory.cpp b/src/gtk/dcmemory.cpp index f346200a81..66f8772b98 100644 --- a/src/gtk/dcmemory.cpp +++ b/src/gtk/dcmemory.cpp @@ -19,14 +19,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxPaintDC) -wxMemoryDC::wxMemoryDC(void) +wxMemoryDC::wxMemoryDC(void) : wxPaintDC() { m_ok = FALSE; m_cmap = gtk_widget_get_default_colormap(); } -wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) +wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) : wxPaintDC() { m_ok = FALSE; diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index b2b8e025a8..239505cf50 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -186,15 +186,15 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win ) { + printf( "OnKeyPress.\n " ); + if (!win->HasVMT()) return FALSE; if (g_blockEventsOnDrag) return FALSE; -/* printf( "OnKeyPress from " ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) printf( win->GetClassInfo()->GetClassName() ); printf( ".\n" ); -*/ long key_code = 0; switch (gdk_event->keyval) @@ -286,13 +286,19 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e event.m_y = 0; event.SetEventObject( win ); + printf( "process key.\n" ); + bool ret = win->GetEventHandler()->ProcessEvent( event ); + printf( "no handler.\n" ); + if (!ret) { wxWindow *ancestor = win; while (ancestor) { + printf( "check accel in %s .\n", WXSTRINGCAST ancestor->GetName() ); + int command = ancestor->GetAcceleratorTable()->GetCommand( event ); if (command != -1) { diff --git a/src/gtk1/app.cpp b/src/gtk1/app.cpp index 22643c5c5e..05395a5b46 100644 --- a/src/gtk1/app.cpp +++ b/src/gtk1/app.cpp @@ -20,6 +20,7 @@ #include "wx/font.h" #include "wx/settings.h" #include "wx/resource.h" +#include "wx/module.h" #include "unistd.h" @@ -424,6 +425,9 @@ int wxEntry( int argc, char *argv[] ) wxApp::CommonInit(); + wxModule::RegisterModules(); + if (!wxModule::InitializeModules()) return FALSE; + wxTheApp->OnInitGui(); // Here frames insert themselves automatically @@ -442,6 +446,8 @@ int wxEntry( int argc, char *argv[] ) wxTheApp->OnExit(); + wxModule::CleanUpModules(); + wxApp::CommonCleanUp(); wxDELETE(wxTheApp); diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 452f2bde09..290d654ddf 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -555,7 +555,7 @@ bool wxPaintDC::Blit( long xdest, long ydest, long width, long height, gdk_gc_set_clip_mask( m_textGC, mask ); gdk_gc_set_clip_origin( m_textGC, xx, yy ); } - + gdk_draw_pixmap( m_window, m_textGC, pmap, source->DeviceToLogicalX(xsrc), source->DeviceToLogicalY(ysrc), @@ -829,6 +829,7 @@ void wxPaintDC::SetBackground( const wxBrush &brush ) m_backgroundBrush.GetColour().CalcPixel( m_cmap ); gdk_gc_set_background( m_brushGC, m_backgroundBrush.GetColour().GetColor() ); + gdk_gc_set_background( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); gdk_gc_set_foreground( m_bgGC, m_backgroundBrush.GetColour().GetColor() ); GdkFill fillStyle = GDK_SOLID; @@ -950,9 +951,22 @@ void wxPaintDC::SetUpDC(void) m_bgGC = gdk_gc_new( m_window ); SetTextForeground( m_textForegroundColour ); SetTextBackground( m_textBackgroundColour ); - SetPen( m_pen ); - SetFont( m_font ); - SetBrush( m_brush ); + + wxPen tmp_pen( m_pen ); + m_pen = wxNullPen; + SetPen( tmp_pen ); + + wxFont tmp_font( m_font ); + m_font = wxNullFont; + SetFont( tmp_font ); + + wxBrush tmp_brush( m_brush ); + m_brush = wxNullBrush; + SetBrush( tmp_brush ); + + tmp_brush = m_backgroundBrush; + m_backgroundBrush = wxNullBrush; + SetBackground( tmp_brush ); gdk_gc_set_background( m_penGC, wxWHITE->GetColor() ); diff --git a/src/gtk1/dcmemory.cpp b/src/gtk1/dcmemory.cpp index f346200a81..66f8772b98 100644 --- a/src/gtk1/dcmemory.cpp +++ b/src/gtk1/dcmemory.cpp @@ -19,14 +19,14 @@ IMPLEMENT_DYNAMIC_CLASS(wxMemoryDC,wxPaintDC) -wxMemoryDC::wxMemoryDC(void) +wxMemoryDC::wxMemoryDC(void) : wxPaintDC() { m_ok = FALSE; m_cmap = gtk_widget_get_default_colormap(); } -wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) +wxMemoryDC::wxMemoryDC( wxDC *WXUNUSED(dc) ) : wxPaintDC() { m_ok = FALSE; diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index b2b8e025a8..239505cf50 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -186,15 +186,15 @@ static void gtk_window_draw_callback( GtkWidget *WXUNUSED(widget), GdkRectangle static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_event, wxWindow *win ) { + printf( "OnKeyPress.\n " ); + if (!win->HasVMT()) return FALSE; if (g_blockEventsOnDrag) return FALSE; -/* printf( "OnKeyPress from " ); if (win->GetClassInfo() && win->GetClassInfo()->GetClassName()) printf( win->GetClassInfo()->GetClassName() ); printf( ".\n" ); -*/ long key_code = 0; switch (gdk_event->keyval) @@ -286,13 +286,19 @@ static gint gtk_window_key_press_callback( GtkWidget *widget, GdkEventKey *gdk_e event.m_y = 0; event.SetEventObject( win ); + printf( "process key.\n" ); + bool ret = win->GetEventHandler()->ProcessEvent( event ); + printf( "no handler.\n" ); + if (!ret) { wxWindow *ancestor = win; while (ancestor) { + printf( "check accel in %s .\n", WXSTRINGCAST ancestor->GetName() ); + int command = ancestor->GetAcceleratorTable()->GetCommand( event ); if (command != -1) {