use before_prompt hook to notify the frame_changed event

This commit is contained in:
Tom Tromey
2015-04-29 11:16:35 -06:00
parent 7ac3f01719
commit 2d1ea6f90c
3 changed files with 41 additions and 3 deletions

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2013 Tom Tromey <tom@tromey.com>
# Copyright (C) 2013, 2015 Tom Tromey <tom@tromey.com>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -20,3 +20,4 @@ self_dir = os.path.abspath(os.path.dirname(__file__))
# Import anything that defines a command or parameter.
import gui.commands
import gui.toplevel
import gui.framecache

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2012, 2013 Tom Tromey <tom@tromey.com>
# Copyright (C) 2012, 2013, 2015 Tom Tromey <tom@tromey.com>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -206,7 +206,10 @@ class TestCommand(gdb.Command):
TestCommand(True)
TestCommand(False).invoke('', 0)
if _can_override:
# See framecache.py - we prefer the before_prompt event if it exists;
# but otherwise try the overriding approach. Both of these rely on a
# hacked gdb :-(
if _can_override and not hasattr(gdb.events, 'before_prompt'):
class Overrider(gdb.Command):
def __init__(self, name, event):
super(Overrider, self).__init__(name, gdb.COMMAND_DATA)

34
gui/framecache.py Normal file
View File

@@ -0,0 +1,34 @@
# Copyright (C) 2015 Tom Tromey <tom@trolley.com>
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
import gdb
import gui.events
_last_selected_frame = None
def check_frame():
global _last_selected_frame
sel = None
try:
sel = gdb.selected_frame()
except:
pass
if _last_selected_frame is not sel:
_last_selected_frame = sel
gui.events.frame_changed.post()
# See my gdb branch on github.
if hasattr(gdb.events, 'before_prompt'):
gdb.events.before_prompt.connect(check_frame)