#include "wx/intl.h"
#include "wx/log.h"
-
#include "wx/textctrl.h"
+#include "wx/notebook.h"
#include <string.h>
return;
}
- if ( x == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+ if ( x == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
x = currentX;
- if ( y == -1 || (sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
+ if ( y == -1 && !(sizeFlags & wxSIZE_ALLOW_MINUS_ONE) )
y = currentY;
AdjustForParentClientOrigin(x, y, sizeFlags);
{
// intercept dialog navigation keys
MSG *msg = (MSG *)pMsg;
+
+ // here we try to do all the job which ::IsDialogMessage() usually does
+ // internally
+#if 0
bool bProcess = TRUE;
if ( msg->message != WM_KEYDOWN )
bProcess = FALSE;
}
}
}
+#else
+ // let ::IsDialogMessage() do almost everything and handle just the
+ // things it doesn't here: Ctrl-TAB for switching notebook pages
+ if ( msg->message == WM_KEYDOWN )
+ {
+ // don't process system keys here
+ if ( !(HIWORD(msg->lParam) & KF_ALTDOWN) )
+ {
+ if ( (msg->wParam == VK_TAB) &&
+ (::GetKeyState(VK_CONTROL) & 0x100) != 0 )
+ {
+ // find the first notebook parent and change its page
+ wxWindow *win = this;
+ wxNotebook *nbook = NULL;
+ while ( win && !nbook )
+ {
+ nbook = wxDynamicCast(win, wxNotebook);
+ win = win->GetParent();
+ }
+
+ if ( nbook )
+ {
+ bool forward = !(::GetKeyState(VK_SHIFT) & 0x100);
+
+ nbook->AdvanceSelection(forward);
+ }
+ }
+ }
+ }
+#endif // 0
if ( ::IsDialogMessage(GetHwnd(), msg) )
return TRUE;
break;
case WM_LBUTTONDOWN:
+ // set focus to this window
+ SetFocus();
+
+ // fall through
+
case WM_LBUTTONUP:
case WM_LBUTTONDBLCLK:
case WM_RBUTTONDOWN:
case VK_RETURN:
case VK_BACK:
case VK_TAB:
+ case VK_ADD:
+ case VK_SUBTRACT:
// but set processed to FALSE, not TRUE to still pass them to
// the control's default window proc - otherwise built-in
// keyboard handling won't work
if ( oldWin && (oldWin != win) )
{
wxString str(win->GetClassInfo()->GetClassName());
- wxLogError("Bug! Found existing HWND %X for new window of class %s", (int) hWnd, (const char*) str);
+ wxLogError(wxT("Bug! Found existing HWND %X for new window of class %s"), (int) hWnd, (const wxChar*) str);
}
else if (!oldWin)
{
HWND hWnd = (HWND) node->GetKeyInteger();
if (hWnd != (HWND) m_hWnd)
{
- wxLogError("A second HWND association is being added for the same window!");
+ wxLogError(wxT("A second HWND association is being added for the same window!"));
}
}
#endif
return popupMenu->MSWCommand(cmd, id);
}
- // must cast to a signed type before comparing with other ids!
- wxWindow *win = FindItem((signed short)id);
- if ( !win )
+ wxWindow *win;
+ if ( cmd == 0 || cmd == 1 ) // menu or accel - use id
+ {
+ // must cast to a signed type before comparing with other ids!
+ win = FindItem((signed short)id);
+ }
+ else
{
+ // find it from HWND - this works even with the broken programs using
+ // the same ids for different controls
win = wxFindWinFromHandle(control);
}
if ( win )
return win->MSWCommand(cmd, id);
+ else
+ {
+ // If no child window, it may be an accelerator, e.g. for
+ // a popup menu command.
+
+ wxCommandEvent event(wxEVT_COMMAND_MENU_SELECTED);
+ event.SetEventObject(this);
+ event.SetId(id);
+ event.SetInt(id);
+ return ProcessEvent(event);
+ }
return FALSE;
}
event.m_eventType = wxEVT_SCROLLWIN_PAGEDOWN;
break;
- case SB_THUMBTRACK:
case SB_THUMBPOSITION:
+ event.m_isScrolling = FALSE;
+ /* fall-through */
+
+ case SB_THUMBTRACK:
event.m_eventType = wxEVT_SCROLLWIN_THUMBTRACK;
break;