X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-dimming-rules-group.c;h=af23b007a83cc2ab4372dc80a13b036288074e6b;hp=fe9ff6fb8fc00852380726d4a21c1f1c780292d6;hb=dafad623b1c0f184142ce09a51882fa967d7eb09;hpb=2da007966ea445b3574320d9c914c7475df64c59 diff --git a/src/modest-dimming-rules-group.c b/src/modest-dimming-rules-group.c index fe9ff6f..af23b00 100644 --- a/src/modest-dimming-rules-group.c +++ b/src/modest-dimming-rules-group.c @@ -30,17 +30,23 @@ #include "modest-dimming-rules-group.h" #include "modest-dimming-rules-group-priv.h" #include "modest-dimming-rule.h" +#include "modest-platform.h" 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 _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)) @@ -49,6 +55,7 @@ struct _ModestDimmingRulesGroupPrivate { static GObjectClass *parent_class = NULL; static void _execute_dimming_rule (gpointer key, gpointer value, gpointer user_data); +static void _insensitive_press_callback (GtkWidget *widget, gpointer user_data); @@ -120,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; @@ -131,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; } @@ -157,6 +166,7 @@ modest_dimming_rules_group_add_rules (ModestDimmingRulesGroup *self, ModestDimmingRulesGroupPrivate *priv; ModestDimmingRule *dim_rule = NULL; ModestDimmingEntry entry; + GtkWidget *widget = NULL; gboolean unique = FALSE; guint i; @@ -178,21 +188,43 @@ modest_dimming_rules_group_add_rules (ModestDimmingRulesGroup *self, unique = g_hash_table_lookup (priv->rules_map, entry.action_path) == NULL; if (!unique) continue; + /* Check action path is valid */ + widget = modest_window_get_action_widget (MODEST_WINDOW (user_data), entry.action_path); + if (widget == NULL) continue; + /* Create a new dimming rule */ dim_rule = modest_dimming_rule_new (MODEST_WINDOW(user_data), (ModestDimmingCallback) entry.callback, 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); + /* 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); @@ -204,6 +236,37 @@ _execute_dimming_rule (gpointer key, gpointer value, gpointer user_data) { g_return_if_fail (MODEST_IS_DIMMING_RULE (value)); - /* Process diomming rule */ + /* Process dimming rule */ modest_dimming_rule_process (MODEST_DIMMING_RULE(value)); } + +static void +_insensitive_press_callback (GtkWidget *widget, gpointer user_data) +{ + 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) + goto frees; + + /* Show notification banner */ + modest_platform_information_banner (NULL, NULL, notification); + + /* Free */ + frees: + if (group != NULL) + g_object_unref(group); + if (notification != NULL) + g_free(notification); +}