* Disable notifications for dimmed menu items.
authorJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Fri, 6 Jul 2007 09:28:52 +0000 (09:28 +0000)
committerJavier Fernandez Garcia-Boente <jfernandez@igalia.com>
Fri, 6 Jul 2007 09:28:52 +0000 (09:28 +0000)
* Fixes: NB#62283, NB#62392, NB#62398, NB#61244, NB#61501

pmo-trunk-r2605

src/maemo/modest-main-window.c
src/maemo/modest-msg-view-window.c
src/modest-dimming-rule.c
src/modest-dimming-rule.h
src/modest-dimming-rules-group.c
src/modest-dimming-rules-group.h
src/modest-ui-dimming-rules.c

index f31079d..58c5a14 100644 (file)
@@ -807,8 +807,8 @@ modest_main_window_new (void)
        action_group = gtk_action_group_new ("ModestMainWindowActions");
        gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
 
-       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules");
-       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules");
+       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules", FALSE);
+       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules", TRUE);
 
        /* Add common actions */
        gtk_action_group_add_actions (action_group,
index d417495..8b833cc 100644 (file)
@@ -525,8 +525,8 @@ modest_msg_view_window_new (TnyMsg *msg,
        action_group = gtk_action_group_new ("ModestMsgViewWindowActions");
        gtk_action_group_set_translation_domain (action_group, GETTEXT_PACKAGE);
 
-       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules");
-       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules");
+       menu_rules_group = modest_dimming_rules_group_new ("ModestMenuDimmingRules", FALSE);
+       toolbar_rules_group = modest_dimming_rules_group_new ("ModestToolbarDimmingRules", TRUE);
 
        /* Add common actions */
        gtk_action_group_add_actions (action_group,
index 827c622..a481ce6 100644 (file)
@@ -35,6 +35,7 @@ static void modest_dimming_rule_finalize   (GObject *obj);
 
 typedef struct _ModestDimmingRulePrivate ModestDimmingRulePrivate;
 struct _ModestDimmingRulePrivate {
+       ModestDimmingRulesGroup *group;
        ModestWindow *win;
        ModestDimmingCallback dimming_rule;
        gchar *action_path;
@@ -90,6 +91,7 @@ modest_dimming_rule_init (ModestDimmingRule *obj)
        ModestDimmingRulePrivate *priv;
 
        priv = MODEST_DIMMING_RULE_GET_PRIVATE(obj);
+       priv->group= NULL;
        priv->win = NULL;
        priv->dimming_rule = NULL;
        priv->action_path = NULL;
@@ -103,6 +105,8 @@ modest_dimming_rule_finalize (GObject *obj)
 
        priv = MODEST_DIMMING_RULE_GET_PRIVATE(obj);
 
+       if (priv->group != NULL)
+               g_object_unref(priv->group);
        if (priv->action_path != NULL)
                g_free(priv->action_path);
        if (priv->notification != NULL)
@@ -160,6 +164,35 @@ modest_dimming_rule_process (ModestDimmingRule *self)
 }
 
 void
+modest_dimming_rule_set_group (ModestDimmingRule *rule,
+                              ModestDimmingRulesGroup *group)
+{
+       ModestDimmingRulePrivate *priv = NULL;
+
+       g_return_if_fail (MODEST_IS_DIMMING_RULE (rule));
+       g_return_if_fail (MODEST_IS_DIMMING_RULES_GROUP (group));
+       priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule);
+
+       if (priv->group == group) 
+               return;
+       if (priv->group != NULL) 
+               g_object_unref (priv->group);
+       priv->group = g_object_ref (group);                     
+}      
+
+ModestDimmingRulesGroup *
+modest_dimming_rule_get_group (ModestDimmingRule *rule)
+{
+       ModestDimmingRulePrivate *priv = NULL;
+       
+       g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), NULL);
+       priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule);
+       g_return_val_if_fail (MODEST_IS_DIMMING_RULES_GROUP (priv->group), NULL);
+       
+       return g_object_ref(priv->group);
+}
+
+void
 modest_dimming_rule_set_notification (ModestDimmingRule *rule,
                                      const gchar *notification)
 {
index 300d098..2cd03c0 100644 (file)
@@ -32,6 +32,7 @@
 
 #include <glib-object.h>
 #include "widgets/modest-window.h"
+#include "modest-dimming-rules-group.h"
 
 G_BEGIN_DECLS
 
@@ -93,6 +94,28 @@ ModestDimmingRule*    modest_dimming_rule_new     (ModestWindow *win,
  **/
 void modest_dimming_rule_process (ModestDimmingRule *self);
 
+/**
+ * modest_dimming_rule_set_group:
+ * @rule: a #ModestDimmingRule object to process.
+ * @group: a #ModestDimmingRulesGroup object to associate.
+ * 
+ * Creates a new reference of @group, associated to this "rule.
+ */
+void modest_dimming_rule_set_group (ModestDimmingRule *rule,
+                                   ModestDimmingRulesGroup *group);
+
+/**
+ * modest_dimming_rule_set_group:
+ * @rule: a #ModestDimmingRule object to process.
+ * 
+ * Gets a new reference of associated group of this @rule.
+ *
+ * @Returns: a new object reference of #ModestDimmingRulesGroup, or 
+ * NULL if invalid @rule.
+ */
+ModestDimmingRulesGroup *
+modest_dimming_rule_get_group (ModestDimmingRule *rule);
+
 void modest_dimming_rule_set_notification (ModestDimmingRule *rule,
                                           const gchar *notification);
 
index 75eb591..af23b00 100644 (file)
@@ -42,9 +42,11 @@ static void _insensitive_press_callback (GtkWidget *widget, gpointer user_data);
 typedef struct _ModestDimmingRulesGroupPrivate ModestDimmingRulesGroupPrivate;
 struct _ModestDimmingRulesGroupPrivate {       
        gchar *name;
+       gboolean notifications_enabled;
        GHashTable *rules_map;
 };
 
+
 #define MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(o)      (G_TYPE_INSTANCE_GET_PRIVATE((o), \
                                                    MODEST_TYPE_DIMMING_RULES_GROUP, \
                                                    ModestDimmingRulesGroupPrivate))
@@ -125,7 +127,8 @@ modest_dimming_rules_group_finalize (GObject *obj)
 
 
 ModestDimmingRulesGroup*
-modest_dimming_rules_group_new(const gchar *group_name)
+modest_dimming_rules_group_new(const gchar *group_name,
+                              gboolean notifications_enabled)
 {
        ModestDimmingRulesGroup *obj;
        ModestDimmingRulesGroupPrivate *priv;
@@ -136,6 +139,7 @@ modest_dimming_rules_group_new(const gchar *group_name)
 
        priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(obj);
        priv->name = g_strdup(group_name);
+       priv->notifications_enabled = notifications_enabled;
 
        return obj;
 }
@@ -194,18 +198,33 @@ modest_dimming_rules_group_add_rules (ModestDimmingRulesGroup *self,
                                                    entry.action_path);
                
                /* Connect insensitive-presss handler to show notifications */
-               g_signal_connect (G_OBJECT (widget), "insensitive-press", G_CALLBACK (_insensitive_press_callback), dim_rule);
+               g_signal_connect (G_OBJECT (widget), "insensitive-press", 
+                                 G_CALLBACK (_insensitive_press_callback), 
+                                 dim_rule);
 
                /* Register new dimming rule */         
+               modest_dimming_rule_set_group (dim_rule, self);
                g_hash_table_insert (priv->rules_map, g_strdup(entry.action_path), dim_rule);
        }
 }
 
+gboolean 
+modest_dimming_rules_group_notifications_enabled (ModestDimmingRulesGroup *self)
+{
+       ModestDimmingRulesGroupPrivate *priv;
+
+       g_return_val_if_fail (MODEST_IS_DIMMING_RULES_GROUP(self), FALSE);
+       priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(self);
+       
+       return priv->notifications_enabled;
+} 
+
 void 
 modest_dimming_rules_group_execute (ModestDimmingRulesGroup *self) 
 {
        ModestDimmingRulesGroupPrivate *priv;
 
+       g_return_if_fail (MODEST_IS_DIMMING_RULES_GROUP(self));
        priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(self);
 
        g_hash_table_foreach (priv->rules_map, _execute_dimming_rule, NULL);
@@ -224,19 +243,30 @@ _execute_dimming_rule (gpointer key, gpointer value, gpointer user_data)
 static void
 _insensitive_press_callback (GtkWidget *widget, gpointer user_data)
 {
-       ModestDimmingRule *rule;
+       ModestDimmingRulesGroup *group = NULL;
+       ModestDimmingRule *rule = NULL;
        gchar *notification = NULL;
 
        g_return_if_fail (MODEST_IS_DIMMING_RULE (user_data));
        rule = MODEST_DIMMING_RULE (user_data);
 
+       /* Check if this group has notification system enabled */
+       group = modest_dimming_rule_get_group (rule);
+       if (!modest_dimming_rules_group_notifications_enabled (group))
+               goto frees;
+
        /* Get specific notification */
        notification = modest_dimming_rule_get_notification (rule);
-       if (notification == NULL) return;
-
+       if (notification == NULL)
+               goto frees;
+       
        /* Show notification banner */
        modest_platform_information_banner (NULL, NULL, notification);  
-
+       
        /* Free */
-       g_free(notification);
+ frees:
+       if (group != NULL)
+               g_object_unref(group);
+       if (notification != NULL)
+               g_free(notification);
 }
index aa3941a..415c1ea 100644 (file)
@@ -69,14 +69,18 @@ GType        modest_dimming_rules_group_get_type    (void) G_GNUC_CONST;
 /**
  * modest_dimming_rules_group_new:
  * @group_name: the name to identify new created group 
+ * @notifications_enabled: notification system status.
  * 
  * Creates a new instance of class #ModestDimmingRulesGroup. The @group_name
  * parameter identifies uniquely new group created, so it must not be NULL.
+ * The @notifications_enabled: parameter sets notification system status
+ * when dimmed rule is called.
  *
  * Returns: a new #ModestDimmingRulesGroup instance, or NULL if parameters 
  * are invalid.
  **/
-ModestDimmingRulesGroup*    modest_dimming_rules_group_new     (const gchar *group_name);
+ModestDimmingRulesGroup*    modest_dimming_rules_group_new     (const gchar *group_name,
+                                                               gboolean notifications_enabled);
 
 
 
index 37042ff..fed9240 100644 (file)
@@ -953,8 +953,8 @@ modest_ui_dimming_rules_on_view_previous (ModestWindow *win, gpointer user_data)
        }
        if (!dimmed) {
                dimmed = modest_msg_view_window_first_message_selected (MODEST_MSG_VIEW_WINDOW(win));
-               if (dimmed)
-                       modest_dimming_rule_set_notification (rule, "");
+/*             if (dimmed) */
+/*                     modest_dimming_rule_set_notification (rule, ""); */
        }               
 
        return dimmed;
@@ -978,8 +978,8 @@ modest_ui_dimming_rules_on_view_next (ModestWindow *win, gpointer user_data)
        }
        if (!dimmed) {
                dimmed = modest_msg_view_window_last_message_selected (MODEST_MSG_VIEW_WINDOW(win));
-               if (dimmed)
-                       modest_dimming_rule_set_notification (rule, "");
+/*             if (dimmed) */
+/*                     modest_dimming_rule_set_notification (rule, ""); */
        }               
 
        return dimmed;