Files
evolution/e-util/e-alert-activity.c
Matthew Barnes b5a4e10a04 Add option to escape EAlert strings.
EAlertDialog wants the primary and secondary strings escaped for use in
markup text, EActivityProxy does not use markup.  So make it an explicit
part of the EAlert API.
2010-02-17 12:15:48 -05:00

268 lines
7.0 KiB
C

/*
* e-alert-activity.c
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) version 3.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with the program; if not, see <http://www.gnu.org/licenses/>
*
* Authors:
* Jonathon Jongsma <jonathon.jongsma@collabora.co.uk>
*
* Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
* Copyright (C) 2009 Intel Corporation
*
*/
#include "e-alert-activity.h"
#include "e-alert-dialog.h"
#define E_ALERT_ACTIVITY_GET_PRIVATE(obj) \
(G_TYPE_INSTANCE_GET_PRIVATE \
((obj), E_TYPE_ALERT_ACTIVITY, EAlertActivityPrivate))
struct _EAlertActivityPrivate {
GtkWidget *message_dialog;
};
enum {
PROP_0,
PROP_MESSAGE_DIALOG
};
static gpointer parent_class;
static void
alert_activity_set_message_dialog (EAlertActivity *alert_activity,
GtkWidget *message_dialog)
{
g_return_if_fail (alert_activity->priv->message_dialog == NULL);
alert_activity->priv->message_dialog = g_object_ref (message_dialog);
}
static void
alert_activity_set_property (GObject *object,
guint property_id,
const GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_MESSAGE_DIALOG:
alert_activity_set_message_dialog (
E_ALERT_ACTIVITY (object),
g_value_get_object (value));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
alert_activity_get_property (GObject *object,
guint property_id,
GValue *value,
GParamSpec *pspec)
{
switch (property_id) {
case PROP_MESSAGE_DIALOG:
g_value_set_object (
value, e_alert_activity_get_message_dialog (
E_ALERT_ACTIVITY (object)));
return;
}
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
alert_activity_dispose (GObject *object)
{
EAlertActivityPrivate *priv;
priv = E_ALERT_ACTIVITY_GET_PRIVATE (object);
if (priv->message_dialog != NULL) {
g_object_unref (priv->message_dialog);
priv->message_dialog = NULL;
}
/* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (parent_class)->dispose (object);
}
static void
alert_activity_constructed (GObject *object)
{
EActivity *activity;
EAlertActivity *alert_activity;
EAlert *alert;
GtkWidget *message_dialog;
gchar *primary_text;
gchar *secondary_text;
alert_activity = E_ALERT_ACTIVITY (object);
message_dialog = e_alert_activity_get_message_dialog (alert_activity);
alert = e_alert_dialog_get_alert (E_ALERT_DIALOG (message_dialog));
primary_text = e_alert_get_primary_text (alert, FALSE);
secondary_text = e_alert_get_secondary_text (alert, FALSE);
g_object_unref (alert);
activity = E_ACTIVITY (alert_activity);
e_activity_set_primary_text (activity, primary_text);
e_activity_set_secondary_text (activity, secondary_text);
g_free (primary_text);
g_free (secondary_text);
/* This is a constructor property, so can't do it in init().
* XXX What we really want to do is override the property's
* default value, but GObject does not support that. */
e_activity_set_clickable (E_ACTIVITY (alert_activity), TRUE);
}
static void
alert_activity_clicked (EActivity *activity)
{
EAlertActivity *alert_activity;
GtkWidget *message_dialog;
e_activity_complete (activity);
alert_activity = E_ALERT_ACTIVITY (activity);
message_dialog = e_alert_activity_get_message_dialog (alert_activity);
gtk_dialog_run (GTK_DIALOG (message_dialog));
gtk_widget_hide (message_dialog);
/* Chain up to parent's clicked() method. */
E_ACTIVITY_CLASS (parent_class)->clicked (activity);
}
static void
alert_activity_timeout (ETimeoutActivity *activity)
{
e_activity_complete (E_ACTIVITY (activity));
/* Chain up to parent's timeout() method. */
E_TIMEOUT_ACTIVITY_CLASS (parent_class)->timeout (activity);
}
static void
alert_activity_class_init (EAlertActivityClass *class)
{
GObjectClass *object_class;
EActivityClass *activity_class;
ETimeoutActivityClass *timeout_activity_class;
parent_class = g_type_class_peek_parent (class);
g_type_class_add_private (class, sizeof (EAlertActivityPrivate));
object_class = G_OBJECT_CLASS (class);
object_class->set_property = alert_activity_set_property;
object_class->get_property = alert_activity_get_property;
object_class->dispose = alert_activity_dispose;
object_class->constructed = alert_activity_constructed;
activity_class = E_ACTIVITY_CLASS (class);
activity_class->clicked = alert_activity_clicked;
timeout_activity_class = E_TIMEOUT_ACTIVITY_CLASS (class);
timeout_activity_class->timeout = alert_activity_timeout;
g_object_class_install_property (
object_class,
PROP_MESSAGE_DIALOG,
g_param_spec_object (
"message-dialog",
NULL,
NULL,
GTK_TYPE_DIALOG,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT_ONLY));
}
static void
alert_activity_init (EAlertActivity *alert_activity)
{
alert_activity->priv = E_ALERT_ACTIVITY_GET_PRIVATE (alert_activity);
e_timeout_activity_set_timeout (E_TIMEOUT_ACTIVITY (alert_activity), 60);
}
GType
e_alert_activity_get_type (void)
{
static GType type = 0;
if (G_UNLIKELY (type == 0)) {
static const GTypeInfo type_info = {
sizeof (EAlertActivityClass),
(GBaseInitFunc) NULL,
(GBaseFinalizeFunc) NULL,
(GClassInitFunc) alert_activity_class_init,
(GClassFinalizeFunc) NULL,
NULL, /* class_data */
sizeof (EAlertActivity),
0, /* n_preallocs */
(GInstanceInitFunc) alert_activity_init,
NULL /* value_table */
};
type = g_type_register_static (
E_TYPE_TIMEOUT_ACTIVITY, "EAlertActivity",
&type_info, 0);
}
return type;
}
EActivity *
e_alert_activity_new_info (GtkWidget *message_dialog)
{
g_return_val_if_fail (GTK_IS_DIALOG (message_dialog), NULL);
return g_object_new (
E_TYPE_ALERT_ACTIVITY,
"icon-name", "dialog-information",
"message-dialog", message_dialog, NULL);
}
EActivity *
e_alert_activity_new_error (GtkWidget *message_dialog)
{
g_return_val_if_fail (GTK_IS_DIALOG (message_dialog), NULL);
return g_object_new (
E_TYPE_ALERT_ACTIVITY,
"icon-name", "dialog-error",
"message-dialog", message_dialog, NULL);
}
EActivity *
e_alert_activity_new_warning (GtkWidget *message_dialog)
{
g_return_val_if_fail (GTK_IS_DIALOG (message_dialog), NULL);
return g_object_new (
E_TYPE_ALERT_ACTIVITY,
"icon-name", "dialog-warning",
"message-dialog", message_dialog, NULL);
}
GtkWidget *
e_alert_activity_get_message_dialog (EAlertActivity *alert_activity)
{
g_return_val_if_fail (E_IS_ALERT_ACTIVITY (alert_activity), NULL);
return alert_activity->priv->message_dialog;
}