GtkListBox: Allow unselecting of rows in SINGLE mode

This commit is contained in:
Alexander Larsson 2013-06-11 15:04:02 +02:00
parent cc4ac1ee70
commit b119b022a7

View File

@ -1109,12 +1109,28 @@ gtk_list_box_real_button_press_event (GtkWidget *widget,
{ {
GtkListBox *list_box = GTK_LIST_BOX (widget); GtkListBox *list_box = GTK_LIST_BOX (widget);
GtkListBoxPrivate *priv = list_box->priv; GtkListBoxPrivate *priv = list_box->priv;
gboolean ctrl_pressed;
if (event->button == GDK_BUTTON_PRIMARY) if (event->button == GDK_BUTTON_PRIMARY)
{ {
GtkListBoxRow *row; GtkListBoxRow *row;
ctrl_pressed = (event->state & GDK_CONTROL_MASK) != 0;
priv->active_row = NULL;
row = gtk_list_box_get_row_at_y (list_box, event->y); row = gtk_list_box_get_row_at_y (list_box, event->y);
if (row != NULL) if (row != NULL)
{
if (ctrl_pressed)
{
if (priv->selection_mode == GTK_SELECTION_SINGLE &&
priv->selected_row == row)
gtk_list_box_update_selected (list_box, NULL);
else
gtk_list_box_update_selected (list_box, row);
}
else
{ {
priv->active_row = row; priv->active_row = row;
priv->active_row_active = TRUE; priv->active_row_active = TRUE;
@ -1126,6 +1142,7 @@ gtk_list_box_real_button_press_event (GtkWidget *widget,
!priv->activate_single_click) !priv->activate_single_click)
g_signal_emit (list_box, signals[ROW_ACTIVATED], 0, g_signal_emit (list_box, signals[ROW_ACTIVATED], 0,
row); row);
}
} }
/* TODO: /* TODO: