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 (&current_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