All pastes #28646 Raw Edit

Someone

public text v1 · immutable
#28646 ·published 2005-11-14 10:13 UTC
rendered paste body
Index: gedit-statusbar.c
===================================================================
RCS file: /cvs/gnome/gedit/gedit/Attic/gedit-statusbar.c,v
retrieving revision 1.1.2.11
diff -u -p -r1.1.2.11 gedit-statusbar.c
--- gedit-statusbar.c	11 Oct 2005 20:46:30 -0000	1.1.2.11
+++ gedit-statusbar.c	14 Nov 2005 10:11:08 -0000
@@ -53,8 +53,13 @@ struct _GeditStatusbarPrivate
 	
 	GtkWidget     *error_frame;
 	GtkWidget     *error_event_box;
-	
+
 	GeditTooltips *tooltips;
+
+	/* tmp flash timeout data */
+	guint          flash_timeout;
+	guint          flash_context_id;
+	guint          flash_message_id;
 };
 
 G_DEFINE_TYPE(GeditStatusbar, gedit_statusbar, GTK_TYPE_STATUSBAR)
@@ -83,6 +88,9 @@ gedit_statusbar_finalize (GObject *objec
 
 	g_object_unref (statusbar->priv->tooltips);
 
+	if (statusbar->priv->flash_timeout > 0)
+		g_source_remove (statusbar->priv->flash_timeout);
+
 	G_OBJECT_CLASS (gedit_statusbar_parent_class)->finalize (object);
 }
 
@@ -294,23 +302,15 @@ gedit_statusbar_set_cursor_position (Ged
       	g_free (msg);
 }
 
-
-/* utility struct */
-typedef struct {
-	GtkStatusbar *statusbar;
-	guint context_id;
-	guint message_id;
-} FlashInfo;
-
-static const guint32 flash_length = 3000;
-
 static gboolean
-remove_message_timeout (FlashInfo * fi) 
+remove_message_timeout (GeditStatusbar *statusbar)
 {
-	gtk_statusbar_remove (fi->statusbar, fi->context_id, fi->message_id);
-	g_free (fi);
+	gtk_statusbar_remove (GTK_STATUSBAR (statusbar),
+			      statusbar->priv->flash_context_id,
+			      statusbar->priv->flash_message_id);
 
 	/* remove the timeout */
+	statusbar->priv->flash_timeout = 0;
   	return FALSE;
 }
 
@@ -327,8 +327,8 @@ gedit_statusbar_flash_message (GeditStat
 			       guint           context_id,
 			       const gchar    *format, ...)
 {
+	const guint32 flash_length = 3000; /* three seconds */
 	va_list args;
-	FlashInfo *fi;
 	gchar *msg;
 
 	g_return_if_fail (GEDIT_IS_STATUSBAR (statusbar));
@@ -338,12 +338,22 @@ gedit_statusbar_flash_message (GeditStat
 	msg = g_strdup_vprintf (format, args);
 	va_end (args);
 
-	fi = g_new (FlashInfo, 1);
-	fi->statusbar = GTK_STATUSBAR (statusbar);
-	fi->context_id = context_id;
-	fi->message_id = gtk_statusbar_push (fi->statusbar, fi->context_id, msg);
-
-	g_timeout_add (flash_length, (GtkFunction) remove_message_timeout, fi);
+	/* remove a currently ongoing flash message */
+	g_source_remove (statusbar->priv->flash_timeout);
+	statusbar->priv->flash_timeout = 0;
+
+	gtk_statusbar_remove (GTK_STATUSBAR (statusbar),
+			      statusbar->priv->flash_context_id,
+			      statusbar->priv->flash_message_id);
+
+	statusbar->priv->flash_context_id = context_id;
+	statusbar->priv->flash_message_id = gtk_statusbar_push (GTK_STATUSBAR (statusbar),
+								context_id,
+								msg);
+
+	statusbar->priv->flash_timeout = g_timeout_add (flash_length,
+							(GtkFunction) remove_message_timeout,
+							statusbar);
 
 	g_free (msg);
 }