Kiln » TortoiseHg » TortoiseHg
Clone URL:  
Pushed to one repository · View In Graph Contained in 0.9, 0.9.1, and 0.9.1.1

gtklib: fix NativeSaveFileDialogWrapper freezing gtk

fixes #636

Changeset 26cac16710fa

Parent 32870097f6b3

by Adrian Buehlmann

Changes to one file · Browse files at 26cac16710fa Showing diff from parent 32870097f6b3 Diff from another changeset...

 
11
12
13
 
14
15
16
 
17
18
19
 
221
222
223
224
225
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
 
 
248
249
250
 
11
12
13
14
15
16
 
17
18
19
20
 
222
223
224
 
 
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
260
261
262
263
264
@@ -11,9 +11,10 @@
 import gtk  import gobject  import pango +import Queue    from tortoisehg.util.i18n import _ -from tortoisehg.util import paths, hglib +from tortoisehg.util import paths, hglib, thread2    from tortoisehg.hgtk import hgtk   @@ -221,30 +222,43 @@
  return self.runCompatible()     def runWindows(self): - import win32gui, win32con, pywintypes - cwd = os.getcwd() + + def rundlg(q): + import win32gui, win32con, pywintypes + cwd = os.getcwd() + fname = None + try: + f = '' + for name, mask in self.filter: + f += '\0'.join([name, mask,'']) + opts = dict(InitialDir=self.initial, + Flags=win32con.OFN_EXPLORER, + File=self.filename, + DefExt=None, + Title=hglib.fromutf(self.title), + Filter= hglib.fromutf(f), + CustomFilter=None, + FilterIndex=self.filterindex) + if self.open: + fname, _, _ = win32gui.GetOpenFileNameW(**opts) + else: + fname, _, _ = win32gui.GetSaveFileNameW(**opts) + if fname: + fname = os.path.abspath(fname) + except pywintypes.error: + pass + os.chdir(cwd) + q.put(fname) + + q = Queue.Queue() + thread = thread2.Thread(target=rundlg, args=(q,)) + thread.start() + while thread.isAlive(): + # let gtk process events while we wait for rundlg finishing + gtk.main_iteration(block=True)   fname = None - try: - f = '' - for name, mask in self.filter: - f += '\0'.join([name, mask,'']) - opts = dict(InitialDir=self.initial, - Flags=win32con.OFN_EXPLORER, - File=self.filename, - DefExt=None, - Title=hglib.fromutf(self.title), - Filter= hglib.fromutf(f), - CustomFilter=None, - FilterIndex=self.filterindex) - if self.open: - fname, _, _ = win32gui.GetOpenFileNameW(**opts) - else: - fname, _, _ = win32gui.GetSaveFileNameW(**opts) - if fname: - fname = os.path.abspath(fname) - except pywintypes.error: - pass - os.chdir(cwd) + if q.qsize(): + fname = q.get(0)   return fname     def runCompatible(self):