diff --git a/NEWS.md b/NEWS.md
index 1c82a69637..10a4869519 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,5 +1,10 @@
# ggplot2 (development version)
+### Bug fixes
+
+* Fixed regression where `draw_key_rect()` stopped using `fill` colours
+ (@mitchelloharawild, #6609).
+
# ggplot2 4.0.0
## User facing
diff --git a/R/legend-draw.R b/R/legend-draw.R
index 25aedae0f7..621cde0aa2 100644
--- a/R/legend-draw.R
+++ b/R/legend-draw.R
@@ -54,7 +54,7 @@ draw_key_abline <- function(data, params, size) {
#' @export
#' @rdname draw_key
draw_key_rect <- function(data, params, size) {
- colour <- if (is.na(data$fill %||% NA)) data$colour
+ colour <- if (is.na(data$fill %||% NA)) data$colour else data$fill
rectGrob(gp = gg_par(
col = NA,
fill = fill_alpha(colour %||% "grey20", data$alpha),
diff --git a/tests/testthat/_snaps/legend-draw/all-legend-keys.svg b/tests/testthat/_snaps/legend-draw/all-legend-keys.svg
index e535bebe99..c1ea77a335 100644
--- a/tests/testthat/_snaps/legend-draw/all-legend-keys.svg
+++ b/tests/testthat/_snaps/legend-draw/all-legend-keys.svg
@@ -23,7 +23,7 @@
abline
rect
-
+
polygon
blank