static void build_chat_view(ChatView* self) { ChatViewPrivate *priv = CHAT_VIEW_GET_PRIVATE(self); gtk_container_add(GTK_CONTAINER(priv->box_webkit_chat_container), priv->webkit_chat_container); gtk_widget_show(priv->webkit_chat_container); /* keep name updated */ if (priv->call) { priv->update_name = QObject::connect( priv->call, &Call::changed, [self] () { update_name(self); } ); } else if (priv->cm) { priv->update_name = QObject::connect( priv->cm, &ContactMethod::changed, [self] () { update_name(self); } ); } else if (priv->person) { priv->update_name = QObject::connect( priv->person, &Person::changed, [self] () { update_name(self); } ); } update_name(self); /* keep selected cm updated */ update_contact_methods(self); g_signal_connect_swapped(priv->combobox_cm, "changed", G_CALLBACK(selected_cm_changed), self); priv->webkit_ready = g_signal_connect_swapped( priv->webkit_chat_container, "ready", G_CALLBACK(webkit_chat_container_ready), self ); if (webkit_chat_container_is_ready(WEBKIT_CHAT_CONTAINER(priv->webkit_chat_container))) webkit_chat_container_ready(self); /* we only show the chat info in the case of cm / person */ gtk_widget_set_visible(priv->hbox_chat_info, (priv->cm || priv->person)); }
GtkWidget * chat_view_new_person(Person *p) { g_return_val_if_fail(p, nullptr); ChatView *self = CHAT_VIEW(g_object_new(CHAT_VIEW_TYPE, NULL)); ChatViewPrivate *priv = CHAT_VIEW_GET_PRIVATE(self); priv->person = p; /* connect to the changed signal before setting the cm combo box, so that the correct * conversation will get displayed */ g_signal_connect(priv->combobox_cm, "changed", G_CALLBACK(selected_cm_changed), self); update_contact_methods(self); update_name(self); gtk_widget_show(priv->hbox_chat_info); return (GtkWidget *)self; }