Bug 1675908 refresh cached screens on resolution change r=stransky

When reducing dpi from a larger value at Firefox startup, the hamburger menu
drop-down was limited in size unnecessarily because Firefox still had the
initial concept of screen size.  This derived from the use of
gfxPlatformGtk::GetFontScaleFactor() in initializing screen data.
https://searchfox.org/mozilla-central/rev/8b7aa8af652f87d39349067a5bc9c0256bf6dedc/widget/gtk/ScreenHelperGTK.cpp#151.

A RefreshScreens() on resolution change resolves that.

Depends on D96306

Differential Revision: https://phabricator.services.mozilla.com/D96307
This commit is contained in:
Karl Tomlinson 2020-11-09 12:19:01 +00:00
parent deaaa17783
commit 9c4a4ff8f2

View File

@ -32,6 +32,12 @@ static void monitors_changed(GdkScreen* aScreen, gpointer aClosure) {
self->RefreshScreens();
}
static void screen_resolution_changed(GdkScreen* aScreen,
GParamSpec* aPspec,
ScreenHelperGTK* self) {
self->RefreshScreens();
}
static GdkFilterReturn root_window_event_filter(GdkXEvent* aGdkXEvent,
GdkEvent* aGdkEvent,
gpointer aClosure) {
@ -82,6 +88,10 @@ ScreenHelperGTK::ScreenHelperGTK()
g_signal_connect(defaultScreen, "monitors-changed",
G_CALLBACK(monitors_changed), this);
// Use _after to ensure this callback is run after gfxPlatformGtk.cpp's
// handler.
g_signal_connect_after(defaultScreen, "notify::resolution",
G_CALLBACK(screen_resolution_changed), this);
#ifdef MOZ_X11
gdk_window_add_filter(mRootWindow, root_window_event_filter, this);
if (GDK_IS_X11_DISPLAY(gdk_display_get_default())) {
@ -94,8 +104,7 @@ ScreenHelperGTK::ScreenHelperGTK()
ScreenHelperGTK::~ScreenHelperGTK() {
if (mRootWindow) {
g_signal_handlers_disconnect_by_func(
gdk_screen_get_default(), FuncToGpointer(monitors_changed), this);
g_signal_handlers_disconnect_by_data(gdk_screen_get_default(), this);
gdk_window_remove_filter(mRootWindow, root_window_event_filter, this);
g_object_unref(mRootWindow);