listbox: Set activate_signal on listboxrow class

keyboard navigation didn't support activation since we moved
the keynav to the child row widgets. We fix this by adding a
activate signal handler for the row and setting
widget_class->activate_signal to it.

https://bugzilla.gnome.org/show_bug.cgi?id=707778
This commit is contained in:
Alexander Larsson 2013-09-10 14:12:07 +02:00
parent 659a6f3a2f
commit 90383300d2
2 changed files with 31 additions and 1 deletions

View File

@ -109,6 +109,11 @@ enum {
LAST_SIGNAL
};
enum {
ROW__ACTIVATE,
ROW__LAST_SIGNAL
};
enum {
PROP_0,
PROP_SELECTION_MODE,
@ -206,6 +211,7 @@ static void gtk_list_box_real_get_preferred_width_for_height (Gt
static GParamSpec *properties[LAST_PROPERTY] = { NULL, };
static guint signals[LAST_SIGNAL] = { 0 };
static guint row_signals[ROW__LAST_SIGNAL] = { 0 };
/**
* gtk_list_box_new:
@ -2466,6 +2472,17 @@ gtk_list_box_row_real_focus (GtkWidget *widget,
}
}
static void
gtk_list_box_row_real_activate (GtkListBoxRow *row)
{
GtkListBox *list_box;
list_box = gtk_list_box_row_get_box (row);
if (list_box)
gtk_list_box_select_and_activate (list_box, row);
}
static void
gtk_list_box_row_real_show (GtkWidget *widget)
{
@ -2792,4 +2809,16 @@ gtk_list_box_row_class_init (GtkListBoxRowClass *klass)
widget_class->get_preferred_width_for_height = gtk_list_box_row_real_get_preferred_width_for_height;
widget_class->size_allocate = gtk_list_box_row_real_size_allocate;
widget_class->focus = gtk_list_box_row_real_focus;
klass->activate = gtk_list_box_row_real_activate;
row_signals[ROW__ACTIVATE] =
g_signal_new (I_("activate"),
G_OBJECT_CLASS_TYPE (object_class),
G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
G_STRUCT_OFFSET (GtkListBoxRowClass, activate),
NULL, NULL,
_gtk_marshal_VOID__VOID,
G_TYPE_NONE, 0);
widget_class->activate_signal = row_signals[ROW__ACTIVATE];
}

View File

@ -88,10 +88,11 @@ struct _GtkListBoxRowClass
{
GtkBinClass parent_class;
void (* activate) (GtkListBoxRow *row);
/* Padding for future expansion */
void (*_gtk_reserved1) (void);
void (*_gtk_reserved2) (void);
void (*_gtk_reserved3) (void);
};
/**