Ошибка сегментации в FXRuby после двойного щелчка в ячейке FXTable
Я пишу приложение на FXRuby, в котором я использую контроллер для переключения экранов. На одном экране у меня есть таблица, к которой я подключил обработчик событий для двойного щелчка.
При двойном щелчке по ячейке в таблице после переключения экранов (в основном удаляя текущего дочернего элемента из родительского и заменяя его новым), я получаю ошибку сегмента.
Если событие происходит от нажатия кнопки или нажатия на пустую область в таблице, оно успешно завершает действие. Только двойной щелчок по ячейке приводит к проблеме.
Код ниже показывает проблему. Если я дважды нажму на одну из ячеек, она будет сброшена.
Почему я получаю сегфо?
require 'fox16'
require 'singleton'
include Fox
class Controller
include Singleton
attr_accessor :display_window
def switch_screen(screen_class, create = true)
if @current_window
display_window.removeChild(@current_window)
end
@current_window = screen_class.new(display_window)
display_window.create if create
end
end
class Screen1 < FXVerticalFrame
def initialize(parent)
super(parent, opts: LAYOUT_FILL)
button = FXButton.new(self, "Next")
button.connect(SEL_COMMAND) {|sender, selector, data|
Controller.instance.switch_screen(Screen2)
}
table = FXTable.new(self, opts: LAYOUT_FILL|TABLE_READONLY|TABLE_NO_COLSELECT|TABLE_NO_ROWSELECT)
table.setTableSize(1, 2)
table.setItemText(0, 0, "Test")
table.setItemText(0, 1, "Test")
table.connect(SEL_DOUBLECLICKED) {|sender, selector, data|
Controller.instance.switch_screen(Screen2)
}
end
end
class Screen2 < FXVerticalFrame
def initialize(parent)
super(parent, opts: LAYOUT_FILL)
button = FXButton.new(self, "Back")
button.connect(SEL_COMMAND) {|sender, selector, data|
Controller.instance.switch_screen(Screen1)
}
end
end
class BAPITest < FXMainWindow
def initialize(app)
super(app, "Test App", width: 800, height: 600)
@top_window = FXVerticalFrame.new(self, opts: LAYOUT_FILL)
controller = Controller.instance
controller.display_window = @top_window
controller.switch_screen(Screen1, false)
end
def create
super
show(PLACEMENT_SCREEN)
end
end
if __FILE__ == $0
FXApp.new do |app|
BAPITest.new(app)
app.create
app.run
end
end