From: Darren S. <li...@yo...> - 2007-01-30 23:16:47
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1170198961 0 # Node ID 926e4245d3ced67e0a320ccd4c139129637b6110 # Parent 39ece9dff4f6cb3db82b4e653f16eb2a6ccb9858 Fixed some prefs segfaults and file/device/directory config loss (I hope). This only appears with GTK+2.10 and xine-lib 1.1.4, and of course I didn't have GTK+2.10 when I released 0.5.10... diff -r 926e4245d3ced67e0a320ccd4c139129637b6110 -r 39ece9dff4f6cb3db82b4e653f16eb2a6ccb9858 ChangeLog --- a/ChangeLog Tue Jan 30 23:16:01 2007 +0000 +++ b/ChangeLog Tue Jan 30 18:22:28 2007 +0000 @@ -19,8 +19,9 @@ 0.5.11: 2007/??/?? File->Configure. * Fixed a hang which occurs when a stream ends and some modal dialogue box, opened via a JS command, is open. - * Fixed a possible segfault related to the preferences window and my - related changes in xine-lib 1.1.4. + * Fixed some prefs segfaults and file/device/directory configuration + loss. This only appears with GTK+2.10 and xine-lib 1.1.4, and of + course I didn't have GTK+2.10 when I released 0.5.10... 0.5.10: 2007/01/08 [dsalt] diff -r 926e4245d3ced67e0a320ccd4c139129637b6110 -r 39ece9dff4f6cb3db82b4e653f16eb2a6ccb9858 src/preferences.c --- a/src/preferences.c Tue Jan 30 23:16:01 2007 +0000 +++ b/src/preferences.c Tue Jan 30 18:22:28 2007 +0000 @@ -33,6 +33,9 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <unistd.h> #include "mediamarks.h" #include "preferences.h" @@ -308,7 +311,7 @@ static char * static char * get_hal_device_info (const char *dev) { - if (!check_hal ()) + if (!check_hal () || !dev) return NULL; int tmp, ldev = strlen (dev); @@ -350,7 +353,7 @@ get_hal_device_info (const char *dev) char *id = devs[0] ? libhal_device_get_property_string (hal, devs[0], "storage.model", NULL) : NULL; - char *ret = id ? strdup (id) : ""; + char *ret = strdup (id ? : ""); libhal_free_string (id); libhal_free_string_array (devs); return ret; @@ -386,7 +389,7 @@ static void file_cb (GtkWidget *widget, return; key = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (widget)); - if (strcmp (entry.str_value, key ? : "")) + if (strcmp (entry.str_value, key ? : entry.str_value)) { logprintf ("preferences: updating entry\n"); entry.str_value = key ? : ""; @@ -417,6 +420,19 @@ static void file_preview_cb (GtkFileChoo g_free (file); } #endif + +static void file_map_cb (GtkWidget *fcb, gpointer fc) +{ + if (!g_object_get_data (fc, "gxine")) + { + g_signal_connect_swapped (fcb, "current-folder-changed", + G_CALLBACK(file_activate_cb), fc); + g_object_set_data (fc, "gxine", fc); + } +#ifdef WITH_HAL + file_preview_cb (fcb, fc); +#endif +} static GtkWidget *create_item_editable (const xine_cfg_entry_t *entry) { @@ -453,7 +469,16 @@ static GtkWidget *create_item_editable ( NULL); widget = gtk_file_chooser_button_new_with_dialog (fc); gtk_file_chooser_set_local_only ((GtkFileChooser *) fc, TRUE); - gtk_file_chooser_set_filename ((GtkFileChooser *) fc, entry->str_value); + struct stat st; + if (stat (entry->str_value, &st)) + { + g_printerr (_("warning: configuration item %s points to a non-existent location %s\n"), + entry->key, entry->str_value); + xine_log (xine, 0, _("warning: configuration item %s points to a non-existent location %s\n"), + entry->key, entry->str_value); + } + else + gtk_file_chooser_set_filename ((GtkFileChooser *) fc, entry->str_value); #ifdef WITH_HAL gtk_file_chooser_set_use_preview_label ((GtkFileChooser *) fc, FALSE); GtkWidget *preview = g_object_new (GTK_TYPE_LABEL, "angle", 90.0, @@ -468,8 +493,7 @@ static GtkWidget *create_item_editable ( "signal::map", G_CALLBACK(file_preview_cb), widget, #endif NULL); - g_signal_connect_swapped (G_OBJECT(widget), - "current-folder-changed", G_CALLBACK(file_activate_cb), fc); + g_signal_connect (G_OBJECT(widget), "map", G_CALLBACK(file_map_cb), fc); } else { |