From 554450fb4e95066e825bdb4a2d544a490daeebdc Mon Sep 17 00:00:00 2001 From: Tal Einat Date: Fri, 7 Jun 2019 08:54:40 +0300 Subject: [PATCH] bpo-37177: make IDLE's search dialogs transient (GH-13869) This avoids the search dialogs being hidden behind the editor window. --- Lib/idlelib/idle_test/test_searchbase.py | 11 ++++++----- Lib/idlelib/searchbase.py | 2 ++ .../IDLE/2019-06-07-00-17-41.bpo-37177.voU6pQ.rst | 2 ++ 3 files changed, 10 insertions(+), 5 deletions(-) create mode 100644 Misc/NEWS.d/next/IDLE/2019-06-07-00-17-41.bpo-37177.voU6pQ.rst diff --git a/Lib/idlelib/idle_test/test_searchbase.py b/Lib/idlelib/idle_test/test_searchbase.py index 6dd4d79337..e08268fde2 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 @@ class SearchDialogBaseTest(unittest.TestCase): # 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 4ed94f186b..6fba0b8e58 100644 --- a/Lib/idlelib/searchbase.py +++ b/Lib/idlelib/searchbase.py @@ -54,6 +54,7 @@ class SearchDialogBase: 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 @@ class SearchDialogBase: "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 0000000000..74e48eef89 --- /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. -- 2.40.0