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,23 +1109,40 @@ 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)
{ {
priv->active_row = row; if (ctrl_pressed)
priv->active_row_active = TRUE; {
gtk_widget_set_state_flags (GTK_WIDGET (priv->active_row), if (priv->selection_mode == GTK_SELECTION_SINGLE &&
GTK_STATE_FLAG_ACTIVE, priv->selected_row == row)
FALSE); gtk_list_box_update_selected (list_box, NULL);
gtk_widget_queue_draw (GTK_WIDGET (list_box)); else
if (event->type == GDK_2BUTTON_PRESS && gtk_list_box_update_selected (list_box, row);
!priv->activate_single_click) }
g_signal_emit (list_box, signals[ROW_ACTIVATED], 0, else
row); {
priv->active_row = row;
priv->active_row_active = TRUE;
gtk_widget_set_state_flags (GTK_WIDGET (priv->active_row),
GTK_STATE_FLAG_ACTIVE,
FALSE);
gtk_widget_queue_draw (GTK_WIDGET (list_box));
if (event->type == GDK_2BUTTON_PRESS &&
!priv->activate_single_click)
g_signal_emit (list_box, signals[ROW_ACTIVATED], 0,
row);
}
} }
/* TODO: /* TODO: