* src/widgets/modest-attachments-view.[ch]:
authorJose Dapena Paz <jdapena@igalia.com>
Sat, 12 Jan 2008 19:24:00 +0000 (19:24 +0000)
committerJose Dapena Paz <jdapena@igalia.com>
Sat, 12 Jan 2008 19:24:00 +0000 (19:24 +0000)
        * Implemented new signal that notifies everytime the selection
          is changed.
* src/maemo/modest-msg-edit-window.c:
        * Execute dimming rules on attachments selection change. This
          way we properly update remove attachment status.
* src/modest-ui-dimming-rules.c:
        * Now we only dim editor remove attachments action if
          there are no selected attachments (fixes NB#78873).

pmo-trunk-r4026

src/maemo/modest-msg-edit-window.c
src/modest-ui-dimming-rules.c
src/widgets/modest-attachments-view.c
src/widgets/modest-attachments-view.h

index 7af8f5d..cf25101 100644 (file)
@@ -96,6 +96,7 @@ static void  modest_msg_edit_window_finalize     (GObject *obj);
 
 static gboolean msg_body_focus (GtkWidget *focus, GdkEventFocus *event, gpointer userdata);
 static void  body_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor);
+static void  attachments_selection_changed (ModestAttachmentsView *buffer, ModestMsgEditWindow *editor);
 static void  recpt_field_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor);
 
 static void  text_buffer_refresh_attributes (WPTextBuffer *buffer, ModestMsgEditWindow *window);
@@ -516,6 +517,8 @@ connect_signals (ModestMsgEditWindow *obj)
                          G_CALLBACK (text_buffer_can_redo), obj);
        g_signal_connect (G_OBJECT (priv->text_buffer), "changed",
                           G_CALLBACK (body_changed), obj);
+       g_signal_connect (G_OBJECT (priv->attachments_view), "selection-changed",
+                          G_CALLBACK (attachments_selection_changed), obj);
        g_signal_connect (G_OBJECT (obj), "window-state-event",
                          G_CALLBACK (modest_msg_edit_window_window_state_event),
                          NULL);
@@ -2767,6 +2770,12 @@ body_changed (GtkTextBuffer *buffer, ModestMsgEditWindow *editor)
        modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (editor));
 }
 
+static void
+attachments_selection_changed (ModestAttachmentsView *atts_view, ModestMsgEditWindow *window)
+{
+       modest_ui_actions_check_window_dimming_rules (MODEST_WINDOW (window));
+}
+
 void
 modest_msg_edit_window_reset_modified (ModestMsgEditWindow *editor)
 {
index b637877..88e8fc5 100644 (file)
@@ -1549,7 +1549,7 @@ modest_ui_dimming_rules_on_editor_remove_attachment (ModestWindow *win, gpointer
                n_att_selected = tny_list_get_length (selected_attachments);
                g_object_unref (selected_attachments);
 
-               dimmed = (n_att_selected != 1);
+               dimmed = (n_att_selected == 0);
        }
        
        return dimmed;
index a56ceba..392263d 100644 (file)
@@ -46,6 +46,7 @@ static GObjectClass *parent_class = NULL;
 /* signals */
 enum {
        ACTIVATE_SIGNAL,
+       SELECTION_CHANGED_SIGNAL,
        LAST_SIGNAL
 };
 
@@ -320,6 +321,15 @@ modest_attachments_view_class_init (ModestAttachmentsViewClass *klass)
                              NULL, NULL,
                              g_cclosure_marshal_VOID__OBJECT,
                              G_TYPE_NONE, 1, G_TYPE_OBJECT);
+
+       signals[SELECTION_CHANGED_SIGNAL] =
+               g_signal_new ("selection-changed",
+                             G_TYPE_FROM_CLASS (object_class),
+                             G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION,
+                             G_STRUCT_OFFSET (ModestAttachmentsViewClass, selection_changed),
+                             NULL, NULL,
+                             g_cclosure_marshal_VOID__VOID,
+                             G_TYPE_NONE, 0);
        
        return;
 }
@@ -613,6 +623,8 @@ set_selected (ModestAttachmentsView *atts_view, ModestAttachmentView *att_view)
                g_object_unref (part);
        
        own_clipboard (atts_view);
+
+       g_signal_emit (G_OBJECT (atts_view), signals[SELECTION_CHANGED_SIGNAL], 0);
 }
 
 static void 
@@ -658,6 +670,8 @@ select_range (ModestAttachmentsView *atts_view, ModestAttachmentView *att1, Mode
        g_list_free (children);
        
        own_clipboard (atts_view);
+
+       g_signal_emit (G_OBJECT (atts_view), signals[SELECTION_CHANGED_SIGNAL], 0);
 }
 
 static void clipboard_get (GtkClipboard *clipboard, GtkSelectionData *selection_data,
@@ -756,6 +770,8 @@ modest_attachments_view_select_all (ModestAttachmentsView *atts_view)
        g_list_free (children);
 
        own_clipboard (atts_view);
+
+       g_signal_emit (G_OBJECT (atts_view), signals[SELECTION_CHANGED_SIGNAL], 0);
 }
 
 gboolean
@@ -794,6 +810,8 @@ focus_out_event (GtkWidget *widget, GdkEventFocus *event, ModestAttachmentsView
        if (!gtk_widget_is_focus (widget))
                unselect_all (atts_view);
 
+       g_signal_emit (G_OBJECT (atts_view), signals[SELECTION_CHANGED_SIGNAL], 0);
+
        return FALSE;
 }
 
index 89837ad..160efd8 100644 (file)
@@ -60,6 +60,7 @@ struct _ModestAttachmentsViewClass
        GtkEventBoxClass parent_class;
 
        void (*activate)           (ModestAttachmentsView *attachments_view, TnyMimePart *mime_part);
+       void (*selection_changed)  (ModestAttachmentsView *attachments_view);
 };
 
 GType modest_attachments_view_get_type (void);