*/
#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), \
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));
}
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
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,
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)
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;
}