From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tom Tromey To: Keith Seitz Cc: Insight List Subject: Re: Patch: operate-and-get-next Date: Fri, 28 Sep 2001 10:19:00 -0000 Message-id: <87snd7rzni.fsf@creche.redhat.com> References: X-SW-Source: 2001-q3/msg00301.html >>>>> "Keith" == Keith Seitz writes: Keith> (Try up/down in the console window. It doesn't work properly.) I looked into this a bit. It turns out we already have some of the machinery in place to make it work correctly. All that remains is making selected_frame_level_changed_hook do a little more work. I came up with the appended patch. Unfortunately, if you try this patch you'll see weird behavior. When you first run your program the source window will go through a few gyrations, first displaying nothing, then briefly (for me anyway) displaying some assembly, before finally settling on the breakpoint on main(). I think this is distracting enough to make this patch not acceptable :-(. I really don't know how to fix it. (Checking that gdb_selected_frame_level != -1 in gdbtk_tcl_selected_frame_changed helps, but still doesn't suffice.) Any ideas? Tom Index: ChangeLog from Tom Tromey * library/stackwin.itb (StackWin::change_frame): Don't call gdbtk_update. * library/srcwin.itb (SrcWin::stack): Don't call gdbtk_update. * generic/gdbtk-hooks.c (gdbtk_selected_frame_changed): Invoke gdbtk_tcl_selected_frame_changed. * library/interface.tcl (gdbtk_tcl_selected_frame_changed): New proc. Index: generic/gdbtk-hooks.c =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/generic/gdbtk-hooks.c,v retrieving revision 1.18 diff -u -r1.18 gdbtk-hooks.c --- generic/gdbtk-hooks.c 2001/08/16 15:48:14 1.18 +++ generic/gdbtk-hooks.c 2001/09/28 17:10:24 @@ -769,6 +769,7 @@ int level; { Tcl_UpdateLinkedVar (gdbtk_interp, "gdb_selected_frame_level"); + Tcl_GlobalEval (gdbtk_interp, "gdbtk_tcl_selected_frame_changed"); } /* Called when the current thread changes. */ Index: library/interface.tcl =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/library/interface.tcl,v retrieving revision 1.29 diff -u -r1.29 interface.tcl --- library/interface.tcl 2001/08/13 18:30:36 1.29 +++ library/interface.tcl 2001/09/28 17:10:25 @@ -1751,3 +1751,8 @@ GDBEventHandler::dispatch $e delete object $e } + +# The selected frame changed. Inform the UI. +proc gdbtk_tcl_selected_frame_changed {} { + gdbtk_update +} Index: library/srcwin.itb =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/library/srcwin.itb,v retrieving revision 1.16 diff -u -r1.16 srcwin.itb --- library/srcwin.itb 2001/08/24 00:11:06 1.16 +++ library/srcwin.itb 2001/09/28 17:10:26 @@ -480,7 +480,6 @@ if {[catch {gdb_cmd "$cmd"} message]} { dbug E "STACK ERROR: $message" } - gdbtk_update gdbtk_idle } Index: library/stackwin.itb =================================================================== RCS file: /cvs/src/src/gdb/gdbtk/library/stackwin.itb,v retrieving revision 1.5 diff -u -r1.5 stackwin.itb --- library/stackwin.itb 2001/08/20 19:14:09 1.5 +++ library/stackwin.itb 2001/09/28 17:10:26 @@ -120,11 +120,6 @@ set size [$itk_component(slb) size] set frame_num [expr {$size - $sel - 1}] catch {gdb_cmd "frame $frame_num"} - - # Run idle hooks and cause all widgets to update - set protect_me 1 - gdbtk_update - set protect_me 0 gdbtk_idle } }