ColorButton: Don’t destroy dialog @ ::delete-event

Without specifically connecting ::delete-event to something, the dialog
will be destroyed when it is closed, for example by pressing Esc. This
meant that when dismissing it this way, unlike by pressing Cancel, any
custom palette would be lost when the dialog was next opened, and so on.

Resolve this by making ::delete-event just do GTK_RESPONSE_CANCEL, so
closing the dialog has the same effect as clicking its Cancel button.

https://bugzilla.gnome.org/show_bug.cgi?id=787444
This commit is contained in:
Hiroyuki Ito 2017-09-11 12:02:13 +00:00 committed by Daniel Boles
parent 4b88560feb
commit e7fbfdd067

View File

@ -494,6 +494,16 @@ gtk_color_button_new_with_rgba (const GdkRGBA *rgba)
return g_object_new (GTK_TYPE_COLOR_BUTTON, "rgba", rgba, NULL); return g_object_new (GTK_TYPE_COLOR_BUTTON, "rgba", rgba, NULL);
} }
static gboolean
dialog_delete_event (GtkWidget *dialog,
GdkEvent *event,
gpointer user_data)
{
g_signal_emit_by_name (dialog, "response", GTK_RESPONSE_CANCEL);
return TRUE;
}
static gboolean static gboolean
dialog_destroy (GtkWidget *widget, dialog_destroy (GtkWidget *widget,
gpointer data) gpointer data)
@ -561,6 +571,8 @@ ensure_dialog (GtkColorButton *button)
G_CALLBACK (dialog_response), button); G_CALLBACK (dialog_response), button);
g_signal_connect (dialog, "destroy", g_signal_connect (dialog, "destroy",
G_CALLBACK (dialog_destroy), button); G_CALLBACK (dialog_destroy), button);
g_signal_connect (dialog, "delete-event",
G_CALLBACK (dialog_delete_event), button);
} }