diff options
Diffstat (limited to 'composer/e-msg-composer-attachment-bar.c')
-rw-r--r-- | composer/e-msg-composer-attachment-bar.c | 139 |
1 files changed, 70 insertions, 69 deletions
diff --git a/composer/e-msg-composer-attachment-bar.c b/composer/e-msg-composer-attachment-bar.c index 16c68bf910..59e872d64c 100644 --- a/composer/e-msg-composer-attachment-bar.c +++ b/composer/e-msg-composer-attachment-bar.c @@ -91,11 +91,11 @@ static gchar * size_to_string (gulong size) { gchar *size_string; - + /* FIXME: The following should probably go into a separate module, as we might have to do the same thing in other places as well. Also, I am not sure this will be OK for all the languages. */ - + if (size < 1e3L) { if (size == 1) size_string = g_strdup (_("1 byte")); @@ -104,7 +104,7 @@ size_to_string (gulong size) (guint) size); } else { gdouble displayed_size; - + if (size < 1e6L) { displayed_size = (gdouble) size / 1.0e3; size_string = g_strdup_printf (_("%.1fK"), @@ -119,7 +119,7 @@ size_to_string (gulong size) displayed_size); } } - + return size_string; } @@ -130,11 +130,13 @@ free_attachment_list (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; GList *p; - + priv = bar->priv; - + for (p = priv->attachments; p != NULL; p = p->next) gtk_object_unref (GTK_OBJECT (p->data)); + + priv->attachments = NULL; } static void @@ -203,9 +205,9 @@ remove_attachment (EMsgComposerAttachmentBar *bar, bar->priv->attachments = g_list_remove (bar->priv->attachments, attachment); bar->priv->num_attachments--; - + gtk_object_unref (GTK_OBJECT (attachment)); - + gtk_signal_emit (GTK_OBJECT (bar), signals[CHANGED]); } @@ -218,7 +220,7 @@ pixbuf_for_mime_type (const char *mime_type) const char *icon_name; char *filename = NULL; GdkPixbuf *pixbuf; - + icon_name = gnome_vfs_mime_get_value (mime_type, "icon-filename"); if (icon_name) { if (*icon_name == '/') { @@ -256,14 +258,14 @@ update (EMsgComposerAttachmentBar *bar) EMsgComposerAttachmentBarPrivate *priv; EIconList *icon_list; GList *p; - + priv = bar->priv; icon_list = E_ICON_LIST (bar); - + e_icon_list_freeze (icon_list); - + e_icon_list_clear (icon_list); - + /* FIXME could be faster, but we don't care. */ for (p = priv->attachments; p != NULL; p = p->next) { EMsgComposerAttachment *attachment; @@ -382,7 +384,7 @@ update (EMsgComposerAttachmentBar *bar) g_free (desc); g_free (label); } - + e_icon_list_thaw (icon_list); } @@ -394,13 +396,13 @@ remove_selected (EMsgComposerAttachmentBar *bar) GList *attachment_list; GList *p; gint num; - + icon_list = E_ICON_LIST (bar); - + /* Weee! I am especially proud of this piece of cheesy code: it is truly awful. But unless one attaches a huge number of files, it will not be as greedy as intended. FIXME of course. */ - + attachment_list = NULL; p = e_icon_list_get_selection (icon_list); for (; p != NULL; p = p->next) { @@ -409,12 +411,12 @@ remove_selected (EMsgComposerAttachmentBar *bar) (g_list_nth (bar->priv->attachments, num)->data); attachment_list = g_list_prepend (attachment_list, attachment); } - + for (p = attachment_list; p != NULL; p = p->next) remove_attachment (bar, E_MSG_COMPOSER_ATTACHMENT (p->data)); - + g_list_free (attachment_list); - + update (bar); } @@ -425,13 +427,13 @@ edit_selected (EMsgComposerAttachmentBar *bar) EMsgComposerAttachment *attachment; GList *selection; gint num; - + icon_list = E_ICON_LIST (bar); - + selection = e_icon_list_get_selection (icon_list); num = GPOINTER_TO_INT (selection->data); attachment = g_list_nth (bar->priv->attachments, num)->data; - + e_msg_composer_attachment_edit (attachment, GTK_WIDGET (bar)); } @@ -468,7 +470,7 @@ add_cb (GtkWidget *widget, gpointer data) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); - + add_from_user (E_MSG_COMPOSER_ATTACHMENT_BAR (data)); } @@ -477,9 +479,9 @@ properties_cb (GtkWidget *widget, gpointer data) { EMsgComposerAttachmentBar *bar; - + g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); - + bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data); edit_selected (data); } @@ -489,9 +491,9 @@ remove_cb (GtkWidget *widget, gpointer data) { EMsgComposerAttachmentBar *bar; - + g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (data)); - + bar = E_MSG_COMPOSER_ATTACHMENT_BAR (data); remove_selected (bar); } @@ -511,12 +513,12 @@ static GtkWidget * get_icon_context_menu (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; - + priv = bar->priv; if (priv->icon_context_menu == NULL) priv->icon_context_menu = gnome_popup_menu_new (icon_context_menu_info); - + return priv->icon_context_menu; } @@ -526,7 +528,7 @@ popup_icon_context_menu (EMsgComposerAttachmentBar *bar, GdkEventButton *event) { GtkWidget *menu; - + menu = get_icon_context_menu (bar); gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar); } @@ -542,11 +544,11 @@ static GtkWidget * get_context_menu (EMsgComposerAttachmentBar *bar) { EMsgComposerAttachmentBarPrivate *priv; - + priv = bar->priv; if (priv->context_menu == NULL) priv->context_menu = gnome_popup_menu_new (context_menu_info); - + return priv->context_menu; } @@ -555,7 +557,7 @@ popup_context_menu (EMsgComposerAttachmentBar *bar, GdkEventButton *event) { GtkWidget *menu; - + menu = get_context_menu (bar); gnome_popup_menu_do_popup (menu, NULL, NULL, event, bar); } @@ -567,11 +569,11 @@ static void destroy (GtkObject *object) { EMsgComposerAttachmentBar *bar; - + bar = E_MSG_COMPOSER_ATTACHMENT_BAR (object); - + free_attachment_list (bar); - + if (GTK_OBJECT_CLASS (parent_class)->destroy != NULL) (* GTK_OBJECT_CLASS (parent_class)->destroy) (object); } @@ -586,24 +588,23 @@ button_press_event (GtkWidget *widget, EMsgComposerAttachmentBar *bar; EIconList *icon_list; gint icon_number; - + bar = E_MSG_COMPOSER_ATTACHMENT_BAR (widget); icon_list = E_ICON_LIST (widget); - + if (event->button != 3) return GTK_WIDGET_CLASS (parent_class)->button_press_event (widget, event); - - icon_number = e_icon_list_get_icon_at (icon_list, - event->x, event->y); - + + icon_number = e_icon_list_get_icon_at (icon_list, event->x, event->y); + if (icon_number >= 0) { e_icon_list_select_icon (icon_list, icon_number); popup_icon_context_menu (bar, icon_number, event); } else { popup_context_menu (bar, event); } - + return TRUE; } @@ -616,19 +617,19 @@ class_init (EMsgComposerAttachmentBarClass *class) GtkObjectClass *object_class; GtkWidgetClass *widget_class; EIconListClass *icon_list_class; - + object_class = GTK_OBJECT_CLASS (class); widget_class = GTK_WIDGET_CLASS (class); icon_list_class = E_ICON_LIST_CLASS (class); - + parent_class = gtk_type_class (e_icon_list_get_type ()); - + object_class->destroy = destroy; - + widget_class->button_press_event = button_press_event; - + /* Setup signals. */ - + signals[CHANGED] = gtk_signal_new ("changed", GTK_RUN_LAST, @@ -637,7 +638,7 @@ class_init (EMsgComposerAttachmentBarClass *class) changed), gtk_marshal_NONE__NONE, GTK_TYPE_NONE, 0); - + gtk_object_class_add_signals (object_class, signals, LAST_SIGNAL); } @@ -647,21 +648,21 @@ init (EMsgComposerAttachmentBar *bar) EMsgComposerAttachmentBarPrivate *priv; guint icon_size, icon_height; GdkFont *font; - + priv = g_new (EMsgComposerAttachmentBarPrivate, 1); - + priv->attachments = NULL; priv->context_menu = NULL; priv->icon_context_menu = NULL; - + priv->num_attachments = 0; - + bar->priv = priv; - + /* FIXME partly hardcoded. We should compute height from the font, and allow at least 2 lines for every item. */ icon_size = ICON_WIDTH + ICON_SPACING + ICON_BORDER + ICON_TEXT_SPACING; - + font = GTK_WIDGET (bar)->style->font; icon_height = icon_size + ((font->ascent + font->descent) * 2); icon_size += 24; @@ -674,7 +675,7 @@ GtkType e_msg_composer_attachment_bar_get_type (void) { static GtkType type = 0; - + if (type == 0) { static const GtkTypeInfo info = { "EMsgComposerAttachmentBar", @@ -686,10 +687,10 @@ e_msg_composer_attachment_bar_get_type (void) /* reserved_2 */ NULL, (GtkClassInitFunc) NULL, }; - + type = gtk_type_unique (e_icon_list_get_type (), &info); } - + return type; } @@ -698,25 +699,25 @@ e_msg_composer_attachment_bar_new (GtkAdjustment *adj) { EMsgComposerAttachmentBar *new; EIconList *icon_list; - + gdk_rgb_init (); gtk_widget_push_visual (gdk_rgb_get_visual ()); gtk_widget_push_colormap (gdk_rgb_get_cmap ()); new = gtk_type_new (e_msg_composer_attachment_bar_get_type ()); gtk_widget_pop_visual (); gtk_widget_pop_colormap (); - + icon_list = E_ICON_LIST (new); - + e_icon_list_construct (icon_list, ICON_WIDTH, 0); - + e_icon_list_set_separators (icon_list, ICON_SEPARATORS); e_icon_list_set_row_spacing (icon_list, ICON_ROW_SPACING); e_icon_list_set_col_spacing (icon_list, ICON_COL_SPACING); e_icon_list_set_icon_border (icon_list, ICON_BORDER); e_icon_list_set_text_spacing (icon_list, ICON_TEXT_SPACING); e_icon_list_set_selection_mode (icon_list, GTK_SELECTION_MULTIPLE); - + return GTK_WIDGET (new); } @@ -773,7 +774,7 @@ e_msg_composer_attachment_bar_to_multipart (EMsgComposerAttachmentBar *bar, { EMsgComposerAttachmentBarPrivate *priv; GList *p; - + g_return_if_fail (bar != NULL); g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); g_return_if_fail (multipart != NULL); @@ -795,7 +796,7 @@ e_msg_composer_attachment_bar_get_num_attachments (EMsgComposerAttachmentBar *ba { g_return_val_if_fail (bar != NULL, 0); g_return_val_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar), 0); - + return bar->priv->num_attachments; } @@ -805,7 +806,7 @@ e_msg_composer_attachment_bar_attach (EMsgComposerAttachmentBar *bar, const gchar *file_name) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); - + if (file_name == NULL) add_from_user (bar); else @@ -817,6 +818,6 @@ e_msg_composer_attachment_bar_attach_mime_part (EMsgComposerAttachmentBar *bar, CamelMimePart *part) { g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT_BAR (bar)); - + add_from_mime_part (bar, part); } |