static gint userlist_click_cb (GtkWidget *widget, GdkEventButton *event, gpointer userdata) { if (!event) return FALSE; if (!(event->state & STATE_CTRL) && event->type == GDK_2BUTTON_PRESS && prefs.hex_gui_ulist_doubleclick[0]) { auto nicks = userlist_selection_list (widget); if (!nicks.empty()) { nick_command_parse (current_sess, prefs.hex_gui_ulist_doubleclick, nicks[0], nicks[0]); } return TRUE; } if (event->button == 3) { /* do we have a multi-selection? */ auto nicks = userlist_selection_list (widget); if (!nicks.empty()) { menu_nickmenu (current_sess, event, nicks[0], nicks.size()); return TRUE; } auto sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); GtkTreePath *path; if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, 0, 0, 0)) { GtkTreePathPtr path_ptr(path); gtk_tree_selection_unselect_all (sel); gtk_tree_selection_select_path (sel, path); nicks = userlist_selection_list (widget); if (!nicks.empty()) { menu_nickmenu (current_sess, event, nicks[0], nicks.size()); } } else { gtk_tree_selection_unselect_all (sel); } return TRUE; } return FALSE; }
static gint userlist_click_cb (GtkWidget *widget, GdkEventButton *event, gpointer userdata) { char **nicks; int i; GtkTreeSelection *sel; GtkTreePath *path; if (!event) return FALSE; if (!(event->state & STATE_CTRL) && event->type == GDK_2BUTTON_PRESS && prefs.hex_gui_ulist_doubleclick[0]) { nicks = userlist_selection_list (widget, &i); if (nicks) { nick_command_parse (current_sess, prefs.hex_gui_ulist_doubleclick, nicks[0], nicks[0]); while (i) { i--; g_free (nicks[i]); } free (nicks); } return TRUE; } if (event->button == 3) { /* do we have a multi-selection? */ nicks = userlist_selection_list (widget, &i); if (nicks && i > 1) { menu_nickmenu (current_sess, event, nicks[0], i); while (i) { i--; g_free (nicks[i]); } free (nicks); return TRUE; } if (nicks) { g_free (nicks[0]); free (nicks); } sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget)); if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), event->x, event->y, &path, 0, 0, 0)) { gtk_tree_selection_unselect_all (sel); gtk_tree_selection_select_path (sel, path); gtk_tree_path_free (path); nicks = userlist_selection_list (widget, &i); if (nicks) { menu_nickmenu (current_sess, event, nicks[0], i); while (i) { i--; g_free (nicks[i]); } free (nicks); } } else { gtk_tree_selection_unselect_all (sel); } return TRUE; } return FALSE; }