isi(stackviewer.sc, ScrolledCanvas)
isi(stackviewer.item, stackviewer.StackTreeItem)
isi(stackviewer.node, TreeNode)
+ top = stackviewer.sc.frame.winfo_toplevel()
+ self.assertEqual(top.winfo_class(), 'Idle')
if __name__ == '__main__':
win = window.ListedToplevel(self.root)
self.assertIn(win, window.registry)
self.assertEqual(win.focused_widget, win)
+ self.assertEqual(win.winfo_class(), 'Idle')
+
+ def test_init_class_override(self):
+ win = window.ListedToplevel(self.root, class_='Other')
+ self.assertEqual(win.winfo_class(), 'Other')
if __name__ == '__main__':
return
item = debugobj_r.StubObjectTreeItem(self.rpcclt, oid)
from idlelib.tree import ScrolledCanvas, TreeNode
- top = Toplevel(self.tkconsole.root)
+ top = Toplevel(self.tkconsole.root, class_='Idle')
theme = idleConf.CurrentTheme()
background = idleConf.GetHighlight(theme, 'normal')['background']
sc = ScrolledCanvas(top, bg=background, highlightthickness=0)
def StackBrowser(root, exc, flist=None, top=None):
global sc, item, node # For testing.
if top is None:
- top = tk.Toplevel(root)
+ top = tk.Toplevel(root, class_='Idle')
sc = ScrolledCanvas(top, bg="white", highlightthickness=0)
sc.frame.pack(expand=1, fill="both")
item = StackTreeItem(exc, flist)
class ListedToplevel(Toplevel):
def __init__(self, master, **kw):
+ # Set the WM_CLASS property so that X11 window managers group and
+ # label IDLE's windows under 'Idle' instead of the default
+ # 'Toplevel' (gh-66331). It matches the class name passed to Tk().
+ kw.setdefault('class_', 'Idle')
Toplevel.__init__(self, master, kw)
registry.add(self)
self.focused_widget = self
--- /dev/null
+Set the ``WM_CLASS`` window property of IDLE's windows to ``Idle`` on X11,
+so that window managers group and label them correctly instead of using the
+default ``Toplevel``.