diff options
Diffstat (limited to 'src/Body.cpp')
-rw-r--r-- | src/Body.cpp | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/src/Body.cpp b/src/Body.cpp index 0971e00..c008c40 100644 --- a/src/Body.cpp +++ b/src/Body.cpp @@ -258,9 +258,9 @@ namespace QuickMedia { if(item != selected_item) selected_scrolled = 0.0f; selected_item = item; + clamp_selection(); if(reset_prev_selected_item) prev_selected_item = selected_item; - clamp_selection(); clamp_selected_item_to_body_count = 1; //page_scroll = 0.0f; } @@ -759,8 +759,6 @@ namespace QuickMedia { if(!items_cut_off_set) items_cut_off = false; - mouse_left_clicked = false; - for(auto it = item_thumbnail_textures.begin(); it != item_thumbnail_textures.end();) { if(!it->second->referenced) { it = item_thumbnail_textures.erase(it); @@ -784,6 +782,14 @@ namespace QuickMedia { loaded_textures_changed = false; malloc_trim(0); } + + mouse_left_clicked = false; + if(clicked_body_item) { + auto clicked_body_item_tmp = clicked_body_item; // tmp because below call to body_item_select_callback may call this same draw function + clicked_body_item = nullptr; + if(body_item_select_callback) + body_item_select_callback(clicked_body_item_tmp.get()); + } } void Body::update_dirty_state(BodyItem *body_item, float width) { @@ -953,12 +959,12 @@ namespace QuickMedia { item_pos.x = std::floor(pos.x); item_pos.y = std::floor(pos.y); - if(body_item_select_callback && mouse_left_clicked) { + if(body_item_select_callback && mouse_left_clicked && !clicked_body_item) { sf::FloatRect item_box(pos, sf::Vector2f(size.x, item_height)); // TODO: Scale mouse_press_pixels_moved_abs with monitor PPI instead of using get_ui_scale() if(item_box.contains(mouse_click_pos) && item_box.contains(mouse_release_pos) && mouse_press_pixels_moved_abs <= 50.0 * get_ui_scale()) { + clicked_body_item = items[item_index]; set_selected_item(item_index, false); - body_item_select_callback(item); } } |