X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcolorseldialog.c;h=7a729ec97f62576e54d070099266a3af87de7573;hb=55196a705f00564a44647bfc97981db0a783369a;hp=1f427ca43e9c0334458610a9fc6ec2664e82c99c;hpb=113f364a37cefbef4eabb2c40070e08357a1b157;p=~andy%2Fgtk diff --git a/gtk/gtkcolorseldialog.c b/gtk/gtkcolorseldialog.c index 1f427ca43..7a729ec97 100644 --- a/gtk/gtkcolorseldialog.c +++ b/gtk/gtkcolorseldialog.c @@ -23,7 +23,8 @@ * files for a list of changes. These files are distributed with * GTK+ at ftp://ftp.gtk.org/pub/gtk/. */ -#include +#include "config.h" +#include #include #include "gtkcolorseldialog.h" #include "gtkframe.h" @@ -31,55 +32,154 @@ #include "gtkbutton.h" #include "gtkstock.h" #include "gtkintl.h" -#include "gtkalias.h" +#include "gtkbuildable.h" + + + +struct _GtkColorSelectionDialogPrivate +{ + GtkWidget *colorsel; + GtkWidget *ok_button; + GtkWidget *cancel_button; + GtkWidget *help_button; +}; + +enum { + PROP_0, + PROP_COLOR_SELECTION, + PROP_OK_BUTTON, + PROP_CANCEL_BUTTON, + PROP_HELP_BUTTON +}; /***************************/ /* GtkColorSelectionDialog */ /***************************/ -G_DEFINE_TYPE (GtkColorSelectionDialog, gtk_color_selection_dialog, GTK_TYPE_DIALOG) +static void gtk_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface); +static GObject * gtk_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable, + GtkBuilder *builder, + const gchar *childname); + +G_DEFINE_TYPE_WITH_CODE (GtkColorSelectionDialog, gtk_color_selection_dialog, + GTK_TYPE_DIALOG, + G_IMPLEMENT_INTERFACE (GTK_TYPE_BUILDABLE, + gtk_color_selection_dialog_buildable_interface_init)) + +static GtkBuildableIface *parent_buildable_iface; + +static void +gtk_color_selection_dialog_get_property (GObject *object, + guint prop_id, + GValue *value, + GParamSpec *pspec) +{ + GtkColorSelectionDialog *colorsel = GTK_COLOR_SELECTION_DIALOG (object); + GtkColorSelectionDialogPrivate *priv = colorsel->priv; + + switch (prop_id) + { + case PROP_COLOR_SELECTION: + g_value_set_object (value, priv->colorsel); + break; + case PROP_OK_BUTTON: + g_value_set_object (value, priv->ok_button); + break; + case PROP_CANCEL_BUTTON: + g_value_set_object (value, priv->cancel_button); + break; + case PROP_HELP_BUTTON: + g_value_set_object (value, priv->help_button); + break; + default: + G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); + break; + } +} static void gtk_color_selection_dialog_class_init (GtkColorSelectionDialogClass *klass) { + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + gobject_class->get_property = gtk_color_selection_dialog_get_property; + + g_object_class_install_property (gobject_class, + PROP_COLOR_SELECTION, + g_param_spec_object ("color-selection", + P_("Color Selection"), + P_("The color selection embedded in the dialog."), + GTK_TYPE_WIDGET, + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_OK_BUTTON, + g_param_spec_object ("ok-button", + P_("OK Button"), + P_("The OK button of the dialog."), + GTK_TYPE_WIDGET, + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_CANCEL_BUTTON, + g_param_spec_object ("cancel-button", + P_("Cancel Button"), + P_("The cancel button of the dialog."), + GTK_TYPE_WIDGET, + G_PARAM_READABLE)); + g_object_class_install_property (gobject_class, + PROP_HELP_BUTTON, + g_param_spec_object ("help-button", + P_("Help Button"), + P_("The help button of the dialog."), + GTK_TYPE_WIDGET, + G_PARAM_READABLE)); + + g_type_class_add_private (klass, sizeof (GtkColorSelectionDialogPrivate)); } static void gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag) { + GtkColorSelectionDialogPrivate *priv; GtkDialog *dialog = GTK_DIALOG (colorseldiag); + GtkWidget *action_area, *content_area; + + colorseldiag->priv = G_TYPE_INSTANCE_GET_PRIVATE (colorseldiag, + GTK_TYPE_COLOR_SELECTION_DIALOG, + GtkColorSelectionDialogPrivate); + priv = colorseldiag->priv; + + content_area = gtk_dialog_get_content_area (dialog); + action_area = gtk_dialog_get_action_area (dialog); - gtk_dialog_set_has_separator (dialog, FALSE); gtk_container_set_border_width (GTK_CONTAINER (dialog), 5); - gtk_box_set_spacing (GTK_BOX (dialog->vbox), 2); /* 2 * 5 + 2 = 12 */ - gtk_container_set_border_width (GTK_CONTAINER (dialog->action_area), 5); - gtk_box_set_spacing (GTK_BOX (dialog->action_area), 6); - - colorseldiag->colorsel = gtk_color_selection_new (); - gtk_container_set_border_width (GTK_CONTAINER (colorseldiag->colorsel), 5); - gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION(colorseldiag->colorsel), FALSE); - gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION(colorseldiag->colorsel), FALSE); - gtk_container_add (GTK_CONTAINER (GTK_DIALOG (colorseldiag)->vbox), colorseldiag->colorsel); - gtk_widget_show (colorseldiag->colorsel); + gtk_box_set_spacing (GTK_BOX (content_area), 2); /* 2 * 5 + 2 = 12 */ + gtk_container_set_border_width (GTK_CONTAINER (action_area), 5); + gtk_box_set_spacing (GTK_BOX (action_area), 6); + + priv->colorsel = gtk_color_selection_new (); + gtk_container_set_border_width (GTK_CONTAINER (priv->colorsel), 5); + gtk_color_selection_set_has_palette (GTK_COLOR_SELECTION (priv->colorsel), FALSE); + gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION (priv->colorsel), FALSE); + gtk_container_add (GTK_CONTAINER (content_area), priv->colorsel); + gtk_widget_show (priv->colorsel); - colorseldiag->cancel_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag), - GTK_STOCK_CANCEL, - GTK_RESPONSE_CANCEL); + priv->cancel_button = gtk_dialog_add_button (dialog, + GTK_STOCK_CANCEL, + GTK_RESPONSE_CANCEL); - colorseldiag->ok_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag), - GTK_STOCK_OK, - GTK_RESPONSE_OK); + priv->ok_button = gtk_dialog_add_button (dialog, + GTK_STOCK_OK, + GTK_RESPONSE_OK); - gtk_widget_grab_default (colorseldiag->ok_button); + gtk_widget_grab_default (priv->ok_button); - colorseldiag->help_button = gtk_dialog_add_button (GTK_DIALOG (colorseldiag), - GTK_STOCK_HELP, - GTK_RESPONSE_HELP); + priv->help_button = gtk_dialog_add_button (dialog, + GTK_STOCK_HELP, + GTK_RESPONSE_HELP); - gtk_widget_hide (colorseldiag->help_button); + gtk_widget_hide (priv->help_button); - gtk_dialog_set_alternative_button_order (GTK_DIALOG (colorseldiag), + gtk_dialog_set_alternative_button_order (dialog, GTK_RESPONSE_OK, GTK_RESPONSE_CANCEL, GTK_RESPONSE_HELP, @@ -87,8 +187,6 @@ gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag) gtk_window_set_title (GTK_WINDOW (colorseldiag), _("Color Selection")); - - _gtk_dialog_set_ignore_separator (dialog, TRUE); } GtkWidget* @@ -106,5 +204,47 @@ gtk_color_selection_dialog_new (const gchar *title) return GTK_WIDGET (colorseldiag); } -#define __GTK_COLOR_SELECTION_DIALOG_C__ -#include "gtkaliasdef.c" +/** + * gtk_color_selection_dialog_get_color_selection: + * @colorsel: a #GtkColorSelectionDialog + * + * Retrieves the #GtkColorSelection widget embedded in the dialog. + * + * Returns: (transfer none): the embedded #GtkColorSelection + * + * Since: 2.14 + **/ +GtkWidget* +gtk_color_selection_dialog_get_color_selection (GtkColorSelectionDialog *colorsel) +{ + g_return_val_if_fail (GTK_IS_COLOR_SELECTION_DIALOG (colorsel), NULL); + + return colorsel->priv->colorsel; +} + +static void +gtk_color_selection_dialog_buildable_interface_init (GtkBuildableIface *iface) +{ + parent_buildable_iface = g_type_interface_peek_parent (iface); + iface->get_internal_child = gtk_color_selection_dialog_buildable_get_internal_child; +} + +static GObject * +gtk_color_selection_dialog_buildable_get_internal_child (GtkBuildable *buildable, + GtkBuilder *builder, + const gchar *childname) +{ + GtkColorSelectionDialog *selection_dialog = GTK_COLOR_SELECTION_DIALOG (buildable); + GtkColorSelectionDialogPrivate *priv = selection_dialog->priv; + + if (g_strcmp0 (childname, "ok_button") == 0) + return G_OBJECT (priv->ok_button); + else if (g_strcmp0 (childname, "cancel_button") == 0) + return G_OBJECT (priv->cancel_button); + else if (g_strcmp0 (childname, "help_button") == 0) + return G_OBJECT (priv->help_button); + else if (g_strcmp0 (childname, "color_selection") == 0) + return G_OBJECT (priv->colorsel); + + return parent_buildable_iface->get_internal_child (buildable, builder, childname); +}