Do ignore empty recipients when checking names
[modest] / src / modest-dimming-rules-group.c
index 14ea232..5b98427 100644 (file)
@@ -36,6 +36,7 @@
 static void modest_dimming_rules_group_class_init (ModestDimmingRulesGroupClass *klass);
 static void modest_dimming_rules_group_init       (ModestDimmingRulesGroup *obj);
 static void modest_dimming_rules_group_finalize   (GObject *obj);
+static void modest_dimming_rules_group_dispose    (GObject *obj);
 
 #ifndef MODEST_TOOLKIT_GTK
 static void _insensitive_press_callback (GtkWidget *widget, gpointer user_data);
@@ -55,6 +56,7 @@ struct _ModestDimmingRulesGroupPrivate {
        gboolean notifications_enabled;
        GHashTable *rules_map;
        GSList *widget_rules;
+       gboolean window_weak_ref;
 };
 
 
@@ -100,6 +102,7 @@ modest_dimming_rules_group_class_init (ModestDimmingRulesGroupClass *klass)
 
        parent_class            = g_type_class_peek_parent (klass);
        gobject_class->finalize = modest_dimming_rules_group_finalize;
+       gobject_class->dispose  = modest_dimming_rules_group_dispose;
 
        g_type_class_add_private (gobject_class, sizeof(ModestDimmingRulesGroupPrivate));
 }
@@ -119,6 +122,7 @@ modest_dimming_rules_group_init (ModestDimmingRulesGroup *obj)
                                                 (GDestroyNotify) g_free,
                                                 (GDestroyNotify) g_object_unref);
        priv->widget_rules = NULL;
+       priv->window_weak_ref = FALSE;
 }
 
 static void
@@ -128,16 +132,32 @@ modest_dimming_rules_group_finalize (GObject *obj)
 
        priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(obj);
 
-       if (priv->name != NULL)
-               g_free(priv->name);
+       if (priv->window && priv->window_weak_ref) {
+               g_object_weak_unref (G_OBJECT (priv->window), on_window_destroy, obj);
+               priv->window_weak_ref = FALSE;
+       }
+
+       G_OBJECT_CLASS(parent_class)->finalize (obj);
+}
+
+static void
+modest_dimming_rules_group_dispose (GObject *obj)
+{
+       ModestDimmingRulesGroupPrivate *priv;
+
+       priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(obj);
 
-       if (priv->rules_map != NULL)
+       if (priv->rules_map != NULL) {
                g_hash_table_destroy (priv->rules_map);
+               priv->rules_map = NULL;
+       }
 
-       if (priv->widget_rules != NULL)
+       if (priv->widget_rules != NULL) {
                g_slist_foreach (priv->widget_rules, (GFunc) g_object_unref, NULL);
+               priv->widget_rules = NULL;
+       }
 
-       G_OBJECT_CLASS(parent_class)->finalize (obj);
+       G_OBJECT_CLASS(parent_class)->dispose (obj);
 }
 
 
@@ -222,7 +242,11 @@ modest_dimming_rules_group_add_widget_rule (ModestDimmingRulesGroup *self,
        priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(self);
 
        /* Set window to process dimming rules */
+       if (priv->window_weak_ref)
+               g_object_weak_unref ((GObject *) priv->window, on_window_destroy, self);
        priv->window = MODEST_WINDOW (window);
+       g_object_weak_ref (G_OBJECT (window), on_window_destroy, self);
+       priv->window_weak_ref = TRUE;
 
        dim_rule = modest_dimming_rule_new_from_widget (priv->window,
                                                        (ModestDimmingCallback) callback,
@@ -252,8 +276,11 @@ modest_dimming_rules_group_add_rules (ModestDimmingRulesGroup *self,
        priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(self);
 
        /* Set window to process dimming rules */
+       if (priv->window_weak_ref)
+               g_object_weak_unref ((GObject *) priv->window, on_window_destroy, self);
        priv->window = MODEST_WINDOW (window);
        g_object_weak_ref (G_OBJECT (window), on_window_destroy, self);
+       priv->window_weak_ref = TRUE;
 
        /* Add dimming rules */
        for (i=0; i < n_elements; i++) {
@@ -354,10 +381,13 @@ _insensitive_press_callback (GtkWidget *widget, gpointer user_data)
        notification = modest_dimming_rule_get_notification (rule);
        if (notification == NULL)
                goto frees;
-       
+
+       /* Notifications for dimmed items are not shown in Hildon2 */
+#ifndef MODEST_TOOLKIT_HILDON2
        /* Show notification banner */
-       modest_platform_information_banner (NULL, NULL, notification);  
-       
+       modest_platform_information_banner (NULL, NULL, notification);
+#endif
+
        /* Free */
  frees:
        if (group != NULL)