kov changed gksu/trunk/ChangeLog, gksu/trunk/gksu/gksu.c
Gustavo Noronha
kov at costa.debian.org
Wed Oct 19 17:29:07 UTC 2005
Mensagem de log:
* gksu/gksu.c:
- added fade in effect when screen was faded out
-----
Modified: gksu/trunk/ChangeLog
===================================================================
--- gksu/trunk/ChangeLog 2005-10-19 17:05:48 UTC (rev 461)
+++ gksu/trunk/ChangeLog 2005-10-19 17:29:06 UTC (rev 462)
@@ -1,5 +1,8 @@
2005-10-19 Gustavo Noronha Silva <kov at debian.org>
+ * gksu/gksu.c:
+ - added fade in effect when screen was faded out
+
* gksu/gksuexec.c:
- applied patch from dennis at kaarsemaker.net, grabbed from
Ubuntu's bugzilla to use GKSU_CMD be used on the error
Modified: gksu/trunk/gksu/gksu.c
===================================================================
--- gksu/trunk/gksu/gksu.c 2005-10-19 17:05:48 UTC (rev 461)
+++ gksu/trunk/gksu/gksu.c 2005-10-19 17:29:06 UTC (rev 462)
@@ -81,9 +81,10 @@
GdkGC *gc;
} FadeoutData;
+FadeoutData *fade_data = NULL;
static GList *fadeout_windows = NULL;
-#define FADE_DURATION 100.0
+#define FADE_DURATION 500.0
int
gsm_screen_get_width (GdkScreen *screen,
@@ -208,19 +209,85 @@
GDK_RGB_DITHER_NONE,
0, 0);
+ return FALSE;
+ }
+
+ percent = elapsed / FADE_DURATION;
+
+ get_current_frame (fadeout, 1.0 - percent);
+ gdk_draw_pixbuf (fadeout->draw_window,
+ fadeout->gc,
+ fadeout->frame,
+ 0, 0,
+ 0, 0,
+ fadeout->area.width,
+ fadeout->area.height,
+ GDK_RGB_DITHER_NONE,
+ 0, 0);
+
+ gdk_flush ();
+
+ return TRUE;
+}
+
+static void
+hide_fadeout_windows (void)
+{
+ GList *l;
+
+ for (l = fadeout_windows; l; l = l->next)
+ {
+ gdk_window_hide (GDK_WINDOW (l->data));
+ g_object_unref (l->data);
+ }
+
+ g_list_free (fadeout_windows);
+ fadeout_windows = NULL;
+}
+
+static gboolean
+fadein_callback (FadeoutData *fadeout)
+{
+ GTimeVal current_time;
+ double elapsed, percent;
+
+ g_get_current_time (¤t_time);
+ elapsed = ((((double)current_time.tv_sec - fadeout->start_time.tv_sec) * G_USEC_PER_SEC +
+ (current_time.tv_usec - fadeout->start_time.tv_usec))) / 1000.0;
+
+ if (elapsed < 0)
+ {
+ g_warning ("System clock seemed to go backwards?");
+ elapsed = G_MAXDOUBLE;
+ }
+
+ if (elapsed > FADE_DURATION)
+ {
+ gdk_draw_pixbuf (fadeout->draw_window,
+ fadeout->gc,
+ fadeout->end_pb,
+ 0, 0,
+ 0, 0,
+ fadeout->area.width,
+ fadeout->area.height,
+ GDK_RGB_DITHER_NONE,
+ 0, 0);
+
g_object_unref (fadeout->gc);
g_object_unref (fadeout->start_pb);
g_object_unref (fadeout->end_pb);
g_object_unref (fadeout->frame);
g_free (fadeout);
-
+
+ hide_fadeout_windows ();
+
return FALSE;
}
percent = elapsed / FADE_DURATION;
- get_current_frame (fadeout, 1.0 - percent);
+ get_current_frame (fadeout, percent);
gdk_draw_pixbuf (fadeout->draw_window,
fadeout->gc,
fadeout->frame,
@@ -307,22 +374,10 @@
g_get_current_time (&fadeout->start_time);
g_idle_add ((GSourceFunc) fadeout_callback, fadeout);
+
+ fade_data = fadeout;
}
-static void
-hide_fadeout_windows (void)
-{
- GList *l;
-
- for (l = fadeout_windows; l; l = l->next)
- {
- gdk_window_hide (GDK_WINDOW (l->data));
- g_object_unref (l->data);
- }
-
- g_list_free (fadeout_windows);
- fadeout_windows = NULL;
-}
/* End of 'stolen' code */
@@ -627,7 +682,8 @@
if (++grab_tries > GRAB_TRIES)
{
gtk_widget_hide (dialog);
- hide_fadeout_windows ();
+ g_get_current_time (&fade_data->start_time);
+ while (fadein_callback (fade_data) != FALSE);
report_failed_grab (FAILED_GRAB_MOUSE);
exit (1);
break;
@@ -646,7 +702,8 @@
if (++grab_tries > GRAB_TRIES)
{
gtk_widget_hide (dialog);
- hide_fadeout_windows ();
+ g_get_current_time (&fade_data->start_time);
+ while (fadein_callback (fade_data) != FALSE);
report_failed_grab (FAILED_GRAB_KEYBOARD);
exit (1);
break;
@@ -673,7 +730,8 @@
gdk_keyboard_ungrab(GDK_CURRENT_TIME);
gdk_flush();
- hide_fadeout_windows ();
+ g_get_current_time (&fade_data->start_time);
+ while (fadein_callback (fade_data) != FALSE);
close(lock);
}
More information about the gksu-commits
mailing list