From a361e89d5ae3daefe9e8b8a7e889cd2ad8c45b77 Mon Sep 17 00:00:00 2001 From: Terry Jan Reedy Date: Wed, 20 Jun 2018 21:25:59 -0400 Subject: bpo-33906: Rename idlelib.windows as window (#7833) Match Window on the main menu and remove last plural module name. Change imports, test, and attribute references to match new name. --- Lib/idlelib/browser.py | 2 +- Lib/idlelib/debugger.py | 4 +- Lib/idlelib/editor.py | 14 ++--- Lib/idlelib/idle_test/test_config.py | 4 +- Lib/idlelib/idle_test/test_window.py | 45 ++++++++++++++++ Lib/idlelib/idle_test/test_windows.py | 45 ---------------- Lib/idlelib/macosx.py | 2 +- Lib/idlelib/window.py | 97 +++++++++++++++++++++++++++++++++++ Lib/idlelib/windows.py | 97 ----------------------------------- 9 files changed, 155 insertions(+), 155 deletions(-) create mode 100644 Lib/idlelib/idle_test/test_window.py delete mode 100644 Lib/idlelib/idle_test/test_windows.py create mode 100644 Lib/idlelib/window.py delete mode 100644 Lib/idlelib/windows.py (limited to 'Lib') diff --git a/Lib/idlelib/browser.py b/Lib/idlelib/browser.py index 447dafcc51..234883fe86 100644 --- a/Lib/idlelib/browser.py +++ b/Lib/idlelib/browser.py @@ -16,7 +16,7 @@ import sys from idlelib.config import idleConf from idlelib import pyshell from idlelib.tree import TreeNode, TreeItem, ScrolledCanvas -from idlelib.windows import ListedToplevel +from idlelib.window import ListedToplevel file_open = None # Method...Item and Class...Item use this. diff --git a/Lib/idlelib/debugger.py b/Lib/idlelib/debugger.py index 477b514180..09f912c9af 100644 --- a/Lib/idlelib/debugger.py +++ b/Lib/idlelib/debugger.py @@ -6,7 +6,7 @@ from tkinter.ttk import Scrollbar from idlelib import macosx from idlelib.scrolledlist import ScrolledList -from idlelib.windows import ListedToplevel +from idlelib.window import ListedToplevel class Idb(bdb.Bdb): @@ -40,7 +40,7 @@ class Idb(bdb.Bdb): prev_name = prev_frame.f_code.co_filename if 'idlelib' in prev_name and 'debugger' in prev_name: # catch both idlelib/debugger.py and idlelib/debugger_r.py - # on both posix and windows + # on both Posix and Windows return False return self.in_rpc_code(prev_frame) diff --git a/Lib/idlelib/editor.py b/Lib/idlelib/editor.py index b46316569d..3f034f8810 100644 --- a/Lib/idlelib/editor.py +++ b/Lib/idlelib/editor.py @@ -25,7 +25,7 @@ from idlelib import pyparse from idlelib import query from idlelib import replace from idlelib import search -from idlelib import windows +from idlelib import window # The default tab setting for a Text widget, in average-width characters. TK_TABWIDTH_DEFAULT = 8 @@ -101,7 +101,7 @@ class EditorWindow(object): root = root or flist.root self.root = root self.menubar = Menu(root) - self.top = top = windows.ListedToplevel(root, menu=self.menubar) + self.top = top = window.ListedToplevel(root, menu=self.menubar) if flist: self.tkinter_vars = flist.vars #self.top.instance_dict makes flist.inversedict available to @@ -138,7 +138,7 @@ class EditorWindow(object): self.top.protocol("WM_DELETE_WINDOW", self.close) self.top.bind("<>", self.close_event) if macosx.isAquaTk(): - # Command-W on editorwindows doesn't work without this. + # Command-W on editor windows doesn't work without this. text.bind('<>', self.close_event) # Some OS X systems have only one mouse button, so use # control-click for popup context menus there. For two @@ -276,7 +276,7 @@ class EditorWindow(object): menu.add_separator() end = end + 1 self.wmenu_end = end - windows.register_callback(self.postwindowsmenu) + window.register_callback(self.postwindowsmenu) # Some abstractions so IDLE extensions are cross-IDE self.askyesno = tkMessageBox.askyesno @@ -436,14 +436,14 @@ class EditorWindow(object): self.reset_help_menu_entries() def postwindowsmenu(self): - # Only called when Windows menu exists + # Only called when Window menu exists menu = self.menudict['windows'] end = menu.index("end") if end is None: end = -1 if end > self.wmenu_end: menu.delete(self.wmenu_end+1, end) - windows.add_windows_to_menu(menu) + window.add_windows_to_menu(menu) def handle_yview(self, event, *args): "Handle scrollbar." @@ -1012,7 +1012,7 @@ class EditorWindow(object): def _close(self): if self.io.filename: self.update_recent_files_list(new_file=self.io.filename) - windows.unregister_callback(self.postwindowsmenu) + window.unregister_callback(self.postwindowsmenu) self.unload_extensions() self.io.close() self.io = None diff --git a/Lib/idlelib/idle_test/test_config.py b/Lib/idlelib/idle_test/test_config.py index e6f553d484..f3d9f21dd8 100644 --- a/Lib/idlelib/idle_test/test_config.py +++ b/Lib/idlelib/idle_test/test_config.py @@ -255,9 +255,9 @@ class IdleConfTest(unittest.TestCase): with self.assertRaises(FileNotFoundError): conf.GetUserCfgDir() - @unittest.skipIf(not sys.platform.startswith('win'), 'this is test for windows system') + @unittest.skipIf(not sys.platform.startswith('win'), 'this is test for Windows system') def test_get_user_cfg_dir_windows(self): - "Test to get user config directory under windows" + "Test to get user config directory under Windows" conf = self.new_config(_utest=True) # Check normal way should success diff --git a/Lib/idlelib/idle_test/test_window.py b/Lib/idlelib/idle_test/test_window.py new file mode 100644 index 0000000000..5a2645b9cc --- /dev/null +++ b/Lib/idlelib/idle_test/test_window.py @@ -0,0 +1,45 @@ +"Test window, coverage 47%." + +from idlelib import window +import unittest +from test.support import requires +from tkinter import Tk + + +class WindowListTest(unittest.TestCase): + + def test_init(self): + wl = window.WindowList() + self.assertEqual(wl.dict, {}) + self.assertEqual(wl.callbacks, []) + + # Further tests need mock Window. + + +class ListedToplevelTest(unittest.TestCase): + + @classmethod + def setUpClass(cls): + window.registry = set() + requires('gui') + cls.root = Tk() + cls.root.withdraw() + + @classmethod + def tearDownClass(cls): + window.registry = window.WindowList() + cls.root.update_idletasks() +## for id in cls.root.tk.call('after', 'info'): +## cls.root.after_cancel(id) # Need for EditorWindow. + cls.root.destroy() + del cls.root + + def test_init(self): + + win = window.ListedToplevel(self.root) + self.assertIn(win, window.registry) + self.assertEqual(win.focused_widget, win) + + +if __name__ == '__main__': + unittest.main(verbosity=2) diff --git a/Lib/idlelib/idle_test/test_windows.py b/Lib/idlelib/idle_test/test_windows.py deleted file mode 100644 index 425a5691f9..0000000000 --- a/Lib/idlelib/idle_test/test_windows.py +++ /dev/null @@ -1,45 +0,0 @@ -"Test windows, coverage 47%." - -from idlelib import windows -import unittest -from test.support import requires -from tkinter import Tk - - -class WindowListTest(unittest.TestCase): - - def test_init(self): - wl = windows.WindowList() - self.assertEqual(wl.dict, {}) - self.assertEqual(wl.callbacks, []) - - # Further tests need mock Window. - - -class ListedToplevelTest(unittest.TestCase): - - @classmethod - def setUpClass(cls): - windows.registry = set() - requires('gui') - cls.root = Tk() - cls.root.withdraw() - - @classmethod - def tearDownClass(cls): - windows.registry = windows.WindowList() - cls.root.update_idletasks() -## for id in cls.root.tk.call('after', 'info'): -## cls.root.after_cancel(id) # Need for EditorWindow. - cls.root.destroy() - del cls.root - - def test_init(self): - - win = windows.ListedToplevel(self.root) - self.assertIn(win, windows.registry) - self.assertEqual(win.focused_widget, win) - - -if __name__ == '__main__': - unittest.main(verbosity=2) diff --git a/Lib/idlelib/macosx.py b/Lib/idlelib/macosx.py index d85278a0b7..3d296123d5 100644 --- a/Lib/idlelib/macosx.py +++ b/Lib/idlelib/macosx.py @@ -128,7 +128,7 @@ def overrideRootMenu(root, flist): # menu. from tkinter import Menu from idlelib import mainmenu - from idlelib import windows + from idlelib import window closeItem = mainmenu.menudefs[0][1][-2] diff --git a/Lib/idlelib/window.py b/Lib/idlelib/window.py new file mode 100644 index 0000000000..b2488b28ca --- /dev/null +++ b/Lib/idlelib/window.py @@ -0,0 +1,97 @@ +from tkinter import * + + +class WindowList: + + def __init__(self): + self.dict = {} + self.callbacks = [] + + def add(self, window): + window.after_idle(self.call_callbacks) + self.dict[str(window)] = window + + def delete(self, window): + try: + del self.dict[str(window)] + except KeyError: + # Sometimes, destroy() is called twice + pass + self.call_callbacks() + + def add_windows_to_menu(self, menu): + list = [] + for key in self.dict: + window = self.dict[key] + try: + title = window.get_title() + except TclError: + continue + list.append((title, key, window)) + list.sort() + for title, key, window in list: + menu.add_command(label=title, command=window.wakeup) + + def register_callback(self, callback): + self.callbacks.append(callback) + + def unregister_callback(self, callback): + try: + self.callbacks.remove(callback) + except ValueError: + pass + + def call_callbacks(self): + for callback in self.callbacks: + try: + callback() + except: + t, v, tb = sys.exc_info() + print("warning: callback failed in WindowList", t, ":", v) + + +registry = WindowList() + +add_windows_to_menu = registry.add_windows_to_menu +register_callback = registry.register_callback +unregister_callback = registry.unregister_callback + + +class ListedToplevel(Toplevel): + + def __init__(self, master, **kw): + Toplevel.__init__(self, master, kw) + registry.add(self) + self.focused_widget = self + + def destroy(self): + registry.delete(self) + Toplevel.destroy(self) + # If this is Idle's last window then quit the mainloop + # (Needed for clean exit on Windows 98) + if not registry.dict: + self.quit() + + def update_windowlist_registry(self, window): + registry.call_callbacks() + + def get_title(self): + # Subclass can override + return self.wm_title() + + def wakeup(self): + try: + if self.wm_state() == "iconic": + self.wm_withdraw() + self.wm_deiconify() + self.tkraise() + self.focused_widget.focus_set() + except TclError: + # This can happen when the Window menu was torn off. + # Simply ignore it. + pass + + +if __name__ == "__main__": + from unittest import main + main('idlelib.idle_test.test_window', verbosity=2) diff --git a/Lib/idlelib/windows.py b/Lib/idlelib/windows.py deleted file mode 100644 index b1e50384e9..0000000000 --- a/Lib/idlelib/windows.py +++ /dev/null @@ -1,97 +0,0 @@ -from tkinter import * - - -class WindowList: - - def __init__(self): - self.dict = {} - self.callbacks = [] - - def add(self, window): - window.after_idle(self.call_callbacks) - self.dict[str(window)] = window - - def delete(self, window): - try: - del self.dict[str(window)] - except KeyError: - # Sometimes, destroy() is called twice - pass - self.call_callbacks() - - def add_windows_to_menu(self, menu): - list = [] - for key in self.dict: - window = self.dict[key] - try: - title = window.get_title() - except TclError: - continue - list.append((title, key, window)) - list.sort() - for title, key, window in list: - menu.add_command(label=title, command=window.wakeup) - - def register_callback(self, callback): - self.callbacks.append(callback) - - def unregister_callback(self, callback): - try: - self.callbacks.remove(callback) - except ValueError: - pass - - def call_callbacks(self): - for callback in self.callbacks: - try: - callback() - except: - t, v, tb = sys.exc_info() - print("warning: callback failed in WindowList", t, ":", v) - - -registry = WindowList() - -add_windows_to_menu = registry.add_windows_to_menu -register_callback = registry.register_callback -unregister_callback = registry.unregister_callback - - -class ListedToplevel(Toplevel): - - def __init__(self, master, **kw): - Toplevel.__init__(self, master, kw) - registry.add(self) - self.focused_widget = self - - def destroy(self): - registry.delete(self) - Toplevel.destroy(self) - # If this is Idle's last window then quit the mainloop - # (Needed for clean exit on Windows 98) - if not registry.dict: - self.quit() - - def update_windowlist_registry(self, window): - registry.call_callbacks() - - def get_title(self): - # Subclass can override - return self.wm_title() - - def wakeup(self): - try: - if self.wm_state() == "iconic": - self.wm_withdraw() - self.wm_deiconify() - self.tkraise() - self.focused_widget.focus_set() - except TclError: - # This can happen when the window menu was torn off. - # Simply ignore it. - pass - - -if __name__ == "__main__": - from unittest import main - main('idlelib.idle_test.test_windows', verbosity=2) -- cgit v1.2.1