On Thu, 20 Feb 2003, Emmanuel Di Pretoro wrote:
> I want to modify the behaviour of my GtkTreeView/GtkListStore. I can
> select more than one item, but I don't want to use 'Ctrl+Click' to
> select another item.
I'm not sure if this is exactly what you're after, but in my app I
have a liststore set up so the user can create a multiple selection
with a drag or "swipe" of the mouse across several items. Sorry, I
don't have time to write this up properly, but the code fragments
(plus one full function) below may give you enough of a hint to be
going along with...
/* these things (among others) are done when the "list box" is
initially set up
*/
GtkWidget *view;
GtkListStore *store;
view = gtk_tree_view_new_with_model (GTK_TREE_MODEL(store));
gtk_widget_set_events (view, GDK_POINTER_MOTION_MASK
| GDK_POINTER_MOTION_HINT_MASK);
g_signal_connect (G_OBJECT(view), "motion_notify_event",
G_CALLBACK(listbox_drag), NULL);
/* end of excerpts from set-up */
gboolean listbox_drag (GtkWidget *listbox, GdkEventMotion *event,
gpointer data)
/* allow the user to create an extended selection by dragging */
{
gint x, y;
GdkModifierType state;
GtkTreeView *view = GTK_TREE_VIEW(listbox);
GtkTreePath *path;
if (event->is_hint) {
gdk_window_get_pointer (event->window, &x, &y, &state);
} else {
x = event->x;
y = event->y;
state = event->state;
}
if ((state & GDK_BUTTON1_MASK) &&
gtk_tree_view_get_path_at_pos(view, x, y, &path,
NULL, NULL, NULL)) {
GtkTreeSelection *select = NULL;
GtkTreePath *anchor_path = NULL;
gchar *anchor_id = NULL;
gint row;
int anchor;
static gint lastrow;
/* "active_row" is set via g_object_set_data() when button 1
is clicked on a valid list box row */
anchor = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(listbox),
"active_row"));
row = tree_path_get_row_number(path);
select = gtk_tree_view_get_selection(view);
if (select == NULL) return FALSE;
anchor_id = g_strdup_printf("%d", anchor);
anchor_path = gtk_tree_path_new_from_string(anchor_id);
g_free(anchor_id);
if (row != lastrow) {
gtk_tree_selection_unselect_all(select);
gtk_tree_selection_select_range(select, anchor_path,
path);
}
gtk_tree_path_free(path);
gtk_tree_path_free(anchor_path);
lastrow = row;
}
return FALSE;
}
Allin Cottrell
_______________________________________________
gtk-list mailing list
[EMAIL PROTECTED]
http://mail.gnome.org/mailman/listinfo/gtk-list