Modified: trunk/Source/WebCore/platform/gtk/po/ChangeLog (185641 => 185642)
--- trunk/Source/WebCore/platform/gtk/po/ChangeLog 2015-06-17 06:00:27 UTC (rev 185641)
+++ trunk/Source/WebCore/platform/gtk/po/ChangeLog 2015-06-17 06:00:31 UTC (rev 185642)
@@ -1,3 +1,12 @@
+2015-06-16 Carlos Garcia Campos <[email protected]>
+
+ [GTK] Inhibit screen saver when playing full screen video
+ https://bugs.webkit.org/show_bug.cgi?id=145795
+
+ Reviewed by Gustavo Noronha Silva.
+
+ * POTFILES.in: Add WebKitWebViewBase.cpp.
+
2015-05-22 Jordi Mas <[email protected]>
[l10n] Add Catalan translation for WebKitGTK+
Modified: trunk/Source/WebCore/platform/gtk/po/POTFILES.in (185641 => 185642)
--- trunk/Source/WebCore/platform/gtk/po/POTFILES.in 2015-06-17 06:00:27 UTC (rev 185641)
+++ trunk/Source/WebCore/platform/gtk/po/POTFILES.in 2015-06-17 06:00:31 UTC (rev 185642)
@@ -16,6 +16,7 @@
../../../WebKit2/UIProcess/API/gtk/WebKitURIResponse.cpp
../../../WebKit2/UIProcess/API/gtk/WebKitWebInspector.cpp
../../../WebKit2/UIProcess/API/gtk/WebKitWebResource.cpp
+../../../WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp
../../../WebKit2/UIProcess/API/gtk/WebKitWebView.cpp
../../../WebKit2/UIProcess/API/gtk/WebKitWindowProperties.cpp
../../../WebKit2/UIProcess/gtk/WebInspectorProxyGtk.cpp
Modified: trunk/Source/WebKit2/ChangeLog (185641 => 185642)
--- trunk/Source/WebKit2/ChangeLog 2015-06-17 06:00:27 UTC (rev 185641)
+++ trunk/Source/WebKit2/ChangeLog 2015-06-17 06:00:31 UTC (rev 185642)
@@ -1,3 +1,22 @@
+2015-06-16 Carlos Garcia Campos <[email protected]>
+
+ [GTK] Inhibit screen saver when playing full screen video
+ https://bugs.webkit.org/show_bug.cgi?id=145795
+
+ Reviewed by Gustavo Noronha Silva.
+
+ Use Freedesktop.org DBus API to inhibit/unhinibit the screen saver
+ when entering/leaving fullscreen.
+
+ * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+ (screenSaverInhibitedCallback):
+ (webkitWebViewBaseSendInhibitMessageToScreenSaver):
+ (screenSaverProxyCreatedCallback):
+ (webkitWebViewBaseInhibitScreenSaver):
+ (webkitWebViewBaseUninhibitScreenSaver):
+ (webkitWebViewBaseEnterFullScreen):
+ (webkitWebViewBaseExitFullScreen):
+
2015-06-16 Gyuyoung Kim <[email protected]>
Purge PassRefPtr with Ref or RefPtr
Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (185641 => 185642)
--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp 2015-06-17 06:00:27 UTC (rev 185641)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp 2015-06-17 06:00:31 UTC (rev 185642)
@@ -61,6 +61,7 @@
#include <WebCore/Region.h>
#include <gdk/gdk.h>
#include <gdk/gdkkeysyms.h>
+#include <glib/gi18n-lib.h>
#include <memory>
#include <wtf/HashMap.h>
#include <wtf/glib/GRefPtr.h>
@@ -187,6 +188,9 @@
#if ENABLE(FULLSCREEN_API)
bool fullScreenModeActive;
WebFullScreenClientGtk fullScreenClient;
+ GRefPtr<GDBusProxy> screenSaverProxy;
+ GRefPtr<GCancellable> screenSaverInhibitCancellable;
+ unsigned screenSaverCookie;
#endif
#if USE(REDIRECTED_XCOMPOSITE_WINDOW)
@@ -1200,6 +1204,71 @@
webkitWebViewBase->priv->shouldForwardNextKeyEvent = TRUE;
}
+#if ENABLE(FULLSCREEN_API)
+static void screenSaverInhibitedCallback(GDBusProxy* screenSaverProxy, GAsyncResult* result, WebKitWebViewBase* webViewBase)
+{
+ GRefPtr<GVariant> returnValue = adoptGRef(g_dbus_proxy_call_finish(screenSaverProxy, result, nullptr));
+ if (returnValue)
+ g_variant_get(returnValue.get(), "(u)", &webViewBase->priv->screenSaverCookie);
+ webViewBase->priv->screenSaverInhibitCancellable = nullptr;
+}
+
+static void webkitWebViewBaseSendInhibitMessageToScreenSaver(WebKitWebViewBase* webViewBase)
+{
+ WebKitWebViewBasePrivate* priv = webViewBase->priv;
+ ASSERT(priv->screenSaverProxy);
+ priv->screenSaverCookie = 0;
+ if (!priv->screenSaverInhibitCancellable)
+ priv->screenSaverInhibitCancellable = g_cancellable_new();
+ g_dbus_proxy_call(priv->screenSaverProxy.get(), "Inhibit", g_variant_new("(ss)", g_get_prgname(), _("Website running in fullscreen mode")),
+ G_DBUS_CALL_FLAGS_NONE, -1, priv->screenSaverInhibitCancellable.get(), reinterpret_cast<GAsyncReadyCallback>(screenSaverInhibitedCallback), webViewBase);
+}
+
+static void screenSaverProxyCreatedCallback(GObject*, GAsyncResult* result, WebKitWebViewBase* webViewBase)
+{
+ WebKitWebViewBasePrivate* priv = webViewBase->priv;
+ priv->screenSaverProxy = adoptGRef(g_dbus_proxy_new_for_bus_finish(result, nullptr));
+ if (!priv->screenSaverProxy)
+ return;
+
+ webkitWebViewBaseSendInhibitMessageToScreenSaver(webViewBase);
+}
+
+static void webkitWebViewBaseInhibitScreenSaver(WebKitWebViewBase* webViewBase)
+{
+ WebKitWebViewBasePrivate* priv = webViewBase->priv;
+ if (priv->screenSaverCookie) {
+ // Already inhibited.
+ return;
+ }
+
+ if (priv->screenSaverProxy) {
+ webkitWebViewBaseSendInhibitMessageToScreenSaver(webViewBase);
+ return;
+ }
+
+ priv->screenSaverInhibitCancellable = g_cancellable_new();
+ g_dbus_proxy_new_for_bus(G_BUS_TYPE_SESSION, static_cast<GDBusProxyFlags>(G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES | G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS),
+ nullptr, "org.freedesktop.ScreenSaver", "/ScreenSaver", "org.freedesktop.ScreenSaver", priv->screenSaverInhibitCancellable.get(),
+ reinterpret_cast<GAsyncReadyCallback>(screenSaverProxyCreatedCallback), webViewBase);
+}
+
+static void webkitWebViewBaseUninhibitScreenSaver(WebKitWebViewBase* webViewBase)
+{
+ WebKitWebViewBasePrivate* priv = webViewBase->priv;
+ if (!priv->screenSaverCookie) {
+ // Not inhibited or it's being inhibited.
+ g_cancellable_cancel(priv->screenSaverInhibitCancellable.get());
+ return;
+ }
+
+ // If we have a cookie we should have a proxy.
+ ASSERT(priv->screenSaverProxy);
+ g_dbus_proxy_call(priv->screenSaverProxy.get(), "UnInhibit", g_variant_new("(u)", priv->screenSaverCookie), G_DBUS_CALL_FLAGS_NONE, -1, nullptr, nullptr, nullptr);
+ priv->screenSaverCookie = 0;
+}
+#endif
+
void webkitWebViewBaseEnterFullScreen(WebKitWebViewBase* webkitWebViewBase)
{
#if ENABLE(FULLSCREEN_API)
@@ -1218,6 +1287,7 @@
gtk_window_fullscreen(GTK_WINDOW(topLevelWindow));
fullScreenManagerProxy->didEnterFullScreen();
priv->fullScreenModeActive = true;
+ webkitWebViewBaseInhibitScreenSaver(webkitWebViewBase);
#endif
}
@@ -1239,6 +1309,7 @@
gtk_window_unfullscreen(GTK_WINDOW(topLevelWindow));
fullScreenManagerProxy->didExitFullScreen();
priv->fullScreenModeActive = false;
+ webkitWebViewBaseUninhibitScreenSaver(webkitWebViewBase);
#endif
}