Bug 1377950 - Reset all compositors when GdkScreen "composited-changed" fires. r=karlt

MozReview-Commit-ID: 3vva2XgSa60

--HG--
extra : rebase_source : 099a54f38695a7a88d5ca3a0dfc8cb948bfffb63
This commit is contained in:
Ryan Hunt 2017-08-11 02:52:08 -05:00
Родитель e13ee71316
Коммит 95c23d28b7
1 изменённых файлов: 23 добавлений и 5 удалений

Просмотреть файл

@ -117,6 +117,7 @@ using namespace mozilla::widget;
#include "GLContextProvider.h"
#include "mozilla/gfx/2D.h"
#include "mozilla/gfx/HelpersCairo.h"
#include "mozilla/gfx/GPUProcessManager.h"
#include "mozilla/layers/CompositorBridgeParent.h"
#include "mozilla/layers/CompositorThread.h"
@ -225,8 +226,10 @@ static void theme_changed_cb (GtkSettings *settings,
nsWindow *data);
static void check_resize_cb (GtkContainer* container,
gpointer user_data);
static void composited_changed_cb (GtkWidget* widget,
gpointer user_data);
static void screen_composited_changed_cb (GdkScreen* screen,
gpointer user_data);
static void widget_composited_changed_cb (GtkWidget* widget,
gpointer user_data);
#if (MOZ_WIDGET_GTK == 3)
static void scale_changed_cb (GtkWidget* widget,
@ -3401,7 +3404,6 @@ nsWindow::OnCompositedChanged()
presShell->ThemeChanged();
}
}
CleanLayerManagerRecursive();
}
void
@ -3870,8 +3872,18 @@ nsWindow::Create(nsIWidget* aParent,
G_CALLBACK(window_state_event_cb), nullptr);
g_signal_connect(mShell, "check-resize",
G_CALLBACK(check_resize_cb), nullptr);
GdkScreen *screen = gtk_widget_get_screen(mShell);
g_signal_connect(mShell, "composited-changed",
G_CALLBACK(composited_changed_cb), nullptr);
G_CALLBACK(widget_composited_changed_cb), nullptr);
if (!g_signal_handler_find(screen, G_SIGNAL_MATCH_FUNC,
0, 0, nullptr,
FuncToGpointer(screen_composited_changed_cb), 0)) {
g_signal_connect(screen, "composited-changed",
G_CALLBACK(screen_composited_changed_cb), nullptr);
}
GtkSettings* default_settings = gtk_settings_get_default();
g_signal_connect_after(default_settings,
@ -5909,7 +5921,13 @@ check_resize_cb (GtkContainer* container, gpointer user_data)
}
static void
composited_changed_cb (GtkWidget* widget, gpointer user_data)
screen_composited_changed_cb (GdkScreen* screen, gpointer user_data)
{
GPUProcessManager::Get()->ResetCompositors();
}
static void
widget_composited_changed_cb (GtkWidget* widget, gpointer user_data)
{
RefPtr<nsWindow> window = get_window_for_gtk_widget(widget);
if (!window) {