X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fwidgets%2Fmodest-attachments-view.c;h=c061ea626ab3c8ea5e682d33422119510895e0d7;hp=e6a4b32747a59366a0725d12ce46c22c952f87f9;hb=aab537f6ce755830767baa7260d7879449ceeb38;hpb=67d4bede67ddeb4a0a1e28795665416419def438 diff --git a/src/widgets/modest-attachments-view.c b/src/widgets/modest-attachments-view.c index e6a4b32..c061ea6 100644 --- a/src/widgets/modest-attachments-view.c +++ b/src/widgets/modest-attachments-view.c @@ -67,6 +67,7 @@ static gboolean button_press_event (GtkWidget *widget, GdkEventButton *event, Mo static gboolean motion_notify_event (GtkWidget *widget, GdkEventMotion *event, ModestAttachmentsView *atts_view); static gboolean button_release_event (GtkWidget *widget, GdkEventButton *event, ModestAttachmentsView *atts_view); static gboolean key_press_event (GtkWidget *widget, GdkEventKey *event, ModestAttachmentsView *atts_view); +static gboolean focus_out_event (GtkWidget *widget, GdkEventFocus *event, ModestAttachmentsView *atts_view); static GtkWidget *get_att_view_at_coords (ModestAttachmentsView *atts_view, gdouble x, gdouble y); static void unselect_all (ModestAttachmentsView *atts_view); @@ -108,7 +109,7 @@ modest_attachments_view_set_message (ModestAttachmentsView *attachments_view, Tn if (msg == priv->msg) return; - if (priv->msg) + if (priv->msg) g_object_unref (priv->msg); if (msg) g_object_ref (G_OBJECT(msg)); @@ -132,10 +133,13 @@ modest_attachments_view_set_message (ModestAttachmentsView *attachments_view, Tn TnyMimePart *part; part = TNY_MIME_PART (tny_iterator_get_current (iter)); - if (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part)) { + if (part && (tny_mime_part_is_attachment (part) || TNY_IS_MSG (part))) { modest_attachments_view_add_attachment (attachments_view, part); } - g_object_unref (part); + + if (part) + g_object_unref (part); + tny_iterator_next (iter); } @@ -186,7 +190,9 @@ modest_attachments_view_remove_attachment (ModestAttachmentsView *atts_view, Tny } if (found_att_view) { + priv->selected = g_list_remove (priv->selected, found_att_view); gtk_widget_destroy (GTK_WIDGET (found_att_view)); + own_clipboard (atts_view); } } @@ -209,12 +215,16 @@ modest_attachments_view_remove_attachment_by_id (ModestAttachmentsView *atts_vie const gchar *mime_part_id = NULL; mime_part_id = tny_mime_part_get_content_id (cur_mime_part); - if ((mime_part_id != NULL) && (strcmp (mime_part_id, att_id) == 0)) + if ((mime_part_id != NULL) && (strcmp (mime_part_id, att_id) == 0)) { gtk_widget_destroy (GTK_WIDGET (att_view)); + priv->selected = g_list_remove (priv->selected, att_view); + } g_object_unref (cur_mime_part); } + own_clipboard (atts_view); + } static void @@ -234,6 +244,7 @@ modest_attachments_view_instance_init (GTypeInstance *instance, gpointer g_class g_signal_connect (G_OBJECT (instance), "button-release-event", G_CALLBACK (button_release_event), instance); g_signal_connect (G_OBJECT (instance), "motion-notify-event", G_CALLBACK (motion_notify_event), instance); g_signal_connect (G_OBJECT (instance), "key-press-event", G_CALLBACK (key_press_event), instance); + g_signal_connect (G_OBJECT (instance), "focus-out-event", G_CALLBACK (focus_out_event), instance); GTK_WIDGET_SET_FLAGS (instance, GTK_CAN_FOCUS); @@ -318,20 +329,15 @@ button_press_event (GtkWidget *widget, GdkEventButton *event, ModestAttachmentsView *atts_view) { - gint widget_x, widget_y; ModestAttachmentsViewPrivate *priv = MODEST_ATTACHMENTS_VIEW_GET_PRIVATE (atts_view); if (!GTK_WIDGET_HAS_FOCUS (widget)) gtk_widget_grab_focus (widget); if (event->button == 1 && event->type == GDK_BUTTON_PRESS) { GtkWidget *att_view = NULL; - GdkWindow *parent_window; - - parent_window = gtk_widget_get_parent_window (widget); - gdk_window_get_origin (parent_window, &widget_x, &widget_y); att_view = get_att_view_at_coords (MODEST_ATTACHMENTS_VIEW (widget), - ((gint) event->x_root) - widget_x, ((gint) event->y_root) - widget_y); + (gint) event->x_root, (gint) event->y_root); if (att_view != NULL) { if (GTK_WIDGET_STATE (att_view) == GTK_STATE_SELECTED && (g_list_length (priv->selected) < 2)) { @@ -358,15 +364,10 @@ button_release_event (GtkWidget *widget, { ModestAttachmentsViewPrivate *priv = MODEST_ATTACHMENTS_VIEW_GET_PRIVATE (atts_view); if (widget == gtk_grab_get_current ()) { - GdkWindow *parent_window; GtkWidget *att_view = NULL; - gint widget_x, widget_y; - - parent_window = gtk_widget_get_parent_window (widget); - gdk_window_get_origin (parent_window, &widget_x, &widget_y); att_view = get_att_view_at_coords (MODEST_ATTACHMENTS_VIEW (widget), - ((gint) event->x_root) - widget_x, ((gint) event->y_root) - widget_y); + (gint) event->x_root, (gint) event->y_root); if (att_view != NULL) { unselect_all (MODEST_ATTACHMENTS_VIEW (widget)); @@ -375,7 +376,6 @@ button_release_event (GtkWidget *widget, MODEST_ATTACHMENT_VIEW (att_view)); } priv->rubber_start = NULL; - gtk_grab_remove (widget); } return TRUE; @@ -389,14 +389,9 @@ motion_notify_event (GtkWidget *widget, ModestAttachmentsViewPrivate *priv = MODEST_ATTACHMENTS_VIEW_GET_PRIVATE (atts_view); if (gtk_grab_get_current () == widget) { GtkWidget *att_view = NULL; - GdkWindow *parent_window; - gint widget_x, widget_y; - - parent_window = gtk_widget_get_parent_window (widget); - gdk_window_get_origin (parent_window, &widget_x, &widget_y); att_view = get_att_view_at_coords (MODEST_ATTACHMENTS_VIEW (widget), - ((gint) event->x_root) - widget_x, ((gint) event->y_root) - widget_y); + (gint) event->x_root, (gint) event->y_root); if (att_view != NULL) { unselect_all (MODEST_ATTACHMENTS_VIEW (widget)); @@ -525,14 +520,17 @@ get_att_view_at_coords (ModestAttachmentsView *atts_view, for (node = att_view_list; node != NULL; node = g_list_next (node)) { GtkWidget *att_view = (GtkWidget *) node->data; gint pos_x, pos_y, w, h, int_x, int_y; + gint widget_x, widget_y; - pos_x = att_view->allocation.x; - pos_y = att_view->allocation.y; + gdk_window_get_origin (att_view->window, &widget_x, &widget_y); + + pos_x = widget_x; + pos_y = widget_y; w = att_view->allocation.width; h = att_view->allocation.height; - int_x = (gint) x; - int_y = (gint) y; + int_x = (gint) x - GTK_WIDGET (atts_view)->allocation.x; + int_y = (gint) y - GTK_WIDGET (atts_view)->allocation.y; if ((x >= pos_x) && (x <= (pos_x + w)) && (y >= pos_y) && (y <= (pos_y + h))) { result = att_view; @@ -628,7 +626,11 @@ static void clipboard_get (GtkClipboard *clipboard, GtkSelectionData *selection_ if (TNY_IS_MSG (mime_part)) { TnyHeader *header = tny_msg_get_header (TNY_MSG (mime_part)); if (TNY_IS_HEADER (header)) { - gtk_selection_data_set_text (selection_data, tny_header_get_subject (header), -1); + const gchar *subject = NULL; + subject = tny_header_get_subject (header); + if ((subject == NULL) || (subject[0] == '\0')) + subject = _("mail_va_no_subject"); + gtk_selection_data_set_text (selection_data, subject, -1); g_object_unref (header); } } else { @@ -720,6 +722,23 @@ modest_attachments_view_select_all (ModestAttachmentsView *atts_view) own_clipboard (atts_view); } +gboolean +modest_attachments_view_has_attachments (ModestAttachmentsView *atts_view) +{ + ModestAttachmentsViewPrivate *priv; + GList *children; + gboolean result; + + g_return_val_if_fail (MODEST_IS_ATTACHMENTS_VIEW (atts_view), FALSE); + priv = MODEST_ATTACHMENTS_VIEW_GET_PRIVATE (atts_view); + + children = gtk_container_get_children (GTK_CONTAINER (priv->box)); + result = (children != NULL); + g_list_free (children); + + return result; +} + static void own_clipboard (ModestAttachmentsView *atts_view) { @@ -736,3 +755,12 @@ own_clipboard (ModestAttachmentsView *atts_view) clipboard_get, clipboard_clear, G_OBJECT(atts_view)); } + +static gboolean +focus_out_event (GtkWidget *widget, GdkEventFocus *event, ModestAttachmentsView *atts_view) +{ + if (!gtk_widget_is_focus (widget)) + unselect_all (atts_view); + + return FALSE; +}