dont flush the threads by removing them, execute them
authorgc <gc>
Fri, 23 Dec 2005 20:27:12 +0000 (20:27 +0000)
committergc <gc>
Fri, 23 Dec 2005 20:27:12 +0000 (20:27 +0000)
bin/booh

index 9ef9aff5953d0632b5d33c97c8f80c35ff2e8ba6..9de054554c8e13fd5fb382de6465707b9b68acbe 100755 (executable)
--- a/bin/booh
+++ b/bin/booh
@@ -1727,7 +1727,7 @@ def backend_wait_message(parent, msg, infopipe_path, mode)
     w.signal_connect('delete-event') { w.destroy }
     w.signal_connect('destroy') {
         Thread.kill(refresh_thread)
     w.signal_connect('delete-event') { w.destroy }
     w.signal_connect('destroy') {
         Thread.kill(refresh_thread)
-        gtk_thread_abandon  #- needed because we're about to destroy widgets in w, for which they may be some pending gtk calls
+        gtk_thread_flush  #- needed because we're about to destroy widgets in w, for which they may be some pending gtk calls
         if infopipe_path
             infopipe.close
             system("rm -f #{infopipe_path}")
         if infopipe_path
             infopipe.close
             system("rm -f #{infopipe_path}")
@@ -2721,7 +2721,7 @@ def new_album
     madewith = madewithentry.text
     if src_nb_thread
         Thread.kill(src_nb_thread)
     madewith = madewithentry.text
     if src_nb_thread
         Thread.kill(src_nb_thread)
-        gtk_thread_abandon  #- needed because we're about to destroy widgets in dialog, for which they may be some pending gtk calls
+        gtk_thread_flush  #- needed because we're about to destroy widgets in dialog, for which they may be some pending gtk calls
     end
     dialog.destroy
     Gtk.timeout_remove(timeout_src_nb)
     end
     dialog.destroy
     Gtk.timeout_remove(timeout_src_nb)
@@ -3400,6 +3400,7 @@ Click to view it in your browser:") % $xmldoc.root.attributes['destination']),
                        :successmsg_linkurl => $xmldoc.root.attributes['destination'],
                        :closure_after => proc {
                              $xmldoc.elements.each('//dir') { |elem|
                        :successmsg_linkurl => $xmldoc.root.attributes['destination'],
                        :closure_after => proc {
                              $xmldoc.elements.each('//dir') { |elem|
+                                 $modified ||= elem.attributes['already-generated'].nil?
                                  elem.add_attribute('already-generated', 'true')
                              }
                              UndoHandler.cleanup   #- prevent save_changes to mark current dir as not already generated
                                  elem.add_attribute('already-generated', 'true')
                              }
                              UndoHandler.cleanup   #- prevent save_changes to mark current dir as not already generated
@@ -3407,7 +3408,6 @@ Click to view it in your browser:") % $xmldoc.root.attributes['destination']),
                              $redo_tb.sensitive = $redo_mb.sensitive = false
                              save_current_file
                              $generated_outofline = true
                              $redo_tb.sensitive = $redo_mb.sensitive = false
                              save_current_file
                              $generated_outofline = true
-                             $modified = true
                          }})
     }
     $view_wa.signal_connect('activate') {
                          }})
     }
     $view_wa.signal_connect('activate') {
@@ -3656,8 +3656,11 @@ def gtk_thread_protect(&proc)
     end
 end
 
     end
 end
 
-def gtk_thread_abandon
+def gtk_thread_flush
     $protect_gtk_pending_calls.try_lock
     $protect_gtk_pending_calls.try_lock
+    for closure in $gtk_pending_calls
+        closure.call
+    end
     $gtk_pending_calls = []
     $protect_gtk_pending_calls.unlock
 end
     $gtk_pending_calls = []
     $protect_gtk_pending_calls.unlock
 end