SF.net SVN: geany: [1089] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Wed Dec 13 15:18:49 UTC 2006


Revision: 1089
          http://svn.sourceforge.net/geany/?rev=1089&view=rev
Author:   ntrel
Date:     2006-12-13 07:18:49 -0800 (Wed, 13 Dec 2006)

Log Message:
-----------
Fix memory leaks when using GdkPixbuf, PangoFontDescription and some
strings.
Capitalize main window title.
Add ui_widget_modify_font_from_string().

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/about.c
    trunk/src/callbacks.c
    trunk/src/document.c
    trunk/src/keyfile.c
    trunk/src/main.c
    trunk/src/msgwindow.c
    trunk/src/prefs.c
    trunk/src/treeviews.c
    trunk/src/ui_utils.c
    trunk/src/ui_utils.h

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/ChangeLog	2006-12-13 15:18:49 UTC (rev 1089)
@@ -1,3 +1,14 @@
+2006-12-13  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * src/ui_utils.h, src/about.c, src/treeviews.c, src/msgwindow.c,
+   src/callbacks.c, src/keyfile.c, src/document.c, src/prefs.c,
+   src/main.c, src/ui_utils.c:
+   Fix memory leaks when using GdkPixbuf, PangoFontDescription and some
+   strings.
+   Capitalize main window title.
+   Add ui_widget_modify_font_from_string().
+
+
 2006-12-12  Enrico Tröger  <enrico.troeger at uvena.de>
 
  * src/document.c, src/geany.h, src/keyfile.c, src/sciwrappers.c,

Modified: trunk/src/about.c
===================================================================
--- trunk/src/about.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/about.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -148,6 +148,7 @@
 	icon = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO, FALSE);
 	gtk_image_set_from_pixbuf(GTK_IMAGE(header_image), icon);
 	gtk_window_set_icon(GTK_WINDOW(dialog), icon);
+	g_object_unref(icon);	// free our reference
 
 	// create notebook
 	notebook = gtk_notebook_new();

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/callbacks.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -1592,7 +1592,11 @@
 	else
 	{
 		// set default value
-		if (utils_str_equal("", app->custom_date_format)) app->custom_date_format = g_strdup("%d.%m.%Y");
+		if (utils_str_equal("", app->custom_date_format))
+		{
+			g_free(app->custom_date_format);
+			app->custom_date_format = g_strdup("%d.%m.%Y");
+		}
 
 		dialogs_show_input(_("Custom Date Format"),
 			_("Enter here a custom date and time format. You can use any conversion specifiers which can be used with the ANSI C strftime function. See \"man strftime\" for more information."),

Modified: trunk/src/document.c
===================================================================
--- trunk/src/document.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/document.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -676,7 +676,7 @@
 
 	doc_list[idx].mtime = st.st_mtime; // get the modification time from file and keep it
 	doc_list[idx].changed = FALSE;
-	doc_list[idx].file_name = g_strdup(utf8_filename);
+	g_free(doc_list[idx].encoding);	// if reloading, free old encoding
 	doc_list[idx].encoding = enc;
 	doc_list[idx].has_bom = bom;
 	store_saved_encoding(idx);	// store the opened encoding for undo/redo

Modified: trunk/src/keyfile.c
===================================================================
--- trunk/src/keyfile.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/keyfile.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -700,6 +700,8 @@
 		else g_strfreev(list);
 	}
 
+	g_free(sysconfigfile);
+	g_free(userconfigfile);
 	g_key_file_free(sysconfig);
 	g_key_file_free(userconfig);
 }

Modified: trunk/src/main.c
===================================================================
--- trunk/src/main.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/main.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -550,8 +550,15 @@
 #endif
 	configuration_read_filetype_extensions();
 
-	gtk_window_set_icon(GTK_WINDOW(app->window), ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO, FALSE));
+	// set window icon
+	{
+		GdkPixbuf *pb;
 
+		pb = ui_new_pixbuf_from_inline(GEANY_IMAGE_LOGO, FALSE);
+		gtk_window_set_icon(GTK_WINDOW(app->window), pb);
+		g_object_unref(pb);	// free our reference
+	}
+
 	// registering some basic events
 	g_signal_connect(G_OBJECT(app->window), "delete_event", G_CALLBACK(on_exit_clicked), NULL);
 	g_signal_connect(G_OBJECT(app->window), "configure-event", G_CALLBACK(on_window_configure_event), NULL);
@@ -680,6 +687,7 @@
 	g_free(app->configdir);
 	g_free(app->datadir);
 	g_free(app->docdir);
+	g_free(app->custom_date_format);
 	g_free(app->editor_font);
 	g_free(app->tagbar_font);
 	g_free(app->msgwin_font);
@@ -692,6 +700,8 @@
 	g_free(app->tools_make_cmd);
 	g_free(app->tools_term_cmd);
 	g_free(app->tools_browser_cmd);
+	g_free(app->tools_print_cmd);
+	g_free(app->tools_grep_cmd);
 	while (! g_queue_is_empty(app->recent_queue))
 	{
 		g_free(g_queue_pop_tail(app->recent_queue));

Modified: trunk/src/msgwindow.c
===================================================================
--- trunk/src/msgwindow.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/msgwindow.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -83,6 +83,7 @@
 {
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
+	PangoFontDescription *pfd;
 
 	msgwindow.store_status = gtk_list_store_new(2, GDK_TYPE_COLOR, G_TYPE_STRING);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(msgwindow.tree_status), GTK_TREE_MODEL(msgwindow.store_status));
@@ -93,7 +94,10 @@
 
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(msgwindow.tree_status), FALSE);
 
-	gtk_widget_modify_font(msgwindow.tree_status, pango_font_description_from_string(app->msgwin_font));
+	pfd = pango_font_description_from_string(app->msgwin_font);
+	gtk_widget_modify_font(msgwindow.tree_status, pfd);
+	pango_font_description_free(pfd);
+
 	g_signal_connect(G_OBJECT(msgwindow.tree_status), "button-press-event",
 				G_CALLBACK(on_msgwin_button_press_event), GINT_TO_POINTER(MSG_STATUS));
 
@@ -107,6 +111,7 @@
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeSelection *select;
+	PangoFontDescription *pfd;
 
 	msgwindow.store_msg = gtk_list_store_new(4, G_TYPE_INT, G_TYPE_INT, GDK_TYPE_COLOR, G_TYPE_STRING);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(msgwindow.tree_msg), GTK_TREE_MODEL(msgwindow.store_msg));
@@ -117,7 +122,10 @@
 
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(msgwindow.tree_msg), FALSE);
 
-	gtk_widget_modify_font(msgwindow.tree_msg, pango_font_description_from_string(app->msgwin_font));
+	pfd = pango_font_description_from_string(app->msgwin_font);
+	gtk_widget_modify_font(msgwindow.tree_msg, pfd);
+	pango_font_description_free(pfd);
+
 	// use button-release-event so the selection has changed (connect_after button-press-event doesn't work)
 	g_signal_connect(G_OBJECT(msgwindow.tree_msg), "button-release-event",
 					G_CALLBACK(on_msgwin_button_press_event), GINT_TO_POINTER(MSG_MESSAGE));
@@ -135,6 +143,7 @@
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeSelection *select;
+	PangoFontDescription *pfd;
 
 	msgwindow.store_compiler = gtk_list_store_new(2, GDK_TYPE_COLOR, G_TYPE_STRING);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(msgwindow.tree_compiler), GTK_TREE_MODEL(msgwindow.store_compiler));
@@ -145,7 +154,10 @@
 
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(msgwindow.tree_compiler), FALSE);
 
-	gtk_widget_modify_font(msgwindow.tree_compiler, pango_font_description_from_string(app->msgwin_font));
+	pfd = pango_font_description_from_string(app->msgwin_font);
+	gtk_widget_modify_font(msgwindow.tree_compiler, pfd);
+	pango_font_description_free(pfd);
+
 	// use button-release-event so the selection has changed (connect_after button-press-event doesn't work)
 	g_signal_connect(G_OBJECT(msgwindow.tree_compiler), "button-release-event",
 					G_CALLBACK(on_msgwin_button_press_event), GINT_TO_POINTER(MSG_COMPILER));

Modified: trunk/src/prefs.c
===================================================================
--- trunk/src/prefs.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/prefs.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -726,14 +726,13 @@
 			for (i = 0; i < doc_array->len; i++)
 			{
 				if (doc_list[i].is_valid && GTK_IS_WIDGET(doc_list[i].tag_tree))
-					gtk_widget_modify_font(doc_list[i].tag_tree,
-						pango_font_description_from_string(app->tagbar_font));
+					ui_widget_modify_font_from_string(doc_list[i].tag_tree,
+						app->tagbar_font);
 			}
 			if (GTK_IS_WIDGET(app->default_tag_tree))
-				gtk_widget_modify_font(app->default_tag_tree,
-					pango_font_description_from_string(app->tagbar_font));
-			gtk_widget_modify_font(lookup_widget(app->window, "entry1"),
-				pango_font_description_from_string(app->tagbar_font));
+				ui_widget_modify_font_from_string(app->default_tag_tree, app->tagbar_font);
+			ui_widget_modify_font_from_string(lookup_widget(app->window, "entry1"),
+				app->tagbar_font);
 			break;
 		}
 		case 2:
@@ -741,12 +740,9 @@
 			if (strcmp(fontbtn, app->msgwin_font) == 0) break;
 			g_free(app->msgwin_font);
 			app->msgwin_font = g_strdup(fontbtn);
-			gtk_widget_modify_font(msgwindow.tree_compiler,
-				pango_font_description_from_string(app->msgwin_font));
-			gtk_widget_modify_font(msgwindow.tree_msg,
-				pango_font_description_from_string(app->msgwin_font));
-			gtk_widget_modify_font(msgwindow.tree_status,
-				pango_font_description_from_string(app->msgwin_font));
+			ui_widget_modify_font_from_string(msgwindow.tree_compiler, app->msgwin_font);
+			ui_widget_modify_font_from_string(msgwindow.tree_msg, app->msgwin_font);
+			ui_widget_modify_font_from_string(msgwindow.tree_status, app->msgwin_font);
 			break;
 		}
 		case 3:

Modified: trunk/src/treeviews.c
===================================================================
--- trunk/src/treeviews.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/treeviews.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -65,13 +65,17 @@
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeSelection *select;
+	PangoFontDescription *pfd;
 
 	renderer = gtk_cell_renderer_text_new();
 	column = gtk_tree_view_column_new_with_attributes(_("Symbols"), renderer, "text", 0, NULL);
 	gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
 	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE);
 
-	gtk_widget_modify_font(tree, pango_font_description_from_string(app->tagbar_font));
+	pfd = pango_font_description_from_string(app->tagbar_font);
+	gtk_widget_modify_font(tree, pfd);
+	pango_font_description_free(pfd);
+
 	gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(store));
 	g_signal_connect(G_OBJECT(tree), "button-press-event",
 					G_CALLBACK(on_treeviews_button_press_event), GINT_TO_POINTER(TREEVIEW_SYMBOL));
@@ -285,6 +289,8 @@
 	GtkCellRenderer *renderer;
 	GtkTreeViewColumn *column;
 	GtkTreeSelection *select;
+	PangoFontDescription *pfd;
+
 	tv.tree_openfiles = lookup_widget(app->window, "treeview6");
 
 	// store the short filename to show, and the index as reference
@@ -305,7 +311,10 @@
 
 	gtk_tree_view_set_enable_search(GTK_TREE_VIEW(tv.tree_openfiles), FALSE);
 
-	gtk_widget_modify_font(tv.tree_openfiles, pango_font_description_from_string(app->tagbar_font));
+	pfd = pango_font_description_from_string(app->tagbar_font);
+	gtk_widget_modify_font(tv.tree_openfiles, pfd);
+	pango_font_description_free(pfd);
+
 	g_signal_connect(G_OBJECT(tv.tree_openfiles), "button-press-event",
 						G_CALLBACK(on_treeviews_button_press_event), GINT_TO_POINTER(TREEVIEW_OPENFILES));
 

Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/ui_utils.c	2006-12-13 15:18:49 UTC (rev 1089)
@@ -139,15 +139,14 @@
 
 	if (index >= 0)
 	{
-		title = g_strdup_printf ("%s: %s %s",
-				PACKAGE,
-				(doc_list[index].file_name != NULL) ? g_filename_to_utf8(doc_list[index].file_name, -1, NULL, NULL, NULL) : _("untitled"),
+		title = g_strdup_printf("Geany: %s %s",
+				DOC_FILENAME(index),
 				doc_list[index].changed ? _("(Unsaved)") : "");
 		gtk_window_set_title(GTK_WINDOW(app->window), title);
 		g_free(title);
 	}
 	else
-		gtk_window_set_title(GTK_WINDOW(app->window), PACKAGE);
+		gtk_window_set_title(GTK_WINDOW(app->window), "Geany");
 }
 
 
@@ -785,6 +784,7 @@
 }
 
 
+// Note: remember to unref the pixbuf once an image or window has added a reference.
 GdkPixbuf *ui_new_pixbuf_from_inline(gint img, gboolean small_img)
 {
 	switch(img)
@@ -826,7 +826,13 @@
 
 GtkWidget *ui_new_image_from_inline(gint img, gboolean small_img)
 {
-	return gtk_image_new_from_pixbuf(ui_new_pixbuf_from_inline(img, small_img));
+	GtkWidget *wid;
+	GdkPixbuf *pb;
+
+	pb = ui_new_pixbuf_from_inline(img, small_img);
+	wid = gtk_image_new_from_pixbuf(pb);
+	g_object_unref(pb);	// the image doesn't adopt our reference, so remove our ref.
+	return wid;
 }
 
 
@@ -1215,3 +1221,13 @@
 }
 
 
+void ui_widget_modify_font_from_string(GtkWidget *wid, const gchar *str)
+{
+	PangoFontDescription *pfd;
+
+	pfd = pango_font_description_from_string(str);
+	gtk_widget_modify_font(wid, pfd);
+	pango_font_description_free(pfd);
+}
+
+

Modified: trunk/src/ui_utils.h
===================================================================
--- trunk/src/ui_utils.h	2006-12-13 00:46:14 UTC (rev 1088)
+++ trunk/src/ui_utils.h	2006-12-13 15:18:49 UTC (rev 1089)
@@ -110,4 +110,7 @@
 
 gboolean ui_tree_view_find_next(GtkTreeView *treeview, TVMatchCallback cb);
 
+
+void ui_widget_modify_font_from_string(GtkWidget *wid, const gchar *str);
+
 #endif


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list