aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-alert-dialog.c
diff options
context:
space:
mode:
Diffstat (limited to 'e-util/e-alert-dialog.c')
-rw-r--r--e-util/e-alert-dialog.c297
1 files changed, 153 insertions, 144 deletions
diff --git a/e-util/e-alert-dialog.c b/e-util/e-alert-dialog.c
index 0057ed91aa..4d6fcd8e6e 100644
--- a/e-util/e-alert-dialog.c
+++ b/e-util/e-alert-dialog.c
@@ -24,95 +24,90 @@
#include "e-alert-dialog.h"
#include "e-util.h"
-G_DEFINE_TYPE (
- EAlertDialog,
- e_alert_dialog,
- GTK_TYPE_DIALOG)
-
-#define ALERT_DIALOG_PRIVATE(o) \
+#define E_ALERT_DIALOG_GET_PRIVATE(o) \
(G_TYPE_INSTANCE_GET_PRIVATE ((o), E_TYPE_ALERT_DIALOG, EAlertDialogPrivate))
-struct _EAlertDialogPrivate
-{
+struct _EAlertDialogPrivate {
GtkWindow *parent;
EAlert *alert;
};
-enum
-{
+enum {
PROP_0,
- PROP_PARENT,
PROP_ALERT
};
+G_DEFINE_TYPE (
+ EAlertDialog,
+ e_alert_dialog,
+ GTK_TYPE_DIALOG)
+
static void
-e_alert_dialog_set_property (GObject *object, guint property_id,
- const GValue *value, GParamSpec *pspec)
+alert_dialog_set_alert (EAlertDialog *dialog,
+ EAlert *alert)
{
- EAlertDialog *dialog = (EAlertDialog*) object;
+ g_return_if_fail (E_IS_ALERT (alert));
+ g_return_if_fail (dialog->priv->alert == NULL);
- switch (property_id)
- {
- case PROP_PARENT:
- dialog->priv->parent = g_value_dup_object (value);
- break;
+ dialog->priv->alert = g_object_ref (alert);
+}
+
+static void
+alert_dialog_set_property (GObject *object,
+ guint property_id,
+ const GValue *value,
+ GParamSpec *pspec)
+{
+ switch (property_id) {
case PROP_ALERT:
- dialog->priv->alert = g_value_dup_object (value);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ alert_dialog_set_alert (
+ E_ALERT_DIALOG (object),
+ g_value_get_object (value));
+ return;
}
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
-e_alert_dialog_get_property (GObject *object, guint property_id,
- GValue *value, GParamSpec *pspec)
+alert_dialog_get_property (GObject *object,
+ guint property_id,
+ GValue *value,
+ GParamSpec *pspec)
{
- EAlertDialog *dialog = (EAlertDialog*) object;
-
- switch (property_id)
- {
- case PROP_PARENT:
- g_value_set_object (value, dialog->priv->parent);
- break;
+ switch (property_id) {
case PROP_ALERT:
- g_value_set_object (value, dialog->priv->alert);
- break;
- default:
- G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
+ g_value_set_object (
+ value, e_alert_dialog_get_alert (
+ E_ALERT_DIALOG (object)));
+ return;
}
+
+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
}
static void
-e_alert_dialog_dispose (GObject *object)
+alert_dialog_dispose (GObject *object)
{
- EAlertDialog *dialog = (EAlertDialog*) object;
+ EAlertDialogPrivate *priv;
- if (dialog->priv->parent) {
- g_object_unref (dialog->priv->parent);
- dialog->priv->parent = NULL;
- }
+ priv = E_ALERT_DIALOG_GET_PRIVATE (object);
- if (dialog->priv->alert) {
- g_object_unref (dialog->priv->alert);
- dialog->priv->alert = NULL;
+ if (priv->alert) {
+ g_object_unref (priv->alert);
+ priv->alert = NULL;
}
+ /* Chain up to parent's dispose() method. */
G_OBJECT_CLASS (e_alert_dialog_parent_class)->dispose (object);
}
static void
-e_alert_dialog_init (EAlertDialog *self)
-{
- self->priv = ALERT_DIALOG_PRIVATE (self);
-}
-
-static void
-e_alert_dialog_constructed (GObject *obj)
+alert_dialog_constructed (GObject *object)
{
- EAlertDialog *self = (EAlertDialog*) obj;
+ EAlertDialog *self = (EAlertDialog*) object;
EAlert *alert;
- struct _e_alert_button *b;
+ EAlertButton *b;
GtkWidget *action_area;
GtkWidget *content_area;
GtkWidget *container;
@@ -123,58 +118,49 @@ e_alert_dialog_constructed (GObject *obj)
g_return_if_fail (self != NULL);
- self->priv = ALERT_DIALOG_PRIVATE (self);
- alert = self->priv->alert;
+ alert = e_alert_dialog_get_alert (E_ALERT_DIALOG (self));
gtk_window_set_title (GTK_WINDOW (self), " ");
- action_area = gtk_dialog_get_action_area ((GtkDialog*) self);
- content_area = gtk_dialog_get_content_area ((GtkDialog*) self);
+ action_area = gtk_dialog_get_action_area (GTK_DIALOG (self));
+ content_area = gtk_dialog_get_content_area (GTK_DIALOG (self));
#if !GTK_CHECK_VERSION(2,90,7)
g_object_set (self, "has-separator", FALSE, NULL);
#endif
- gtk_widget_ensure_style ((GtkWidget *)self);
+ gtk_widget_ensure_style (GTK_WIDGET (self));
gtk_container_set_border_width (GTK_CONTAINER (action_area), 12);
gtk_container_set_border_width (GTK_CONTAINER (content_area), 0);
- if (self->priv->parent)
- gtk_window_set_transient_for ((GtkWindow *)self, self->priv->parent);
- else
- g_warning (
- "Something called %s() with a NULL parent window. "
- "This is no longer legal, please fix it.", G_STRFUNC);
-
- gtk_window_set_destroy_with_parent ((GtkWindow *)self, TRUE);
+ gtk_window_set_destroy_with_parent (GTK_WINDOW (self), TRUE);
b = e_alert_peek_buttons (alert);
if (b == NULL) {
- gtk_dialog_add_button ((GtkDialog*) self, GTK_STOCK_OK, GTK_RESPONSE_OK);
+ gtk_dialog_add_button (
+ GTK_DIALOG (self), GTK_STOCK_OK, GTK_RESPONSE_OK);
} else {
for (; b; b=b->next) {
if (b->stock) {
- if (b->label) {
-#if 0
- /* FIXME: So although this looks like it will work, it wont.
- Need to do it the hard way ... it also breaks the
- default_response stuff */
- w = gtk_button_new_from_stock (b->stock);
- gtk_button_set_label ((GtkButton *)w, b->label);
- gtk_widget_show (w);
- gtk_dialog_add_action_widget (self, w, b->response);
-#endif
- gtk_dialog_add_button ((GtkDialog*) self, b->label, b->response);
- } else
- gtk_dialog_add_button ((GtkDialog*) self, b->stock, b->response);
+ if (b->label != NULL)
+ gtk_dialog_add_button (
+ GTK_DIALOG (self),
+ b->label, b->response);
+ else
+ gtk_dialog_add_button (
+ GTK_DIALOG (self),
+ b->stock, b->response);
} else
- gtk_dialog_add_button ((GtkDialog*) self, b->label, b->response);
+ gtk_dialog_add_button (
+ GTK_DIALOG (self),
+ b->label, b->response);
}
}
if (e_alert_get_default_response (alert))
- gtk_dialog_set_default_response ((GtkDialog*) self,
- e_alert_get_default_response (alert));
+ gtk_dialog_set_default_response (
+ GTK_DIALOG (self),
+ e_alert_get_default_response (alert));
widget = gtk_hbox_new (FALSE, 12);
gtk_container_set_border_width (GTK_CONTAINER (widget), 12);
@@ -224,90 +210,118 @@ e_alert_dialog_constructed (GObject *obj)
}
static void
-e_alert_dialog_class_init (EAlertDialogClass *klass)
+alert_dialog_response (GtkDialog *dialog,
+ gint response_id)
{
- GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
- g_type_class_add_private (klass, sizeof (EAlertDialogPrivate));
-
- object_class->dispose = e_alert_dialog_dispose;
- object_class->get_property = e_alert_dialog_get_property;
- object_class->set_property = e_alert_dialog_set_property;
- object_class->constructed = e_alert_dialog_constructed;
-
- g_object_class_install_property (object_class,
- PROP_PARENT,
- g_param_spec_object ("parent",
- "parent window",
- "A parent window to be transient for",
- GTK_TYPE_WINDOW,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
- g_object_class_install_property (object_class,
- PROP_ALERT,
- g_param_spec_object ("alert",
- "alert",
- "EAlert to be displayed",
- E_TYPE_ALERT,
- G_PARAM_READWRITE |
- G_PARAM_CONSTRUCT_ONLY |
- G_PARAM_STATIC_STRINGS));
+ EAlert *alert;
+
+ alert = e_alert_dialog_get_alert (E_ALERT_DIALOG (dialog));
+ e_alert_response (alert, response_id);
}
-GtkWidget*
+static void
+e_alert_dialog_class_init (EAlertDialogClass *class)
+{
+ GObjectClass *object_class;
+ GtkDialogClass *dialog_class;
+
+ g_type_class_add_private (class, sizeof (EAlertDialogPrivate));
+
+ object_class = G_OBJECT_CLASS (class);
+ object_class->set_property = alert_dialog_set_property;
+ object_class->get_property = alert_dialog_get_property;
+ object_class->dispose = alert_dialog_dispose;
+ object_class->constructed = alert_dialog_constructed;
+
+ dialog_class = GTK_DIALOG_CLASS (class);
+ dialog_class->response = alert_dialog_response;
+
+ g_object_class_install_property (
+ object_class,
+ PROP_ALERT,
+ g_param_spec_object (
+ "alert",
+ "Alert",
+ "Alert to be displayed",
+ E_TYPE_ALERT,
+ G_PARAM_READWRITE |
+ G_PARAM_CONSTRUCT_ONLY |
+ G_PARAM_STATIC_STRINGS));
+}
+
+static void
+e_alert_dialog_init (EAlertDialog *self)
+{
+ self->priv = E_ALERT_DIALOG_GET_PRIVATE (self);
+}
+
+GtkWidget *
e_alert_dialog_new (GtkWindow *parent,
EAlert *alert)
{
+ g_return_val_if_fail (E_IS_ALERT (alert), NULL);
+
return g_object_new (
E_TYPE_ALERT_DIALOG,
- "parent", parent, "alert", alert, NULL);
+ "alert", alert, "transient-for", parent, NULL);
}
-GtkWidget*
-e_alert_dialog_new_for_args (GtkWindow *parent, const gchar *tag, ...)
+GtkWidget *
+e_alert_dialog_new_for_args (GtkWindow *parent,
+ const gchar *tag,
+ ...)
{
- GtkWidget *d;
- EAlert *e;
+ GtkWidget *dialog;
+ EAlert *alert;
va_list ap;
+ g_return_val_if_fail (tag != NULL, NULL);
+
va_start (ap, tag);
- e = e_alert_new_valist (tag, ap);
+ alert = e_alert_new_valist (tag, ap);
va_end (ap);
- d = e_alert_dialog_new (parent, e);
- g_object_unref (e);
+ dialog = e_alert_dialog_new (parent, alert);
+
+ g_object_unref (alert);
- return d;
+ return dialog;
}
gint
-e_alert_run_dialog (GtkWindow *parent, EAlert *alert)
+e_alert_run_dialog (GtkWindow *parent,
+ EAlert *alert)
{
GtkWidget *dialog;
- gint res;
+ gint response;
- dialog = e_alert_dialog_new (parent, alert);
+ g_return_val_if_fail (E_IS_ALERT (alert), 0);
- res = gtk_dialog_run ((GtkDialog *)dialog);
+ dialog = e_alert_dialog_new (parent, alert);
+ response = gtk_dialog_run (GTK_DIALOG (dialog));
gtk_widget_destroy (dialog);
- return res;
+ return response;
}
gint
-e_alert_run_dialog_for_args (GtkWindow *parent, const gchar *tag, ...)
+e_alert_run_dialog_for_args (GtkWindow *parent,
+ const gchar *tag,
+ ...)
{
- EAlert *e;
- va_list ap;
+ EAlert *alert;
gint response;
+ va_list ap;
+
+ g_return_val_if_fail (tag != NULL, 0);
va_start (ap, tag);
- e = e_alert_new_valist (tag, ap);
+ alert = e_alert_new_valist (tag, ap);
va_end (ap);
- response = e_alert_run_dialog (parent, e);
- g_object_unref (e);
+ response = e_alert_run_dialog (parent, alert);
+
+ g_object_unref (alert);
return response;
}
@@ -329,7 +343,7 @@ e_alert_dialog_count_buttons (EAlertDialog *dialog)
g_return_val_if_fail (E_IS_ALERT_DIALOG (dialog), 0);
- container = gtk_dialog_get_action_area ((GtkDialog*) dialog);
+ container = gtk_dialog_get_action_area (GTK_DIALOG (dialog));
children = gtk_container_get_children (GTK_CONTAINER (container));
/* Iterate over the children looking for buttons. */
@@ -346,19 +360,14 @@ e_alert_dialog_count_buttons (EAlertDialog *dialog)
* e_alert_dialog_get_alert:
* @dialog: a #EAlertDialog
*
- * Convenience API for getting the #EAlert associated with @dialog
+ * Returns the #EAlert associated with @dialog.
*
- * Return value: the #EAlert associated with @dialog. The alert should be
- * unreffed when no longer needed.
- */
+ * Returns: the #EAlert associated with @dialog
+ **/
EAlert *
e_alert_dialog_get_alert (EAlertDialog *dialog)
{
- EAlert *alert = NULL;
-
- g_return_val_if_fail (dialog != NULL, NULL);
+ g_return_val_if_fail (E_IS_ALERT_DIALOG (dialog), NULL);
- g_object_get (dialog, "alert", &alert,
- NULL);
- return alert;
+ return dialog->priv->alert;
}