فهرست منبع

LibGUI: Determine model index from a content position in ColumnsView

We didn't take the scroll value into account when we were converting
a position to an index, which basically prevented us from selecting a
desired file if a list wasn't small enough to fit entirely in the widget
box.
Karol Kosek 2 سال پیش
والد
کامیت
e673fc4183
1فایلهای تغییر یافته به همراه8 افزوده شده و 8 حذف شده
  1. 8 8
      Userland/Libraries/LibGUI/ColumnsView.cpp

+ 8 - 8
Userland/Libraries/LibGUI/ColumnsView.cpp

@@ -241,13 +241,11 @@ void ColumnsView::update_column_sizes()
     set_content_size({ total_width, total_height });
     set_content_size({ total_width, total_height });
 }
 }
 
 
-Optional<ColumnsView::Column> ColumnsView::column_at_event_position(Gfx::IntPoint a_position) const
+Optional<ColumnsView::Column> ColumnsView::column_at_event_position(Gfx::IntPoint position) const
 {
 {
     if (!model())
     if (!model())
         return {};
         return {};
 
 
-    auto position = a_position.translated(horizontal_scrollbar().value() - frame_thickness(), vertical_scrollbar().value() - frame_thickness());
-
     int column_x = 0;
     int column_x = 0;
 
 
     for (auto const& column : m_columns) {
     for (auto const& column : m_columns) {
@@ -288,8 +286,9 @@ ModelIndex ColumnsView::index_at_event_position_in_column(Gfx::IntPoint position
     return model()->index(row, m_model_column, column.parent_index);
     return model()->index(row, m_model_column, column.parent_index);
 }
 }
 
 
-ModelIndex ColumnsView::index_at_event_position(Gfx::IntPoint position) const
+ModelIndex ColumnsView::index_at_event_position(Gfx::IntPoint widget_position) const
 {
 {
+    auto position = to_content_position(widget_position);
     auto const& column = column_at_event_position(position);
     auto const& column = column_at_event_position(position);
     if (!column.has_value())
     if (!column.has_value())
         return {};
         return {};
@@ -307,11 +306,12 @@ void ColumnsView::mousedown_event(MouseEvent& event)
     if (event.button() != MouseButton::Primary)
     if (event.button() != MouseButton::Primary)
         return;
         return;
 
 
-    auto column = column_at_event_position(event.position());
+    auto position = to_content_position(event.position());
+    auto column = column_at_event_position(position);
     if (!column.has_value())
     if (!column.has_value())
         return;
         return;
 
 
-    auto index = index_at_event_position_in_column(event.position(), *column);
+    auto index = index_at_event_position_in_column(position, *column);
     if (index.is_valid() && !(event.modifiers() & Mod_Ctrl)) {
     if (index.is_valid() && !(event.modifiers() & Mod_Ctrl)) {
         if (model()->row_count(index))
         if (model()->row_count(index))
             push_column(index);
             push_column(index);
@@ -321,8 +321,8 @@ void ColumnsView::mousedown_event(MouseEvent& event)
     if (selection_mode() == SelectionMode::MultiSelection) {
     if (selection_mode() == SelectionMode::MultiSelection) {
         m_rubber_banding = true;
         m_rubber_banding = true;
         m_rubber_band_origin_column = *column;
         m_rubber_band_origin_column = *column;
-        m_rubber_band_origin = event.position().y();
-        m_rubber_band_current = event.position().y();
+        m_rubber_band_origin = position.y();
+        m_rubber_band_current = position.y();
     }
     }
 }
 }