Skip to content
This repository was archived by the owner on Feb 13, 2025. It is now read-only.

Commit 894940b

Browse files
authored
[2.7] bpo-34120: fix IDLE freezing after closing dialogs (pythonGH-8603)
Added missing .grab_release() calls to all places where we call .grab_set(). (cherry picked from commit 10ea940)
1 parent 48c8bf2 commit 894940b

File tree

8 files changed

+17
-1
lines changed

8 files changed

+17
-1
lines changed

Lib/idlelib/aboutDialog.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,7 @@ def display_file_text(self, title, filename, encoding=None):
141141
textView.view_file(self, title, fn, encoding)
142142

143143
def Ok(self, event=None):
144+
self.grab_release()
144145
self.destroy()
145146

146147
if __name__ == '__main__':

Lib/idlelib/configDialog.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1197,10 +1197,12 @@ def ActivateConfigChanges(self):
11971197
instance.reset_help_menu_entries()
11981198

11991199
def Cancel(self):
1200+
self.grab_release()
12001201
self.destroy()
12011202

12021203
def Ok(self):
12031204
self.Apply()
1205+
self.grab_release()
12041206
self.destroy()
12051207

12061208
def Apply(self):

Lib/idlelib/configHelpSourceEdit.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,10 +155,12 @@ def Ok(self, event=None):
155155
# Mac Safari insists on using the URI form for local files
156156
self.result = list(self.result)
157157
self.result[1] = "file://" + path
158+
self.grab_release()
158159
self.destroy()
159160

160161
def Cancel(self, event=None):
161162
self.result = None
163+
self.grab_release()
162164
self.destroy()
163165

164166
if __name__ == '__main__':

Lib/idlelib/configSectionNameDialog.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,10 +80,13 @@ def Ok(self, event=None):
8080
name = self.name_ok()
8181
if name:
8282
self.result = name
83+
self.grab_release()
8384
self.destroy()
8485
def Cancel(self, event=None):
8586
self.result = ''
87+
self.grab_release()
8688
self.destroy()
89+
8790
if __name__ == '__main__':
8891
import unittest
8992
unittest.main('idlelib.idle_test.test_config_name', verbosity=2, exit=False)

Lib/idlelib/idle_test/test_config_name.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ class Dummy_name_dialog(object):
1515
name = Var()
1616
result = None
1717
destroyed = False
18+
def grab_release(self):
19+
pass
1820
def destroy(self):
1921
self.destroyed = True
2022

Lib/idlelib/keybindingDialog.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,10 +217,12 @@ def TranslateKey(self, key, modifiers):
217217
def OK(self, event=None):
218218
if self.advanced or self.KeysOK(): # doesn't check advanced string yet
219219
self.result=self.keyString.get()
220+
self.grab_release()
220221
self.destroy()
221222

222223
def Cancel(self, event=None):
223224
self.result=''
225+
self.grab_release()
224226
self.destroy()
225227

226228
def KeysOK(self):

Lib/idlelib/textView.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,8 @@ def __init__(self, parent, title, text, modal=True, _htest=False):
3939
self.textView.insert(0.0, text)
4040
self.textView.config(state=DISABLED)
4141

42-
if modal:
42+
self.is_modal = modal
43+
if self.is_modal:
4344
self.transient(parent)
4445
self.grab_set()
4546
self.wait_window()
@@ -62,6 +63,8 @@ def CreateWidgets(self):
6263
frameText.pack(side=TOP,expand=TRUE,fill=BOTH)
6364

6465
def Ok(self, event=None):
66+
if self.is_modal:
67+
self.grab_release()
6568
self.destroy()
6669

6770

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Fix unresponsiveness after closing certain windows and dialogs.

0 commit comments

Comments
 (0)