diff options
| author | Christian Persch <[email protected]> | 2012-06-13 00:25:29 +0200 | 
|---|---|---|
| committer | raveit65 <[email protected]> | 2018-03-21 06:56:34 +0100 | 
| commit | 2f89fccf54a858495101cd57bac66ffca657ff62 (patch) | |
| tree | 3d499f08c0d5b8da3245ecb6136a29616b9d2ec8 /cut-n-paste/totem-screensaver/totem-scrsaver.c | |
| parent | 15073fb029c8fc78d7184be7bc0e70d4cbe5ac1b (diff) | |
| download | atril-2f89fccf54a858495101cd57bac66ffca657ff62.tar.bz2 atril-2f89fccf54a858495101cd57bac66ffca657ff62.tar.xz  | |
shell: Use GtkApplication to inhibit the screensaver
Remove TotemScrsaver copy, and use GtkApplication inhibition instead.
origin commit:
https://git.gnome.org/browse/evince/commit/?h=gnome-3-6&id=612701f
Diffstat (limited to 'cut-n-paste/totem-screensaver/totem-scrsaver.c')
| -rw-r--r-- | cut-n-paste/totem-screensaver/totem-scrsaver.c | 544 | 
1 files changed, 0 insertions, 544 deletions
diff --git a/cut-n-paste/totem-screensaver/totem-scrsaver.c b/cut-n-paste/totem-screensaver/totem-scrsaver.c deleted file mode 100644 index 78a81b5f..00000000 --- a/cut-n-paste/totem-screensaver/totem-scrsaver.c +++ /dev/null @@ -1,544 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- - -   Copyright (C) 2004-2006 Bastien Nocera <[email protected]> -   Copyright © 2010 Christian Persch -   Copyright © 2010 Carlos Garcia Campos - -   The Mate Library is free software; you can redistribute it and/or -   modify it under the terms of the GNU Library General Public License as -   published by the Free Software Foundation; either version 2 of the -   License, or (at your option) any later version. - -   The Mate Library 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 -   Library General Public License for more details. - -   You should have received a copy of the GNU Library General Public -   License along with the Mate Library; see the file COPYING.LIB.  If not, -   write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, -   Boston, MA 02110-1301  USA. - -   Authors: Bastien Nocera <[email protected]> -            Christian Persch -            Carlos Garcia Campos - */ - -#include "config.h" - -#include <glib/gi18n.h> - -#include <gdk/gdk.h> - -#ifdef GDK_WINDOWING_X11 -#include <gdk/gdkx.h> -#include <X11/keysym.h> - -#ifdef HAVE_XTEST -#include <X11/extensions/XTest.h> -#endif /* HAVE_XTEST */ -#endif /* GDK_WINDOWING_X11 */ - -#include "totem-scrsaver.h" - -#define GS_SERVICE   "org.gnome.SessionManager" -#define GS_PATH      "/org/gnome/SessionManager" -#define GS_INTERFACE "org.gnome.SessionManager" - -#define GSM_INHIBITOR_FLAG_IDLE 1 << 3 -#define XSCREENSAVER_MIN_TIMEOUT 60 - -enum { -	PROP_0, -	PROP_REASON -}; - -static void totem_scrsaver_finalize   (GObject *object); - -struct TotemScrsaverPrivate { -	/* Whether the screensaver is disabled */ -	gboolean disabled; -	/* The reason for the inhibition */ -	char *reason; - -	GDBusProxy *gs_proxy; -	gboolean have_session_dbus; -	guint32 cookie; - -	/* To save the screensaver info */ -	int timeout; -	int interval; -	int prefer_blanking; -	int allow_exposures; - -	/* For use with XTest */ -	int keycode1, keycode2; -	int *keycode; -	gboolean have_xtest; -}; - -G_DEFINE_TYPE(TotemScrsaver, totem_scrsaver, G_TYPE_OBJECT) - -static gboolean -screensaver_is_running_dbus (TotemScrsaver *scr) -{ -	return scr->priv->have_session_dbus; -} - -static void -on_inhibit_cb (GObject      *source_object, -	       GAsyncResult *res, -	       gpointer      user_data) -{ -	GDBusProxy    *proxy = G_DBUS_PROXY (source_object); -	TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); -	GVariant      *value; -	GError        *error = NULL; - -	value = g_dbus_proxy_call_finish (proxy, res, &error); -	if (!value) { -		g_warning ("Problem inhibiting the screensaver: %s", error->message); -		g_object_unref (scr); -		g_error_free (error); - -		return; -	} - -	/* save the cookie */ -	if (g_variant_is_of_type (value, G_VARIANT_TYPE ("(u)"))) -		g_variant_get (value, "(u)", &scr->priv->cookie); -	else -		scr->priv->cookie = 0; -	g_variant_unref (value); -	g_object_unref (scr); -} - -static void -on_uninhibit_cb (GObject      *source_object, -		 GAsyncResult *res, -		 gpointer      user_data) -{ -	GDBusProxy    *proxy = G_DBUS_PROXY (source_object); -	TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); -	GVariant      *value; -	GError        *error = NULL; - -	value = g_dbus_proxy_call_finish (proxy, res, &error); -	if (!value) { -		g_warning ("Problem uninhibiting the screensaver: %s", error->message); -		g_object_unref (scr); -		g_error_free (error); - -		return; -	} - -	/* clear the cookie */ -	scr->priv->cookie = 0; -	g_variant_unref (value); - -	g_object_unref (scr); -} - -static void -screensaver_inhibit_dbus (TotemScrsaver *scr, -			  gboolean	 inhibit) -{ -	TotemScrsaverPrivate *priv = scr->priv; - -	if (!priv->have_session_dbus) -		return; - -	g_object_ref (scr); - -	if (inhibit) { -		g_return_if_fail (scr->priv->reason != NULL); -		g_dbus_proxy_call (priv->gs_proxy, -				   "Inhibit", -				   g_variant_new ("(susu)", -						  g_get_application_name (), -						  0, -						  scr->priv->reason, -						  GSM_INHIBITOR_FLAG_IDLE), -				   G_DBUS_CALL_FLAGS_NO_AUTO_START, -				   -1, -				   NULL, -				   on_inhibit_cb, -				   scr); -	} else { -		g_dbus_proxy_call (priv->gs_proxy, -				   "Uninhibit", -				   g_variant_new ("(u)", priv->cookie), -				   G_DBUS_CALL_FLAGS_NO_AUTO_START, -				   -1, -				   NULL, -				   on_uninhibit_cb, -				   scr); -	} -} - -static void -screensaver_enable_dbus (TotemScrsaver *scr) -{ -	screensaver_inhibit_dbus (scr, FALSE); -} - -static void -screensaver_disable_dbus (TotemScrsaver *scr) -{ -	screensaver_inhibit_dbus (scr, TRUE); -} - -static void -screensaver_update_dbus_presence (TotemScrsaver *scr) -{ -	TotemScrsaverPrivate *priv = scr->priv; -	gchar *name_owner; - -	name_owner = g_dbus_proxy_get_name_owner (priv->gs_proxy); -	if (name_owner) { -		priv->have_session_dbus = TRUE; -		g_free (name_owner); -	} else { -		priv->have_session_dbus = FALSE; -	} -} - -static void -screensaver_dbus_owner_changed_cb (GObject    *object, -                                   GParamSpec *pspec, -                                   gpointer    user_data) -{ -	TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); - -	screensaver_update_dbus_presence (scr); -} - -static void -screensaver_dbus_proxy_new_cb (GObject      *source, -                               GAsyncResult *result, -                               gpointer      user_data) -{ -	TotemScrsaver *scr = TOTEM_SCRSAVER (user_data); -	TotemScrsaverPrivate *priv = scr->priv; - -	priv->gs_proxy = g_dbus_proxy_new_for_bus_finish (result, NULL); -	if (!priv->gs_proxy) -		return; - -	screensaver_update_dbus_presence (scr); - -	g_signal_connect (priv->gs_proxy, "notify::g-name-owner", -	                  G_CALLBACK (screensaver_dbus_owner_changed_cb), -	                  scr); -} - -static void -screensaver_init_dbus (TotemScrsaver *scr) -{ -	g_dbus_proxy_new_for_bus (G_BUS_TYPE_SESSION, -	                          G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES, -	                          NULL, -	                          GS_SERVICE, -	                          GS_PATH, -	                          GS_INTERFACE, -	                          NULL, -	                          screensaver_dbus_proxy_new_cb, -	                          scr); -} - -static void -screensaver_finalize_dbus (TotemScrsaver *scr) -{ -	if (scr->priv->gs_proxy) { -		g_object_unref (scr->priv->gs_proxy); -	} -} - -#ifdef GDK_WINDOWING_X11 -static void -screensaver_enable_x11 (TotemScrsaver *scr) -{ -	Display *display; - -#ifdef HAVE_XTEST -	if (scr->priv->have_xtest != FALSE) -	{ -		g_source_remove_by_user_data (scr); -		return; -	} -#endif /* HAVE_XTEST */ - -	display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); -	XLockDisplay (display); -	XSetScreenSaver (display, -			scr->priv->timeout, -			scr->priv->interval, -			scr->priv->prefer_blanking, -			scr->priv->allow_exposures); -	XUnlockDisplay (display); -} - -#ifdef HAVE_XTEST -static gboolean -fake_event (TotemScrsaver *scr) -{ -	if (scr->priv->disabled) -	{ -		Display *display; - -		display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); -		XLockDisplay (display); -		XTestFakeKeyEvent (display, *scr->priv->keycode, -				True, CurrentTime); -		XTestFakeKeyEvent (display, *scr->priv->keycode, -				False, CurrentTime); -		XUnlockDisplay (display); -		/* Swap the keycode */ -		if (scr->priv->keycode == &scr->priv->keycode1) -			scr->priv->keycode = &scr->priv->keycode2; -		else -			scr->priv->keycode = &scr->priv->keycode1; -	} - -	return TRUE; -} -#endif /* HAVE_XTEST */ - -static void -screensaver_disable_x11 (TotemScrsaver *scr) -{ -	Display *display; - -	display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); - -#ifdef HAVE_XTEST -	if (scr->priv->have_xtest != FALSE) -	{ -		XLockDisplay (display); -		XGetScreenSaver(display, &scr->priv->timeout, -				&scr->priv->interval, -				&scr->priv->prefer_blanking, -				&scr->priv->allow_exposures); -		XUnlockDisplay (display); - -		if (scr->priv->timeout != 0) { -			g_timeout_add_seconds (scr->priv->timeout / 2, -					       (GSourceFunc) fake_event, scr); -		} else { -			g_timeout_add_seconds (XSCREENSAVER_MIN_TIMEOUT / 2, -					       (GSourceFunc) fake_event, scr); -		} - -		return; -	} -#endif /* HAVE_XTEST */ - -	XLockDisplay (display); -	XGetScreenSaver(display, &scr->priv->timeout, -			&scr->priv->interval, -			&scr->priv->prefer_blanking, -			&scr->priv->allow_exposures); -	XSetScreenSaver(display, 0, 0, -			DontPreferBlanking, DontAllowExposures); -	XUnlockDisplay (display); -} - -static void -screensaver_init_x11 (TotemScrsaver *scr) -{ -#ifdef HAVE_XTEST -	int a, b, c, d; -	Display *display; - -	display = GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()); - -	XLockDisplay (display); -	scr->priv->have_xtest = (XTestQueryExtension (display, &a, &b, &c, &d) == True); -	if (scr->priv->have_xtest != FALSE) -	{ -		scr->priv->keycode1 = XKeysymToKeycode (display, XK_Alt_L); -		if (scr->priv->keycode1 == 0) { -			g_warning ("scr->priv->keycode1 not existent"); -		} -		scr->priv->keycode2 = XKeysymToKeycode (display, XK_Alt_R); -		if (scr->priv->keycode2 == 0) { -			scr->priv->keycode2 = XKeysymToKeycode (display, XK_Alt_L); -			if (scr->priv->keycode2 == 0) { -				g_warning ("scr->priv->keycode2 not existent"); -			} -		} -		scr->priv->keycode = &scr->priv->keycode1; -	} -	XUnlockDisplay (display); -#endif /* HAVE_XTEST */ -} - -static void -screensaver_finalize_x11 (TotemScrsaver *scr) -{ -	g_source_remove_by_user_data (scr); -} -#endif - -static void -totem_scrsaver_get_property (GObject *object, -			     guint property_id, -			     GValue *value, -			     GParamSpec *pspec) -{ -	TotemScrsaver *scr; - -	scr = TOTEM_SCRSAVER (object); - -	switch (property_id) -	{ -	case PROP_REASON: -		g_value_set_string (value, scr->priv->reason); -		break; -	default: -		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -	} -} - -static void -totem_scrsaver_set_property (GObject *object, -			     guint property_id, -			     const GValue *value, -			     GParamSpec *pspec) -{ -	TotemScrsaver *scr; - -	scr = TOTEM_SCRSAVER (object); - -	switch (property_id) -	{ -	case PROP_REASON: -		g_free (scr->priv->reason); -		scr->priv->reason = g_value_dup_string (value); -		break; -	default: -		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); -	} -} - -static void -totem_scrsaver_class_init (TotemScrsaverClass *klass) -{ -	GObjectClass *object_class = G_OBJECT_CLASS (klass); - -	g_type_class_add_private (klass, sizeof (TotemScrsaverPrivate)); - -	object_class->set_property = totem_scrsaver_set_property; -	object_class->get_property = totem_scrsaver_get_property; -	object_class->finalize = totem_scrsaver_finalize; - -	g_object_class_install_property (object_class, PROP_REASON, -					 g_param_spec_string ("reason", NULL, NULL, -							      NULL, G_PARAM_READWRITE)); - -} - -/** - * totem_scrsaver_new: - * - * Creates a #TotemScrsaver object. - * If the MATE screen saver is running, it uses its DBUS interface to - * inhibit the screensaver; otherwise it falls back to using the X - * screensaver functionality for this. - * - * Returns: a newly created #TotemScrsaver - */ -TotemScrsaver * -totem_scrsaver_new (void) -{ -	return TOTEM_SCRSAVER (g_object_new (TOTEM_TYPE_SCRSAVER, NULL)); -} - -static void -totem_scrsaver_init (TotemScrsaver *scr) -{ -	scr->priv = G_TYPE_INSTANCE_GET_PRIVATE (scr, -						 TOTEM_TYPE_SCRSAVER, -						 TotemScrsaverPrivate); - -	screensaver_init_dbus (scr); -#ifdef GDK_WINDOWING_X11 -	screensaver_init_x11 (scr); -#else -#warning Unimplemented -#endif -} - -void -totem_scrsaver_disable (TotemScrsaver *scr) -{ -	g_return_if_fail (TOTEM_IS_SCRSAVER (scr)); - -	if (scr->priv->disabled != FALSE) -		return; - -	scr->priv->disabled = TRUE; - -	if (screensaver_is_running_dbus (scr) != FALSE) -		screensaver_disable_dbus (scr); -	else  -#ifdef GDK_WINDOWING_X11 -		screensaver_disable_x11 (scr); -#else -#warning Unimplemented -	{} -#endif -} - -void -totem_scrsaver_enable (TotemScrsaver *scr) -{ -	g_return_if_fail (TOTEM_IS_SCRSAVER (scr)); - -	if (scr->priv->disabled == FALSE) -		return; - -	scr->priv->disabled = FALSE; - -	if (screensaver_is_running_dbus (scr) != FALSE) -		screensaver_enable_dbus (scr); -	else -#ifdef GDK_WINDOWING_X11 -		screensaver_enable_x11 (scr); -#else -#warning Unimplemented -	{} -#endif -} - -void -totem_scrsaver_set_state (TotemScrsaver *scr, gboolean enable) -{ -	g_return_if_fail (TOTEM_IS_SCRSAVER (scr)); - -	if (scr->priv->disabled == !enable) -		return; - -	if (enable == FALSE) -		totem_scrsaver_disable (scr); -	else -		totem_scrsaver_enable (scr); -} - -static void -totem_scrsaver_finalize (GObject *object) -{ -	TotemScrsaver *scr = TOTEM_SCRSAVER (object); - -	g_free (scr->priv->reason); - -	screensaver_finalize_dbus (scr); -#ifdef GDK_WINDOWING_X11 -	screensaver_finalize_x11 (scr); -#else -#warning Unimplemented -	{} -#endif - -	G_OBJECT_CLASS (totem_scrsaver_parent_class)->finalize (object); -}  | 
