]> git.saurik.com Git - wxWidgets.git/blobdiff - src/gtk/clipbrd.cpp
Corrected bug in DoSetSize() (wxALLOW_MINUS_ONE)
[wxWidgets.git] / src / gtk / clipbrd.cpp
index 2d056fc1ed93b0e9f7d2430821aed54e631bfb89..a4bf7b6a6fbebecd5d955decd45f41440b985cba 100644 (file)
@@ -224,14 +224,14 @@ selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event )
     }
     else
     {
+        wxTheClipboard->m_waiting = FALSE;
         return FALSE;
     }
     
     if ((!wxTheClipboard->m_ownsPrimarySelection) &&
         (!wxTheClipboard->m_ownsClipboard))
     {
-        /* the clipboard is no longer in our hands. we can the  clipboard data. */
-      
+        /* the clipboard is no longer in our hands. we can the delete clipboard data. */
         if (wxTheClipboard->m_dataBroker)
        {
            delete wxTheClipboard->m_dataBroker;
@@ -239,6 +239,7 @@ selection_clear_clip( GtkWidget *WXUNUSED(widget), GdkEventSelection *event )
        }
     }
   
+    wxTheClipboard->m_waiting = FALSE;
     return TRUE;
 }
 
@@ -262,7 +263,7 @@ selection_handler( GtkWidget *WXUNUSED(widget), GtkSelectionData *selection_data
        if (data_object->GetFormat().GetAtom() != selection_data->target)
        {
            node = node->Next();
-           break;
+           continue;
        }
        
        switch (data_object->GetFormat().GetType())
@@ -388,12 +389,20 @@ void wxClipboard::Clear()
      
         if (gdk_selection_owner_get( g_clipboardAtom ) == m_clipboardWidget->window)
         {
+            m_waiting = TRUE;
+           
             gtk_selection_owner_set( (GtkWidget*) NULL, g_clipboardAtom, GDK_CURRENT_TIME );
+           
+            while (m_waiting) gtk_main_iteration();
         }
     
         if (gdk_selection_owner_get( GDK_SELECTION_PRIMARY ) == m_clipboardWidget->window)
         {
+            m_waiting = TRUE;
+           
             gtk_selection_owner_set( (GtkWidget*) NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME );
+           
+            while (m_waiting) gtk_main_iteration();
         }
     
         if (m_dataBroker)
@@ -435,26 +444,21 @@ bool wxClipboard::AddData( wxDataObject *data )
     wxCHECK_MSG( data, FALSE, _T("data is invalid") );
     
     /* if clipboard has been cleared before, create new data broker */
-  
     if (!m_dataBroker) m_dataBroker = new wxDataBroker();
   
     /* add new data to list of offered data objects */
-  
     m_dataBroker->Add( data );
     
     /* get native format id of new data object */
-    
     GdkAtom format = data->GetFormat().GetAtom();
        
     wxCHECK_MSG( format, FALSE, _T("data has invalid format") );
     
     /* This should happen automatically, but to be on the safe side */
-      
     m_ownsClipboard = FALSE;
     m_ownsPrimarySelection = FALSE;
     
     /* Add handlers if someone requests data */
-  
 
 #if (GTK_MINOR_VERSION > 0)
 
@@ -487,9 +491,9 @@ bool wxClipboard::AddData( wxDataObject *data )
                               selection_handler,
                               (gpointer) NULL );
 #endif
-                              
+
+//    printf( "vorher.\n" );                          
     /* Tell the world we offer clipboard data */
-  
     if (!gtk_selection_owner_set( m_clipboardWidget, 
                                   g_clipboardAtom,
                                  GDK_CURRENT_TIME ))
@@ -498,6 +502,10 @@ bool wxClipboard::AddData( wxDataObject *data )
     }
     m_ownsClipboard = TRUE;
     
+//    printf( "nachher.\n" );                         
+    
+    return TRUE;
+    
     if (!gtk_selection_owner_set( m_clipboardWidget, 
                                   GDK_SELECTION_PRIMARY,
                                  GDK_CURRENT_TIME ))