]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk1/listbox.cpp
Catching up for the week
[wxWidgets.git] / src / gtk1 / listbox.cpp
index d54e30e3245bfb66ec9ed2123a5b5f28fde577ef..4eefc235d3fd5ca07e2ea6b9705f2cf625f1d943 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;
 
@@ -1017,6 +1024,15 @@ void wxListBox::OnInternalIdle()
         }
     }
 
+    if (g_delayedFocus == this)
+    {
+        if (GTK_WIDGET_REALIZED(m_widget))
+        {
+            gtk_widget_grab_focus( m_widget );
+            g_delayedFocus = NULL;
+        }
+    }
+
     UpdateWindowUI();
 }