small util.c patch

Jared Yanovich <[email protected]>
Newsgroups gmane.comp.multimedia.xmms.devel
Message-ID <[email protected]>
Here is a very small patch for xmms/util.c to let the file browser
selection window remember its size. I find it very annoying to resize
this window every time I want to add a file to the playlist.

Also, my editor removes unnecessary whitespace, so ignore anything not
relevant.

Index: util.c
===================================================================
RCS file: /cvs/xmms/xmms/util.c,v
retrieving revision 1.39
diff -u -r1.39 util.c
--- util.c	13 Jul 2003 22:30:17 -0000	1.39
+++ util.c	30 Aug 2003 15:50:13 -0000
@@ -1,6 +1,6 @@
 /*  XMMS - Cross-platform multimedia player
  *  Copyright (C) 1998-2001  Peter Alm, Mikael Alm, Olle Hallnas,
- *                           Thomas Nilsson and 4Front Technologies
+ *			   Thomas Nilsson and 4Front Technologies
  *  Copyright (C) 1999-2001  Haavard Kvaalen <[email protected]>
  *
  *  This program is free software; you can redistribute it and/or modify
@@ -27,7 +27,7 @@
 #endif
 
 static GQuark quark_popup_data;
-
+static guint fb_win_width = 0, fb_win_height = 0;
 
 /*
  * find_file_recursively() by Jörg Schuler Wed, 17 Feb 1999 23:50:52
@@ -300,7 +300,7 @@
 		fclose(file);
 		return NULL;
 	}
-		
+
 	buffer = g_malloc(statbuf.st_size);
 	fread(buffer, 1, statbuf.st_size, file);
 	while (!ret_buffer && off < statbuf.st_size)
@@ -438,10 +438,10 @@
 	struct MenuPos *pos = data;
 
 	gtk_widget_size_request(GTK_WIDGET(menu), &requisition);
-      
+
 	screen_width = gdk_screen_width();
 	screen_height = gdk_screen_height();
-	  
+
 	*x = CLAMP(pos->x - 2, 0, MAX(0, screen_width - requisition.width));
 	*y = CLAMP(pos->y - 2, 0, MAX(0, screen_height - requisition.height));
 }
@@ -541,13 +541,13 @@
 GtkWidget* util_create_add_url_window(gchar *caption, GtkSignalFunc ok_func, GtkSignalFunc enqueue_func)
 {
 	GtkWidget *win, *vbox, *bbox, *ok, *enqueue, *cancel, *combo;
-	
+
 	win = gtk_window_new(GTK_WINDOW_DIALOG);
 	gtk_window_set_title(GTK_WINDOW(win), caption);
 	gtk_window_set_position(GTK_WINDOW(win), GTK_WIN_POS_MOUSE);
 	gtk_window_set_default_size(GTK_WINDOW(win), 400, -1);
 	gtk_container_set_border_width(GTK_CONTAINER(win), 10);
-	
+
 	vbox = gtk_vbox_new(FALSE, 10);
 	gtk_container_add(GTK_CONTAINER(win), vbox);
 
@@ -561,15 +561,15 @@
 	gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(combo)->entry), "");
 	gtk_combo_set_use_arrows_always(GTK_COMBO(combo), TRUE);
 	gtk_widget_show(combo);
-	
+
 	bbox = gtk_hbutton_box_new();
 	gtk_button_box_set_layout(GTK_BUTTON_BOX(bbox), GTK_BUTTONBOX_END);
 	gtk_button_box_set_spacing(GTK_BUTTON_BOX(bbox), 5);
-	
+
 	ok = gtk_button_new_with_label(_("Ok"));
 	gtk_signal_connect(GTK_OBJECT(ok), "clicked", util_add_url_callback, GTK_COMBO(combo)->entry);
 	gtk_signal_connect(GTK_OBJECT(ok), "clicked", ok_func, GTK_COMBO(combo)->entry);
-	
+
 	GTK_WIDGET_SET_FLAGS(ok, GTK_CAN_DEFAULT);
 	gtk_window_set_default(GTK_WINDOW(win), ok);
 	gtk_box_pack_start(GTK_BOX(bbox), ok, FALSE, FALSE, 0);
@@ -585,13 +585,13 @@
 		gtk_box_pack_start(GTK_BOX(bbox), enqueue, FALSE, FALSE, 0);
 		gtk_widget_show(enqueue);
 	}
-	
+
 	cancel = gtk_button_new_with_label(_("Cancel"));
 	gtk_signal_connect_object(GTK_OBJECT(cancel), "clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy), GTK_OBJECT(win));
 	GTK_WIDGET_SET_FLAGS(cancel, GTK_CAN_DEFAULT);
 	gtk_box_pack_start(GTK_BOX(bbox), cancel, FALSE, FALSE, 0);
 	gtk_widget_show(cancel);
-	
+
 	gtk_box_pack_start(GTK_BOX(vbox), bbox, FALSE, FALSE, 0);
 	gtk_widget_show(bbox);
 	gtk_widget_show(vbox);
@@ -624,7 +624,7 @@
 		gtk_clist_clear(GTK_CLIST(filesel->dir_list));
 		gtk_clist_append(GTK_CLIST(filesel->dir_list), &current);
 		gtk_clist_append(GTK_CLIST(filesel->dir_list), &parent);
-		
+
 		gtk_clist_freeze(GTK_CLIST(filesel->file_list));
 		gtk_clist_clear(GTK_CLIST(filesel->file_list));
 		node = list;
@@ -668,7 +668,7 @@
 	char *text;
 	struct stat buf;
 	gboolean retv = FALSE;
-	
+
 	text = g_strdup(gtk_file_selection_get_filename(filesel));
 
 	if (stat(text, &buf) == 0 &&
@@ -722,7 +722,7 @@
 	sel_list = g_list_sort(sel_list, int_compare_func);
 
 	node = sel_list;
-	
+
 	if (node)
 	{
 		do {
@@ -772,7 +772,7 @@
 static void filebrowser_add_selected_files(GtkWidget * w, gpointer data)
 {
 	GtkFileSelection *filesel = GTK_FILE_SELECTION(data);
-	
+
 	filebrowser_add_files(filesel);
 	gtk_clist_unselect_all(GTK_CLIST(filesel->file_list));
 
@@ -798,6 +798,12 @@
 	gtk_entry_set_text(GTK_ENTRY(filesel->selection_entry), "");
 }
 
+static void filebrowser_resize(GtkWidget *fb, GdkDragContext *dg, gpointer ud)
+{
+	fb_win_width  = fb->allocation.width;
+	fb_win_height = fb->allocation.height;
+}
+
 GtkWidget * util_create_filebrowser(gboolean play_button)
 {
 	GtkWidget *filebrowser, *bbox, *add_selected, *add_all, *label, *button;
@@ -811,9 +817,20 @@
 
 	filebrowser = gtk_file_selection_new(title);
 	fb = GTK_FILE_SELECTION(filebrowser);
-		
+
+	/* initialize defaults */
+	if (fb_win_width == 0)
+		fb_win_width = 500;
+
+	if (fb_win_height == 0)
+		fb_win_height = 500;
+
+	gtk_window_set_default_size(GTK_WINDOW(fb), fb_win_width, fb_win_height);
+
 	gtk_clist_set_selection_mode(GTK_CLIST(fb->file_list),
 				     GTK_SELECTION_EXTENDED);
+	gtk_signal_connect(GTK_OBJECT(filebrowser), "remove",
+			GTK_SIGNAL_FUNC(filebrowser_resize), filebrowser);
 	gtk_signal_connect(GTK_OBJECT(fb->selection_entry), "changed",
 			   GTK_SIGNAL_FUNC(filebrowser_entry_changed),
 			   filebrowser);
@@ -847,7 +864,7 @@
 	/*
 	 * Change the Cancel buttons caption to Close.
 	 */
-	
+
 	label = gtk_label_new(_("Close"));
 	gtk_misc_set_alignment(GTK_MISC(label), 0.5, 0.5);
 	gtk_container_remove(GTK_CONTAINER(fb->cancel_button),
@@ -894,7 +911,7 @@
 	/* First try the prefered way, then just try to get some font */
 
 	if (!cfg.use_fontsets)
-	{	
+	{
 		if ((font = gdk_font_load(name)) == NULL)
 			font = gdk_fontset_load(name);
 	}
@@ -909,7 +926,7 @@
 		g_warning("Failed to open font: \"%s\".", name);
 		font = gdk_font_load("fixed");
 	}
-	
+
 	return font;
 }
 
	- Jared
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.