]> git.saurik.com Git - wxWidgets.git/blobdiff - src/dfb/window.cpp
Generate wxPropertyGrid splitter (column divider) events: wxEVT_PG_COL_BEGIN_DRAG...
[wxWidgets.git] / src / dfb / window.cpp
index b3f8121c5eb4487672ee5ef8bc690b2aaae05b12..6fed4e69f4f715e20ad45e246c5e5660415e1cd7 100644 (file)
@@ -37,8 +37,8 @@
 #include "wx/dfb/private.h"
 #include "wx/private/overlay.h"
 
-#define TRACE_EVENTS _T("events")
-#define TRACE_PAINT  _T("paint")
+#define TRACE_EVENTS "events"
+#define TRACE_PAINT  "paint"
 
 // ===========================================================================
 // implementation
@@ -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();
 
@@ -138,10 +144,10 @@ bool wxWindowDFB::Create(wxWindow *parent,
 
 wxIDirectFBSurfacePtr wxWindowDFB::ObtainDfbSurface() const
 {
-    wxCHECK_MSG( m_parent, NULL, _T("parentless window?") );
+    wxCHECK_MSG( m_parent, NULL, "parentless window?" );
 
     wxIDirectFBSurfacePtr parentSurface(m_parent->GetDfbSurface());
-    wxCHECK_MSG( parentSurface, NULL, _T("invalid parent surface") );
+    wxCHECK_MSG( parentSurface, NULL, "invalid parent surface" );
 
     wxRect r(GetRect());
     AdjustForParentClientOrigin(r.x, r.y, 0);
@@ -155,7 +161,7 @@ wxIDirectFBSurfacePtr wxWindowDFB::GetDfbSurface()
     if ( !m_surface )
     {
         m_surface = ObtainDfbSurface();
-        wxASSERT_MSG( m_surface, _T("invalid DirectFB surface") );
+        wxASSERT_MSG( m_surface, "invalid DirectFB surface" );
     }
 
     return m_surface;
@@ -194,7 +200,8 @@ void wxWindowDFB::SetFocus()
 
     gs_focusedWindow = this;
 
-    if ( IsShownOnScreen() )
+    if ( IsShownOnScreen() &&
+         (!oldFocusedWindow || oldFocusedWindow->GetTLW() != m_tlw) )
     {
         m_tlw->SetDfbFocus();
     }
@@ -205,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
@@ -223,7 +230,7 @@ void wxWindowDFB::SetFocus()
 void wxWindowDFB::DFBKillFocus()
 {
     wxCHECK_RET( gs_focusedWindow == this,
-                 _T("killing focus on window that doesn't have it") );
+                 "killing focus on window that doesn't have it" );
 
     gs_focusedWindow = NULL;
 
@@ -240,7 +247,7 @@ void wxWindowDFB::DFBKillFocus()
     wxFocusEvent event(wxEVT_KILL_FOCUS, GetId());
     event.SetEventObject(this);
     event.SetWindow(gs_toBeFocusedWindow);
-    GetEventHandler()->ProcessEvent(event);
+    HandleWindowEvent(event);
 }
 
 // ----------------------------------------------------------------------------
@@ -268,13 +275,13 @@ bool wxWindowDFB::Show(bool show)
 // Raise the window to the top of the Z order
 void wxWindowDFB::Raise()
 {
-    wxFAIL_MSG( _T("Raise() not implemented") );
+    wxFAIL_MSG( "Raise() not implemented" );
 }
 
 // Lower the window to the bottom of the Z order
 void wxWindowDFB::Lower()
 {
-    wxFAIL_MSG( _T("Lower() not implemented") );
+    wxFAIL_MSG( "Lower() not implemented" );
 }
 
 void wxWindowDFB::DoCaptureMouse()
@@ -337,7 +344,7 @@ void wxWindowDFB::WarpPointer(int x, int y)
     if ( y >= h ) y = h-1;
 
     wxIDirectFBDisplayLayerPtr layer(wxIDirectFB::Get()->GetDisplayLayer());
-    wxCHECK_RET( layer, _T("no display layer") );
+    wxCHECK_RET( layer, "no display layer" );
 
     layer->WarpCursor(x, y);
 }
@@ -349,7 +356,7 @@ bool wxWindowDFB::Reparent(wxWindowBase *parent)
         return false;
 
 #warning "implement this"
-    wxFAIL_MSG( _T("reparenting not yet implemented") );
+    wxFAIL_MSG( "reparenting not yet implemented" );
 
     return true;
 }
@@ -373,7 +380,7 @@ void wxWindowDFB::DoGetPosition(int *x, int *y) const
 
 static wxPoint GetScreenPosOfClientOrigin(const wxWindowDFB *win)
 {
-    wxCHECK_MSG( win, wxPoint(0, 0), _T("no window provided") );
+    wxCHECK_MSG( win, wxPoint(0, 0), "no window provided" );
 
     wxPoint pt(win->GetPosition() + win->GetClientAreaOrigin());
 
@@ -525,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);
     }
 }
 
@@ -550,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);
@@ -564,14 +572,6 @@ void wxWindowDFB::GetTextExtent(const wxString& string,
 // painting
 // ---------------------------------------------------------------------------
 
-void wxWindowDFB::Clear()
-{
-    wxClientDC dc((wxWindow *)this);
-    wxBrush brush(GetBackgroundColour(), wxSOLID);
-    dc.SetBackground(brush);
-    dc.Clear();
-}
-
 void wxWindowDFB::Refresh(bool WXUNUSED(eraseBack), const wxRect *rect)
 {
     if ( !IsShown() || IsFrozen() )
@@ -611,7 +611,7 @@ void wxWindowDFB::DoRefreshWindow()
 void wxWindowDFB::DoRefreshRect(const wxRect& rect)
 {
     wxWindow *parent = GetParent();
-    wxCHECK_RET( parent, _T("no parent") );
+    wxCHECK_RET( parent, "no parent" );
 
     // don't overlap outside of the window (NB: 'rect' is in window coords):
     wxRect r(rect);
@@ -620,7 +620,7 @@ void wxWindowDFB::DoRefreshRect(const wxRect& rect)
         return;
 
     wxLogTrace(TRACE_PAINT,
-               _T("%p ('%s'): refresh rect [%i,%i,%i,%i]"),
+               "%p ('%s'): refresh rect [%i,%i,%i,%i]",
                this, GetName().c_str(),
                rect.x, rect.y, rect.GetRight(), rect.GetBottom());
 
@@ -645,28 +645,18 @@ void wxWindowDFB::Update()
     GetParent()->Update();
 }
 
-void wxWindowDFB::Freeze()
+void wxWindowDFB::DoThaw()
 {
-    m_frozenness++;
-}
-
-void wxWindowDFB::Thaw()
-{
-    wxASSERT_MSG( IsFrozen(), _T("Thaw() without matching Freeze()") );
-
-    if ( --m_frozenness == 0 )
-    {
-        if ( IsShown() )
-            DoRefreshWindow();
-    }
+    if ( IsShown() )
+        DoRefreshWindow();
 }
 
 void wxWindowDFB::PaintWindow(const wxRect& rect)
 {
-    wxCHECK_RET( !IsFrozen() && IsShown(), _T("shouldn't be called") );
+    wxCHECK_RET( !IsFrozen() && IsShown(), "shouldn't be called" );
 
     wxLogTrace(TRACE_PAINT,
-               _T("%p ('%s'): painting region [%i,%i,%i,%i]"),
+               "%p ('%s'): painting region [%i,%i,%i,%i]",
                this, GetName().c_str(),
                rect.x, rect.y, rect.GetRight(), rect.GetBottom());
 
@@ -674,13 +664,14 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
 
     // FIXME_DFB: don't waste time rendering the area if it's fully covered
     //            by some children, go directly to rendering the children
+    //            (unless some child has HasTransparentBackground()=true!)
 
     // NB: unconditionally send wxEraseEvent, because our implementation of
     //     wxWindow::Refresh() ignores the eraseBack argument
     wxWindowDC dc((wxWindow*)this);
     wxEraseEvent eventEr(m_windowId, &dc);
     eventEr.SetEventObject(this);
-    GetEventHandler()->ProcessEvent(eventEr);
+    HandleWindowEvent(eventEr);
 
     wxRect clientRect(GetClientRect());
 
@@ -689,11 +680,11 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
     {
         wxNcPaintEvent eventNc(GetId());
         eventNc.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(eventNc);
+        HandleWindowEvent(eventNc);
     }
     else
     {
-        wxLogTrace(TRACE_PAINT, _T("%p ('%s'): not sending wxNcPaintEvent"),
+        wxLogTrace(TRACE_PAINT, "%p ('%s'): not sending wxNcPaintEvent",
                    this, GetName().c_str());
     }
 
@@ -702,11 +693,11 @@ void wxWindowDFB::PaintWindow(const wxRect& rect)
     {
         wxPaintEvent eventPt(GetId());
         eventPt.SetEventObject(this);
-        GetEventHandler()->ProcessEvent(eventPt);
+        HandleWindowEvent(eventPt);
     }
     else
     {
-        wxLogTrace(TRACE_PAINT, _T("%p ('%s'): not sending wxPaintEvent"),
+        wxLogTrace(TRACE_PAINT, "%p ('%s'): not sending wxPaintEvent",
                    this, GetName().c_str());
     }
 
@@ -757,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);
@@ -791,7 +780,7 @@ void wxWindowDFB::AddOverlay(wxOverlayImpl *overlay)
 
 void wxWindowDFB::RemoveOverlay(wxOverlayImpl *overlay)
 {
-    wxCHECK_RET( m_overlays, _T("no overlays to remove") );
+    wxCHECK_RET( m_overlays, "no overlays to remove" );
 
     m_overlays->Remove(overlay);
 
@@ -812,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
@@ -956,7 +945,7 @@ static long GetTranslatedKeyCode(DFBInputDeviceKeyIdentifier key_id)
 
         case DIKI_KEYDEF_END:
         case DIKI_NUMBER_OF_KEYS:
-            wxFAIL_MSG( _T("invalid key_id value") );
+            wxFAIL_MSG( "invalid key_id value" );
             return 0;
     }
 
@@ -1004,8 +993,8 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
     const DFBWindowEvent& e = event_;
 
     wxLogTrace(TRACE_EVENTS,
-               _T("handling key %s event for window %p ('%s')"),
-               e.type == DWET_KEYUP ? _T("up") : _T("down"),
+               "handling key %s event for window %p ('%s')",
+               e.type == DWET_KEYUP ? "up" : "down",
                this, GetName().c_str());
 
     // fill in wxKeyEvent fields:
@@ -1014,7 +1003,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
@@ -1032,7 +1020,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
     if ( e.type == DWET_KEYUP )
     {
         event.SetEventType(wxEVT_KEY_UP);
-        GetEventHandler()->ProcessEvent(event);
+        HandleWindowEvent(event);
     }
     else
     {
@@ -1040,7 +1028,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:
@@ -1048,7 +1036,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
         if ( event.m_keyCode != 0 )
         {
             event.SetEventType(wxEVT_CHAR);
-            if ( GetEventHandler()->ProcessEvent(event) )
+            if ( HandleWindowEvent(event) )
                 return;
         }
 
@@ -1063,7 +1051,7 @@ 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);
         }
     }
 }
@@ -1074,7 +1062,7 @@ void wxWindowDFB::HandleKeyEvent(const wxDFBWindowEvent& event_)
 
 void wxWindowDFB::OnInternalIdle()
 {
-    if (wxUpdateUIEvent::CanUpdate(this))
+    if (wxUpdateUIEvent::CanUpdate(this) && IsShown())
         UpdateWindowUI(wxUPDATE_UI_FROMIDLE);
 }
 
@@ -1086,8 +1074,8 @@ wxWindow* wxFindWindowAtPointer(wxPoint& pt)
     return wxFindWindowAtPoint(pt = wxGetMousePosition());
 }
 
-wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
+wxWindow* wxFindWindowAtPoint(const wxPoint& WXUNUSED(pt))
 {
-    wxFAIL_MSG( _T("wxFindWindowAtPoint not implemented") );
+    wxFAIL_MSG( "wxFindWindowAtPoint not implemented" );
     return NULL;
 }