void ViewWidget::mouse_left_release_event(QMouseEvent *event) { assert(event); auto items = this->items(); const bool ctrl_pressed = QApplication::keyboardModifiers() & Qt::ControlModifier; // Unselect everything if control is not pressed const shared_ptr<ViewItem> mouse_over = get_mouse_over_item(event->pos()); for (auto &i : items) i->drag_release(); if (item_dragging_) view_.restack_all_trace_tree_items(); else { if (!ctrl_pressed) { for (shared_ptr<ViewItem> i : items) if (mouse_down_item_ != i) i->select(false); if (mouse_down_item_) item_clicked(mouse_down_item_); } } item_dragging_ = false; }
static gboolean on_idle_tree_view_row_activated(FmFolderView* fv) { GtkTreePath* path; if(gtk_tree_row_reference_valid(fv->activated_row_ref)) { path = gtk_tree_row_reference_get_path(fv->activated_row_ref); item_clicked(fv, path, FM_FV_ACTIVATED); } gtk_tree_row_reference_free(fv->activated_row_ref); fv->activated_row_ref = NULL; fv->row_activated_idle = 0; return FALSE; }
gboolean on_btn_pressed(GtkWidget* view, GdkEventButton* evt, FmFolderView* fv) { GList* sels; FmFolderViewClickType type = 0; GtkTreePath* tp; if(!fv->model) return FALSE; /* FIXME: handle single click activation */ if( evt->type == GDK_BUTTON_PRESS ) { /* special handling for ExoIconView */ if(evt->button != 1) { if(fv->mode==FM_FV_ICON_VIEW || fv->mode==FM_FV_COMPACT_VIEW || fv->mode==FM_FV_THUMBNAIL_VIEW) { /* select the item on right click for ExoIconView */ if(exo_icon_view_get_item_at_pos(EXO_ICON_VIEW(view), evt->x, evt->y, &tp, NULL)) { /* if the hit item is not currently selected */ if(!exo_icon_view_path_is_selected(EXO_ICON_VIEW(view), tp)) { sels = exo_icon_view_get_selected_items((const struct ExoIconView *)(const struct ExoIconView *)view); if( sels ) /* if there are selected items */ { exo_icon_view_unselect_all(EXO_ICON_VIEW(view)); /* unselect all items */ g_list_foreach(sels, (GFunc)gtk_tree_path_free, NULL); g_list_free(sels); } exo_icon_view_select_path(EXO_ICON_VIEW(view), tp); exo_icon_view_set_cursor(EXO_ICON_VIEW(view), tp, NULL, FALSE); } gtk_tree_path_free(tp); } } else if( fv->mode == FM_FV_LIST_VIEW && evt->window == gtk_tree_view_get_bin_window(GTK_TREE_VIEW(view))) { /* special handling for ExoTreeView */ /* Fix #2986834: MAJOR PROBLEM: Deletes Wrong File Frequently. */ GtkTreeViewColumn* col; if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), evt->x, evt->y, &tp, &col, NULL, NULL)) { GtkTreeSelection* tree_sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(view)); if(!gtk_tree_selection_path_is_selected(tree_sel, tp)) { gtk_tree_selection_unselect_all(tree_sel); if(col == exo_tree_view_get_activable_column(EXO_TREE_VIEW(view))) { gtk_tree_selection_select_path(tree_sel, tp); gtk_tree_view_set_cursor(GTK_TREE_VIEW(view), tp, NULL, FALSE); } } gtk_tree_path_free(tp); } } } if(evt->button == 2) /* middle click */ type = FM_FV_MIDDLE_CLICK; else if(evt->button == 3) /* right click */ type = FM_FV_CONTEXT_MENU; } if( type != FM_FV_CLICK_NONE ) { sels = fm_folder_view_get_selected_tree_paths(fv); if( sels || type == FM_FV_CONTEXT_MENU ) { item_clicked(fv, sels ? sels->data : NULL, type); if(sels) { g_list_foreach(sels, (GFunc)gtk_tree_path_free, NULL); g_list_free(sels); } } } return FALSE; }
static void on_icon_view_item_activated(ExoIconView* iv, GtkTreePath* path, FmFolderView* fv) { item_clicked(fv, path, FM_FV_ACTIVATED); }
void itemClicked_(QTreeWidgetItem* item, int col) { item_clicked(item, col); }