Blob Blame History Raw
diff -up system-config-printer-1.1.19/asyncipp.py.threading-fixes system-config-printer-1.1.19/asyncipp.py
--- system-config-printer-1.1.19/asyncipp.py.threading-fixes	2010-05-18 14:59:00.000000000 +0100
+++ system-config-printer-1.1.19/asyncipp.py	2010-06-28 16:03:00.719885124 +0100
@@ -173,11 +173,13 @@ class _IPPConnectionThread(threading.Thr
 
     def _auth (self, prompt, conn=None, method=None, resource=None):
         def prompt_auth (prompt):
+            gtk.gdk.threads_enter ()
             if conn == None:
                 self._auth_handler (prompt, self._conn)
             else:
                 self._auth_handler (prompt, self._conn, method, resource)
 
+            gtk.gdk.threads_leave ()
             return False
 
         if self._auth_handler == None:
@@ -190,7 +192,9 @@ class _IPPConnectionThread(threading.Thr
     def _reply (self, result):
         def send_reply (handler, result):
             if not self._destroyed:
+                gtk.gdk.threads_enter ()
                 handler (self._conn, result)
+                gtk.gdk.threads_leave ()
             return False
 
         if not self._destroyed and self._reply_handler:
@@ -199,7 +203,9 @@ class _IPPConnectionThread(threading.Thr
     def _error (self, exc):
         def send_error (handler, exc):
             if not self._destroyed:
+                gtk.gdk.threads_enter ()
                 handler (self._conn, exc)
+                gtk.gdk.threads_leave ()
             return False
 
         if not self._destroyed and self._error_handler:
diff -up system-config-printer-1.1.19/asyncpk1.py.threading-fixes system-config-printer-1.1.19/asyncpk1.py
--- system-config-printer-1.1.19/asyncpk1.py.threading-fixes	2010-05-18 14:59:00.000000000 +0100
+++ system-config-printer-1.1.19/asyncpk1.py	2010-06-28 16:03:00.720884111 +0100
@@ -105,7 +105,9 @@ class _PK1AsyncMethodCall:
             return
 
         if str (error) == '':
+            gtk.gdk.threads_enter ()
             self._client_reply_handler (self._conn, self._unpack_fn (*args))
+            gtk.gdk.threads_leave ()
             self._destroy ()
             return
 
@@ -118,7 +120,9 @@ class _PK1AsyncMethodCall:
 
         if exc.get_dbus_name () == CUPS_PK_NEED_AUTH:
             exc = cups.IPPError (cups.IPP_NOT_AUTHORIZED, 'pkcancel')
+            gtk.gdk.threads_enter ()
             self._client_error_handler (self._conn, exc)
+            gtk.gdk.threads_leave ()
             self._destroy ()
             return
 
diff -up system-config-printer-1.1.19/gtkinklevel.py.threading-fixes system-config-printer-1.1.19/gtkinklevel.py
--- system-config-printer-1.1.19/gtkinklevel.py.threading-fixes	2010-05-18 14:59:00.000000000 +0100
+++ system-config-printer-1.1.19/gtkinklevel.py	2010-06-28 16:03:00.721884791 +0100
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
 
-## Copyright (C) 2009 Tim Waugh <twaugh@redhat.com>
-## Copyright (C) 2009 Red Hat, Inc.
+## Copyright (C) 2009, 2010 Red Hat, Inc.
+## Authors:
+##  Tim Waugh <twaugh@redhat.com>
 
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -95,11 +96,13 @@ if __name__ == '__main__':
     import gobject
     import time
     def adjust_level (level):
+        gtk.gdk.threads_enter ()
         l = level.get_level ()
         l += 1
         if l > 100:
             l = 0
         level.set_level (l)
+        gtk.gdk.threads_leave ()
         return True
 
     w = gtk.Window ()
@@ -122,4 +125,5 @@ if __name__ == '__main__':
     gobject.timeout_add (10, adjust_level, ylevel)
     w.show_all ()
     w.connect ('delete_event', gtk.main_quit)
+    gtk.gdk.threads_init ()
     gtk.main ()
diff -up system-config-printer-1.1.19/gtkspinner.py.threading-fixes system-config-printer-1.1.19/gtkspinner.py
--- system-config-printer-1.1.19/gtkspinner.py.threading-fixes	2010-04-08 10:31:03.000000000 +0100
+++ system-config-printer-1.1.19/gtkspinner.py	2010-06-28 16:03:00.722884381 +0100
@@ -69,7 +69,9 @@ class Spinner:
         if n >= self.n_frames:
             n = 1
 
+        gtk.gdk.threads_enter ()
         self._set_frame (n)
+        gtk.gdk.threads_leave ()
         return True
 
     def start (self, timeout=125):
diff -up system-config-printer-1.1.19/jobviewer.py.threading-fixes system-config-printer-1.1.19/jobviewer.py
--- system-config-printer-1.1.19/jobviewer.py.threading-fixes	2010-05-18 14:59:00.000000000 +0100
+++ system-config-printer-1.1.19/jobviewer.py	2010-06-28 16:03:00.723884394 +0100
@@ -463,7 +463,13 @@ class JobViewer (GtkGUI, monitor.Watcher
                 self.store.set_value (iter, 1, t)
 
         if need_update and not self.job_creation_times_timer:
-            t = gobject.timeout_add_seconds (60, self.update_job_creation_times)
+            def update_times_with_locking ():
+                gtk.gdk.threads_enter ()
+                ret = self.update_job_creation_times ()
+                gtk.gdk.threads_leave ()
+                return ret
+
+            t = gobject.timeout_add_seconds (60, update_times_with_locking)
             self.job_creation_times_timer = t
 
         if not need_update:
@@ -509,7 +515,9 @@ class JobViewer (GtkGUI, monitor.Watcher
 
         if not self.job_creation_times_timer:
             def start_updating_job_creation_times():
+                gtk.gdk.threads_enter ()
                 self.update_job_creation_times ()
+                gtk.gdk.threads_leave ()
                 return False
 
             gobject.timeout_add (500, start_updating_job_creation_times)
diff -up system-config-printer-1.1.19/system-config-printer.py.threading-fixes system-config-printer-1.1.19/system-config-printer.py
--- system-config-printer-1.1.19/system-config-printer.py.threading-fixes	2010-05-18 14:59:00.000000000 +0100
+++ system-config-printer-1.1.19/system-config-printer.py	2010-06-28 16:03:00.742009439 +0100
@@ -3218,7 +3218,9 @@ class GUI(GtkGUI, monitor.Watcher):
         # printers changing 'shared' state, so refresh instead of
         # update.  We have to defer this to prevent signal problems.
         def deferred_refresh ():
+            gtk.gdk.threads_enter ()
             self.populateList ()
+            gtk.gdk.threads_leave ()
             return False
         gobject.idle_add (deferred_refresh)
 
@@ -3537,7 +3539,9 @@ class GUI(GtkGUI, monitor.Watcher):
         monitor.Watcher.printer_event (self, mon, printer, eventname, event)
 
         def deferred_refresh ():
+            gtk.gdk.threads_enter ()
             self.populateList ()
+            gtk.gdk.threads_leave ()
             return False
 
         gtk.gdk.threads_enter ()
@@ -6116,6 +6120,7 @@ class NewPrinterGUI(GtkGUI):
         self.printer_finder = finder
 
     def found_network_printer_callback (self, new_device):
+        gtk.gdk.threads_enter ()
         if new_device:
             self.network_found += 1
             dev = PhysicalDevice (new_device)
@@ -6156,6 +6161,8 @@ class NewPrinterGUI(GtkGUI):
                                                           "found at that "
                                                           "address.") + '</i>')
                 self.lblNetworkFindNotFound.show ()
+
+        gtk.gdk.threads_leave ()
     ###
 
     def getDeviceURI(self):
diff -up system-config-printer-1.1.19/timedops.py.threading-fixes system-config-printer-1.1.19/timedops.py
--- system-config-printer-1.1.19/timedops.py.threading-fixes	2010-01-27 11:17:44.000000000 +0000
+++ system-config-printer-1.1.19/timedops.py	2010-06-28 16:03:00.743009369 +0100
@@ -1,7 +1,8 @@
 #!/usr/bin/env python
 
-## Copyright (C) 2008, 2009 Red Hat, Inc.
-## Copyright (C) 2008, 2009 Tim Waugh <twaugh@redhat.com>
+## Copyright (C) 2008, 2009, 2010 Red Hat, Inc.
+## Authors:
+##  Tim Waugh <twaugh@redhat.com>
 
 ## This program is free software; you can redistribute it and/or modify
 ## it under the terms of the GNU General Public License as published by
@@ -94,6 +95,7 @@ class TimedSubprocess(Timed):
         return True
 
     def show_wait_window (self):
+        gtk.gdk.threads_enter ()
         wait = gtk.MessageDialog (self.parent,
                                   gtk.DIALOG_MODAL |
                                   gtk.DIALOG_DESTROY_WITH_PARENT,
@@ -108,6 +110,7 @@ class TimedSubprocess(Timed):
         wait.format_secondary_text (_("Gathering information"))
         wait.show_all ()
         self.wait_window = wait
+        gtk.gdk.threads_leave ()
         return False
 
     def wait_window_response (self, dialog, response):