static void response_cb (GtkWidget *widget, gint response, EmpathyAppPluginWidget *self) { if (self->priv->user_info != NULL) { TpawUserInfo *user_info = (TpawUserInfo *) self->priv->user_info; if (response == GTK_RESPONSE_OK) tpaw_user_info_apply_async (user_info, NULL, NULL); else tpaw_user_info_discard (user_info); } g_signal_emit (self, signals[SIG_DONE], 0); }
static gboolean edit_personal_details (GoaObject *goa_object, GtkWindow *parent, GError **error) { EditPersonalDetailsData data; TpAccount *tp_account = NULL; GtkWidget *dialog = NULL; GtkWidget *user_info = NULL; GtkWidget *align = NULL; GtkWidget *content_area = NULL; gint response; gboolean ret = FALSE; memset (&data, 0, sizeof (EditPersonalDetailsData)); data.loop = g_main_loop_new (NULL, FALSE); tp_account = find_tp_account (goa_object, data.loop, &data.error); if (tp_account == NULL) goto out; dialog = gtk_dialog_new_with_buttons (_("Personal Details"), parent, GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_USE_HEADER_BAR, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_OK"), GTK_RESPONSE_OK, NULL); gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE); user_info = tpaw_user_info_new (tp_account); gtk_widget_show (user_info); align = gtk_alignment_new (0.5, 0.5, 1, 1); gtk_alignment_set_padding (GTK_ALIGNMENT (align), 6, 0, 6, 6); gtk_widget_show (align); gtk_container_add (GTK_CONTAINER (align), GTK_WIDGET (user_info)); content_area = gtk_dialog_get_content_area (GTK_DIALOG (dialog)); gtk_box_pack_start (GTK_BOX (content_area), align, TRUE, TRUE, 0); g_timeout_add (100, personal_details_timeout_cb, &data); g_main_loop_run (data.loop); response = gtk_dialog_run (GTK_DIALOG (dialog)); if (response == GTK_RESPONSE_OK) { tpaw_user_info_apply_async (TPAW_USER_INFO (user_info), user_info_apply_cb, &data); g_main_loop_run (data.loop); if (data.error != NULL) goto out; } else { g_set_error (&data.error, GOA_ERROR, GOA_ERROR_DIALOG_DISMISSED, _("Dialog was dismissed")); goto out; } ret = TRUE; out: if (data.error != NULL) { g_propagate_error (error, data.error); } g_clear_pointer (&dialog, gtk_widget_destroy); g_clear_object (&tp_account); g_clear_pointer (&data.loop, g_main_loop_unref); return ret; }