From 183403a271977a26c0b77dbcf62e19395c007288 Mon Sep 17 00:00:00 2001 From: "Kurt B. Kaiser" Date: Sun, 22 Aug 2004 05:14:32 +0000 Subject: 1. If user passes a non-existant filename on the commandline, just open a new file, don't raise a dialog. IDLEfork 954928. 2. Refactor EditorWindow.wakeup() to WindowList.ListedToplevel.wakeup() and clarify that the Toplevel of an EditorWindow is a WindowList.ListedToplevel. 3. Make a number of improvements to keyboard focus binding. Improve window raising, especially in the debugger. IDLEfork Bug 763524 (GvR list). 4. Bump idlever to 1.1a3 M Debugger.py M EditorWindow.py M FileList.py M NEWS.txt M PyShell.py M WindowList.py M idlever.py --- Lib/idlelib/Debugger.py | 5 ++--- Lib/idlelib/EditorWindow.py | 10 ++-------- Lib/idlelib/FileList.py | 38 ++++++++++---------------------------- Lib/idlelib/NEWS.txt | 16 ++++++++++++++++ Lib/idlelib/PyShell.py | 9 +++++---- Lib/idlelib/WindowList.py | 7 ++++--- Lib/idlelib/idlever.py | 2 +- 7 files changed, 40 insertions(+), 47 deletions(-) diff --git a/Lib/idlelib/Debugger.py b/Lib/idlelib/Debugger.py index 75e6cc8..7a9d02f 100644 --- a/Lib/idlelib/Debugger.py +++ b/Lib/idlelib/Debugger.py @@ -84,7 +84,7 @@ class Debugger: pyshell = self.pyshell self.flist = pyshell.flist self.root = root = pyshell.root - self.top = top =ListedToplevel(root) + self.top = top = ListedToplevel(root) self.top.wm_title("Debug Control") self.top.wm_iconname("Debug") top.wm_protocol("WM_DELETE_WINDOW", self.close) @@ -155,7 +155,6 @@ class Debugger: if self.vglobals.get(): self.show_globals() - def interaction(self, message, frame, info=None): self.frame = frame self.status.configure(text=message) @@ -191,7 +190,7 @@ class Debugger: for b in self.buttons: b.configure(state="normal") # - self.top.tkraise() + self.top.wakeup() self.root.mainloop() # for b in self.buttons: diff --git a/Lib/idlelib/EditorWindow.py b/Lib/idlelib/EditorWindow.py index e427479..5d63991 100644 --- a/Lib/idlelib/EditorWindow.py +++ b/Lib/idlelib/EditorWindow.py @@ -75,7 +75,7 @@ class EditorWindow: root = root or flist.root self.root = root self.menubar = Menu(root) - self.top = top = self.Toplevel(root, menu=self.menubar) + self.top = top = WindowList.ListedToplevel(root, menu=self.menubar) if flist: self.tkinter_vars = flist.vars #self.top.instance_dict makes flist.inversedict avalable to @@ -102,6 +102,7 @@ class EditorWindow: 'cursor',fgBg='fg'), width=self.width, height=idleConf.GetOption('main','EditorWindow','height') ) + self.top.focused_widget = self.text self.createmenubar() self.apply_bindings() @@ -236,13 +237,6 @@ class EditorWindow: self.status_bar.set_label('column', 'Col: %s' % column) self.status_bar.set_label('line', 'Ln: %s' % line) - def wakeup(self): - if self.top.wm_state() == "iconic": - self.top.wm_deiconify() - else: - self.top.tkraise() - self.text.focus_set() - menu_specs = [ ("file", "_File"), ("edit", "_Edit"), diff --git a/Lib/idlelib/FileList.py b/Lib/idlelib/FileList.py index 198055a..4b57901 100644 --- a/Lib/idlelib/FileList.py +++ b/Lib/idlelib/FileList.py @@ -1,27 +1,12 @@ -# changes by dscherer@cmu.edu -# - FileList.open() takes an optional 3rd parameter action, which is -# called instead of creating a new EditorWindow. This enables -# things like 'open in same window'. - import os from Tkinter import * import tkMessageBox -import WindowList - -#$ event <> -#$ win -#$ unix - -# (This is labeled as 'Exit'in the File menu) -#$ event <> -#$ win -#$ unix class FileList: - from EditorWindow import EditorWindow - EditorWindow.Toplevel = WindowList.ListedToplevel # XXX Patch it! + from EditorWindow import EditorWindow # class variable, may be overridden + # e.g. by PyShellFileList def __init__(self, root): self.root = root @@ -33,25 +18,22 @@ class FileList: assert filename filename = self.canonize(filename) if os.path.isdir(filename): + # This can happen when bad filename is passed on command line: tkMessageBox.showerror( - "Is A Directory", - "The path %r is a directory." % (filename,), + "File Error", + "%r is a directory." % (filename,), master=self.root) return None key = os.path.normcase(filename) if self.dict.has_key(key): edit = self.dict[key] - edit.wakeup() + edit.top.wakeup() return edit - if not os.path.exists(filename): - tkMessageBox.showinfo( - "New File", - "Opening non-existent file %r" % (filename,), - master=self.root) - if action is None: - return self.EditorWindow(self, filename, key) - else: + if action: + # Don't create window, perform 'action', e.g. open in same window return action(filename) + else: + return self.EditorWindow(self, filename, key) def gotofileline(self, filename, lineno=None): edit = self.open(filename) diff --git a/Lib/idlelib/NEWS.txt b/Lib/idlelib/NEWS.txt index 32657bb..09b6747 100644 --- a/Lib/idlelib/NEWS.txt +++ b/Lib/idlelib/NEWS.txt @@ -1,8 +1,24 @@ +What's New in IDLE 1.1a3? +========================= + +*Release date: 02-SEP-2004* + +- Improve keyboard focus binding, especially in Windows menu. Improve + window raising, especially in the Windows menu and in the debugger. + IDLEfork 763524. + +- If user passes a non-existant filename on the commandline, just + open a new file, don't raise a dialog. IDLEfork 854928. + + What's New in IDLE 1.1a2? ========================= *Release date: 05-AUG-2004* +- EditorWindow.py was not finding the .chm help file on Windows. Typo + at Rev 1.54. Python Bug 990954 + - checking sys.platform for substring 'win' was breaking IDLE docs on Mac (darwin). Also, Mac Safari browser requires full file:// URIs. SF 900580. diff --git a/Lib/idlelib/PyShell.py b/Lib/idlelib/PyShell.py index 5b920b2..313c95d 100644 --- a/Lib/idlelib/PyShell.py +++ b/Lib/idlelib/PyShell.py @@ -96,7 +96,7 @@ linecache.checkcache = extended_linecache_checkcache class PyShellEditorWindow(EditorWindow): - "Regular text edit window when a shell is present" + "Regular text edit window in IDLE, supports breakpoints" def __init__(self, *args): self.breakpoints = [] @@ -258,15 +258,17 @@ class PyShellEditorWindow(EditorWindow): class PyShellFileList(FileList): - "Extend base class: file list when a shell is present" + "Extend base class: IDLE supports a shell and breakpoints" + # override FileList's class variable, instances return PyShellEditorWindow + # instead of EditorWindow when new edit windows are created. EditorWindow = PyShellEditorWindow pyshell = None def open_shell(self, event=None): if self.pyshell: - self.pyshell.wakeup() + self.pyshell.top.wakeup() else: self.pyshell = PyShell(self) if self.pyshell: @@ -802,7 +804,6 @@ class PyShell(OutputWindow): text.bind("<>", self.eof_callback) text.bind("<>", self.open_stack_viewer) text.bind("<>", self.toggle_debugger) - text.bind("<>", self.flist.open_shell) text.bind("<>", self.toggle_jit_stack_viewer) if use_subprocess: text.bind("<>", self.view_restart_mark) diff --git a/Lib/idlelib/WindowList.py b/Lib/idlelib/WindowList.py index ba9f3b3..658502b 100644 --- a/Lib/idlelib/WindowList.py +++ b/Lib/idlelib/WindowList.py @@ -60,6 +60,7 @@ 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) @@ -79,10 +80,10 @@ class ListedToplevel(Toplevel): def wakeup(self): try: if self.wm_state() == "iconic": + self.wm_withdraw() self.wm_deiconify() - else: - self.tkraise() - self.focus_set() + self.tkraise() + self.focused_widget.focus_set() except TclError: # This can happen when the window menu was torn off. # Simply ignore it. diff --git a/Lib/idlelib/idlever.py b/Lib/idlelib/idlever.py index 18f3fe3..8bceaf8 100644 --- a/Lib/idlelib/idlever.py +++ b/Lib/idlelib/idlever.py @@ -1 +1 @@ -IDLE_VERSION = "1.1a2" +IDLE_VERSION = "1.1a3" -- cgit v0.12