*/
#include <config.h>
-#include "gtkalias.h"
+#include <string.h>
+
#include "gtkmessagedialog.h"
#include "gtklabel.h"
#include "gtkhbox.h"
#include "gtkstock.h"
#include "gtkiconfactory.h"
#include "gtkintl.h"
-#include <string.h>
+#include "gtkprivate.h"
+#include "gtkalias.h"
#define GTK_MESSAGE_DIALOG_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), GTK_TYPE_MESSAGE_DIALOG, GtkMessageDialogPrivate))
enum {
PROP_0,
PROP_MESSAGE_TYPE,
- PROP_BUTTONS
+ PROP_BUTTONS,
+ PROP_TEXT,
+ PROP_USE_MARKUP,
+ PROP_SECONDARY_TEXT,
+ PROP_SECONDARY_USE_MARKUP
};
static gpointer parent_class;
(GInstanceInitFunc) gtk_message_dialog_init,
};
- dialog_type = g_type_register_static (GTK_TYPE_DIALOG, "GtkMessageDialog",
+ dialog_type = g_type_register_static (GTK_TYPE_DIALOG, I_("GtkMessageDialog"),
&dialog_info, 0);
}
gobject_class->get_property = gtk_message_dialog_get_property;
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_int ("message_border",
+ g_param_spec_int ("message-border",
P_("Image/label border"),
P_("Width of border around the label and image in the message dialog"),
0,
G_MAXINT,
12,
- G_PARAM_READABLE));
+ GTK_PARAM_READABLE));
/**
* GtkMessageDialog::use_separator
*
* Since: 2.4
*/
gtk_widget_class_install_style_property (widget_class,
- g_param_spec_boolean ("use_separator",
+ g_param_spec_boolean ("use-separator",
P_("Use separator"),
P_("Whether to put a separator between the message dialog's text and the buttons"),
FALSE,
- G_PARAM_READABLE));
+ GTK_PARAM_READABLE));
g_object_class_install_property (gobject_class,
PROP_MESSAGE_TYPE,
- g_param_spec_enum ("message_type",
+ g_param_spec_enum ("message-type",
P_("Message Type"),
P_("The type of message"),
GTK_TYPE_MESSAGE_TYPE,
GTK_MESSAGE_INFO,
- G_PARAM_READABLE | G_PARAM_WRITABLE | G_PARAM_CONSTRUCT));
+ GTK_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (gobject_class,
PROP_BUTTONS,
g_param_spec_enum ("buttons",
P_("The buttons shown in the message dialog"),
GTK_TYPE_BUTTONS_TYPE,
GTK_BUTTONS_NONE,
- G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+ GTK_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY));
+
+ /**
+ * GtkMessageDialog:text:
+ *
+ * The primary text of the message dialog. If the dialog has
+ * a secondary text, this will appear as the title.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_TEXT,
+ g_param_spec_string ("text",
+ P_("Text"),
+ P_("The primary text of the message dialog"),
+ NULL,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkMessageDialog:use-markup:
+ *
+ * %TRUE if the primary text of the dialog includes Pango markup.
+ * See pango_parse_markup().
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_USE_MARKUP,
+ g_param_spec_boolean ("use-markup",
+ P_("Use Markup"),
+ P_("The primary text of the title includes Pango markup."),
+ FALSE,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkMessageDialog:secondary-text:
+ *
+ * The secondary text of the message dialog.
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_SECONDARY_TEXT,
+ g_param_spec_string ("secondary-text",
+ P_("Secondary Text"),
+ P_("The secondary text of the message dialog"),
+ NULL,
+ GTK_PARAM_READWRITE));
+
+ /**
+ * GtkMessageDialog:secondary-use-markup:
+ *
+ * %TRUE if the secondary text of the dialog includes Pango markup.
+ * See pango_parse_markup().
+ *
+ * Since: 2.10
+ */
+ g_object_class_install_property (gobject_class,
+ PROP_SECONDARY_USE_MARKUP,
+ g_param_spec_boolean ("secondary-use-markup",
+ P_("Use Markup in secondary"),
+ P_("The secondary text includes Pango markup."),
+ FALSE,
+ GTK_PARAM_READWRITE));
+
g_type_class_add_private (gobject_class,
sizeof (GtkMessageDialogPrivate));
}
priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
+ gtk_window_set_title (GTK_WINDOW (dialog), "");
+ gtk_window_set_skip_taskbar_hint (GTK_WINDOW (dialog), TRUE);
priv->has_primary_markup = FALSE;
priv->has_secondary_text = FALSE;
priv->secondary_label = gtk_label_new (NULL);
-
+ gtk_widget_set_no_show_all (priv->secondary_label, TRUE);
+
dialog->label = gtk_label_new (NULL);
dialog->image = gtk_image_new_from_stock (NULL, GTK_ICON_SIZE_DIALOG);
gtk_misc_set_alignment (GTK_MISC (dialog->image), 0.5, 0.0);
priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
- if (priv->has_primary_markup)
- return;
-
/* unset the font settings */
gtk_widget_modify_font (dialog->label, NULL);
- if (priv->has_secondary_text)
+ if (priv->has_secondary_text && !priv->has_primary_markup)
{
size = pango_font_description_get_size (dialog->label->style->font_desc);
font_desc = pango_font_description_new ();
stock_id = GTK_STOCK_DIALOG_INFO;
if (gtk_stock_lookup (stock_id, &item))
- {
- gtk_image_set_from_stock (GTK_IMAGE (dialog->image), stock_id,
- GTK_ICON_SIZE_DIALOG);
-
- gtk_window_set_title (GTK_WINDOW (dialog), item.label);
- }
+ gtk_image_set_from_stock (GTK_IMAGE (dialog->image), stock_id,
+ GTK_ICON_SIZE_DIALOG);
else
g_warning ("Stock dialog ID doesn't exist?");
}
GParamSpec *pspec)
{
GtkMessageDialog *dialog;
-
+ GtkMessageDialogPrivate *priv;
+
dialog = GTK_MESSAGE_DIALOG (object);
+ priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
switch (prop_id)
{
case PROP_BUTTONS:
gtk_message_dialog_add_buttons (dialog, g_value_get_enum (value));
break;
+ case PROP_TEXT:
+ if (priv->has_primary_markup)
+ gtk_label_set_markup (GTK_LABEL (dialog->label),
+ g_value_get_string (value));
+ else
+ gtk_label_set_text (GTK_LABEL (dialog->label),
+ g_value_get_string (value));
+ break;
+ case PROP_USE_MARKUP:
+ priv->has_primary_markup = g_value_get_boolean (value);
+ gtk_label_set_use_markup (GTK_LABEL (dialog->label),
+ priv->has_primary_markup);
+ setup_primary_label_font (dialog);
+ break;
+ case PROP_SECONDARY_TEXT:
+ {
+ const gchar *txt = g_value_get_string (value);
+
+ if (gtk_label_get_use_markup (GTK_LABEL (priv->secondary_label)))
+ gtk_label_set_markup (GTK_LABEL (priv->secondary_label), txt);
+ else
+ gtk_label_set_text (GTK_LABEL (priv->secondary_label), txt);
+
+ if (txt)
+ {
+ priv->has_secondary_text = TRUE;
+ gtk_widget_show (priv->secondary_label);
+ }
+ else
+ {
+ priv->has_secondary_text = FALSE;
+ gtk_widget_hide (priv->secondary_label);
+ }
+ setup_primary_label_font (dialog);
+ }
+ break;
+ case PROP_SECONDARY_USE_MARKUP:
+ gtk_label_set_use_markup (GTK_LABEL (priv->secondary_label),
+ g_value_get_boolean (value));
+ break;
+
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
GParamSpec *pspec)
{
GtkMessageDialog *dialog;
-
+ GtkMessageDialogPrivate *priv;
+
dialog = GTK_MESSAGE_DIALOG (object);
-
+ priv = GTK_MESSAGE_DIALOG_GET_PRIVATE (dialog);
+
switch (prop_id)
{
case PROP_MESSAGE_TYPE:
g_value_set_enum (value, gtk_message_dialog_get_message_type (dialog));
break;
+ case PROP_TEXT:
+ g_value_set_string (value, gtk_label_get_label (GTK_LABEL (dialog->label)));
+ break;
+ case PROP_USE_MARKUP:
+ g_value_set_boolean (value, priv->has_primary_markup);
+ break;
+ case PROP_SECONDARY_TEXT:
+ if (priv->has_secondary_text)
+ g_value_set_string (value,
+ gtk_label_get_label (GTK_LABEL (priv->secondary_label)));
+ else
+ g_value_set_string (value, NULL);
+ break;
+ case PROP_SECONDARY_USE_MARKUP:
+ if (priv->has_secondary_text)
+ g_value_set_boolean (value,
+ gtk_label_get_use_markup (GTK_LABEL (priv->secondary_label)));
+ else
+ g_value_set_boolean (value, FALSE);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
/**
* gtk_message_dialog_new:
- * @parent: transient parent, or NULL for none
+ * @parent: transient parent, or %NULL for none
* @flags: flags
* @type: type of message
* @buttons: set of buttons to use
- * @message_format: printf()-style format string, or NULL
+ * @message_format: printf()-style format string, or %NULL
* @Varargs: arguments for @message_format
*
* Creates a new message dialog, which is a simple dialog with an icon
g_return_val_if_fail (parent == NULL || GTK_IS_WINDOW (parent), NULL);
widget = g_object_new (GTK_TYPE_MESSAGE_DIALOG,
- "message_type", type,
+ "message-type", type,
"buttons", buttons,
NULL);
dialog = GTK_DIALOG (widget);
if (flags & GTK_DIALOG_DESTROY_WITH_PARENT)
gtk_window_set_destroy_with_parent (GTK_WINDOW (dialog), TRUE);
- if (flags & GTK_DIALOG_NO_SEPARATOR)
- gtk_dialog_set_has_separator (dialog, FALSE);
-
return widget;
}
* dialog = gtk_message_dialog_new (main_application_window,
* GTK_DIALOG_DESTROY_WITH_PARENT,
* GTK_MESSAGE_ERROR,
- * GTK_BUTTON_CLOSE,
+ * GTK_BUTTONS_CLOSE,
* NULL);
* gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (dialog),
* markup);
* Note that setting a secondary text makes the primary text become
* bold, unless you have provided explicit markup.
*
+ * Due to an oversight, this function does not escape special XML characters
+ * like gtk_message_dialog_new_with_markup() does. Thus, if the arguments
+ * may contain special XML characters, you should use g_markup_printf_escaped()
+ * to escape it.
+
+ * <informalexample><programlisting>
+ * gchar *msg;
+ *
+ * msg = g_markup_printf_escaped (message_format, ...);
+ * gtk_message_dialog_format_secondary_markup (message_dialog, "%s", msg);
+ * g_free (msg);
+ * </programlisting></informalexample>
+ *
* Since: 2.6
**/
void
if (parent)
{
- gtk_widget_style_get (widget, "message_border",
+ gtk_widget_style_get (widget, "message-border",
&border_width, NULL);
gtk_container_set_border_width (GTK_CONTAINER (parent),
}
gtk_widget_style_get (widget,
- "use_separator", &use_separator,
+ "use-separator", &use_separator,
NULL);
_gtk_dialog_set_ignore_separator (GTK_DIALOG (widget), FALSE);
gtk_dialog_set_has_separator (GTK_DIALOG (widget), use_separator);
if (GTK_WIDGET_CLASS (parent_class)->style_set)
(GTK_WIDGET_CLASS (parent_class)->style_set) (widget, prev_style);
}
+
+#define __GTK_MESSAGE_DIALOG_C__
+#include "gtkaliasdef.c"