diff --git a/src/conio/x_events.c b/src/conio/x_events.c
index a93a8ce368f61a36b3cb062694584b12b616e614..21eba0145674240bf8a11b959579312024187bad 100644
--- a/src/conio/x_events.c
+++ b/src/conio/x_events.c
@@ -782,6 +782,11 @@ static void
 map_window(bool mp)
 {
 	XSizeHints *sh;
+	static last_minw = 0;
+	static last_minh = 0;
+	static last_maxw = 0;
+	static last_maxh = 0;
+	bool extents_changed = false;
 
 	sh = x11.XAllocSizeHints();
 	if (sh == NULL) {
@@ -799,6 +804,12 @@ map_window(bool mp)
 			pthread_mutex_lock(&vstatlock);
 			bitmap_get_scaled_win_size(7.0, &sh->max_width, &sh->max_height, 0, 0);
 		}
+		if (sh->max_width != last_maxw)
+			extents_changed = true;
+		last_maxw = sh->max_width;
+		if (!extents_changed && sh->max_height != last_maxh)
+			extents_changed = true;
+		last_maxh = sh->max_height;
 		sh->flags |= PMaxSize;
 
 		bitmap_get_scaled_win_size(x_cvstat.scaling, &sh->base_width, &sh->base_height, sh->max_width, sh->max_height);
@@ -812,6 +823,12 @@ map_window(bool mp)
 		pthread_mutex_lock(&vstatlock);
 
 	bitmap_get_scaled_win_size(1.0, &sh->min_width, &sh->min_height, 0, 0);
+	if (sh->min_width != last_minw)
+		extents_changed = true;
+	last_minw = sh->min_width;
+	if (!extents_changed && sh->min_height != last_minh)
+		extents_changed = true;
+	last_minh = sh->min_height;
 	sh->flags |= PMinSize;
 
 	pthread_mutex_unlock(&vstatlock);
@@ -827,7 +844,8 @@ map_window(bool mp)
 
 	sh->flags |= PAspect;
 
-	x11.XSetWMNormalHints(dpy, win, sh);
+	if (extents_changed || mp)
+		x11.XSetWMNormalHints(dpy, win, sh);
 	pthread_mutex_lock(&vstatlock);
 	vstat.scaling = x_cvstat.scaling;
 	pthread_mutex_unlock(&vstatlock);