enum {
SIG_SELECTION_CHANGED,
+ SIG_ACTIVATE,
LAST_SIGNAL
};
g_cclosure_marshal_generic,
G_TYPE_NONE,
1, FOLKS_TYPE_INDIVIDUAL);
+
+ signals[SIG_ACTIVATE] = g_signal_new ("activate",
+ G_TYPE_FROM_CLASS (klass),
+ G_SIGNAL_RUN_LAST,
+ 0,
+ NULL, NULL,
+ g_cclosure_marshal_generic,
+ G_TYPE_NONE,
+ 0);
}
static void
individual_store_add_individual_and_connect (self->priv->store, individual);
+ /* if nothing is selected, select the first matching node */
+ if (!gtk_tree_selection_get_selected (
+ gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view)),
+ NULL, NULL))
+ empathy_individual_view_select_first (self->priv->view);
+
g_clear_object (&persona_new);
g_clear_object (&personas);
g_object_unref (store);
empathy_individual_view_refilter (self->priv->view);
}
+static void
+search_activate_cb (GtkEntry *entry,
+ EmpathyContactChooser *self)
+{
+ g_signal_emit (self, signals[SIG_ACTIVATE], 0);
+}
+
+static void
+view_activate_cb (GtkTreeView *view,
+ GtkTreePath *path,
+ GtkTreeViewColumn *column,
+ EmpathyContactChooser *self)
+{
+ g_signal_emit (self, signals[SIG_ACTIVATE], 0);
+}
+
+static gboolean
+search_key_press_cb (GtkEntry *entry,
+ GdkEventKey *event,
+ EmpathyContactChooser *self)
+{
+ GtkTreeSelection *selection;
+ GtkTreeModel *model;
+ GtkTreeIter iter;
+
+ if (event->state != 0)
+ return FALSE;
+
+ switch (event->keyval)
+ {
+ case GDK_KEY_Down:
+ case GDK_KEY_KP_Down:
+ case GDK_KEY_Up:
+ case GDK_KEY_KP_Up:
+ break;
+
+ default:
+ return FALSE;
+ }
+
+ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->view));
+
+ if (!gtk_tree_selection_get_selected (selection, &model, &iter))
+ return TRUE;
+
+ switch (event->keyval)
+ {
+ case GDK_KEY_Down:
+ case GDK_KEY_KP_Down:
+ if (!gtk_tree_model_iter_next (model, &iter))
+ return TRUE;
+
+ break;
+
+ case GDK_KEY_Up:
+ case GDK_KEY_KP_Up:
+ if (!gtk_tree_model_iter_previous (model, &iter))
+ return TRUE;
+
+ break;
+
+ default:
+ g_assert_not_reached ();
+ }
+
+ gtk_tree_selection_select_iter (selection, &iter);
+
+ return TRUE;
+}
+
static void
empathy_contact_chooser_init (EmpathyContactChooser *self)
{
g_signal_connect (self->priv->search_entry, "changed",
G_CALLBACK (search_text_changed), self);
+ g_signal_connect (self->priv->search_entry, "activate",
+ G_CALLBACK (search_activate_cb), self);
+ g_signal_connect (self->priv->search_entry, "key-press-event",
+ G_CALLBACK (search_key_press_cb), self);
/* Add the treeview */
mgr = empathy_individual_manager_dup_singleton ();
g_signal_connect (selection, "changed",
G_CALLBACK (view_selection_changed_cb), self);
+ g_signal_connect (self->priv->view, "row-activated",
+ G_CALLBACK (view_activate_cb), self);
scroll = gtk_scrolled_window_new (NULL, NULL);