gboolean on_button_press(GtkWidget* widget, GdkEventButton* evt) { FmPlacesView* view = FM_PLACES_VIEW(widget); GtkTreePath* tp; GtkTreeViewColumn* col; gboolean ret = GTK_WIDGET_CLASS(fm_places_view_parent_class)->button_press_event(widget, evt); int cell_x; gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), evt->x, evt->y, &tp, &col, NULL, NULL); view->clicked_row = tp; if(tp) { switch(evt->button) /* middle click */ { case 1: /* left click */ break; case 2: /* middle click */ activate_row(view, 2, tp); break; case 3: /* right click */ { GtkTreeIter it; if(gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &it, tp) && !fm_places_model_iter_is_separator(FM_PLACES_MODEL(model), &it) ) { FmPlaceItem* item; GtkWidget* menu; gtk_tree_model_get(GTK_TREE_MODEL(model), &it, FM_PLACES_MODEL_COL_INFO, &item, -1); menu = place_item_get_menu(item); if(menu) { gtk_menu_attach_to_widget(GTK_MENU(menu), widget, NULL); gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, evt->time); } } } break; } } return ret; }
gboolean on_button_press(GtkWidget* view, GdkEventButton* evt) { GtkTreePath* tp; GtkTreeViewColumn* col; gboolean ret = GTK_WIDGET_CLASS(fm_places_view_parent_class)->button_press_event(view, evt); if(evt->button == 3 && gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(view), evt->x, evt->y, &tp, &col, NULL, NULL)) { GtkTreeIter it; if(gtk_tree_model_get_iter(GTK_TREE_MODEL(model), &it, tp) && it.user_data != sep_it.user_data ) { PlaceItem* item; GtkWidget* menu; gtk_tree_model_get(GTK_TREE_MODEL(model), &it, COL_INFO, &item, -1); menu = place_item_get_menu(item); if(menu) gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, evt->time); } gtk_tree_path_free(tp); } return ret; }