From: Darren S. <li...@yo...> - 2007-02-20 18:58:35
|
# HG changeset patch # User Darren Salt <li...@yo...> # Date 1171997850 0 # Node ID 31940e0750440e6ff67eb242f99b3483fc058c61 # Parent 3cc3db4e995d23b0bad1156638008b0dcb93009f Show info for more devices, at least on Linux (needs fixing for BSD etc.). diff -r 31940e0750440e6ff67eb242f99b3483fc058c61 -r 3cc3db4e995d23b0bad1156638008b0dcb93009f src/preferences.c --- a/src/preferences.c Tue Feb 20 18:57:30 2007 +0000 +++ b/src/preferences.c Tue Feb 20 16:35:23 2007 +0000 @@ -311,18 +311,39 @@ static gboolean check_hal (void) } static char * +get_hal_property (const char *dev, const char *dev_tag, const char *prop_tag) +{ + int count; + char **devs = libhal_manager_find_device_string_match + (hal, dev_tag, dev, &count, NULL); + if (!devs) + return NULL; + if (!devs[0]) + { + libhal_free_string_array (devs); + return NULL; + } + + char *prop = libhal_device_get_property_string (hal, devs[0], prop_tag, NULL); + char *ret = strdup (prop ? : ""); + libhal_free_string (prop); + libhal_free_string_array (devs); + return ret; +} + +static char * get_hal_device_info (const char *dev) { if (!check_hal () || !dev) return NULL; - int tmp, ldev = strlen (dev); + int ldev = strlen (dev); char buf[FILENAME_MAX + ldev + 1]; strcpy (buf, dev); /* safe! */ if (buf[0] == '/') { ldev = strrchr (buf, '/') - buf + 1; - tmp = readlink (dev, buf + ldev, FILENAME_MAX - 1); + int tmp = readlink (dev, buf + ldev, FILENAME_MAX - 1); if (tmp <= 0) strcpy (buf, dev); /* safe! */ else if (buf[ldev] == '/') @@ -347,20 +368,11 @@ get_hal_device_info (const char *dev) } } } - - char **devs = libhal_manager_find_device_string_match - (hal, "block.device", buf, &tmp, NULL); - if (devs) - { - char *id = devs[0] ? libhal_device_get_property_string - (hal, devs[0], "storage.model", NULL) - : NULL; - char *ret = strdup (id ? : ""); - libhal_free_string (id); - libhal_free_string_array (devs); - return ret; - } - return NULL; + + return get_hal_property (buf, "block.device", "storage.model") + ? : get_hal_property (buf, "linux.device_file", "info.product") + /* FIXME - BSD etc. */ + ; } static void @@ -602,10 +614,10 @@ static GtkWidget *create_item_editable ( "signal::file-activated", G_CALLBACK(file_activate_cb), widget, #ifdef WITH_HAL "signal::update-preview", G_CALLBACK(file_preview_cb), widget, - "signal::map", G_CALLBACK(file_preview_cb), widget, + "signal::map", G_CALLBACK(file_preview_cb), fc, #endif NULL); - g_signal_connect (G_OBJECT(widget), "map", G_CALLBACK(file_map_cb), fc); + g_signal_connect_after (G_OBJECT(widget), "map", G_CALLBACK(file_map_cb), fc); } else { |