Title: [185642] trunk/Source
Revision
185642
Author
[email protected]
Date
2015-06-16 23:00:31 -0700 (Tue, 16 Jun 2015)

Log Message

[GTK] Inhibit screen saver when playing full screen video
https://bugs.webkit.org/show_bug.cgi?id=145795

Reviewed by Gustavo Noronha Silva.

Source/WebCore/platform/gtk/po:

* POTFILES.in: Add WebKitWebViewBase.cpp.

Source/WebKit2:

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):

Modified Paths

Diff

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
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to