This is an automated email from the git hooks/post-receive script. b l u e s a b r e p u s h e d a c o m m i t t o b r a n c h m a s t e r in repository apps/parole.
commit f32c7080733a3e1b43ab2196039f1a7dee80fc42 Author: Simon Steinbeiss <simon.steinbe...@elfenbeinturm.at> Date: Wed Jul 31 22:52:02 2019 +0200 Inhibit power management during video playback (Bug #15747) Signed-off-by: Sean Davis <smd.seanda...@gmail.com> --- src/common/Makefile.am | 4 +- src/common/parole-powermanager.c | 114 +++++++++++++++++++++++++++++++++++++++ src/common/parole-powermanager.h | 38 +++++++++++++ src/parole-player.c | 18 ++++++- 4 files changed, 172 insertions(+), 2 deletions(-) diff --git a/src/common/Makefile.am b/src/common/Makefile.am index af39af2..508166d 100644 --- a/src/common/Makefile.am +++ b/src/common/Makefile.am @@ -6,7 +6,9 @@ libparolecommon_la_SOURCES = \ parole-common.c \ parole-common.h \ parole-rc-utils.c \ - parole-rc-utils.h + parole-rc-utils.h \ + parole-powermanager.c \ + parole-powermanager.h libparolecommon_la_CFLAGS = \ $(GTK_CFLAGS) \ diff --git a/src/common/parole-powermanager.c b/src/common/parole-powermanager.c new file mode 100644 index 0000000..c4d7852 --- /dev/null +++ b/src/common/parole-powermanager.c @@ -0,0 +1,114 @@ +/* + * * Copyright (C) 2019 Simon Steinbeiß <och...@xfce.org> + * + * Licensed under the GNU General Public License Version 2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <glib.h> +#include <gio/gio.h> +#include <gtk/gtk.h> +#include <gdk/gdkx.h> + +#include <libxfce4util/libxfce4util.h> + +#include "parole-powermanager.h" + +#define DBUS_SERVICE "org.freedesktop.PowerManagement" +#define DBUS_PATH "/org/freedesktop/PowerManagement/Inhibit" +#define DBUS_INTERFACE "org.freedesktop.PowerManagement.Inhibit" + + + +guint32 +parole_power_manager_inhibit (GDBusConnection *connection) { + GVariant *reply; + GError *error = NULL; + guint32 cookie; + + reply = g_dbus_connection_call_sync (connection, + DBUS_SERVICE, + DBUS_PATH, + DBUS_INTERFACE, + "Inhibit", + g_variant_new ("(ss)", + "Parole", + "Video Playback"), + G_VARIANT_TYPE ("(u)"), + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + + if (error) { + g_warning ("Inhibiting power management failed %s", error->message); + g_error_free (error); + } + if (reply != NULL) { + g_variant_get (reply, "(u)", &cookie, NULL); + g_variant_unref (reply); + return cookie; + } +} + +void +parole_power_manager_uninhibit (GDBusConnection *connection, + guint32 cookie) +{ + GVariant *reply; + GError *error = NULL; + + reply = g_dbus_connection_call_sync (connection, + DBUS_SERVICE, + DBUS_PATH, + DBUS_INTERFACE, + "UnInhibit", + g_variant_new ("(u)", + cookie), + NULL, + G_DBUS_CALL_FLAGS_NONE, + -1, + NULL, + &error); + + if (error) { + g_warning ("Uninhibiting power management failed: %s", error->message); + g_error_free (error); + } + g_variant_unref (reply); +} + +GDBusConnection * +parole_power_manager_dbus_init () +{ + GDBusConnection *connection; + GError *error = NULL; + + connection = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error); + if (error) { + g_warning ("Failed to get session bus: %s", error->message); + g_error_free (error); + } + return connection; +} diff --git a/src/common/parole-powermanager.h b/src/common/parole-powermanager.h new file mode 100644 index 0000000..2779094 --- /dev/null +++ b/src/common/parole-powermanager.h @@ -0,0 +1,38 @@ +/* + * * Copyright (C) 2009-2011 Ali <al...@xfce.org> + * * Copyright (C) 2012-2017 Sean Davis <smd.seanda...@gmail.com> + * * Copyright (C) 2012-2017 Simon Steinbeiß <och...@xfce.org + * + * Licensed under the GNU General Public License Version 2 + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef SRC_COMMON_PAROLE_POWERMANAGER_H_ +#define SRC_COMMON_PAROLE_POWERMANAGER_H_ + +#include <glib-object.h> +#include <gtk/gtk.h> + +G_BEGIN_DECLS + +guint32 parole_power_manager_inhibit (GDBusConnection *connection); +void parole_power_manager_uninhibit (GDBusConnection *connection, + guint32 cookie); +GDBusConnection *parole_power_manager_dbus_init (); + +G_END_DECLS + +#endif /* SRC_COMMON_PAROLE_POWERMANAGER_H_ */ diff --git a/src/parole-player.c b/src/parole-player.c index 1c1781b..53ac841 100644 --- a/src/parole-player.c +++ b/src/parole-player.c @@ -49,6 +49,7 @@ #include "src/common/parole-common.h" #include "src/common/parole-rc-utils.h" #include "src/common/parole-screensaver.h" +#include "src/common/parole-powermanager.h" #include "src/dbus/parole-dbus.h" @@ -338,6 +339,8 @@ struct ParolePlayerPrivate { ParoleMediaList *list; ParoleDisc *disc; ParoleScreenSaver *screen_saver; + GDBusConnection *connection; + guint32 inhibit_cookie; ParoleConf *conf; ParoleConfDialog *settings_dialog; @@ -1546,6 +1549,9 @@ parole_player_reset_saver_changed(ParolePlayer *player, const ParoleStream *stre if ( !reset_saver ) { parole_screen_saver_uninhibit(player->priv->screen_saver, GTK_WINDOW(player->priv->window)); + if (player->priv->inhibit_cookie > 0) + parole_power_manager_uninhibit (player->priv->connection, player->priv->inhibit_cookie); + player->priv->inhibit_cookie = 0; } else if ( player->priv->state == PAROLE_STATE_PLAYING ) { gboolean has_video; @@ -1554,10 +1560,15 @@ parole_player_reset_saver_changed(ParolePlayer *player, const ParoleStream *stre NULL); if ( has_video ) { - parole_screen_saver_inhibit(player->priv->screen_saver, GTK_WINDOW(player->priv->window)); + parole_screen_saver_inhibit (player->priv->screen_saver, GTK_WINDOW(player->priv->window)); + if (player->priv->inhibit_cookie == 0) + player->priv->inhibit_cookie = parole_power_manager_inhibit (player->priv->connection); } } else { parole_screen_saver_uninhibit(player->priv->screen_saver, GTK_WINDOW(player->priv->window)); + if (player->priv->inhibit_cookie > 0) + parole_power_manager_uninhibit (player->priv->connection, player->priv->inhibit_cookie); + player->priv->inhibit_cookie = 0; } } @@ -2407,6 +2418,7 @@ parole_player_finalize(GObject *object) { g_object_unref(player->priv->video_filter); g_object_unref(player->priv->disc); g_object_unref(player->priv->screen_saver); + g_object_unref(player->priv->connection); if ( player->priv->client_id ) g_free(player->priv->client_id); @@ -3144,6 +3156,10 @@ parole_player_init(ParolePlayer *player) { /* ParoleScreenSaver */ player->priv->screen_saver = parole_screen_saver_new(); + /* PowerManagement Inhibit cookie */ + player->priv->connection = parole_power_manager_dbus_init (); + player->priv->inhibit_cookie = 0; + /* ParoleMediaList */ player->priv->list = PAROLE_MEDIA_LIST(parole_media_list_get()); -- To stop receiving notification emails like this one, please contact the administrator of this repository. _______________________________________________ Xfce4-commits mailing list Xfce4-commits@xfce.org https://mail.xfce.org/mailman/listinfo/xfce4-commits