1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-10 06:37:36 +00:00

GTableView: Fix crash when clicking at random places.

This commit is contained in:
Andreas Kling 2019-05-05 00:58:42 +02:00
parent dc919352b0
commit b7cd6dea13

View file

@ -63,6 +63,7 @@ Rect GTableView::row_rect(int item_index) const
int GTableView::column_width(int column_index) const int GTableView::column_width(int column_index) const
{ {
ASSERT(column_index >= 0 && column_index < model()->column_count());
auto& column_data = this->column_data(column_index); auto& column_data = this->column_data(column_index);
if (!column_data.has_initialized_width) { if (!column_data.has_initialized_width) {
column_data.has_initialized_width = true; column_data.has_initialized_width = true;
@ -73,6 +74,7 @@ int GTableView::column_width(int column_index) const
Rect GTableView::header_rect(int column_index) const Rect GTableView::header_rect(int column_index) const
{ {
ASSERT(column_index >= 0 && column_index < model()->column_count());
if (is_column_hidden(column_index)) if (is_column_hidden(column_index))
return { }; return { };
int x_offset = 0; int x_offset = 0;
@ -91,6 +93,7 @@ Point GTableView::adjusted_position(const Point& position)
Rect GTableView::column_resize_grabbable_rect(int column) const Rect GTableView::column_resize_grabbable_rect(int column) const
{ {
ASSERT(column >= 0 && column < model()->column_count());
auto header_rect = this->header_rect(column); auto header_rect = this->header_rect(column);
return { header_rect.right() - 1, header_rect.top(), 4, header_rect.height() }; return { header_rect.right() - 1, header_rect.top(), 4, header_rect.height() };
} }
@ -150,6 +153,7 @@ void GTableView::mousemove_event(GMouseEvent& event)
if (m_in_column_resize) { if (m_in_column_resize) {
auto delta = event.position() - m_column_resize_origin; auto delta = event.position() - m_column_resize_origin;
int new_width = m_column_resize_original_width + delta.x(); int new_width = m_column_resize_original_width + delta.x();
ASSERT(m_resizing_column >= 0 && m_resizing_column < model()->column_count());
auto& column_data = this->column_data(m_resizing_column); auto& column_data = this->column_data(m_resizing_column);
if (column_data.width != new_width) { if (column_data.width != new_width) {
column_data.width = new_width; column_data.width = new_width;
@ -174,9 +178,11 @@ void GTableView::mouseup_event(GMouseEvent& event)
{ {
auto adjusted_position = this->adjusted_position(event.position()); auto adjusted_position = this->adjusted_position(event.position());
if (event.button() == GMouseButton::Left) { if (event.button() == GMouseButton::Left) {
if (!column_resize_grabbable_rect(m_resizing_column).contains(adjusted_position)) if (m_in_column_resize) {
window()->set_override_cursor(GStandardCursor::None); if (!column_resize_grabbable_rect(m_resizing_column).contains(adjusted_position))
m_in_column_resize = false; window()->set_override_cursor(GStandardCursor::None);
m_in_column_resize = false;
}
} }
} }
@ -374,11 +380,13 @@ GTableView::ColumnData& GTableView::column_data(int column) const
bool GTableView::is_column_hidden(int column) const bool GTableView::is_column_hidden(int column) const
{ {
ASSERT(column >= 0 && column < model()->column_count());
return !column_data(column).visibility; return !column_data(column).visibility;
} }
void GTableView::set_column_hidden(int column, bool hidden) void GTableView::set_column_hidden(int column, bool hidden)
{ {
ASSERT(column >= 0 && column < model()->column_count());
auto& column_data = this->column_data(column); auto& column_data = this->column_data(column);
if (column_data.visibility == !hidden) if (column_data.visibility == !hidden)
return; return;