X-Git-Url: http://git.maemo.org/git/?p=modest;a=blobdiff_plain;f=src%2Fmodest-dimming-rule.c;h=45951645973b6750ed96a0fabf5ce04248bae5bc;hp=884ccc76b3a4995b07d13c9602c5a9d5c625c7d9;hb=12a672c559d983c4e49a7e4054ee14c0177ecb1c;hpb=2da007966ea445b3574320d9c914c7475df64c59 diff --git a/src/modest-dimming-rule.c b/src/modest-dimming-rule.c index 884ccc7..4595164 100644 --- a/src/modest-dimming-rule.c +++ b/src/modest-dimming-rule.c @@ -28,16 +28,21 @@ */ #include "modest-dimming-rule.h" +#include "modest-ui-dimming-manager.h" static void modest_dimming_rule_class_init (ModestDimmingRuleClass *klass); static void modest_dimming_rule_init (ModestDimmingRule *obj); static void modest_dimming_rule_finalize (GObject *obj); +static void modest_dimming_rule_dispose (GObject *obj); typedef struct _ModestDimmingRulePrivate ModestDimmingRulePrivate; struct _ModestDimmingRulePrivate { + ModestDimmingRulesGroup *group; ModestWindow *win; ModestDimmingCallback dimming_rule; gchar *action_path; + GtkWidget *widget; + gchar *notification; }; #define MODEST_DIMMING_RULE_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE((o), \ @@ -79,6 +84,7 @@ modest_dimming_rule_class_init (ModestDimmingRuleClass *klass) parent_class = g_type_class_peek_parent (klass); gobject_class->finalize = modest_dimming_rule_finalize; + gobject_class->dispose = modest_dimming_rule_dispose; g_type_class_add_private (gobject_class, sizeof(ModestDimmingRulePrivate)); } @@ -89,9 +95,12 @@ 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; + priv->widget = NULL; + priv->notification = NULL; } static void @@ -101,12 +110,31 @@ 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) + g_free(priv->notification); G_OBJECT_CLASS(parent_class)->finalize (obj); } +static void +modest_dimming_rule_dispose (GObject *obj) +{ + ModestDimmingRulePrivate *priv; + + priv = MODEST_DIMMING_RULE_GET_PRIVATE(obj); + + if (priv->group != NULL) { + g_object_unref (priv->group); + priv->group = NULL; + } + + G_OBJECT_CLASS(parent_class)->dispose (obj); +} + ModestDimmingRule* modest_dimming_rule_new(ModestWindow *win, @@ -130,6 +158,28 @@ modest_dimming_rule_new(ModestWindow *win, return obj; } +ModestDimmingRule* +modest_dimming_rule_new_from_widget (ModestWindow *win, + ModestDimmingCallback dimming_rule, + GtkWidget *widget) +{ + ModestDimmingRule *obj; + ModestDimmingRulePrivate *priv; + + g_return_val_if_fail (MODEST_IS_WINDOW (win), NULL); + g_return_val_if_fail (dimming_rule != NULL, NULL); + g_return_val_if_fail (GTK_IS_WIDGET (widget), NULL); + + obj = MODEST_DIMMING_RULE(g_object_new(MODEST_TYPE_DIMMING_RULE, NULL)); + + priv = MODEST_DIMMING_RULE_GET_PRIVATE(obj); + priv->win = win; + priv->dimming_rule = dimming_rule; + priv->widget = widget; + + return obj; +} + void modest_dimming_rule_process (ModestDimmingRule *self) @@ -142,13 +192,119 @@ modest_dimming_rule_process (ModestDimmingRule *self) priv = MODEST_DIMMING_RULE_GET_PRIVATE(self); g_return_if_fail (priv->win != NULL); g_return_if_fail (priv->dimming_rule != NULL); - g_return_if_fail (priv->action_path != NULL); + g_return_if_fail ((priv->action_path != NULL)|| GTK_IS_WIDGET (priv->widget)); /* process dimming rule */ - dimmed = priv->dimming_rule (priv->win, NULL); + dimmed = priv->dimming_rule (priv->win, self); /* Update dimming status */ - action = modest_window_get_action (priv->win, priv->action_path); - g_return_if_fail (action != NULL); - gtk_action_set_sensitive (action, !dimmed); + if (priv->action_path != NULL) { + action = modest_window_get_action (priv->win, priv->action_path); + if (action != NULL) + gtk_action_set_sensitive (action, !dimmed); + else + g_printerr ("modest: action path '%s' has not associatd action\n", priv->action_path); + } else if (priv->widget != NULL) { + ModestUIDimmingMode mode; + + mode = modest_ui_dimming_manager_get_widget_dimming_mode (priv->widget); + switch (mode) { + case MODEST_UI_DIMMING_MODE_HIDE: + if (dimmed) { + gtk_widget_hide (GTK_WIDGET (priv->widget)); + } else { + gtk_widget_show (GTK_WIDGET (priv->widget)); + } + break; + case MODEST_UI_DIMMING_MODE_DIM: + default: + gtk_widget_set_sensitive (priv->widget, !dimmed); + break; + } + } +} + +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) +{ + ModestDimmingRulePrivate *priv = NULL; + + g_return_if_fail (MODEST_IS_DIMMING_RULE (rule)); + priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule); + + /* Free previous notification */ + if (priv->notification != NULL) { + g_free(priv->notification); + priv->notification = NULL; + } + + /* Set new notification message */ + if (notification != NULL) + priv->notification = g_strdup(notification); +} + +gchar * +modest_dimming_rule_get_notification (ModestDimmingRule *rule) +{ + ModestDimmingRulePrivate *priv = NULL; + + g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), NULL); + priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule); + + return g_strdup(priv->notification); +} + +GtkWidget * +modest_dimming_rule_get_widget (ModestDimmingRule *rule) +{ + ModestDimmingRulePrivate *priv = NULL; + + g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), NULL); + priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule); + + if (priv->action_path != NULL) + return modest_window_get_action_widget (MODEST_WINDOW (priv->win), priv->action_path); + else + return priv->widget; +} + +const gchar * +modest_dimming_rule_get_action_path (ModestDimmingRule *rule) +{ + ModestDimmingRulePrivate *priv = NULL; + + g_return_val_if_fail (MODEST_IS_DIMMING_RULE (rule), NULL); + priv = MODEST_DIMMING_RULE_GET_PRIVATE(rule); + + return priv->action_path; }