Skip to content

Commit

Permalink
[2.7] bpo-34120: fix IDLE freezing after closing dialogs (GH-8603)
Browse files Browse the repository at this point in the history
Added missing .grab_release() calls to all places where we call .grab_set().

(cherry picked from commit 10ea940)
  • Loading branch information
taleinat committed Aug 2, 2018
1 parent 48c8bf2 commit 894940b
Show file tree
Hide file tree
Showing 8 changed files with 17 additions and 1 deletion.
1 change: 1 addition & 0 deletions Lib/idlelib/aboutDialog.py
Expand Up @@ -141,6 +141,7 @@ def display_file_text(self, title, filename, encoding=None):
textView.view_file(self, title, fn, encoding)

def Ok(self, event=None):
self.grab_release()
self.destroy()

if __name__ == '__main__':
Expand Down
2 changes: 2 additions & 0 deletions Lib/idlelib/configDialog.py
Expand Up @@ -1197,10 +1197,12 @@ def ActivateConfigChanges(self):
instance.reset_help_menu_entries()

def Cancel(self):
self.grab_release()
self.destroy()

def Ok(self):
self.Apply()
self.grab_release()
self.destroy()

def Apply(self):
Expand Down
2 changes: 2 additions & 0 deletions Lib/idlelib/configHelpSourceEdit.py
Expand Up @@ -155,10 +155,12 @@ def Ok(self, event=None):
# Mac Safari insists on using the URI form for local files
self.result = list(self.result)
self.result[1] = "file://" + path
self.grab_release()
self.destroy()

def Cancel(self, event=None):
self.result = None
self.grab_release()
self.destroy()

if __name__ == '__main__':
Expand Down
3 changes: 3 additions & 0 deletions Lib/idlelib/configSectionNameDialog.py
Expand Up @@ -80,10 +80,13 @@ def Ok(self, event=None):
name = self.name_ok()
if name:
self.result = name
self.grab_release()
self.destroy()
def Cancel(self, event=None):
self.result = ''
self.grab_release()
self.destroy()

if __name__ == '__main__':
import unittest
unittest.main('idlelib.idle_test.test_config_name', verbosity=2, exit=False)
Expand Down
2 changes: 2 additions & 0 deletions Lib/idlelib/idle_test/test_config_name.py
Expand Up @@ -15,6 +15,8 @@ class Dummy_name_dialog(object):
name = Var()
result = None
destroyed = False
def grab_release(self):
pass
def destroy(self):
self.destroyed = True

Expand Down
2 changes: 2 additions & 0 deletions Lib/idlelib/keybindingDialog.py
Expand Up @@ -217,10 +217,12 @@ def TranslateKey(self, key, modifiers):
def OK(self, event=None):
if self.advanced or self.KeysOK(): # doesn't check advanced string yet
self.result=self.keyString.get()
self.grab_release()
self.destroy()

def Cancel(self, event=None):
self.result=''
self.grab_release()
self.destroy()

def KeysOK(self):
Expand Down
5 changes: 4 additions & 1 deletion Lib/idlelib/textView.py
Expand Up @@ -39,7 +39,8 @@ def __init__(self, parent, title, text, modal=True, _htest=False):
self.textView.insert(0.0, text)
self.textView.config(state=DISABLED)

if modal:
self.is_modal = modal
if self.is_modal:
self.transient(parent)
self.grab_set()
self.wait_window()
Expand All @@ -62,6 +63,8 @@ def CreateWidgets(self):
frameText.pack(side=TOP,expand=TRUE,fill=BOTH)

def Ok(self, event=None):
if self.is_modal:
self.grab_release()
self.destroy()


Expand Down
@@ -0,0 +1 @@
Fix unresponsiveness after closing certain windows and dialogs.

0 comments on commit 894940b

Please sign in to comment.