-import threading, gtk, gio, gobject
+import threading, gtk, gobject
import lib, profile
class notdone(Exception): pass
self.start()
def value(self):
- buf = bytearray()
- with self.page.open() as st:
- self.p = 0
- self.st = st
- while True:
- read = st.read(1024)
- if read == "":
- break
- self.p += len(read)
- buf.extend(read)
- self.progcb()
- self.st = None
- with gtk.gdk.lock:
- try:
- return gtk.gdk.pixbuf_new_from_stream(gio.memory_input_stream_new_from_data(str(buf)))
- finally:
- gtk.gdk.flush()
+ buf = gtk.gdk.PixbufLoader()
+ try:
+ with self.page.open() as st:
+ self.p = 0
+ self.st = st
+ while True:
+ read = st.read(1024)
+ if read == "":
+ break
+ self.p += len(read)
+ buf.write(read)
+ self.progcb()
+ self.st = None
+ finally:
+ buf.close()
+ return buf.get_pixbuf()
@property
def prog(self):
self._prog = None
def prog(self, p):
- if p is not None and self._prog is None:
- self._prog = gtk.ProgressBar()
+ if p is not None:
+ if self._prog is None:
+ self._prog = gtk.ProgressBar()
+ self.hlay.pack_start(self._prog, padding=5)
+ self._prog.show()
self._prog.set_fraction(p)
- self.hlay.pack_start(self._prog, padding=5)
- self._prog.show()
elif p is None and self._prog is not None:
self.hlay.remove(self._prog)
self._prog = None