update source windows when objfiles come or go

Fix #27
This commit is contained in:
Tom Tromey
2015-05-20 20:12:44 -06:00
parent 9e116896c6
commit 1ab13b05e5
2 changed files with 30 additions and 0 deletions

View File

@@ -36,6 +36,9 @@ class BufferManager:
self.lang_manager = None self.lang_manager = None
gui.params.source_theme.set_buffer_manager(self) gui.params.source_theme.set_buffer_manager(self)
gui.events.location_changed.connect(self._location_changed) gui.events.location_changed.connect(self._location_changed)
# FIXME - emit a warning if this isn't available.
if hasattr(gdb.events, 'clear_objfiles'):
gdb.events.clear_objfiles.connect(self._clear_objfiles)
def release_buffer(self, buff): def release_buffer(self, buff):
# FIXME: we should be smart about buffer caching. # FIXME: we should be smart about buffer caching.
@@ -113,6 +116,16 @@ class BufferManager:
gui.startup.send_to_gtk(lambda: self.update_breakpoint_location(loc, gui.startup.send_to_gtk(lambda: self.update_breakpoint_location(loc,
is_set)) is_set))
@in_gtk_thread
def _gtk_clear_objfiles(self):
for window in gui.toplevel.state.windows():
window.clear_source()
self.buffers = {}
@in_gdb_thread
def _clear_objfiles(self, ignore):
gui.startup.send_to_gtk(self._gtk_clear_objfiles)
buffer_manager = BufferManager() buffer_manager = BufferManager()
# Return (FRAME, SYMTAB, FILE, LINE) for the selected frame, or, if # Return (FRAME, SYMTAB, FILE, LINE) for the selected frame, or, if
@@ -178,6 +191,8 @@ class LRUHandler:
def _connect_events(self): def _connect_events(self):
gdb.events.stop.connect(self.on_event) gdb.events.stop.connect(self.on_event)
gui.events.frame_changed.connect(self.on_event) gui.events.frame_changed.connect(self.on_event)
if hasattr(gdb.events, 'new_objfile'):
gdb.events.new_objfile.connect(self._new_objfile)
@in_gdb_thread @in_gdb_thread
def _disconnect_events(self): def _disconnect_events(self):
@@ -231,6 +246,11 @@ class LRUHandler:
filename, filename,
lineno)) lineno))
@in_gdb_thread
def _new_objfile(self, event):
if len(gdb.objfiles()) == 1:
self.on_event()
lru_handler = LRUHandler() lru_handler = LRUHandler()
BUTTON_NAMES = ["step", "next", "continue", "finish", "stop", "up", "down"] BUTTON_NAMES = ["step", "next", "continue", "finish", "stop", "up", "down"]
@@ -349,3 +369,9 @@ class SourceWindow(gui.updatewindow.UpdateWindow):
@in_gtk_thread @in_gtk_thread
def set_tab_width(self, width): def set_tab_width(self, width):
self.view.set_tab_width(width) self.view.set_tab_width(width)
@in_gtk_thread
def clear_source(self):
old_buffer = self.view.get_buffer()
self.view.set_buffer(None)
buffer_manager.release_buffer(old_buffer)

View File

@@ -189,3 +189,7 @@ class Toplevel(object):
@in_gtk_thread @in_gtk_thread
def set_tab_width(self, width): def set_tab_width(self, width):
pass pass
@in_gtk_thread
def clear_source(self):
pass