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,
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,
typedef struct _ModestDimmingRulePrivate ModestDimmingRulePrivate;
struct _ModestDimmingRulePrivate {
+ ModestDimmingRulesGroup *group;
ModestWindow *win;
ModestDimmingCallback dimming_rule;
gchar *action_path;
ModestDimmingRulePrivate *priv;
priv = MODEST_DIMMING_RULE_GET_PRIVATE(obj);
+ priv->group= NULL;
priv->win = NULL;
priv->dimming_rule = NULL;
priv->action_path = NULL;
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)
}
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)
{
#include <glib-object.h>
#include "widgets/modest-window.h"
+#include "modest-dimming-rules-group.h"
G_BEGIN_DECLS
**/
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);
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))
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;
priv = MODEST_DIMMING_RULES_GROUP_GET_PRIVATE(obj);
priv->name = g_strdup(group_name);
+ priv->notifications_enabled = notifications_enabled;
return obj;
}
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);
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);
}
/**
* 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);
}
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;
}
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;