save and restore window geometry

This commit is contained in:
Tom Tromey
2015-05-13 21:17:19 -06:00
parent 6d49924a9d
commit ff700b4a97
5 changed files with 55 additions and 26 deletions

View File

@@ -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())

View File

@@ -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))

View File

@@ -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:

View File

@@ -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)

View File

@@ -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):