mirror of
https://github.com/tromey/gdb-gui.git
synced 2025-12-15 14:50:06 +01:00
save and restore window geometry
This commit is contained in:
@@ -56,9 +56,6 @@ class DisplayWindow(gui.updatewindow.UpdateWindow):
|
||||
if self.diff:
|
||||
self.tag = self.buffer.create_tag('new', foreground = 'red')
|
||||
|
||||
self.update_title()
|
||||
self.window.show()
|
||||
|
||||
def _update(self, text):
|
||||
self.buffer.delete(self.buffer.get_start_iter(),
|
||||
self.buffer.get_end_iter())
|
||||
|
||||
@@ -27,16 +27,16 @@ default_log_window = None
|
||||
|
||||
class LogWindow(gui.toplevel.Toplevel):
|
||||
def __init__(self):
|
||||
super(LogWindow, self).__init__('log')
|
||||
global default_log_window
|
||||
if default_log_window is not None:
|
||||
default_log_window.default = ''
|
||||
default_log_window = self
|
||||
# For the window title.
|
||||
self.default = ' [Default]'
|
||||
gui.startup.send_to_gtk(self._initialize)
|
||||
super(LogWindow, self).__init__('log')
|
||||
|
||||
def _initialize(self):
|
||||
@in_gtk_thread
|
||||
def gtk_initialize(self):
|
||||
builder = gui.startup.create_builder('logwindow.xml')
|
||||
builder.connect_signals(self)
|
||||
|
||||
@@ -45,9 +45,6 @@ class LogWindow(gui.toplevel.Toplevel):
|
||||
self.view.modify_font(gui.params.font_manager.get_font())
|
||||
self.buffer = builder.get_object('buffer')
|
||||
|
||||
self.update_title()
|
||||
self.window.show()
|
||||
|
||||
@in_gtk_thread
|
||||
def set_font(self, font):
|
||||
self.view.modify_font(Pango.FontDescription(font_name))
|
||||
|
||||
@@ -66,7 +66,8 @@ class BufferManager:
|
||||
self.lang_manager = GtkSource.LanguageManager.get_default()
|
||||
|
||||
buff = GtkSource.Buffer()
|
||||
buff.set_language(self.lang_manager.guess_language(filename))
|
||||
if filename:
|
||||
buff.set_language(self.lang_manager.guess_language(filename))
|
||||
buff.set_style_scheme(gui.params.source_theme.get_scheme())
|
||||
buff.begin_not_undoable_action()
|
||||
try:
|
||||
@@ -161,10 +162,8 @@ class LRUHandler:
|
||||
|
||||
@in_gdb_thread
|
||||
def new_source_window(self):
|
||||
loc = get_current_location()
|
||||
if loc[2] is not None:
|
||||
self.work_location = loc
|
||||
SourceWindow()
|
||||
self.work_location = get_current_location()
|
||||
SourceWindow()
|
||||
|
||||
@in_gdb_thread
|
||||
def on_event(self, *args):
|
||||
@@ -283,9 +282,6 @@ class SourceWindow(gui.updatewindow.UpdateWindow):
|
||||
|
||||
lru_handler.add(self)
|
||||
|
||||
self.update_title()
|
||||
self.window.show()
|
||||
|
||||
@in_gtk_thread
|
||||
def _update_buttons(self, running):
|
||||
for button in BUTTON_NAMES:
|
||||
|
||||
@@ -19,6 +19,7 @@ import gdb
|
||||
import gui.gdbutil
|
||||
import gui.params
|
||||
import gui.startup
|
||||
import gui.storage
|
||||
import threading
|
||||
|
||||
from gi.repository import Pango
|
||||
@@ -31,16 +32,33 @@ class _ToplevelState(object):
|
||||
self.toplevel_lock = threading.Lock()
|
||||
self.next_toplevel = 1
|
||||
self.toplevels = {}
|
||||
self.byclass = {}
|
||||
|
||||
def add(self, obj):
|
||||
def add(self, obj, window_type):
|
||||
with self.toplevel_lock:
|
||||
obj.number = self.next_toplevel
|
||||
self.next_toplevel = self.next_toplevel + 1
|
||||
self.toplevels[obj.number] = obj
|
||||
# Each window also has a window number specific to its
|
||||
# type. Compute this here.
|
||||
if window_type not in self.toplevels:
|
||||
self.byclass[window_type] = []
|
||||
found = None
|
||||
for num in range(len(self.byclass[window_type])):
|
||||
if self.byclass[window_type][num] is None:
|
||||
found = num
|
||||
break
|
||||
if found is None:
|
||||
self.byclass[window_type].append(obj)
|
||||
found = len(self.byclass[window_type])
|
||||
else:
|
||||
self.byclass[found] = obj
|
||||
obj.type_number = found
|
||||
|
||||
def remove(self, obj):
|
||||
with self.toplevel_lock:
|
||||
del self.toplevels[obj.number]
|
||||
self.byclass[obj.type_number] = None
|
||||
|
||||
def get(self, winno):
|
||||
window = None
|
||||
@@ -111,10 +129,38 @@ state = _ToplevelState()
|
||||
|
||||
class Toplevel(object):
|
||||
def __init__(self, window_type):
|
||||
state.add(self)
|
||||
state.add(self, window_type)
|
||||
# The subclass must set this.
|
||||
self.window = None
|
||||
self.window_type = window_type
|
||||
self.storage_name = window_type + '-' + str(self.type_number) + '-geom'
|
||||
gui.startup.send_to_gtk(self._do_gtk_initialize)
|
||||
|
||||
@in_gtk_thread
|
||||
def gtk_initialize(self):
|
||||
"""Subclasses should implement this method to do initialization
|
||||
in the Gtk thread."""
|
||||
pass
|
||||
|
||||
@in_gtk_thread
|
||||
def _do_gtk_initialize(self):
|
||||
self.gtk_initialize()
|
||||
self.window.connect('configure-event', self._on_resize)
|
||||
geom = gui.storage.storage_manager.get(self.storage_name)
|
||||
if geom:
|
||||
self.window.parse_geometry(geom)
|
||||
self.update_title()
|
||||
self.window.show()
|
||||
|
||||
@in_gdb_thread
|
||||
def _save_size(self, geom):
|
||||
gui.storage.storage_manager.set(self.storage_name, geom)
|
||||
|
||||
@in_gtk_thread
|
||||
def _on_resize(self, widget, event):
|
||||
geom = '%dx%d+%d+%d' % (event.width, event.height, event.x, event.y)
|
||||
gdb.post_event(lambda: self._save_size(geom))
|
||||
return False
|
||||
|
||||
def destroy(self):
|
||||
state.remove(self)
|
||||
|
||||
@@ -29,17 +29,10 @@ class UpdateWindow(Toplevel):
|
||||
|
||||
def __init__(self, window_type):
|
||||
super(UpdateWindow, self).__init__(window_type)
|
||||
gui.startup.send_to_gtk(self.gtk_initialize)
|
||||
self._connect_events()
|
||||
# Display the data now.
|
||||
self.on_event()
|
||||
|
||||
@in_gtk_thread
|
||||
def gtk_initialize(self):
|
||||
"""Subclasses should implement this method to do initialization
|
||||
in the Gtk thread."""
|
||||
pass
|
||||
|
||||
# FIXME: really ought to be passing in an event here.
|
||||
@in_gdb_thread
|
||||
def on_event(self):
|
||||
|
||||
Reference in New Issue
Block a user