diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py index 6dd4d79337371d..e08268fde25799 100644 --- a/Lib/idlelib/idle_test/test_searchbase.py +++ b/Lib/idlelib/idle_test/test_searchbase.py @@ -4,7 +4,7 @@ import unittest from test.support import requires -from tkinter import Tk +from tkinter import Text, Tk, Toplevel from tkinter.ttk import Frame from idlelib import searchengine as se from idlelib import searchbase as sdb @@ -47,14 +47,15 @@ def test_open_and_close(self): # open calls create_widgets, which needs default_command self.dialog.default_command = None - # Since text parameter of .open is not used in base class, - # pass dummy 'text' instead of tk.Text(). - self.dialog.open('text') + toplevel = Toplevel(self.root) + self.addCleanup(toplevel.destroy) + text = Text(toplevel) + self.dialog.open(text) self.assertEqual(self.dialog.top.state(), 'normal') self.dialog.close() self.assertEqual(self.dialog.top.state(), 'withdrawn') - self.dialog.open('text', searchphrase="hello") + self.dialog.open(text, searchphrase="hello") self.assertEqual(self.dialog.ent.get(), 'hello') self.dialog.close() diff --git a/Lib/idlelib/searchbase.py b/Lib/idlelib/searchbase.py index 4ed94f186b048d..6fba0b8e583f2b 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -54,6 +54,7 @@ def open(self, text, searchphrase=None): else: self.top.deiconify() self.top.tkraise() + self.top.transient(text.winfo_toplevel()) if searchphrase: self.ent.delete(0,"end") self.ent.insert("end",searchphrase) @@ -66,6 +67,7 @@ def close(self, event=None): "Put dialog away for later use." if self.top: self.top.grab_release() + self.top.transient('') self.top.withdraw() def create_widgets(self): diff --git a/Misc/NEWS.d/next/IDLE/2019-06-07-00-17-41.bpo-37177.voU6pQ.rst b/Misc/NEWS.d/next/IDLE/2019-06-07-00-17-41.bpo-37177.voU6pQ.rst new file mode 100644 index 00000000000000..74e48eef89a621 --- /dev/null +++ b/Misc/NEWS.d/next/IDLE/2019-06-07-00-17-41.bpo-37177.voU6pQ.rst @@ -0,0 +1,2 @@ +Properly 'attach' search dialogs to their main window so that they behave +like other dialogs and do not get hidden behind their main window.