X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcolorbutton.c;h=52c1ec52516f12f5dc1f973394ccd630c7ebb355;hb=ce0675f1fb2582717793ec29b1787039dfbf8437;hp=63dd81cd93cc79795823e8a1f58b138029d1dda9;hpb=d39977878e0131d841ffd60d91fab6dbe9841f11;p=~andy%2Fgtk diff --git a/gtk/gtkcolorbutton.c b/gtk/gtkcolorbutton.c index 63dd81cd9..52c1ec525 100644 --- a/gtk/gtkcolorbutton.c +++ b/gtk/gtkcolorbutton.c @@ -584,36 +584,42 @@ dialog_response (GtkDialog *dialog, } } +/* Create the dialog and connects its buttons */ static void -gtk_color_button_clicked (GtkButton *b) +ensure_dialog (GtkColorButton *button) { - GtkColorButton *button = GTK_COLOR_BUTTON (b); - GtkWidget *dialog; + GtkWidget *parent, *dialog; - /* if dialog already exists, make sure it's shown and raised */ - if (!button->priv->cs_dialog) - { - /* Create the dialog and connects its buttons */ - GtkWidget *parent; + if (button->priv->cs_dialog != NULL) + return; - parent = gtk_widget_get_toplevel (GTK_WIDGET (button)); + parent = gtk_widget_get_toplevel (GTK_WIDGET (button)); - button->priv->cs_dialog = dialog = gtk_color_chooser_dialog_new (button->priv->title, NULL); + button->priv->cs_dialog = dialog = gtk_color_chooser_dialog_new (button->priv->title, NULL); - if (gtk_widget_is_toplevel (parent) && GTK_IS_WINDOW (parent)) - { - if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (dialog))) - gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent)); + if (gtk_widget_is_toplevel (parent) && GTK_IS_WINDOW (parent)) + { + if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (dialog))) + gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent)); - gtk_window_set_modal (GTK_WINDOW (dialog), - gtk_window_get_modal (GTK_WINDOW (parent))); - } + gtk_window_set_modal (GTK_WINDOW (dialog), + gtk_window_get_modal (GTK_WINDOW (parent))); + } + + g_signal_connect (dialog, "response", + G_CALLBACK (dialog_response), button); + g_signal_connect (dialog, "destroy", + G_CALLBACK (dialog_destroy), button); +} - g_signal_connect (dialog, "response", - G_CALLBACK (dialog_response), button); - g_signal_connect (dialog, "destroy", - G_CALLBACK (dialog_destroy), button); - } + +static void +gtk_color_button_clicked (GtkButton *b) +{ + GtkColorButton *button = GTK_COLOR_BUTTON (b); + + /* if dialog already exists, make sure it's shown and raised */ + ensure_dialog (button); gtk_color_chooser_set_use_alpha (GTK_COLOR_CHOOSER (button->priv->cs_dialog), button->priv->use_alpha); @@ -962,8 +968,9 @@ gtk_color_button_add_palette (GtkColorChooser *chooser, { GtkColorButton *button = GTK_COLOR_BUTTON (chooser); - if (button->priv->cs_dialog) - gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (button->priv->cs_dialog), + ensure_dialog (button); + + gtk_color_chooser_add_palette (GTK_COLOR_CHOOSER (button->priv->cs_dialog), orientation, colors_per_line, n_colors, colors); }