mirror of
https://github.com/tromey/gdb-gui.git
synced 2025-12-16 07:10:04 +01:00
save and restore window geometry
This commit is contained in:
@@ -56,9 +56,6 @@ class DisplayWindow(gui.updatewindow.UpdateWindow):
|
|||||||
if self.diff:
|
if self.diff:
|
||||||
self.tag = self.buffer.create_tag('new', foreground = 'red')
|
self.tag = self.buffer.create_tag('new', foreground = 'red')
|
||||||
|
|
||||||
self.update_title()
|
|
||||||
self.window.show()
|
|
||||||
|
|
||||||
def _update(self, text):
|
def _update(self, text):
|
||||||
self.buffer.delete(self.buffer.get_start_iter(),
|
self.buffer.delete(self.buffer.get_start_iter(),
|
||||||
self.buffer.get_end_iter())
|
self.buffer.get_end_iter())
|
||||||
|
|||||||
@@ -27,16 +27,16 @@ default_log_window = None
|
|||||||
|
|
||||||
class LogWindow(gui.toplevel.Toplevel):
|
class LogWindow(gui.toplevel.Toplevel):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
super(LogWindow, self).__init__('log')
|
|
||||||
global default_log_window
|
global default_log_window
|
||||||
if default_log_window is not None:
|
if default_log_window is not None:
|
||||||
default_log_window.default = ''
|
default_log_window.default = ''
|
||||||
default_log_window = self
|
default_log_window = self
|
||||||
# For the window title.
|
# For the window title.
|
||||||
self.default = ' [Default]'
|
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 = gui.startup.create_builder('logwindow.xml')
|
||||||
builder.connect_signals(self)
|
builder.connect_signals(self)
|
||||||
|
|
||||||
@@ -45,9 +45,6 @@ class LogWindow(gui.toplevel.Toplevel):
|
|||||||
self.view.modify_font(gui.params.font_manager.get_font())
|
self.view.modify_font(gui.params.font_manager.get_font())
|
||||||
self.buffer = builder.get_object('buffer')
|
self.buffer = builder.get_object('buffer')
|
||||||
|
|
||||||
self.update_title()
|
|
||||||
self.window.show()
|
|
||||||
|
|
||||||
@in_gtk_thread
|
@in_gtk_thread
|
||||||
def set_font(self, font):
|
def set_font(self, font):
|
||||||
self.view.modify_font(Pango.FontDescription(font_name))
|
self.view.modify_font(Pango.FontDescription(font_name))
|
||||||
|
|||||||
@@ -66,7 +66,8 @@ class BufferManager:
|
|||||||
self.lang_manager = GtkSource.LanguageManager.get_default()
|
self.lang_manager = GtkSource.LanguageManager.get_default()
|
||||||
|
|
||||||
buff = GtkSource.Buffer()
|
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.set_style_scheme(gui.params.source_theme.get_scheme())
|
||||||
buff.begin_not_undoable_action()
|
buff.begin_not_undoable_action()
|
||||||
try:
|
try:
|
||||||
@@ -161,10 +162,8 @@ class LRUHandler:
|
|||||||
|
|
||||||
@in_gdb_thread
|
@in_gdb_thread
|
||||||
def new_source_window(self):
|
def new_source_window(self):
|
||||||
loc = get_current_location()
|
self.work_location = get_current_location()
|
||||||
if loc[2] is not None:
|
SourceWindow()
|
||||||
self.work_location = loc
|
|
||||||
SourceWindow()
|
|
||||||
|
|
||||||
@in_gdb_thread
|
@in_gdb_thread
|
||||||
def on_event(self, *args):
|
def on_event(self, *args):
|
||||||
@@ -283,9 +282,6 @@ class SourceWindow(gui.updatewindow.UpdateWindow):
|
|||||||
|
|
||||||
lru_handler.add(self)
|
lru_handler.add(self)
|
||||||
|
|
||||||
self.update_title()
|
|
||||||
self.window.show()
|
|
||||||
|
|
||||||
@in_gtk_thread
|
@in_gtk_thread
|
||||||
def _update_buttons(self, running):
|
def _update_buttons(self, running):
|
||||||
for button in BUTTON_NAMES:
|
for button in BUTTON_NAMES:
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import gdb
|
|||||||
import gui.gdbutil
|
import gui.gdbutil
|
||||||
import gui.params
|
import gui.params
|
||||||
import gui.startup
|
import gui.startup
|
||||||
|
import gui.storage
|
||||||
import threading
|
import threading
|
||||||
|
|
||||||
from gi.repository import Pango
|
from gi.repository import Pango
|
||||||
@@ -31,16 +32,33 @@ class _ToplevelState(object):
|
|||||||
self.toplevel_lock = threading.Lock()
|
self.toplevel_lock = threading.Lock()
|
||||||
self.next_toplevel = 1
|
self.next_toplevel = 1
|
||||||
self.toplevels = {}
|
self.toplevels = {}
|
||||||
|
self.byclass = {}
|
||||||
|
|
||||||
def add(self, obj):
|
def add(self, obj, window_type):
|
||||||
with self.toplevel_lock:
|
with self.toplevel_lock:
|
||||||
obj.number = self.next_toplevel
|
obj.number = self.next_toplevel
|
||||||
self.next_toplevel = self.next_toplevel + 1
|
self.next_toplevel = self.next_toplevel + 1
|
||||||
self.toplevels[obj.number] = obj
|
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):
|
def remove(self, obj):
|
||||||
with self.toplevel_lock:
|
with self.toplevel_lock:
|
||||||
del self.toplevels[obj.number]
|
del self.toplevels[obj.number]
|
||||||
|
self.byclass[obj.type_number] = None
|
||||||
|
|
||||||
def get(self, winno):
|
def get(self, winno):
|
||||||
window = None
|
window = None
|
||||||
@@ -111,10 +129,38 @@ state = _ToplevelState()
|
|||||||
|
|
||||||
class Toplevel(object):
|
class Toplevel(object):
|
||||||
def __init__(self, window_type):
|
def __init__(self, window_type):
|
||||||
state.add(self)
|
state.add(self, window_type)
|
||||||
# The subclass must set this.
|
# The subclass must set this.
|
||||||
self.window = None
|
self.window = None
|
||||||
self.window_type = window_type
|
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):
|
def destroy(self):
|
||||||
state.remove(self)
|
state.remove(self)
|
||||||
|
|||||||
@@ -29,17 +29,10 @@ class UpdateWindow(Toplevel):
|
|||||||
|
|
||||||
def __init__(self, window_type):
|
def __init__(self, window_type):
|
||||||
super(UpdateWindow, self).__init__(window_type)
|
super(UpdateWindow, self).__init__(window_type)
|
||||||
gui.startup.send_to_gtk(self.gtk_initialize)
|
|
||||||
self._connect_events()
|
self._connect_events()
|
||||||
# Display the data now.
|
# Display the data now.
|
||||||
self.on_event()
|
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.
|
# FIXME: really ought to be passing in an event here.
|
||||||
@in_gdb_thread
|
@in_gdb_thread
|
||||||
def on_event(self):
|
def on_event(self):
|
||||||
|
|||||||
Reference in New Issue
Block a user