]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/window.cpp
avoid multiple mouse moved events, refs #15072
[wxWidgets.git] / src / dfb / window.cpp
index 78146c966e3574498dc22f4467f09938097e27c1..9caa5b23c274d1c379b52b385bf0bdf6e86eeb6c 100644 (file)
@@ -2,7 +2,7 @@
 // Name:        src/dfb/window.cpp
 // Purpose:     wxWindow
 // Author:      Vaclav Slavik
-//              (based on GTK, MSW, MGL implementations)
+//              (based on GTK, MSW implementations)
 // Created:     2006-80-10
 // RCS-ID:      $Id$
 // Copyright:   (c) 2006 REA Elektronik GmbH
@@ -72,6 +72,15 @@ IMPLEMENT_ABSTRACT_CLASS(wxWindowDFB, wxWindowBase)
 BEGIN_EVENT_TABLE(wxWindowDFB, wxWindowBase)
 END_EVENT_TABLE()
 
+//-----------------------------------------------------------------------------
+// global functions
+//-----------------------------------------------------------------------------
+
+wxWindow *wxGetActiveWindow()
+{
+    return wxWindow::FindFocus();
+}
+
 // ----------------------------------------------------------------------------
 // constructors and such
 // ----------------------------------------------------------------------------
@@ -79,7 +88,6 @@ END_EVENT_TABLE()
 void wxWindowDFB::Init()
 {
     m_isShown = true;
-    m_frozenness = 0;
     m_tlw = NULL;
     m_overlays = NULL;
 }
@@ -89,8 +97,6 @@ wxWindowDFB::~wxWindowDFB()
 {
     SendDestroyEvent();
 
-    m_isBeingDeleted = true;
-
     if ( gs_mouseCapture == this )
         ReleaseMouse();
 
@@ -206,12 +212,12 @@ void wxWindowDFB::SetFocus()
     // notify the parent keeping track of focus for the kbd navigation
     // purposes that we got it
     wxChildFocusEvent eventFocus((wxWindow*)this);
-    GetEventHandler()->ProcessEvent(eventFocus);
+    HandleWindowEvent(eventFocus);
 
     wxFocusEvent event(wxEVT_SET_FOCUS, GetId());
     event.SetEventObject(this);
     event.SetWindow((wxWindow*)oldFocusedWindow);
-    GetEventHandler()->ProcessEvent(event);
+    HandleWindowEvent(event);
 
 #if wxUSE_CARET
     // caret needs to be informed about focus change
@@ -241,7 +247,7 @@ void wxWindowDFB::DFBKillFocus()
     wxFocusEvent event(wxEVT_KILL_FOCUS, GetId());
     event.SetEventObject(this);
     event.SetWindow(gs_toBeFocusedWindow);
-    GetEventHandler()->ProcessEvent(event);
+    HandleWindowEvent(event);
 }
 
 // ----------------------------------------------------------------------------
@@ -317,7 +323,7 @@ bool wxWindowDFB::SetCursor(const wxCursor& cursor)
 
 #warning "implement this"
 #if 0
-    if ( m_cursor.Ok() )
+    if ( m_cursor.IsOk() )
         DFB_wmSetWindowCursor(m_wnd, *m_cursor.GetDFBCursor());
     else
         DFB_wmSetWindowCursor(m_wnd, *wxSTANDARD_CURSOR->GetDFBCursor());
@@ -526,7 +532,7 @@ void wxWindowDFB::DoSetSize(int x, int y, int width, int height, int sizeFlags)
         wxSize newSize(width, height);
         wxSizeEvent event(newSize, GetId());
         event.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(event);
+        HandleWindowEvent(event);
     }
 }
 
@@ -551,10 +557,11 @@ int wxWindowDFB::GetCharWidth() const
     return dc.GetCharWidth();
 }
 
-void wxWindowDFB::GetTextExtent(const wxString& string,
-                             int *x, int *y,
-                             int *descent, int *externalLeading,
-                             const wxFont *theFont) const
+void wxWindowDFB::DoGetTextExtent(const wxString& string,
+                                  int *x, int *y,
+                                  int *descent,
+                                  int *externalLeading,
+                                  const wxFont *theFont) const
 {
     wxWindowDC dc((wxWindow*)this);
     dc.GetTextExtent(string, x, y, descent, externalLeading, (wxFont*)theFont);
@@ -638,20 +645,10 @@ void wxWindowDFB::Update()
     GetParent()->Update();
 }
 
-void wxWindowDFB::Freeze()
+void wxWindowDFB::DoThaw()
 {
-    m_frozenness++;
-}
-
-void wxWindowDFB::Thaw()
-{
-    wxASSERT_MSG( IsFrozen(), "Thaw() without matching Freeze()" );
-
-    if ( --m_frozenness == 0 )
-    {
-        if ( IsShown() )
-            DoRefreshWindow();
-    }
+    if ( IsShown() )
+        DoRefreshWindow();
 }
 
 void wxWindowDFB::PaintWindow(const wxRect& rect)
@@ -674,7 +671,7 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
     wxWindowDC dc((wxWindow*)this);
     wxEraseEvent eventEr(m_windowId, &dc);
     eventEr.SetEventObject(this);
-    GetEventHandler()->ProcessEvent(eventEr);
+    HandleWindowEvent(eventEr);
 
     wxRect clientRect(GetClientRect());
 
@@ -683,7 +680,7 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
     {
         wxNcPaintEvent eventNc(GetId());
         eventNc.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(eventNc);
+        HandleWindowEvent(eventNc);
     }
     else
     {
@@ -696,7 +693,7 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
     {
         wxPaintEvent eventPt(GetId());
         eventPt.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(eventPt);
+        HandleWindowEvent(eventPt);
     }
     else
     {
@@ -751,9 +748,7 @@ void wxWindowDFB::PaintOverlays(const wxRect& rect)
     for ( wxDfbOverlaysList::const_iterator i = m_overlays->begin();
           i != m_overlays->end(); ++i )
     {
-        // FIXME: the cast is necessary for STL build where the iterator
-        //        (incorrectly) returns void* and not wxOverlayImpl*
-        wxOverlayImpl *overlay = (wxOverlayImpl*) *i;
+        const wxOverlayImpl * const overlay = *i;
 
         wxRect orectOrig(overlay->GetRect());
         wxRect orect(orectOrig);
@@ -806,7 +801,7 @@ void wxWindowDFB::RemoveOverlay(wxOverlayImpl *overlay)
 #define KEY(dfb, wx)                                                \
     case dfb:                                                       \
           wxLogTrace(TRACE_EVENTS,                                  \
-                     _T("key " #dfb " mapped to " #wx));            \
+                     wxT("key " #dfb " mapped to " #wx));            \
           return wx
 
 // returns translated keycode, i.e. the one for KEYUP/KEYDOWN where 'a'..'z' is
@@ -972,13 +967,11 @@ static long GetUntraslatedKeyCode(DFBInputDeviceKeyIdentifier key_id,
                 return key_symbol;
             else
             {
-#if wxUSE_WCHAR_T
                 wchar_t chr = key_symbol;
                 wxCharBuffer buf(wxConvUI->cWC2MB(&chr, 1, NULL));
                 if ( buf )
                     return *buf; // may be 0 if failed
                 else
-#endif // wxUSE_WCHAR_T
                     return 0;
             }
 #endif
@@ -1008,7 +1001,6 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
     event.SetTimestamp(wxDFB_EVENT_TIMESTAMP(e));
     event.m_rawCode = e.key_code;
     event.m_keyCode = GetTranslatedKeyCode(e.key_id);
-    event.m_scanCode = 0; // not used by wx at all
 #if wxUSE_UNICODE
     event.m_uniChar = e.key_symbol;
 #endif
@@ -1026,7 +1018,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
     if ( e.type == DWET_KEYUP )
     {
         event.SetEventType(wxEVT_KEY_UP);
-        GetEventHandler()->ProcessEvent(event);
+        HandleWindowEvent(event);
     }
     else
     {
@@ -1034,7 +1026,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
 
         event.SetEventType(wxEVT_KEY_DOWN);
 
-        if ( GetEventHandler()->ProcessEvent(event) )
+        if ( HandleWindowEvent(event) )
             return;
 
         // only send wxEVT_CHAR event if not processed yet:
@@ -1042,7 +1034,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
         if ( event.m_keyCode != 0 )
         {
             event.SetEventType(wxEVT_CHAR);
-            if ( GetEventHandler()->ProcessEvent(event) )
+            if ( HandleWindowEvent(event) )
                 return;
         }
 
@@ -1057,22 +1049,11 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
             // Ctrl-TAB changes the (parent) window, i.e. switch notebook page:
             navEvent.SetWindowChange(event.m_controlDown);
             navEvent.SetCurrentFocus(wxStaticCast(this, wxWindow));
-            GetParent()->GetEventHandler()->ProcessEvent(navEvent);
+            GetParent()->HandleWindowEvent(navEvent);
         }
     }
 }
 
-// ---------------------------------------------------------------------------
-// idle events processing
-// ---------------------------------------------------------------------------
-
-void wxWindowDFB::OnInternalIdle()
-{
-    if (wxUpdateUIEvent::CanUpdate(this) && IsShown())
-        UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
-}
-
-
 // Find the wxWindow at the current mouse position, returning the mouse
 // position.
 wxWindow* wxFindWindowAtPointer(wxPoint& pt)
@@ -1080,7 +1061,7 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
     return wxFindWindowAtPoint(pt = wxGetMousePosition());
 }
 
-wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
+wxWindow* wxFindWindowAtPoint(const wxPoint& WXUNUSED(pt))
 {
     wxFAIL_MSG( "wxFindWindowAtPoint not implemented" );
     return NULL;