summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorAndrzej Hunt <andrzej@ahunt.org>2015-10-19 18:03:37 +0200
committerAndrzej Hunt <andrzej@ahunt.org>2015-10-20 18:14:39 +0200
commite97b1b6c28529487467ad9b4051ec288aa0f0c31 (patch)
treea18bbb2017f8b289f685e9de7b05af08da072df5 /vcl
parenta50ac1f8c7828836a9b1f928975196d79d21eb6a (diff)
Lambda'ise the almost identical FDO and GSM screensaver inhibition
This doesn't save us much for now, but could be useful when yet another screensaver inhibition standard is introduced. (The GSM/gnome inhibition currently requires passing the X11 window handle/id, which suggests that at some point they will have to update their screensaver inhibition api.) Change-Id: I4fa7bc15f089d112777fb166ab469045c002ae48
Diffstat (limited to 'vcl')
-rw-r--r--vcl/unx/generic/window/screensaverinhibitor.cxx159
1 files changed, 62 insertions, 97 deletions
diff --git a/vcl/unx/generic/window/screensaverinhibitor.cxx b/vcl/unx/generic/window/screensaverinhibitor.cxx
index 4ac63fe5750e..b352c1d2e862 100644
--- a/vcl/unx/generic/window/screensaverinhibitor.cxx
+++ b/vcl/unx/generic/window/screensaverinhibitor.cxx
@@ -37,11 +37,15 @@ void ScreenSaverInhibitor::inhibit( bool bInhibit, const OUString& sReason, bool
}
}
-void ScreenSaverInhibitor::inhibitFDO( bool bInhibit, const gchar* appname, const gchar* reason )
+void dbusInhibit( bool bInhibit,
+ const gchar* service, const gchar* path, const gchar* interface,
+ std::function<bool( DBusGProxy*, guint&, GError*& )> fInhibit,
+ std::function<bool( DBusGProxy*, const guint, GError*& )> fUnInhibit,
+ boost::optional<guint>& rCookie )
{
#ifdef ENABLE_DBUS
- if ( ( !bInhibit && ( mnFDOCookie == boost::none ) ) ||
- ( bInhibit && ( mnFDOCookie != boost::none ) ) )
+ if ( ( !bInhibit && ( rCookie == boost::none ) ) ||
+ ( bInhibit && ( rCookie != boost::none ) ) )
{
return;
}
@@ -58,46 +62,36 @@ void ScreenSaverInhibitor::inhibitFDO( bool bInhibit, const gchar* appname, cons
}
proxy = dbus_g_proxy_new_for_name( session_connection,
- FDO_DBUS_SERVICE,
- FDO_DBUS_PATH,
- FDO_DBUS_INTERFACE );
+ service,
+ path,
+ interface );
if (proxy == NULL) {
- SAL_INFO( "vcl.screensaverinhibitor", "could not get dbus proxy: " FDO_DBUS_SERVICE );
+ SAL_INFO( "vcl.screensaverinhibitor", "could not get dbus proxy: " << service );
return;
}
if ( bInhibit )
{
guint nCookie;
- res = dbus_g_proxy_call( proxy,
- "Inhibit", &error,
- G_TYPE_STRING, appname,
- G_TYPE_STRING, reason,
- G_TYPE_INVALID,
- G_TYPE_UINT, &nCookie,
- G_TYPE_INVALID);
+ res = fInhibit( proxy, nCookie, error );
+
if (res)
{
- mnFDOCookie = nCookie;
+ rCookie = nCookie;
}
else
{
- SAL_INFO( "vcl.screensaverinhibitor", FDO_DBUS_SERVICE ".Inhibit failed");
+ SAL_INFO( "vcl.screensaverinhibitor", service << ".Inhibit failed");
}
}
else
{
- res = dbus_g_proxy_call (proxy,
- "UnInhibit",
- &error,
- G_TYPE_UINT, mnFDOCookie.get(),
- G_TYPE_INVALID,
- G_TYPE_INVALID);
- mnFDOCookie = boost::none;
+ res = fUnInhibit( proxy, rCookie.get(), error );
+ rCookie = boost::none;
if (!res)
{
- SAL_INFO( "vcl.screensaverinhibitor", FDO_DBUS_SERVICE ".UnInhibit failed" );
+ SAL_INFO( "vcl.screensaverinhibitor", service << ".UnInhibit failed" );
}
}
@@ -112,81 +106,52 @@ void ScreenSaverInhibitor::inhibitFDO( bool bInhibit, const gchar* appname, cons
#endif // ENABLE_DBUS
}
-void ScreenSaverInhibitor::inhibitGSM( bool bInhibit, const gchar* appname, const gchar* reason, const guint xid )
+void ScreenSaverInhibitor::inhibitFDO( bool bInhibit, const gchar* appname, const gchar* reason )
{
-#ifdef ENABLE_DBUS
- if ( ( !bInhibit && ( mnGSMCookie == boost::none ) ) ||
- ( bInhibit && ( mnGSMCookie != boost::none ) ) )
- {
- return;
- }
-
- gboolean res;
- GError *error = NULL;
- DBusGProxy *proxy = NULL;
-
- DBusGConnection *session_connection = dbus_g_bus_get( DBUS_BUS_SESSION, &error );
- if (error != NULL) {
- SAL_WARN( "vcl.screensaverinhibitor", "failed to connect to dbus session bus: " << error->message );
- g_error_free( error );
- return;
- }
-
- proxy = dbus_g_proxy_new_for_name( session_connection,
- GSM_DBUS_SERVICE,
- GSM_DBUS_PATH,
- GSM_DBUS_INTERFACE );
- if (proxy == NULL) {
- SAL_INFO( "vcl.screensaverinhibitor", "could not get dbus proxy: " GSM_DBUS_SERVICE );
- return;
- }
-
- if ( bInhibit )
- {
- guint nCookie;
- res = dbus_g_proxy_call (proxy,
- "Inhibit", &error,
- G_TYPE_STRING, appname,
- G_TYPE_UINT, xid,
- G_TYPE_STRING, reason,
- G_TYPE_UINT, 8, //Inhibit the session being marked as idle
- G_TYPE_INVALID,
- G_TYPE_UINT, &nCookie,
- G_TYPE_INVALID);
- if ( res )
- {
- mnGSMCookie = nCookie;
- }
- else
- {
- SAL_INFO( "vcl.screensaverinhibitor", GSM_DBUS_SERVICE ".Inhibit failed" );
- }
- }
- else
- {
- res = dbus_g_proxy_call (proxy,
- "Uninhibit",
- &error,
- G_TYPE_UINT, mnGSMCookie.get(),
- G_TYPE_INVALID,
- G_TYPE_INVALID);
- mnGSMCookie = boost::none;
-
- if ( !res )
- {
- SAL_INFO( "vcl.screensaverinhibitor", GSM_DBUS_SERVICE ".Uninhibit failed" );
- }
- }
-
- if (error != NULL)
- {
- SAL_INFO( "vcl.screensaverinhibitor", "Error: " << error->message );
- g_error_free( error );
- }
-
- g_object_unref( G_OBJECT( proxy ) );
+ dbusInhibit( bInhibit,
+ FDO_DBUS_SERVICE, FDO_DBUS_PATH, FDO_DBUS_INTERFACE,
+ [appname, reason] ( DBusGProxy *proxy, guint& nCookie, GError*& error ) -> bool {
+ return dbus_g_proxy_call( proxy,
+ "Inhibit", &error,
+ G_TYPE_STRING, appname,
+ G_TYPE_STRING, reason,
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &nCookie,
+ G_TYPE_INVALID );
+ },
+ [] ( DBusGProxy *proxy, const guint nCookie, GError*& error ) -> bool {
+ return dbus_g_proxy_call( proxy,
+ "UnInhibit", &error,
+ G_TYPE_UINT, nCookie,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID );
+ },
+ mnFDOCookie );
+}
-#endif // ENABLE_DBUS
+void ScreenSaverInhibitor::inhibitGSM( bool bInhibit, const gchar* appname, const gchar* reason, const guint xid )
+{
+ dbusInhibit( bInhibit,
+ GSM_DBUS_SERVICE, GSM_DBUS_PATH, GSM_DBUS_INTERFACE,
+ [appname, reason, xid] ( DBusGProxy *proxy, guint& nCookie, GError*& error ) -> bool {
+ return dbus_g_proxy_call( proxy,
+ "Inhibit", &error,
+ G_TYPE_STRING, appname,
+ G_TYPE_UINT, xid,
+ G_TYPE_STRING, reason,
+ G_TYPE_UINT, 8, //Inhibit the session being marked as idle
+ G_TYPE_INVALID,
+ G_TYPE_UINT, &nCookie,
+ G_TYPE_INVALID );
+ },
+ [] ( DBusGProxy *proxy, const guint nCookie, GError*& error ) -> bool {
+ return dbus_g_proxy_call( proxy,
+ "Uninhibit", &error,
+ G_TYPE_UINT, nCookie,
+ G_TYPE_INVALID,
+ G_TYPE_INVALID );
+ },
+ mnGSMCookie );
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */