diff --git a/.gitignore b/.gitignore index 1ccc551240aca809702c7dff24d2a380632bbc54..11264cb32f6000b67cb8084bc01a50d1df3a65db 100644 --- a/.gitignore +++ b/.gitignore @@ -51,7 +51,6 @@ savers/*.desktop.in savers/floaters savers/popsquares savers/slideshow -src/test-fade src/test-passwd src/test-watcher src/test-window diff --git a/src/Makefile.am b/src/Makefile.am index 31068e3e60fc556f7c124704d7803c60f3e667fd..94842172a30bd8e7898b23095bbd94abe4554cba 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -47,7 +47,6 @@ libexec_PROGRAMS = \ $(NULL) noinst_PROGRAMS = \ - test-fade \ test-passwd \ test-window \ $(NULL) @@ -70,22 +69,6 @@ AUTH_SOURCES = \ gs-auth-@AUTH_SCHEME@.c \ $(NULL) -test_fade_SOURCES = \ - test-fade.c \ - gs-fade.c \ - gs-fade.h \ - gs-debug.c \ - gs-debug.h \ - xfce-rr.c \ - xfce-rr.h \ - xfce-rr-private.h \ - $(NULL) - -test_fade_LDADD = \ - $(XFCE_SCREENSAVER_LIBS) \ - $(SAVER_LIBS) \ - $(NULL) - test_passwd_SOURCES = \ test-passwd.c \ $(AUTH_SOURCES) \ @@ -213,8 +196,6 @@ xfce4_screensaver_SOURCES = \ subprocs.h \ gs-grab-x11.c \ gs-grab.h \ - gs-fade.c \ - gs-fade.h \ xfce-rr.c \ xfce-rr.h \ xfce-rr-private.h \ diff --git a/src/gs-fade.c b/src/gs-fade.c deleted file mode 100644 index 92d24af81f678cc0a03c2d04a62f7c926c91d594..0000000000000000000000000000000000000000 --- a/src/gs-fade.c +++ /dev/null @@ -1,829 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * Copyright (C) 2004-2009 William Jon McCann <mccann@jhu.edu> - * Copyright (C) 2009 Red Hat, Inc. - * Copyright (C) 2018 Sean Davis <bluesabre@xfce.org> - * - * 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 St, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Authors: William Jon McCann <mccann@jhu.edu> - * - */ - -#include <config.h> - -#include <errno.h> -#include <stdio.h> -#include <stdlib.h> -#include <string.h> -#include <sys/time.h> -#include <sys/types.h> -#include <time.h> - -#include <gdk/gdkx.h> -#include <gtk/gtk.h> - -#ifdef HAVE_UNISTD_H -#include <unistd.h> -#endif /* HAVE_UNISTD_H */ - -#include "gs-fade.h" -#include "gs-debug.h" -#include "xfce-rr.h" - -/* XFree86 4.x+ Gamma fading */ -#ifdef HAVE_XF86VMODE_GAMMA - -#include <X11/extensions/xf86vmode.h> - -#define XF86_MIN_GAMMA 0.1 - -#endif /* HAVE_XF86VMODE_GAMMA */ - -static void gs_fade_class_init (GSFadeClass *klass); -static void gs_fade_init (GSFade *fade); -static void gs_fade_finalize (GObject *object); - -struct GSGammaInfo { - int size; - unsigned short *r; - unsigned short *g; - unsigned short *b; -}; - -struct GSFadeScreenPrivate { - int fade_type; - int num_ramps; - /* one per crtc in randr mode */ - struct GSGammaInfo *info; - /* one per screen in theory */ - XfceRRScreen *rrscreen; -#ifdef HAVE_XF86VMODE_GAMMA - /* one per screen also */ - XF86VidModeGamma vmg; -#endif /* HAVE_XF86VMODE_GAMMA */ - gboolean (*fade_setup) (GSFade *fade); - gboolean (*fade_set_alpha_gamma) (GSFade *fade, - gdouble alpha); - void (*fade_finish) (GSFade *fade); -}; - -struct GSFadePrivate { - guint enabled : 1; - guint active : 1; - - guint timeout; - - guint step; - guint num_steps; - guint timer_id; - - gdouble alpha_per_iter; - gdouble current_alpha; - - struct GSFadeScreenPrivate screen_priv; -}; - -enum { - FADED, - LAST_SIGNAL -}; - -enum { - FADE_TYPE_NONE, - FADE_TYPE_GAMMA_NUMBER, - FADE_TYPE_GAMMA_RAMP, - FADE_TYPE_XRANDR, -}; - -static guint signals[LAST_SIGNAL] = { 0, }; - -G_DEFINE_TYPE_WITH_PRIVATE (GSFade, gs_fade, G_TYPE_OBJECT) - -static gpointer fade_object = NULL; - -#ifdef HAVE_XF86VMODE_GAMMA - -/* This is needed because the VidMode extension doesn't work - on remote displays -- but if the remote display has the extension - at all, XF86VidModeQueryExtension returns true, and then - XF86VidModeQueryVersion dies with an X error. -*/ - -static gboolean error_handler_hit = FALSE; - -static int -ignore_all_errors_ehandler (Display *dpy, - XErrorEvent *error) { - error_handler_hit = TRUE; - - return 0; -} - -static Bool -safe_XF86VidModeQueryVersion (Display *dpy, - int *majP, - int *minP) { - Bool result; - XErrorHandler old_handler; - - XSync (dpy, False); - error_handler_hit = FALSE; - old_handler = XSetErrorHandler (ignore_all_errors_ehandler); - - result = XF86VidModeQueryVersion (dpy, majP, minP); - - XSync (dpy, False); - XSetErrorHandler (old_handler); - XSync (dpy, False); - - return (error_handler_hit - ? False - : result); -} - -static gboolean -xf86_whack_gamma (int screen, - struct GSFadeScreenPrivate *screen_priv, - float ratio) { - Bool status; - struct GSGammaInfo *gamma_info; - - gamma_info = screen_priv->info; - - if (!gamma_info) - return FALSE; - - if (ratio < 0) { - ratio = 0; - } - if (ratio > 1) { - ratio = 1; - } - - if (gamma_info->size == 0) { - /* we only have a gamma number, not a ramp. */ - - XF86VidModeGamma g2; - - g2.red = screen_priv->vmg.red * ratio; - g2.green = screen_priv->vmg.green * ratio; - g2.blue = screen_priv->vmg.blue * ratio; - - if (g2.red < XF86_MIN_GAMMA) { - g2.red = XF86_MIN_GAMMA; - } - if (g2.green < XF86_MIN_GAMMA) { - g2.green = XF86_MIN_GAMMA; - } - if (g2.blue < XF86_MIN_GAMMA) { - g2.blue = XF86_MIN_GAMMA; - } - - status = XF86VidModeSetGamma (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), screen, &g2); - } else { -# ifdef HAVE_XF86VMODE_GAMMA_RAMP - unsigned short *r, *g, *b; - int i; - - r = g_new0 (unsigned short, gamma_info->size); - g = g_new0 (unsigned short, gamma_info->size); - b = g_new0 (unsigned short, gamma_info->size); - - for (i = 0; i < gamma_info->size; i++) { - r[i] = gamma_info->r[i] * ratio; - g[i] = gamma_info->g[i] * ratio; - b[i] = gamma_info->b[i] * ratio; - } - - status = XF86VidModeSetGammaRamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - screen, gamma_info->size, r, g, b); - - g_free (r); - g_free (g); - g_free (b); - -# else /* !HAVE_XF86VMODE_GAMMA_RAMP */ - abort (); -# endif /* !HAVE_XF86VMODE_GAMMA_RAMP */ - } - - gdk_display_flush (gdk_display_get_default()); - - return status; -} - -#endif /* HAVE_XF86VMODE_GAMMA */ - -/* VidModeExtension version 2.0 or better is needed to do gamma. - 2.0 added gamma values; 2.1 added gamma ramps. -*/ -# define XF86_VIDMODE_GAMMA_MIN_MAJOR 2 -# define XF86_VIDMODE_GAMMA_MIN_MINOR 0 -# define XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR 2 -# define XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR 1 - - -#ifdef HAVE_XF86VMODE_GAMMA -static gboolean -gamma_fade_setup (GSFade *fade) { - gboolean res; - struct GSFadeScreenPrivate *screen_priv; - - screen_priv = &fade->priv->screen_priv; - - if (screen_priv->info) - return TRUE; - -# ifndef HAVE_XF86VMODE_GAMMA_RAMP - if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type) { - /* server is newer than client! */ - screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER; - } -# endif - -# ifdef HAVE_XF86VMODE_GAMMA_RAMP - - screen_priv->info = g_new0(struct GSGammaInfo, 1); - screen_priv->num_ramps = 1; - - if (FADE_TYPE_GAMMA_RAMP == screen_priv->fade_type) { - /* have ramps */ - - res = XF86VidModeGetGammaRampSize (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - GDK_SCREEN_XNUMBER (gdk_screen_get_default ()), - &screen_priv->info->size); - if (!res || screen_priv->info->size <= 0) { - screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER; - goto test_number; - } - - screen_priv->info->r = g_new0 (unsigned short, screen_priv->info->size); - screen_priv->info->g = g_new0 (unsigned short, screen_priv->info->size); - screen_priv->info->b = g_new0 (unsigned short, screen_priv->info->size); - - if (!(screen_priv->info->r && screen_priv->info->g && screen_priv->info->b)) { - screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER; - goto test_number; - } - - res = XF86VidModeGetGammaRamp (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - GDK_SCREEN_XNUMBER (gdk_screen_get_default ()), - screen_priv->info->size, - screen_priv->info->r, - screen_priv->info->g, - screen_priv->info->b); - if (!res) { - screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER; - goto test_number; - } - gs_debug ("Initialized gamma ramp fade"); - } -# endif /* HAVE_XF86VMODE_GAMMA_RAMP */ - -test_number: - if (FADE_TYPE_GAMMA_NUMBER == screen_priv->fade_type) { - /* only have gamma parameter, not ramps. */ - - res = XF86VidModeGetGamma (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), - GDK_SCREEN_XNUMBER (gdk_screen_get_default ()), - &screen_priv->vmg); - if (!res) { - screen_priv->fade_type = FADE_TYPE_NONE; - goto test_none; - } - gs_debug ("Initialized gamma fade: %f %f %f", - screen_priv->vmg.red, - screen_priv->vmg.green, - screen_priv->vmg.blue); - } - -test_none: - if (FADE_TYPE_NONE == screen_priv->fade_type) { - goto FAIL; - } - - return TRUE; -FAIL: - - return FALSE; -} -#endif /* HAVE_XF86VMODE_GAMMA */ - -static void -screen_fade_finish (GSFade *fade) { - struct GSFadeScreenPrivate *screen_priv; - int i; - screen_priv = &fade->priv->screen_priv; - - if (!screen_priv->info) - return; - - for (i = 0; i < screen_priv->num_ramps; i++) { - if (screen_priv->info[i].r) - g_free (screen_priv->info[i].r); - if (screen_priv->info[i].g) - g_free (screen_priv->info[i].g); - if (screen_priv->info[i].b) - g_free (screen_priv->info[i].b); - } - - g_free (screen_priv->info); - screen_priv->info = NULL; - screen_priv->num_ramps = 0; -} - -#ifdef HAVE_XF86VMODE_GAMMA -static gboolean -gamma_fade_set_alpha_gamma (GSFade *fade, - gdouble alpha) { - struct GSFadeScreenPrivate *screen_priv; - int screen_idx = GDK_SCREEN_XNUMBER (gdk_screen_get_default ()); - - screen_priv = &fade->priv->screen_priv; - xf86_whack_gamma (screen_idx, screen_priv, alpha); - - return TRUE; -} -#endif /* HAVE_XF86VMODE_GAMMA */ - -static void -check_gamma_extension (GSFade *fade) { - struct GSFadeScreenPrivate *screen_priv; -#ifdef HAVE_XF86VMODE_GAMMA - int event; - int error; - int major; - int minor; - gboolean res; -#endif /* HAVE_XF86VMODE_GAMMA */ - - screen_priv = &fade->priv->screen_priv; - -#ifdef HAVE_XF86VMODE_GAMMA - res = XF86VidModeQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &event, &error); - if (!res) - goto fade_none; - - res = safe_XF86VidModeQueryVersion (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &major, &minor); - if (!res) - goto fade_none; - - if (major < XF86_VIDMODE_GAMMA_MIN_MAJOR || - (major == XF86_VIDMODE_GAMMA_MIN_MAJOR && - minor < XF86_VIDMODE_GAMMA_MIN_MINOR)) - goto fade_none; - - screen_priv->fade_setup = gamma_fade_setup; - screen_priv->fade_finish = screen_fade_finish; - screen_priv->fade_set_alpha_gamma = gamma_fade_set_alpha_gamma; - - if (major < XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR || - (major == XF86_VIDMODE_GAMMA_RAMP_MIN_MAJOR && - minor < XF86_VIDMODE_GAMMA_RAMP_MIN_MINOR)) { - screen_priv->fade_type = FADE_TYPE_GAMMA_NUMBER; - return; - } - - /* Copacetic */ - screen_priv->fade_type = FADE_TYPE_GAMMA_RAMP; - return; -fade_none: -#endif - screen_priv->fade_type = FADE_TYPE_NONE; -} - -/* Xrandr support */ - -static gboolean xrandr_fade_setup (GSFade *fade) { - struct GSFadeScreenPrivate *screen_priv; - XfceRRCrtc *crtc; - XfceRRCrtc **crtcs; - int crtc_count = 0; - struct GSGammaInfo *info; - gboolean res; - - screen_priv = &fade->priv->screen_priv; - - if (screen_priv->info) - return TRUE; - - /* refresh the screen info */ - xfce_rr_screen_refresh (screen_priv->rrscreen, NULL); - - crtcs = xfce_rr_screen_list_crtcs (screen_priv->rrscreen); - while (*crtcs) { - crtc_count++; - crtcs++; - } - - screen_priv->info = g_new0 (struct GSGammaInfo, crtc_count); - screen_priv->num_ramps = crtc_count; - - crtc_count = 0; - crtcs = xfce_rr_screen_list_crtcs (screen_priv->rrscreen); - while (*crtcs) { - crtc = *crtcs; - - info = &screen_priv->info[crtc_count]; - - /* if no mode ignore crtc */ - if (!xfce_rr_crtc_get_current_mode (crtc)) { - info->size = 0; - info->r = NULL; - info->g = NULL; - info->b = NULL; - } else { - res = xfce_rr_crtc_get_gamma (crtc, &info->size, - &info->r, &info->g, - &info->b); - if (res == FALSE) - goto fail; - } - - crtcs++; - crtc_count++; - } - return TRUE; -fail: - return FALSE; -} - -static void xrandr_crtc_whack_gamma (XfceRRCrtc *crtc, - struct GSGammaInfo *gamma_info, - float ratio) { - unsigned short *r, *g, *b; - int i; - - if (gamma_info->size == 0) - return; - - if (ratio < 0) { - ratio = 0; - } - if (ratio > 1) { - ratio = 1; - } - - r = g_new0 (unsigned short, gamma_info->size); - g = g_new0 (unsigned short, gamma_info->size); - b = g_new0 (unsigned short, gamma_info->size); - - for (i = 0; i < gamma_info->size; i++) { - r[i] = gamma_info->r[i] * ratio; - g[i] = gamma_info->g[i] * ratio; - b[i] = gamma_info->b[i] * ratio; - } - - xfce_rr_crtc_set_gamma (crtc, gamma_info->size, - r, g, b); - g_free (r); - g_free (g); - g_free (b); -} - -static gboolean xrandr_fade_set_alpha_gamma (GSFade *fade, - gdouble alpha) { - struct GSFadeScreenPrivate *screen_priv; - XfceRRCrtc **crtcs; - int i; - - screen_priv = &fade->priv->screen_priv; - - if (!screen_priv->info) - return FALSE; - - crtcs = xfce_rr_screen_list_crtcs (screen_priv->rrscreen); - i = 0; - - while (*crtcs) { - struct GSGammaInfo *info; - info = &screen_priv->info[i]; - xrandr_crtc_whack_gamma (*crtcs, info, alpha); - i++; - crtcs++; - } - return TRUE; -} - -static void -check_randr_extension (GSFade *fade) { - GdkDisplay *display = gdk_display_get_default (); - GdkScreen *screen = gdk_display_get_default_screen (display); - struct GSFadeScreenPrivate *screen_priv; - - screen_priv = &fade->priv->screen_priv; - - screen_priv->rrscreen = xfce_rr_screen_new (screen, - NULL); - if (!screen_priv->rrscreen) { - screen_priv->fade_type = FADE_TYPE_NONE; - return; - } - - screen_priv->fade_type = FADE_TYPE_XRANDR; - screen_priv->fade_setup = xrandr_fade_setup; - screen_priv->fade_finish = screen_fade_finish; - screen_priv->fade_set_alpha_gamma = xrandr_fade_set_alpha_gamma; -} - -static gboolean -gs_fade_set_alpha (GSFade *fade, - gdouble alpha) { - gboolean ret = FALSE; - - switch (fade->priv->screen_priv.fade_type) { - case FADE_TYPE_GAMMA_RAMP: - case FADE_TYPE_GAMMA_NUMBER: - case FADE_TYPE_XRANDR: - ret = fade->priv->screen_priv.fade_set_alpha_gamma (fade, alpha); - break; - case FADE_TYPE_NONE: - ret = FALSE; - break; - default: - g_warning ("Unknown fade type"); - ret = FALSE; - break; - } - - return ret; -} - -static gboolean -gs_fade_out_iter (GSFade *fade) { - gboolean ret; - - if (fade->priv->current_alpha < 0.01) { - return FALSE; - } - - fade->priv->current_alpha -= fade->priv->alpha_per_iter; - - ret = gs_fade_set_alpha (fade, fade->priv->current_alpha); - - return ret; -} - -static gboolean -gs_fade_stop (GSFade *fade) { - if (fade->priv->timer_id > 0) { - g_source_remove (fade->priv->timer_id); - fade->priv->timer_id = 0; - } - - fade->priv->step = 0; - fade->priv->active = FALSE; - - return TRUE; -} - -void -gs_fade_finish (GSFade *fade) { - g_return_if_fail (GS_IS_FADE (fade)); - - if (!fade->priv->active) { - return; - } - - gs_fade_stop (fade); - - g_signal_emit (fade, signals[FADED], 0); - - fade->priv->active = FALSE; -} - -static gboolean -fade_out_timer (GSFade *fade) { - gboolean res; - - res = gs_fade_out_iter (fade); - - /* if failed then fade is complete */ - if (!res) { - gs_fade_finish (fade); - return FALSE; - } - - return TRUE; -} - -static void -gs_fade_set_timeout (GSFade *fade, - guint timeout) { - g_return_if_fail (GS_IS_FADE (fade)); - - fade->priv->timeout = timeout; -} - -static void -gs_fade_start (GSFade *fade, - guint timeout) { - guint steps_per_sec = 60; - guint msecs_per_step; - gboolean active_fade, res; - - g_return_if_fail (GS_IS_FADE (fade)); - - if (fade->priv->screen_priv.fade_type != FADE_TYPE_NONE) { - res = fade->priv->screen_priv.fade_setup (fade); - if (res == FALSE) - return; - } - - if (fade->priv->timer_id > 0) { - gs_fade_stop (fade); - } - - fade->priv->active = TRUE; - - gs_fade_set_timeout (fade, timeout); - - active_fade = FALSE; - if (fade->priv->screen_priv.fade_type != FADE_TYPE_NONE) - active_fade = TRUE; - - if (active_fade) { - guint num_steps; - - num_steps = (fade->priv->timeout / 1000.0) * steps_per_sec; - msecs_per_step = 1000 / steps_per_sec; - fade->priv->alpha_per_iter = 1.0 / (gdouble)num_steps; - - fade->priv->timer_id = g_timeout_add (msecs_per_step, (GSourceFunc)fade_out_timer, fade); - } else { - gs_fade_finish (fade); - } -} - -typedef struct { - GSFadeDoneFunc done_cb; - gpointer data; -} FadedCallbackData; - -static void -gs_fade_async_callback (GSFade *fade, - FadedCallbackData *cdata) { - g_signal_handlers_disconnect_by_func (fade, - gs_fade_async_callback, - cdata); - - if (cdata->done_cb) { - cdata->done_cb (fade, cdata->data); - } - - g_free (cdata); -} - -void -gs_fade_async (GSFade *fade, - guint timeout, - GSFadeDoneFunc done_cb, - gpointer data) { - g_return_if_fail (GS_IS_FADE (fade)); - - /* if fade is active then pause it */ - if (fade->priv->active) { - gs_fade_stop (fade); - } - - if (done_cb) { - FadedCallbackData *cb_data; - - cb_data = g_new0 (FadedCallbackData, 1); - cb_data->done_cb = done_cb; - cb_data->data = data; - - g_signal_connect (fade, "faded", - G_CALLBACK (gs_fade_async_callback), - cb_data); - } - - gs_fade_start (fade, timeout); -} - -static void -gs_fade_sync_callback (GSFade *fade, - int *flag) { - *flag = TRUE; - g_signal_handlers_disconnect_by_func (fade, - gs_fade_sync_callback, - flag); -} - -void -gs_fade_sync (GSFade *fade, - guint timeout) { - int flag = FALSE; - - g_return_if_fail (GS_IS_FADE (fade)); - - /* if fade is active then pause it */ - if (fade->priv->active) { - gs_fade_stop (fade); - } - - g_signal_connect (fade, "faded", - G_CALLBACK (gs_fade_sync_callback), - &flag); - - gs_fade_start (fade, timeout); - - while (!flag) { - gtk_main_iteration (); - } -} - -void -gs_fade_reset (GSFade *fade) { - g_return_if_fail (GS_IS_FADE (fade)); - - gs_debug ("Resetting fade"); - - if (fade->priv->active) { - gs_fade_stop (fade); - } - - fade->priv->current_alpha = 1.0; - - gs_fade_set_alpha (fade, fade->priv->current_alpha); - - if (fade->priv->screen_priv.fade_type != FADE_TYPE_NONE) - fade->priv->screen_priv.fade_finish (fade); -} - -static void -gs_fade_class_init (GSFadeClass *klass) { - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->finalize = gs_fade_finalize; - - signals[FADED] = - g_signal_new ("faded", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_LAST, - G_STRUCT_OFFSET (GSFadeClass, faded), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0, G_TYPE_NONE); -} - -static void -gs_fade_init (GSFade *fade) { - fade->priv = gs_fade_get_instance_private (fade); - - fade->priv->timeout = 1000; - fade->priv->current_alpha = 1.0; - - check_randr_extension (fade); - if (!fade->priv->screen_priv.fade_type) - check_gamma_extension (fade); - // gs_debug ("Fade type: %d", fade->priv->screen_priv.fade_type); -} - -static void -gs_fade_finalize (GObject *object) { - GSFade *fade; - - g_return_if_fail (object != NULL); - g_return_if_fail (GS_IS_FADE (object)); - - fade = GS_FADE (object); - - g_return_if_fail (fade->priv != NULL); - - fade->priv->screen_priv.fade_finish(fade); - - if (fade->priv->screen_priv.rrscreen) - g_object_unref (fade->priv->screen_priv.rrscreen); - fade->priv->screen_priv.rrscreen = NULL; - - G_OBJECT_CLASS (gs_fade_parent_class)->finalize (object); -} - -GSFade * -gs_fade_new (void) { - if (fade_object) { - g_object_ref (fade_object); - } else { - fade_object = g_object_new (GS_TYPE_FADE, NULL); - g_object_add_weak_pointer (fade_object, - (gpointer *) &fade_object); - } - - return GS_FADE (fade_object); -} diff --git a/src/gs-fade.h b/src/gs-fade.h deleted file mode 100644 index 7a85a1b57f9872fb4ab4e654783d32624fcf049b..0000000000000000000000000000000000000000 --- a/src/gs-fade.h +++ /dev/null @@ -1,73 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * Copyright (C) 2004-2005 William Jon McCann <mccann@jhu.edu> - * - * 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 St, Fifth Floor, Boston, MA 02110-1301, USA. - * - * Authors: William Jon McCann <mccann@jhu.edu> - * - */ - -#ifndef SRC_GS_FADE_H_ -#define SRC_GS_FADE_H_ - -#include <glib.h> - -G_BEGIN_DECLS - -#define GS_TYPE_FADE (gs_fade_get_type ()) -#define GS_FADE(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GS_TYPE_FADE, GSFade)) -#define GS_FADE_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GS_TYPE_FADE, GSFadeClass)) -#define GS_IS_FADE(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GS_TYPE_FADE)) -#define GS_IS_FADE_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GS_TYPE_FADE)) -#define GS_FADE_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GS_TYPE_FADE, GSFadeClass)) - - -typedef struct GSFadePrivate GSFadePrivate; - -typedef struct -{ - GObject parent; - GSFadePrivate *priv; -} GSFade; - -typedef struct -{ - GObjectClass parent_class; - - void (* faded) (GSFade *fade); -} GSFadeClass; - -typedef void (* GSFadeDoneFunc) (GSFade *fade, - gpointer data); - - -GType gs_fade_get_type (void); - -GSFade * gs_fade_new (void); - -void gs_fade_async (GSFade *fade, - guint timeout, - GSFadeDoneFunc done_cb, - gpointer data); -void gs_fade_sync (GSFade *fade, - guint timeout); - -void gs_fade_finish (GSFade *fade); -void gs_fade_reset (GSFade *fade); - -G_END_DECLS - -#endif /* SRC_GS_FADE_H_ */ diff --git a/src/gs-manager.c b/src/gs-manager.c index 3dbc64744cd9fbb33a03900485e21e3d139d1e8e..e9ec4e1c4c68a8620a60f5d6e88e8247cc5bd5ed 100644 --- a/src/gs-manager.c +++ b/src/gs-manager.c @@ -33,7 +33,6 @@ #include "gs-debug.h" #include "gs-grab.h" -#include "gs-fade.h" #include "gs-job.h" #include "gs-manager.h" #include "gs-prefs.h" /* for GSSaverMode */ @@ -76,7 +75,6 @@ struct GSManagerPrivate { guint lock_active : 1; guint saver_active : 1; - guint fading : 1; guint dialog_up : 1; gint last_monitor_count; @@ -88,8 +86,6 @@ struct GSManagerPrivate { GSList *themes; GSSaverMode saver_mode; GSGrab *grab; - GSFade *fade; - guint unfade_idle_id; guint deepsleep_idle_id; gboolean deepsleep; }; @@ -120,8 +116,6 @@ enum { PROP_THROTTLED, }; -#define FADE_TIMEOUT 1000 - static guint signals[LAST_SIGNAL] = { 0, }; G_DEFINE_TYPE_WITH_PRIVATE (GSManager, gs_manager, G_TYPE_OBJECT) @@ -994,7 +988,6 @@ static void gs_manager_init (GSManager *manager) { manager->priv = gs_manager_get_instance_private (manager); - manager->priv->fade = gs_fade_new (); manager->priv->grab = gs_grab_new (); manager->priv->theme_manager = gs_theme_manager_new (); @@ -1011,15 +1004,6 @@ remove_timers (GSManager *manager) { remove_cycle_timer (manager); } -static void -remove_unfade_idle (GSManager *manager) { - if (manager->priv->unfade_idle_id > 0) { - g_source_remove (manager->priv->unfade_idle_id); - manager->priv->unfade_idle_id = 0; - } -} - - static gboolean window_deactivated_idle (GSManager *manager) { g_return_val_if_fail (manager != NULL, FALSE); @@ -1154,19 +1138,6 @@ window_grab_broken_cb (GSWindow *window, } } -static gboolean -unfade_idle (GSManager *manager) { - gs_fade_reset (manager->priv->fade); - manager->priv->unfade_idle_id = 0; - return FALSE; -} - -static void -add_unfade_idle (GSManager *manager) { - remove_unfade_idle (manager); - manager->priv->unfade_idle_id = g_timeout_add (500, (GSourceFunc)unfade_idle, manager); -} - static void remove_deepsleep_idle (GSManager *manager) { if (manager->priv->deepsleep_idle_id > 0) { @@ -1255,8 +1226,6 @@ manager_show_window (GSManager *manager, add_cycle_timer (manager, manager->priv->cycle_timeout); } - add_unfade_idle (manager); - /* FIXME: only emit signal once */ g_signal_emit (manager, signals[ACTIVATED], 0); } @@ -1460,7 +1429,7 @@ gs_manager_create_window_for_monitor (GSManager *manager, manager->priv->windows = g_slist_append (manager->priv->windows, window); - if (manager->priv->active && !manager->priv->fading) { + if (manager->priv->active) { gtk_widget_show (GTK_WIDGET (window)); } } @@ -1643,7 +1612,6 @@ gs_manager_finalize (GObject *object) { g_free (manager->priv->keyboard_command); g_free (manager->priv->status_message); - remove_unfade_idle (manager); remove_deepsleep_idle (manager); remove_timers(manager); @@ -1658,7 +1626,6 @@ gs_manager_finalize (GObject *object) { manager->priv->lock_enabled = FALSE; manager->priv->lock_with_saver_enabled = FALSE; - g_object_unref (manager->priv->fade); g_object_unref (manager->priv->grab); g_object_unref (manager->priv->theme_manager); @@ -1744,17 +1711,8 @@ remove_job (GSJob *job) { g_object_unref (job); } -static void -fade_done_cb (GSFade *fade, - GSManager *manager) { - gs_debug ("Fade completed, showing windows"); - show_windows (manager->priv->windows); - manager->priv->fading = FALSE; -} - static gboolean gs_manager_activate (GSManager *manager) { - gboolean do_fade; gboolean res; g_return_val_if_fail (manager != NULL, FALSE); @@ -1781,22 +1739,7 @@ gs_manager_activate (GSManager *manager) { manager->priv->active = TRUE; - /* fade to black and show windows */ - do_fade = FALSE; - if (do_fade) { - manager->priv->fading = TRUE; - gs_debug ("Fading out"); - gs_fade_async (manager->priv->fade, - FADE_TIMEOUT, - (GSFadeDoneFunc)fade_done_cb, - manager); - - while (manager->priv->fading) { - gtk_main_iteration (); - } - } else { - show_windows (manager->priv->windows); - } + show_windows (manager->priv->windows); return TRUE; } @@ -1811,8 +1754,6 @@ gs_manager_deactivate (GSManager *manager) { return FALSE; } - remove_unfade_idle (manager); - gs_fade_reset (manager->priv->fade); remove_timers (manager); gs_grab_release (manager->priv->grab, TRUE); @@ -1825,7 +1766,6 @@ gs_manager_deactivate (GSManager *manager) { manager->priv->active = FALSE; manager->priv->activate_time = 0; manager->priv->dialog_up = FALSE; - manager->priv->fading = FALSE; gs_manager_set_lock_active (manager, FALSE); @@ -1871,11 +1811,6 @@ gs_manager_request_unlock (GSManager *manager) { return FALSE; } - if (manager->priv->fading) { - gs_debug ("Request unlock so finishing fade"); - gs_fade_finish (manager->priv->fade); - } - if (manager->priv->windows == NULL) { gs_debug ("We don't have any windows!"); return FALSE; diff --git a/src/gs-monitor.c b/src/gs-monitor.c index 385842a3d7b8104ae6ab7a4e6b7bb23119d506da..5c8fc5767434a212489cd23b8f1c77ac433f335a 100644 --- a/src/gs-monitor.c +++ b/src/gs-monitor.c @@ -35,7 +35,6 @@ #include <gdk/gdkx.h> #include "gs-debug.h" -#include "gs-fade.h" #include "gs-grab.h" #include "gs-listener-dbus.h" #include "gs-listener-x11.h" @@ -53,7 +52,6 @@ struct GSMonitorPrivate { GSListenerX11 *listener_x11; GSManager* manager; GSPrefs* prefs; - GSFade* fade; GSGrab* grab; guint release_grab_id; }; @@ -287,7 +285,6 @@ static void gs_monitor_init(GSMonitor* monitor) { monitor->priv->listener_x11 = gs_listener_x11_new(); connect_listener_signals(monitor); - monitor->priv->fade = gs_fade_new(); monitor->priv->grab = gs_grab_new(); monitor->priv->manager = gs_manager_new(); @@ -310,7 +307,6 @@ static void gs_monitor_finalize(GObject* object) { disconnect_manager_signals(monitor); disconnect_prefs_signals(monitor); - g_object_unref(monitor->priv->fade); g_object_unref(monitor->priv->grab); g_object_unref(monitor->priv->listener); g_object_unref(monitor->priv->listener_x11); diff --git a/src/test-fade.c b/src/test-fade.c deleted file mode 100644 index 0f7622187905904f10f3e8553edae1a21fb26c63..0000000000000000000000000000000000000000 --- a/src/test-fade.c +++ /dev/null @@ -1,117 +0,0 @@ -/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- - * - * Copyright (C) 2005 William Jon McCann <mccann@jhu.edu> - * - * 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 St, Fifth Floor, Boston, MA - * 02110-1301, USA. - * - * Authors: William Jon McCann <mccann@jhu.edu> - * - */ - -#include <config.h> - -#include <stdlib.h> -#include <string.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/wait.h> -#include <termios.h> -#include <unistd.h> - -#include <gdk/gdkx.h> -#include <gtk/gtk.h> - -#include <libxfce4util/libxfce4util.h> - -#ifdef HAVE_XF86VMODE_GAMMA -#include <X11/extensions/xf86vmode.h> -#endif - -#include "gs-fade.h" -#include "gs-debug.h" - -#define XF86_VIDMODE_NAME "XFree86-VidModeExtension" - -static void -test_fade (void) { - GSFade *fade; - int reps = 2; - int delay = 2; - - fade = gs_fade_new (); - - while (reps-- > 0) { - g_print ("fading out..."); - gs_fade_sync (fade, 1000); - g_print ("done.\n"); - - g_print ("fading in..."); - gs_fade_reset (fade); - g_print ("done.\n"); - - if (delay) { - sleep (delay); - } - } - - g_object_unref (fade); -} - -int -main (int argc, - char **argv) { - GError *error = NULL; - int op, event, err; - -#ifdef ENABLE_NLS - bindtextdomain (GETTEXT_PACKAGE, XFCELOCALEDIR); -# ifdef HAVE_BIND_TEXTDOMAIN_CODESET - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); -# endif - textdomain (GETTEXT_PACKAGE); -#endif - - if (!gtk_init_with_args (&argc, &argv, NULL, NULL, NULL, &error)) { - fprintf (stderr, "%s", error->message); - g_error_free (error); - exit (1); - } - - if (!XQueryExtension (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), XF86_VIDMODE_NAME, &op, &event, &err)) { - g_message ("no " XF86_VIDMODE_NAME " extension"); - } else { -# ifdef HAVE_XF86VMODE_GAMMA - int major; - int minor; - - if (!XF86VidModeQueryVersion (GDK_DISPLAY_XDISPLAY (gdk_display_get_default ()), &major, &minor)) { - g_message ("unable to get " XF86_VIDMODE_NAME " version"); - } else { - g_message (XF86_VIDMODE_NAME " version %d.%d", major, minor); - } -# else /* !HAVE_XF86VMODE_GAMMA */ - g_message ("no support for display's " XF86_VIDMODE_NAME " extension"); -# endif /* !HAVE_XF86VMODE_GAMMA */ - } - - gs_debug_init (TRUE, FALSE); - - test_fade (); - - gs_debug_shutdown (); - - return 0; -}