From: Vadim Zeitlin Date: Tue, 20 Jul 1999 23:22:30 +0000 (+0000) Subject: 1. panels pass focus to the next item in parent panel X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/a1665b22b07c572a240f9d83783044e3e4f9cb0e 1. panels pass focus to the next item in parent panel 2. warnings removed from iniconf.cpp and it's removed for Win32 compilation 3. wxWindow::PopupMenu(wxPoint) added, documented 4. Docs for wxTextCtrl explicitly mention that EVT_TEXT is triggered by programmatic updates too git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@3066 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/distrib/msw/tmake/filelist.txt b/distrib/msw/tmake/filelist.txt index 5a94040c22..5cab7e9814 100644 --- a/distrib/msw/tmake/filelist.txt +++ b/distrib/msw/tmake/filelist.txt @@ -173,7 +173,7 @@ gdiobj.cpp M helpwin.cpp M icon.cpp M imaglist.cpp M 32 -iniconf.cpp M +iniconf.cpp M 16 joystick.cpp M listbox.cpp M listctrl.cpp M 32 diff --git a/docs/latex/wx/text.tex b/docs/latex/wx/text.tex index deb52984b4..d2e831e459 100644 --- a/docs/latex/wx/text.tex +++ b/docs/latex/wx/text.tex @@ -66,7 +66,9 @@ functions that take a \helpref{wxCommandEvent}{wxcommandevent} argument. \twocolwidtha{7cm}% \begin{twocollist}\itemsep=0pt \twocolitem{{\bf EVT\_TEXT(id, func)}}{Respond to a wxEVT\_COMMAND\_TEXT\_UPDATED event, -generated when the text changes.} +generated when the text changes. Notice that this event will always be sent +when the text controls contents changes - whether this is due to user input or +comes from the program itself (for example, if SetValue() is called)} \twocolitem{{\bf EVT\_TEXT\_ENTER(id, func)}}{Respond to a wxEVT\_COMMAND\_TEXT\_ENTER event, generated when enter is pressed in a single-line text control.} \end{twocollist}% diff --git a/docs/latex/wx/window.tex b/docs/latex/wx/window.tex index 46b27b976b..fa0c7ec57a 100644 --- a/docs/latex/wx/window.tex +++ b/docs/latex/wx/window.tex @@ -1492,18 +1492,21 @@ default value is FALSE.} \membersection{wxWindow::PopupMenu}\label{wxwindowpopupmenu} -\func{virtual bool}{PopupMenu}{\param{wxMenu* }{menu}, \param{int }{x}, \param{int }{y}} +\func{bool}{PopupMenu}{\param{wxMenu* }{menu}, \param{const wxPoint& }{pos}} + +\func{bool}{PopupMenu}{\param{wxMenu* }{menu}, \param{int }{x}, \param{int }{y}} Pops up the given menu at the specified coordinates, relative to this window, and returns control when the user has dismissed the menu. If a -menu item is selected, the callback defined for the menu is called with -wxMenu and wxCommandEvent reference arguments. The callback should access -the commandInt member of the event to check the selected menu identifier. +menu item is selected, the corresponding menu event is generated and will be +processed as usually. \wxheading{Parameters} \docparam{menu}{Menu to pop up.} +\docparam{pos}{The position where the menu will appear.} + \docparam{x}{Required x position for the menu to appear.} \docparam{y}{Required y position for the menu to appear.} diff --git a/include/wx/generic/listctrl.h b/include/wx/generic/listctrl.h index 70afe45135..de85888917 100644 --- a/include/wx/generic/listctrl.h +++ b/include/wx/generic/listctrl.h @@ -629,7 +629,7 @@ class WXDLLEXPORT wxListCtrl: public wxControl { return m_mainWin ? m_mainWin->GetBackgroundColour() : wxColour(); } wxColour GetForegroundColour() const { return m_mainWin ? m_mainWin->GetForegroundColour() : wxColour(); } - bool PopupMenu( wxMenu *menu, int x, int y ) + bool DoPopupMenu( wxMenu *menu, int x, int y ) { return m_mainWin->PopupMenu( menu, x, y ); } void SetFocus() { m_mainWin->SetFocus(); } diff --git a/include/wx/gtk/window.h b/include/wx/gtk/window.h index aa722a2f14..bf99cd47e7 100644 --- a/include/wx/gtk/window.h +++ b/include/wx/gtk/window.h @@ -86,7 +86,7 @@ public: const wxFont *theFont = (const wxFont *) NULL) const; - virtual bool PopupMenu( wxMenu *menu, int x, int y ); + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); virtual void SetScrollbar( int orient, int pos, int thumbVisible, int range, bool refresh = TRUE ); diff --git a/include/wx/gtk1/window.h b/include/wx/gtk1/window.h index aa722a2f14..bf99cd47e7 100644 --- a/include/wx/gtk1/window.h +++ b/include/wx/gtk1/window.h @@ -86,7 +86,7 @@ public: const wxFont *theFont = (const wxFont *) NULL) const; - virtual bool PopupMenu( wxMenu *menu, int x, int y ); + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); virtual void SetScrollbar( int orient, int pos, int thumbVisible, int range, bool refresh = TRUE ); diff --git a/include/wx/msw/window.h b/include/wx/msw/window.h index 33f358e879..dbd49770ed 100644 --- a/include/wx/msw/window.h +++ b/include/wx/msw/window.h @@ -110,7 +110,7 @@ public: const wxFont *theFont = (const wxFont *) NULL) const; - virtual bool PopupMenu( wxMenu *menu, int x, int y ); + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ); virtual void SetScrollbar( int orient, int pos, int thumbVisible, int range, bool refresh = TRUE ); diff --git a/include/wx/window.h b/include/wx/window.h index 6edbb62524..34049b6af0 100644 --- a/include/wx/window.h +++ b/include/wx/window.h @@ -531,7 +531,10 @@ public: void UpdateWindowUI(); - virtual bool PopupMenu( wxMenu *menu, int x, int y ) = 0; + bool PopupMenu( wxMenu *menu, const wxPoint& pos ) + { return DoPopupMenu(menu, pos.x, pos.y); } + bool PopupMenu( wxMenu *menu, int x, int y ) + { return DoPopupMenu(menu, x, y); } // scrollbars // ---------- @@ -772,6 +775,8 @@ protected: virtual void DoSetToolTip( wxToolTip *tip ); #endif // wxUSE_TOOLTIPS + virtual bool DoPopupMenu( wxMenu *menu, int x, int y ) = 0; + private: // contains the last id generated by NewControlId static int ms_lastControlId; diff --git a/src/generic/panelg.cpp b/src/generic/panelg.cpp index 9f719780e4..a37cabb6ed 100644 --- a/src/generic/panelg.cpp +++ b/src/generic/panelg.cpp @@ -109,16 +109,34 @@ void wxPanel::OnNavigationKey( wxNavigationKeyEvent& event ) } wxWindowList::Node *start_node = GetChildren().Find( winFocus ); - if (!start_node) + if ( !start_node ) + start_node = GetChildren().Find( m_winLastFocused ); + if ( !start_node ) start_node = GetChildren().GetFirst(); wxWindowList::Node *node = event.GetDirection() ? start_node->GetNext() : start_node->GetPrevious(); - while (node != start_node) + while ( node != start_node ) { - if (!node) + if ( !node ) { + // check if our (may be grand) parent is another panel: if this is + // the case, they will know what to do with this navigation key and + // so give them the chance to process it instead of looping inside + // this panel (normally, the focus will go to the next/previous + // item after this panel in the parent panel) + for ( wxWindow *p = GetParent(); p; p = p->GetParent() ) + { + if ( wxDynamicCast(p, wxPanel) ) + { + event.Skip(); + + return; + } + } + + // no, we are not inside another panel so process this ourself node = event.GetDirection() ? GetChildren().GetFirst() : GetChildren().GetLast(); @@ -127,7 +145,7 @@ void wxPanel::OnNavigationKey( wxNavigationKeyEvent& event ) wxWindow *child = node->GetData(); - if (child->AcceptsFocus()) + if ( child->AcceptsFocus() ) { // ok, event processed child->SetFocus(); diff --git a/src/gtk/window.cpp b/src/gtk/window.cpp index c61a2a2c67..24823403c3 100644 --- a/src/gtk/window.cpp +++ b/src/gtk/window.cpp @@ -2869,7 +2869,7 @@ static void pop_pos_callback( GtkMenu * WXUNUSED(menu), *y = gs_pop_y; } -bool wxWindow::PopupMenu( wxMenu *menu, int x, int y ) +bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y ) { wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); diff --git a/src/gtk1/window.cpp b/src/gtk1/window.cpp index c61a2a2c67..24823403c3 100644 --- a/src/gtk1/window.cpp +++ b/src/gtk1/window.cpp @@ -2869,7 +2869,7 @@ static void pop_pos_callback( GtkMenu * WXUNUSED(menu), *y = gs_pop_y; } -bool wxWindow::PopupMenu( wxMenu *menu, int x, int y ) +bool wxWindow::DoPopupMenu( wxMenu *menu, int x, int y ) { wxCHECK_MSG( m_widget != NULL, FALSE, _T("invalid window") ); diff --git a/src/msw/iniconf.cpp b/src/msw/iniconf.cpp index 22199a3f39..1adae8ce22 100644 --- a/src/msw/iniconf.cpp +++ b/src/msw/iniconf.cpp @@ -442,9 +442,13 @@ bool wxIniConfig::DeleteAll() char szBuf[MAX_PATH]; size_t nRc = GetWindowsDirectory(szBuf, WXSIZEOF(szBuf)); if ( nRc == 0 ) + { wxLogLastError("GetWindowsDirectory"); + } else if ( nRc > WXSIZEOF(szBuf) ) + { wxFAIL_MSG("buffer is too small for Windows directory."); + } wxString strFile = szBuf; strFile << '\\' << m_strLocalFilename; diff --git a/src/msw/window.cpp b/src/msw/window.cpp index 5f6bf803cf..8d185d6420 100644 --- a/src/msw/window.cpp +++ b/src/msw/window.cpp @@ -1422,7 +1422,7 @@ void wxWindow::GetCaretPos(int *x, int *y) const // popup menu // --------------------------------------------------------------------------- -bool wxWindow::PopupMenu(wxMenu *menu, int x, int y) +bool wxWindow::DoPopupMenu(wxMenu *menu, int x, int y) { menu->SetInvokingWindow(this); menu->UpdateUI();