* Increase performance of dimming rules manager, avoiding call
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Wed, 20 Jun 2007 13:51:37 +0000 (13:51 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Wed, 20 Jun 2007 13:51:37 +0000 (13:51 +0000)
get_selected_headers to check if no headers were selected to
perform operation.

pmo-trunk-r2335

src/modest-ui-dimming-rules.c
src/widgets/modest-header-view.c
src/widgets/modest-header-view.h

index ade82f1..13ba2d8 100644 (file)
@@ -1010,7 +1010,7 @@ _invalid_msg_selected (ModestMainWindow *win,
 {
        GtkWidget *header_view = NULL;          
        GtkWidget *folder_view = NULL;
-       TnyList *selected_headers = NULL;
+       gboolean selected_headers = FALSE;
        gboolean result = FALSE;
 
        g_return_val_if_fail (MODEST_IS_MAIN_WINDOW(win), FALSE);
@@ -1025,25 +1025,21 @@ _invalid_msg_selected (ModestMainWindow *win,
                                                           MODEST_WIDGET_TYPE_FOLDER_VIEW);
 
        /* Get selected headers */
-       selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
+       selected_headers = modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view));
 
        /* Check dimmed rule (TODO: check focus on widgets */   
        if (!result) {
-               result = ((selected_headers == NULL) ||
+               result = ((!selected_headers) ||
                          (gtk_widget_is_focus (folder_view)));
                if (result)
                        modest_dimming_rule_set_notification (rule, _("mcen_ib_no_message_selected"));
        }
        if (!result && unique) {
-               result = tny_list_get_length (selected_headers) > 1;
+               result = modest_header_view_count_selected_headers (MODEST_HEADER_VIEW(header_view)) > 1;
                if (result)
                        modest_dimming_rule_set_notification (rule, _("mcen_ib_select_one_message"));
        }
 
-       /* free */
-       if (selected_headers != NULL) 
-               g_object_unref (selected_headers);
-
        return result;
 }
 
@@ -1064,6 +1060,11 @@ _already_opened_msg (ModestWindow *win)
        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
 
+
+       /* Check no selection */
+       if (!modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view)))
+           return FALSE;
+           
        /* Get selected headers */
        selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
        if (selected_headers == NULL) 
@@ -1106,6 +1107,10 @@ _selected_msg_marked_as (ModestWindow *win,
        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
 
+       /* Check no selection */
+       if (!modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view)))
+           return TRUE;
+
        /* Get selected headers */
        selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
        if (selected_headers == NULL) 
@@ -1164,6 +1169,10 @@ _msg_download_completed (ModestMainWindow *win)
        header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                           MODEST_WIDGET_TYPE_HEADER_VIEW);
 
+       /* Check no selection */
+       if (!modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view)))
+           return TRUE;
+
        /* Get selected headers */
        selected_headers = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
        if (selected_headers == NULL) 
@@ -1223,6 +1232,10 @@ _selected_msg_sent_in_progress (ModestWindow *win)
                header_view = modest_main_window_get_child_widget (MODEST_MAIN_WINDOW(win),
                                                                   MODEST_WIDGET_TYPE_HEADER_VIEW);
                
+               /* Check no selection */
+               if (!modest_header_view_has_selected_headers (MODEST_HEADER_VIEW(header_view)))
+                   return FALSE;
+
                /* Get selected headers */
                header_list = modest_header_view_get_selected_headers (MODEST_HEADER_VIEW(header_view));
 
index e8d2a89..6c01978 100644 (file)
@@ -588,6 +588,37 @@ modest_header_view_new (TnyFolder *folder, ModestHeaderViewStyle style)
 }
 
 
+guint
+modest_header_view_count_selected_headers (ModestHeaderView *self)
+{
+       GtkTreeSelection *sel;
+       guint selected_rows;
+
+       g_return_val_if_fail (self, 0);
+       
+       /* Get selection object and check selected rows count */
+       sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(self));
+       selected_rows = gtk_tree_selection_count_selected_rows (sel);
+       
+       return selected_rows;
+}
+
+gboolean
+modest_header_view_has_selected_headers (ModestHeaderView *self)
+{
+       GtkTreeSelection *sel;
+       gboolean empty;
+
+       g_return_val_if_fail (self, FALSE);
+       
+       /* Get selection object and check selected rows count */
+       sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(self));
+       empty = gtk_tree_selection_count_selected_rows (sel) == 0;
+       
+       return !empty;
+}
+
+
 TnyList * 
 modest_header_view_get_selected_headers (ModestHeaderView *self)
 {
index 5be0673..1d0124e 100644 (file)
@@ -220,6 +220,26 @@ gboolean   modest_header_view_set_style (ModestHeaderView *self,
 ModestHeaderViewStyle   modest_header_view_get_style (ModestHeaderView *self);
 
 /**
+ * modest_header_view_count_selected_headers:
+ * @self: a ModestHeaderView instance
+ * 
+ * Check selected headers counter. 
+ * Returns: the number of selected headers.
+ */
+guint
+modest_header_view_count_selected_headers (ModestHeaderView *self);
+
+/**
+ * modest_header_view_has_selected_headers:
+ * @self: a ModestHeaderView instance
+ * 
+ * Check if any row is selected on headers tree view. 
+ * Returns: TRUE if any header is selected, FALSE otherwise.
+ */
+gboolean
+modest_header_view_has_selected_headers (ModestHeaderView *self);
+
+/**
  * modest_header_view_get_selected_headers:
  * @self: a ModestHeaderView instance
  *