]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/listbox.cpp
Changed main ftp address to ftp://biolpc22.york.ac.uk/pub
[wxWidgets.git] / src / gtk1 / listbox.cpp
index d54e30e3245bfb66ec9ed2123a5b5f28fde577ef..c63ba920e37de4a63809b862a359ab1bd997e02a 100644 (file)
@@ -59,9 +59,10 @@ extern bool g_isIdle;
 // data
 //-----------------------------------------------------------------------------
 
-extern bool       g_blockEventsOnDrag;
-extern bool       g_blockEventsOnScroll;
-extern wxCursor   g_globalCursor;
+extern bool           g_blockEventsOnDrag;
+extern bool           g_blockEventsOnScroll;
+extern wxCursor       g_globalCursor;
+extern wxWindowGTK   *g_delayedFocus;
 
 static bool       g_hasDoubleClicked = FALSE;
 
@@ -83,7 +84,13 @@ extern "C" gint wxlistbox_idle_callback( gpointer gdata )
 
     gtk_idle_remove( data->m_tag );
 
-    data->m_listbox->SetFirstItem( data->m_item );
+    // check that the items haven't been deleted from the listbox since we had
+    // installed this callback
+    wxListBox *lbox = data->m_listbox;
+    if ( data->m_item < lbox->GetCount() )
+    {
+        lbox->SetFirstItem( data->m_item );
+    }
 
     delete data;
 
@@ -328,7 +335,6 @@ bool wxListBox::Create( wxWindow *parent, wxWindowID id,
 {
     m_needParent = TRUE;
     m_acceptsFocus = TRUE;
-    m_isListBox = TRUE;
     m_prevSelection = 0;  // or -1 ??
     m_blockEvent = FALSE;
 
@@ -1017,6 +1023,15 @@ void wxListBox::OnInternalIdle()
         }
     }
 
+    if (g_delayedFocus == this)
+    {
+        if (GTK_WIDGET_REALIZED(m_widget))
+        {
+            gtk_widget_grab_focus( m_widget );
+            g_delayedFocus = NULL;
+        }
+    }
+
     UpdateWindowUI();
 }
 
@@ -1048,4 +1063,13 @@ wxSize wxListBox::DoGetBestSize() const
     return wxSize(lbWidth, lbHeight);
 }
 
-#endif
+void wxListBox::FixUpMouseEvent(GtkWidget *widget, wxCoord& x, wxCoord& y)
+{
+    // the mouse event coords are relative to the listbox items, we need to
+    // translate them to the normal client coords
+    x += widget->allocation.x;
+    y += widget->allocation.y;
+}
+
+#endif // wxUSE_LISTBOX
+