diff src/view_dir.c @ 384:392dd6541d51

Merge parts of view_dir_list/tree constructors/destructors to view_dir.
author zas_
date Wed, 16 Apr 2008 16:54:38 +0000
parents 499d7ba62261
children 5186f8e38cb8
line wrap: on
line diff
--- a/src/view_dir.c	Wed Apr 16 16:05:12 2008 +0000
+++ b/src/view_dir.c	Wed Apr 16 16:54:38 2008 +0000
@@ -13,6 +13,7 @@
 #include "view_dir.h"
 
 #include "filelist.h"
+#include "layout_util.h"
 #include "ui_menu.h"
 #include "utilops.h"
 #include "view_dir_list.h"
@@ -23,16 +24,59 @@
   { "FolderTree",	NULL,		N_("Tr_ee"),		"<control>T",	NULL, DIRVIEW_TREE },
 };
 
+void vd_destroy_cb(GtkWidget *widget, gpointer data)
+{
+	ViewDir *vd = data;
+
+	if (vd->popup)
+		{
+		g_signal_handlers_disconnect_matched(G_OBJECT(vd->popup), G_SIGNAL_MATCH_DATA,
+						     0, 0, 0, NULL, vd);
+		gtk_widget_destroy(vd->popup);
+		}
+
+	if (vd->widget_destroy_cb) vd->widget_destroy_cb(widget, data);
+
+	if (vd->pf) folder_icons_free(vd->pf);
+	if (vd->drop_list) filelist_free(vd->drop_list);
+
+	if (vd->path) g_free(vd->path);
+	if (vd->info) g_free(vd->info);
+
+	g_free(vd);
+}
+
 ViewDir *vd_new(DirViewType type, const gchar *path)
 {
-	ViewDir *vd = NULL;
+	ViewDir *vd = g_new0(ViewDir, 1);
+
+	vd->path = NULL;
+	vd->click_fd = NULL;
+
+	vd->drop_fd = NULL;
+	vd->drop_list = NULL;
+	vd->drop_scroll_id = -1;
+	vd->drop_list = NULL;
+
+	vd->popup = NULL;
+	vd->pf = NULL;
+
+	vd->widget = gtk_scrolled_window_new(NULL, NULL);
+	gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(vd->widget), GTK_SHADOW_IN);
+	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(vd->widget),
+				       GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
 
 	switch(type)
 	{
-	case DIRVIEW_LIST: vd = vdlist_new(path); break;
-	case DIRVIEW_TREE: vd = vdtree_new(path); break;
+	case DIRVIEW_LIST: vd = vdlist_new(vd, path); break;
+	case DIRVIEW_TREE: vd = vdtree_new(vd, path); break;
 	}
 
+	g_signal_connect(G_OBJECT(vd->widget), "destroy",
+			 G_CALLBACK(vd_destroy_cb), vd);
+
+	vd->pf = folder_icons_new();
+
 	return vd;
 }