static void save_avatar_menu_activate_cb (GtkWidget *widget, EmpathyContactWidget *information) { GtkWidget *dialog; EmpathyAvatar *avatar; gchar *ext = NULL, *filename; dialog = gtk_file_chooser_dialog_new (_("Save Avatar"), NULL, GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE); /* look for the avatar extension */ avatar = empathy_contact_get_avatar (information->contact); if (avatar->format != NULL) { gchar **splitted; splitted = g_strsplit (avatar->format, "/", 2); if (splitted[0] != NULL && splitted[1] != NULL) ext = g_strdup (splitted[1]); g_strfreev (splitted); } else { /* Avatar was loaded from the cache so was converted to PNG */ ext = g_strdup ("png"); } if (ext != NULL) { gchar *id; id = tp_escape_as_identifier (empathy_contact_get_id ( information->contact)); filename = g_strdup_printf ("%s.%s", id, ext); gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename); g_free (id); g_free (ext); g_free (filename); } if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT) { GError *error = NULL; filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog)); if (!empathy_avatar_save_to_file (avatar, filename, &error)) { /* Save error */ GtkWidget *dialog; dialog = gtk_message_dialog_new (NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_CLOSE, _("Unable to save avatar")); gtk_message_dialog_format_secondary_text ( GTK_MESSAGE_DIALOG (dialog), "%s", error->message); g_signal_connect (dialog, "response", G_CALLBACK (gtk_widget_destroy), NULL); gtk_window_present (GTK_WINDOW (dialog)); g_clear_error (&error); } g_free (filename); } gtk_widget_destroy (dialog); }
static void remmina_tp_channel_handler_get_contacts(TpConnection *connection, guint n_contacts, TpContact * const *contacts, guint n_failed, const TpHandle *failed, const GError *error, gpointer user_data, GObject *weak_object) { RemminaTpChannelHandler *chandler = (RemminaTpChannelHandler *) user_data; TpContact *contact; gchar *token; gchar *cm; gchar *protocol; gchar *filename; GdkPixbuf *pixbuf; GtkWidget *image; GtkWidget *dialog; if (error != NULL) { g_print("remmina_tp_channel_handler_get_contacts: %s", error->message); remmina_tp_channel_handler_free(chandler); return; } if (n_contacts <= 0) { g_print("remmina_tp_channel_handler_get_contacts: no contacts\n"); remmina_tp_channel_handler_free(chandler); return; } contact = contacts[0]; chandler->alias = g_strdup(tp_contact_get_alias(contact)); dialog = gtk_message_dialog_new(NULL, GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, _("%s wants to share his/her desktop.\nDo you accept the invitation?"), chandler->alias); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(remmina_tp_channel_handler_on_response), chandler); g_signal_connect(G_OBJECT(dialog), "response", G_CALLBACK(gtk_widget_destroy), NULL); gtk_window_set_title(GTK_WINDOW(dialog), _("Desktop sharing invitation")); remmina_plugin_telepathy_service->ui_register(dialog); gtk_widget_show(dialog); token = (gchar *) tp_contact_get_avatar_token(contact); if (token == NULL) { return; } if (!tp_connection_parse_object_path(chandler->connection, &protocol, &cm)) { g_print("tp_connection_parse_object_path: failed\n"); return; } token = tp_escape_as_identifier(token); filename = g_build_filename(g_get_user_cache_dir(), "telepathy", "avatars", cm, protocol, token, NULL); g_free(cm); g_free(protocol); g_free(token); if (g_file_test(filename, G_FILE_TEST_EXISTS)) { pixbuf = gdk_pixbuf_new_from_file(filename, NULL); if (pixbuf) { image = gtk_image_new_from_pixbuf(pixbuf); gtk_widget_show(image); g_object_unref(pixbuf); gtk_message_dialog_set_image(GTK_MESSAGE_DIALOG(dialog), image); } } g_free(filename); }