diff --git a/indra/llwindow/llopenglview-objc.mm b/indra/llwindow/llopenglview-objc.mm
index abddf8f7ceb88e9087940814ae0b391adbfabfd8..015a4ad9c14ac3e6445b10c1f237902a1e353abf 100644
--- a/indra/llwindow/llopenglview-objc.mm
+++ b/indra/llwindow/llopenglview-objc.mm
@@ -143,7 +143,7 @@ attributedStringInfo getSegments(NSAttributedString *str)
                                              selector:@selector(windowDidBecomeKey:) name:NSWindowDidBecomeKeyNotification
                                                object:[self window]];
     [[NSNotificationCenter defaultCenter] addObserver:self
-                                             selector:@selector(windowDidChangeScreen:) name:NSWindowDidChangeScreenNotification
+                                             selector:@selector(windowDidChangeBackingProperties:) name:NSWindowDidChangeBackingPropertiesNotification
                                                object:[self window]];
     
     NSRect rect = [[self window] frame];
@@ -176,9 +176,12 @@ attributedStringInfo getSegments(NSAttributedString *str)
     mModifiers = [NSEvent modifierFlags];
 }
 
--(void)windowDidChangeScreen:(NSNotification *)notification;
+-(void)windowDidChangeBackingProperties:(NSNotification *)notification;
 {
-	callWindowDidChangeScreen();
+    NSSize size = [self frame].size;
+    NSSize scaled_size = [self convertSizeToBacking:size];
+    float scale_factor = [self convertSizeToBacking:NSMakeSize(1, 1)].width;
+    callHandleDPIChanged(scaled_size.width, scaled_size.height, scale_factor);
 }
 
 - (void)dealloc
diff --git a/indra/llwindow/llwindowcallbacks.cpp b/indra/llwindow/llwindowcallbacks.cpp
index be61e1e16c62fd4db5b04e67bb92a612fe170f3b..54bb8ec46c93b6a031e4f0c7ad37858ab2a993d4 100644
--- a/indra/llwindow/llwindowcallbacks.cpp
+++ b/indra/llwindow/llwindowcallbacks.cpp
@@ -194,11 +194,6 @@ BOOL LLWindowCallbacks::handleDPIChanged(LLWindow *window, F32 ui_scale_factor,
 	return FALSE;
 }
 
-BOOL LLWindowCallbacks::handleWindowDidChangeScreen(LLWindow *window)
-{
-	return FALSE;
-}
-
 void LLWindowCallbacks::handlePingWatchdog(LLWindow *window, const char * msg)
 {
 
diff --git a/indra/llwindow/llwindowcallbacks.h b/indra/llwindow/llwindowcallbacks.h
index 3b186481388cc8d290a5a5a2788665b77a7a5807..77644e1f2347c818c3adf0ae595714bf6dea7344 100644
--- a/indra/llwindow/llwindowcallbacks.h
+++ b/indra/llwindow/llwindowcallbacks.h
@@ -69,7 +69,6 @@ class LLWindowCallbacks
 	virtual BOOL handleTimerEvent(LLWindow *window);
 	virtual BOOL handleDeviceChange(LLWindow *window);
 	virtual BOOL handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height);
-	virtual BOOL handleWindowDidChangeScreen(LLWindow *window);
 
 	enum DragNDropAction {
 		DNDA_START_TRACKING = 0,// Start tracking an incoming drag
diff --git a/indra/llwindow/llwindowmacosx-objc.h b/indra/llwindow/llwindowmacosx-objc.h
index 8fd45408889f08edb1d0f7f8be4f5981c89d47a7..356e30c699efad9db4b3f6b0c3359a7dcb1d5686 100644
--- a/indra/llwindow/llwindowmacosx-objc.h
+++ b/indra/llwindow/llwindowmacosx-objc.h
@@ -144,7 +144,7 @@ void callWindowFocus();
 void callWindowUnfocus();
 void callWindowHide();
 void callWindowUnhide();
-void callWindowDidChangeScreen();
+void callHandleDPIChanged(unsigned int width, unsigned int height, float scale_factor);
 void callDeltaUpdate(float *delta, unsigned int mask);
 void callOtherMouseDown(float *pos, unsigned int mask, int button);
 void callOtherMouseUp(float *pos, unsigned int mask, int button);
diff --git a/indra/llwindow/llwindowmacosx.cpp b/indra/llwindow/llwindowmacosx.cpp
index 0d6884c3c6f83826d4287396b3b206540e144a7c..8876c421f993f733f461f91c980a5cf67979dfdc 100644
--- a/indra/llwindow/llwindowmacosx.cpp
+++ b/indra/llwindow/llwindowmacosx.cpp
@@ -406,11 +406,11 @@ void callWindowUnhide()
 	}
 }
 
-void callWindowDidChangeScreen()
+void callHandleDPIChanged(unsigned int width, unsigned int height, float scale_factor)
 {
 	if ( gWindowImplementation && gWindowImplementation->getCallbacks() )
 	{
-		gWindowImplementation->getCallbacks()->handleWindowDidChangeScreen(gWindowImplementation);
+		gWindowImplementation->getCallbacks()->handleDPIChanged(gWindowImplementation, scale_factor, width, height);
 	}
 }
 
diff --git a/indra/newview/llviewerwindow.cpp b/indra/newview/llviewerwindow.cpp
index 1aa7871f2968994b59f6e829ab97048721f29596..0d1dcadb62a7048078e2bd948181bf1b725367e4 100644
--- a/indra/newview/llviewerwindow.cpp
+++ b/indra/newview/llviewerwindow.cpp
@@ -1695,13 +1695,6 @@ BOOL LLViewerWindow::handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32
     }
 }
 
-BOOL LLViewerWindow::handleWindowDidChangeScreen(LLWindow *window)
-{
-	LLCoordScreen window_rect;
-	mWindow->getSize(&window_rect);
-	reshape(window_rect.mX, window_rect.mY);
-	return TRUE;
-}
 
 void LLViewerWindow::handlePingWatchdog(LLWindow *window, const char * msg)
 {
diff --git a/indra/newview/llviewerwindow.h b/indra/newview/llviewerwindow.h
index ab65b2a161854fd0f3498cbd9e6c763573ea3838..66228f3b4fbb15c856f79b582deb80bfa05a559b 100644
--- a/indra/newview/llviewerwindow.h
+++ b/indra/newview/llviewerwindow.h
@@ -216,7 +216,6 @@ class LLViewerWindow final : public LLWindowCallbacks
 	/*virtual*/ BOOL handleTimerEvent(LLWindow *window);
 	/*virtual*/ BOOL handleDeviceChange(LLWindow *window);
 	/*virtual*/ BOOL handleDPIChanged(LLWindow *window, F32 ui_scale_factor, S32 window_width, S32 window_height);
-	/*virtual*/ BOOL handleWindowDidChangeScreen(LLWindow *window);
 
 	/*virtual*/ void handlePingWatchdog(LLWindow *window, const char * msg);
 	/*virtual*/ void handlePauseWatchdog(LLWindow *window);