#define GET_PRIV(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), EMPATHY_AVATAR_CHOOSER_TYPE, EmpathyAvatarChooserPriv))
-#define AVATAR_MAX 96
+#define AVATAR_SIZE_SAVE 96
+#define AVATAR_SIZE_VIEW 64
#define DEFAULT_DIR DATADIR"/pixmaps/faces"
typedef struct {
- GdkPixbuf *pixbuf;
- gchar *image_data;
- gsize image_data_size;
+ gchar *image_data;
+ gsize image_data_size;
} EmpathyAvatarChooserPriv;
static void avatar_chooser_finalize (GObject *object);
priv = GET_PRIV (object);
- if (priv->pixbuf) {
- g_object_unref (priv->pixbuf);
- }
g_free (priv->image_data);
G_OBJECT_CLASS (empathy_avatar_chooser_parent_class)->finalize (object);
{
EmpathyAvatarChooserPriv *priv = GET_PRIV (chooser);
GtkWidget *image;
+ GdkPixbuf *pixbuf_view = NULL;
+ GdkPixbuf *pixbuf_save = NULL;
GError *error = NULL;
- if (priv->pixbuf) {
- g_object_unref (priv->pixbuf);
- priv->pixbuf = NULL;
- }
g_free (priv->image_data);
priv->image_data = NULL;
priv->image_data_size = 0;
if (pixbuf) {
- priv->pixbuf = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_MAX);
- }
+ pixbuf_view = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_VIEW);
+ pixbuf_save = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_SAVE);
- if (priv->pixbuf) {
- if (!gdk_pixbuf_save_to_buffer (priv->pixbuf,
+ if (!gdk_pixbuf_save_to_buffer (pixbuf_save,
&priv->image_data,
&priv->image_data_size,
"png",
empathy_debug (DEBUG_DOMAIN, "Failed to save pixbuf: %s",
error ? error->message : "No error given");
g_clear_error (&error);
- g_object_unref (priv->pixbuf);
- priv->pixbuf = NULL;
}
- }
+ image = gtk_image_new_from_pixbuf (pixbuf_view);
- if (!priv->pixbuf) {
+ g_object_unref (pixbuf_save);
+ g_object_unref (pixbuf_view);
+ } else {
image = gtk_image_new_from_icon_name ("stock_person",
GTK_ICON_SIZE_DIALOG);
- } else {
- image = gtk_image_new_from_pixbuf (priv->pixbuf);
}
gtk_button_set_image (GTK_BUTTON (chooser), image);
image = gtk_file_chooser_get_preview_widget (file_chooser);
if (pixbuf) {
- scaled_pixbuf = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_MAX);
+ scaled_pixbuf = empathy_pixbuf_scale_down_if_necessary (pixbuf, AVATAR_SIZE_SAVE);
gtk_image_set_from_pixbuf (GTK_IMAGE (image), scaled_pixbuf);
g_object_unref (scaled_pixbuf);
g_object_unref (pixbuf);
/* Setup preview image */
image = gtk_image_new ();
gtk_file_chooser_set_preview_widget (chooser_dialog, image);
- gtk_widget_set_size_request (image, AVATAR_MAX, AVATAR_MAX);
+ gtk_widget_set_size_request (image, AVATAR_SIZE_SAVE, AVATAR_SIZE_SAVE);
gtk_widget_show (image);
gtk_file_chooser_set_use_preview_label (chooser_dialog, FALSE);
g_signal_connect (chooser_dialog, "update-preview",
GtkWidget *image_state;
GtkWidget *label_status;
GtkWidget *table_contact;
- GtkWidget *hbox_contact;
+ GtkWidget *vbox_avatar;
/* Groups */
GtkWidget *vbox_groups;
"image_state", &information->image_state,
"label_status", &information->label_status,
"table_contact", &information->table_contact,
- "hbox_contact", &information->hbox_contact,
+ "vbox_avatar", &information->vbox_avatar,
"vbox_groups", &information->vbox_groups,
"entry_group", &information->entry_group,
"button_group", &information->button_group,
} else {
information->widget_avatar = empathy_avatar_image_new ();
}
- gtk_box_pack_end (GTK_BOX (information->hbox_contact),
- information->widget_avatar,
- FALSE, FALSE,
- 6);
+ gtk_box_pack_start (GTK_BOX (information->vbox_avatar),
+ information->widget_avatar,
+ FALSE, FALSE,
+ 6);
gtk_widget_show (information->widget_avatar);
/* Setup account label/chooser */
<property name="spacing">6</property>
<child>
- <widget class="GtkHBox" id="hbox_contact">
+ <widget class="GtkVBox" id="vbox_contact">
<property name="visible">True</property>
<property name="homogeneous">False</property>
- <property name="spacing">0</property>
+ <property name="spacing">6</property>
<child>
- <widget class="GtkVBox" id="vbox_contact">
+ <widget class="GtkLabel" id="label654">
<property name="visible">True</property>
- <property name="homogeneous">False</property>
- <property name="spacing">6</property>
+ <property name="label" translatable="yes"><b>Contact</b></property>
+ <property name="use_underline">False</property>
+ <property name="use_markup">True</property>
+ <property name="justify">GTK_JUSTIFY_LEFT</property>
+ <property name="wrap">False</property>
+ <property name="selectable">False</property>
+ <property name="xalign">0</property>
+ <property name="yalign">0.5</property>
+ <property name="xpad">0</property>
+ <property name="ypad">0</property>
+ <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+ <property name="width_chars">-1</property>
+ <property name="single_line_mode">False</property>
+ <property name="angle">0</property>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
+ </child>
- <child>
- <widget class="GtkLabel" id="label654">
- <property name="visible">True</property>
- <property name="label" translatable="yes"><b>Contact</b></property>
- <property name="use_underline">False</property>
- <property name="use_markup">True</property>
- <property name="justify">GTK_JUSTIFY_LEFT</property>
- <property name="wrap">False</property>
- <property name="selectable">False</property>
- <property name="xalign">0</property>
- <property name="yalign">0.5</property>
- <property name="xpad">0</property>
- <property name="ypad">0</property>
- <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
- <property name="width_chars">-1</property>
- <property name="single_line_mode">False</property>
- <property name="angle">0</property>
- </widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
- </child>
+ <child>
+ <widget class="GtkAlignment" id="alignment31">
+ <property name="visible">True</property>
+ <property name="xalign">0.5</property>
+ <property name="yalign">0.5</property>
+ <property name="xscale">1</property>
+ <property name="yscale">1</property>
+ <property name="top_padding">0</property>
+ <property name="bottom_padding">0</property>
+ <property name="left_padding">12</property>
+ <property name="right_padding">0</property>
<child>
- <widget class="GtkAlignment" id="alignment31">
+ <widget class="GtkHBox" id="hbox189">
<property name="visible">True</property>
- <property name="xalign">0.5</property>
- <property name="yalign">0.5</property>
- <property name="xscale">1</property>
- <property name="yscale">1</property>
- <property name="top_padding">0</property>
- <property name="bottom_padding">0</property>
- <property name="left_padding">12</property>
- <property name="right_padding">0</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">6</property>
<child>
<widget class="GtkVBox" id="vbox225">
</packing>
</child>
</widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ </packing>
+ </child>
+
+ <child>
+ <widget class="GtkVBox" id="vbox_avatar">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">0</property>
+
+ <child>
+ <placeholder/>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
+ </packing>
</child>
</widget>
- <packing>
- <property name="padding">0</property>
- <property name="expand">False</property>
- <property name="fill">False</property>
- </packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="expand">False</property>
+ <property name="fill">False</property>
</packing>
</child>
-
- <child>
- <placeholder/>
- </child>
</widget>
<packing>
<property name="padding">0</property>