]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/window.cpp
couple of minor bug fixes/enhancements (interface unchanged)
[wxWidgets.git] / src / gtk1 / window.cpp
index c064c71faa2fbada70b0d7ad1f46b543c21f4ab0..d65fec1d0906395e8589bcb80d3f352555209a4b 100644 (file)
@@ -256,7 +256,12 @@ gint gtk_window_key_press_callback( GtkWidget *WXUNUSED(widget), GdkEventKey *gd
   event.m_x = 0;
   event.m_y = 0;
   event.SetEventObject( win );
   event.m_x = 0;
   event.m_y = 0;
   event.SetEventObject( win );
-  return win->ProcessEvent( event );
+  
+  bool ret = win->ProcessEvent( event );
+/*
+  if (ret) printf( "found.\n") ;
+*/
+  return ret;
 };
 
 //-----------------------------------------------------------------------------
 };
 
 //-----------------------------------------------------------------------------
@@ -627,6 +632,8 @@ void gtk_window_hscroll_change_callback( GtkWidget *WXUNUSED(widget), wxWindow *
 
 void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
 {
 
 void gtk_window_drop_callback( GtkWidget *widget, GdkEvent *event, wxWindow *win )
 {
+  if (!win->HasVMT()) return;
+  
   if (win->GetDropTarget())
   {
     int x = 0;
   if (win->GetDropTarget())
   {
     int x = 0;
@@ -662,8 +669,8 @@ bool gtk_window_destroy_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSE
 bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
 {
   if (widget->window != gdk_event->window) return TRUE;
 bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
 {
   if (widget->window != gdk_event->window) return TRUE;
-  
-  if (g_blockEventsOnDrag) return FALSE;
+  if (g_blockEventsOnDrag) return TRUE;
+  if (!win->HasVMT()) return TRUE;
   
   if (widget->window)
     gdk_window_set_cursor( widget->window, win->m_cursor->GetCursor() );
   
   if (widget->window)
     gdk_window_set_cursor( widget->window, win->m_cursor->GetCursor() );
@@ -679,8 +686,8 @@ bool gtk_window_enter_callback( GtkWidget *widget, GdkEventCrossing *gdk_event,
 bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
 {
   if (widget->window != gdk_event->window) return TRUE;
 bool gtk_window_leave_callback( GtkWidget *widget, GdkEventCrossing *gdk_event, wxWindow *win )
 {
   if (widget->window != gdk_event->window) return TRUE;
-  
-  if (g_blockEventsOnDrag) return FALSE;
+  if (!win->HasVMT()) return TRUE;
+  if (g_blockEventsOnDrag) return TRUE;
   
   if (widget->window)
     gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() );
   
   if (widget->window)
     gdk_window_set_cursor( widget->window, wxSTANDARD_CURSOR->GetCursor() );
@@ -746,6 +753,7 @@ wxWindow::wxWindow( wxWindow *parent, wxWindowID id,
       const wxPoint &pos, const wxSize &size,
       long style, const wxString &name )
 {
       const wxPoint &pos, const wxSize &size,
       long style, const wxString &name )
 {
+  m_cursor = NULL;
   Create( parent, id, pos, size, style, name );
 };
 
   Create( parent, id, pos, size, style, name );
 };
 
@@ -804,6 +812,8 @@ bool wxWindow::Create( wxWindow *parent, wxWindowID id,
     
   m_wxwindow = gtk_myfixed_new();
   
     
   m_wxwindow = gtk_myfixed_new();
   
+  if (m_wxwindow) GTK_WIDGET_UNSET_FLAGS( m_widget, GTK_CAN_FOCUS );
+    
   if (m_windowStyle & wxTAB_TRAVERSAL == wxTAB_TRAVERSAL)
     GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
   else
   if (m_windowStyle & wxTAB_TRAVERSAL == wxTAB_TRAVERSAL)
     GTK_WIDGET_UNSET_FLAGS( m_wxwindow, GTK_CAN_FOCUS );
   else
@@ -855,7 +865,7 @@ wxWindow::~wxWindow(void)
     
   if (m_widget) gtk_widget_destroy( m_widget );
   
     
   if (m_widget) gtk_widget_destroy( m_widget );
   
-//  delete m_cursor;
+  wxDELETE(m_cursor);
 
   DeleteRelatedConstraints();
   if (m_constraints)
 
   DeleteRelatedConstraints();
   if (m_constraints)
@@ -909,7 +919,8 @@ void wxWindow::PreCreation( wxWindow *parent, wxWindowID id,
   m_windowValidator = NULL;
   m_windowId = id;
   m_sizeSet = FALSE;
   m_windowValidator = NULL;
   m_windowId = id;
   m_sizeSet = FALSE;
-  m_cursor = new wxCursor( wxCURSOR_ARROW );
+  if (m_cursor == NULL)
+    m_cursor = new wxCursor( wxCURSOR_ARROW );
   m_font = *wxSWISS_FONT;
   m_backgroundColour = wxWHITE;
   m_foregroundColour = wxBLACK;
   m_font = *wxSWISS_FONT;
   m_backgroundColour = wxWHITE;
   m_foregroundColour = wxBLACK;
@@ -1059,18 +1070,16 @@ void wxWindow::ImplementSetSize(void)
 
 void wxWindow::ImplementSetPosition(void)
 {
 
 void wxWindow::ImplementSetPosition(void)
 {
+  if (IS_KIND_OF(this,wxFrame) || IS_KIND_OF(this,wxDialog))
+  {
+    if ((m_x != -1) || (m_y != -1))
+      gtk_widget_set_uposition( m_widget, m_x, m_y );
+    return;
+  }
+  
   if (!m_parent)
   {
   if (!m_parent)
   {
-    if (IsKindOf(CLASSINFO(wxFrame)) ||
-        IsKindOf(CLASSINFO(wxDialog)))
-    {
-      if ((m_x != -1) || (m_y != -1))
-        gtk_widget_set_uposition( m_widget, m_x, m_y );
-    }
-    else
-    {
-      printf( "wxWindow::SetSize error.\n" );
-    }
+    printf( "wxWindow::SetSize error.\n" );
     return;
   }
   
     return;
   }
   
@@ -1325,7 +1334,7 @@ void wxWindow::ScreenToClient( int *x, int *y )
 
 void wxWindow::Centre( int direction )
 {
 
 void wxWindow::Centre( int direction )
 {
-  if (this->IsKindOf(CLASSINFO(wxDialog)) || this->IsKindOf(CLASSINFO(wxFrame)))
+  if (IS_KIND_OF(this,wxDialog) || IS_KIND_OF(this,wxFrame))
   {
     if (direction & wxHORIZONTAL == wxHORIZONTAL) m_x = (gdk_screen_width () - m_width) / 2;
     if (direction & wxVERTICAL == wxVERTICAL) m_y = (gdk_screen_height () - m_height) / 2;
   {
     if (direction & wxHORIZONTAL == wxHORIZONTAL) m_x = (gdk_screen_width () - m_width) / 2;
     if (direction & wxVERTICAL == wxVERTICAL) m_y = (gdk_screen_height () - m_height) / 2;
@@ -1554,7 +1563,11 @@ wxWindowID wxWindow::GetId(void)
 
 void wxWindow::SetCursor( const wxCursor &cursor )
 {
 
 void wxWindow::SetCursor( const wxCursor &cursor )
 {
-  if (*m_cursor == cursor) return;
+  wxASSERT(m_cursor != NULL);
+
+  if (m_cursor != NULL)
+    if (*m_cursor == cursor)
+      return;
   (*m_cursor) = cursor;
   if (m_widget->window)
     gdk_window_set_cursor( m_widget->window, m_cursor->GetCursor() );
   (*m_cursor) = cursor;
   if (m_widget->window)
     gdk_window_set_cursor( m_widget->window, m_cursor->GetCursor() );