diff options
Diffstat (limited to 'daemon')
-rw-r--r-- | daemon/gvfsbackendnetwork.c | 148 | ||||
-rw-r--r-- | daemon/gvfsbackendsmb.c | 42 | ||||
-rw-r--r-- | daemon/gvfsbackendsmbbrowse.c | 45 |
3 files changed, 74 insertions, 161 deletions
diff --git a/daemon/gvfsbackendnetwork.c b/daemon/gvfsbackendnetwork.c index 5fe0e4a8..80273e51 100644 --- a/daemon/gvfsbackendnetwork.c +++ b/daemon/gvfsbackendnetwork.c @@ -28,7 +28,6 @@ #include <glib.h> #include <glib/gi18n.h> #include <gio/gio.h> -#include <gconf/gconf-client.h> #include "gvfsbackendnetwork.h" @@ -37,15 +36,10 @@ #include "gvfsjobenumerate.h" #include "gvfsjobqueryinfo.h" #include "gvfsmonitor.h" +#include "gvfs-enums.h" -#define PATH_GCONF_GVFS_SMB "/system/smb" -#define PATH_GCONF_GVFS_SMB_WORKGROUP "/system/smb/workgroup" #define DEFAULT_WORKGROUP_NAME "X-GNOME-DEFAULT-WORKGROUP" -#define PATH_GCONF_GVFS_DNS_SD "/system/dns_sd" -#define PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL "/system/dns_sd/display_local" -#define PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS "/system/dns_sd/extra_domains" - #define NETWORK_FILE_ATTRIBUTES "standard::name,standard::display-name,standard::target-uri" typedef struct { @@ -57,12 +51,6 @@ typedef struct { static NetworkFile root = { "/" }; -typedef enum { - NETWORK_LOCAL_DISABLED, - NETWORK_LOCAL_MERGED, - NETWORK_LOCAL_SEPARATE -} NetworkLocalSetting; - struct _GVfsBackendNetwork { GVfsBackend parent_instance; @@ -70,6 +58,8 @@ struct _GVfsBackendNetwork GMountSpec *mount_spec; GList *files; /* list of NetworkFiles */ int idle_tag; + GSettings *smb_settings; + GSettings *dnssd_settings; /* SMB Stuff */ gboolean have_smb; @@ -80,7 +70,7 @@ struct _GVfsBackendNetwork /* DNS-SD Stuff */ gboolean have_dnssd; - NetworkLocalSetting local_setting; + GDnsSdDisplayMode local_setting; char *extra_domains; GFileMonitor *dnssd_monitor; @@ -150,18 +140,6 @@ sort_file_by_file_name (NetworkFile *a, NetworkFile *b) return strcmp (a->file_name, b->file_name); } -static NetworkLocalSetting -parse_network_local_setting (const char *setting) -{ - if (setting == NULL) - return NETWORK_LOCAL_DISABLED; - if (strcmp (setting, "separate") == 0) - return NETWORK_LOCAL_SEPARATE; - if (strcmp (setting, "merged") == 0) - return NETWORK_LOCAL_MERGED; - return NETWORK_LOCAL_DISABLED; -} - static void update_from_files (GVfsBackendNetwork *backend, GList *files) @@ -356,7 +334,7 @@ recompute_files (GVfsBackendNetwork *backend) } } - if (backend->local_setting == NETWORK_LOCAL_MERGED) + if (backend->local_setting == G_DNS_SD_DISPLAY_MODE_MERGED) { /* "merged": add local domains to network:/// */ enumer = g_file_enumerate_children (server_file, @@ -397,7 +375,7 @@ recompute_files (GVfsBackendNetwork *backend) g_object_unref (server_file); - /* If gconf setting "/system/dns_sd/extra_domains" is set to a list of domains: + /* If gsettings key "extra-domains" (org.gnome.system.dns_sd) is set to a list of domains: * links to dns-sd://$domain/ */ if (backend->extra_domains != NULL && backend->extra_domains[0] != 0) @@ -545,59 +523,35 @@ notify_dnssd_local_changed (GFileMonitor *monitor, GFile *file, GFile *other_fil } } -static void -notify_gconf_dnssd_domains_changed (GConfClient *client, - guint cnxn_id, - GConfEntry *entry, - gpointer data) +static gboolean +dnssd_settings_change_event_cb (GSettings *settings, + gpointer keys, + gint n_keys, + gpointer user_data) { - GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data); - char *extra_domains; - extra_domains = gconf_client_get_string (client, - PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS, NULL); + GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(user_data); g_free (backend->extra_domains); - backend->extra_domains = extra_domains; + backend->extra_domains = g_settings_get_string (settings, "extra-domains"); + backend->local_setting = g_settings_get_enum (settings, "display-local"); /* don't re-issue recomputes if we've already queued one. */ if (backend->idle_tag == 0) backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend); -} -static void -notify_gconf_dnssd_display_local_changed (GConfClient *client, - guint cnxn_id, - GConfEntry *entry, - gpointer data) -{ - GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data); - char *display_local; - - display_local = gconf_client_get_string (client, - PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL, NULL); - - backend->local_setting = parse_network_local_setting (display_local); - g_free (display_local); - - /* don't re-issue recomputes if we've already queued one. */ - if (backend->idle_tag == 0) - backend->idle_tag = g_idle_add ((GSourceFunc)idle_add_recompute, backend); + return FALSE; } -static void -notify_gconf_smb_workgroup_changed (GConfClient *client, - guint cnxn_id, - GConfEntry *entry, - gpointer data) +static gboolean +smb_settings_change_event_cb (GSettings *settings, + gpointer keys, + gint n_keys, + gpointer user_data) { - GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(data); - char *current_workgroup; - - current_workgroup = gconf_client_get_string (client, - PATH_GCONF_GVFS_SMB_WORKGROUP, NULL); + GVfsBackendNetwork *backend = G_VFS_BACKEND_NETWORK(user_data); g_free (backend->current_workgroup); - backend->current_workgroup = current_workgroup; + backend->current_workgroup = g_settings_get_string (settings, "workgroup"); /* cancel the smb monitor */ if (backend->smb_monitor) @@ -608,9 +562,11 @@ notify_gconf_smb_workgroup_changed (GConfClient *client, g_file_monitor_cancel (backend->smb_monitor); g_object_unref (backend->smb_monitor); backend->smb_monitor = NULL; - } + } remount_smb (backend, NULL); + + return FALSE; } static NetworkFile * @@ -809,8 +765,6 @@ g_vfs_backend_network_init (GVfsBackendNetwork *network_backend) { GVfsBackend *backend = G_VFS_BACKEND (network_backend); GMountSpec *mount_spec; - GConfClient *gconf_client; - char *display_local, *extra_domains; char *current_workgroup; const char * const* supported_vfs; int i; @@ -830,15 +784,11 @@ g_vfs_backend_network_init (GVfsBackendNetwork *network_backend) network_backend->have_dnssd = TRUE; } - gconf_client = gconf_client_get_default (); - - if (network_backend->have_smb) + if (network_backend->have_smb) { - gconf_client_add_dir (gconf_client, PATH_GCONF_GVFS_SMB, - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); + network_backend->smb_settings = g_settings_new ("org.gnome.system.smb"); - current_workgroup = gconf_client_get_string (gconf_client, - PATH_GCONF_GVFS_SMB_WORKGROUP, NULL); + current_workgroup = g_settings_get_string (network_backend->smb_settings, "workgroup"); if (current_workgroup == NULL || current_workgroup[0] == 0) @@ -848,37 +798,25 @@ g_vfs_backend_network_init (GVfsBackendNetwork *network_backend) else network_backend->current_workgroup = current_workgroup; - gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_SMB_WORKGROUP, - notify_gconf_smb_workgroup_changed, network_backend, NULL, NULL); - - } + g_signal_connect (network_backend->smb_settings, + "change-event", + G_CALLBACK (smb_settings_change_event_cb), + network_backend); + } if (network_backend->have_dnssd) { - gconf_client_add_dir (gconf_client, PATH_GCONF_GVFS_DNS_SD, - GCONF_CLIENT_PRELOAD_ONELEVEL, NULL); - - display_local = gconf_client_get_string (gconf_client, - PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL, NULL); - extra_domains = gconf_client_get_string (gconf_client, - PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS, NULL); - - if (display_local != NULL && display_local[0] != 0) - network_backend->local_setting = parse_network_local_setting (display_local); + network_backend->dnssd_settings = g_settings_new ("org.gnome.system.dns_sd"); - g_free (display_local); - network_backend->extra_domains = extra_domains; - - gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_DNS_SD_EXTRA_DOMAINS, - notify_gconf_dnssd_domains_changed, network_backend, NULL, NULL); - - gconf_client_notify_add (gconf_client, PATH_GCONF_GVFS_DNS_SD_DISPLAY_LOCAL, - notify_gconf_dnssd_display_local_changed, network_backend, NULL, NULL); + network_backend->local_setting = g_settings_get_enum (network_backend->dnssd_settings, "display-local"); + network_backend->extra_domains = g_settings_get_string (network_backend->dnssd_settings, "extra-domains"); + g_signal_connect (network_backend->dnssd_settings, + "change-event", + G_CALLBACK (dnssd_settings_change_event_cb), + network_backend); } - g_object_unref (gconf_client); - g_vfs_backend_set_display_name (backend, _("Network")); g_vfs_backend_set_stable_name (backend, _("Network")); g_vfs_backend_set_icon_name (backend, "network-workgroup"); @@ -903,7 +841,11 @@ g_vfs_backend_network_finalize (GObject *object) g_object_unref (backend->root_monitor); g_object_unref (backend->workgroup_icon); g_object_unref (backend->server_icon); - + if (backend->smb_settings) + g_object_unref (backend->smb_settings); + if (backend->dnssd_settings) + g_object_unref (backend->dnssd_settings); + if (G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize) (*G_OBJECT_CLASS (g_vfs_backend_network_parent_class)->finalize) (object); } diff --git a/daemon/gvfsbackendsmb.c b/daemon/gvfsbackendsmb.c index a4010c53..91c290e2 100644 --- a/daemon/gvfsbackendsmb.c +++ b/daemon/gvfsbackendsmb.c @@ -50,13 +50,6 @@ #include "gvfsdaemonprotocol.h" #include "gvfskeyring.h" -#ifdef HAVE_GCONF -#include <gconf/gconf-client.h> -#endif - -/* We load a default workgroup from gconf */ -#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup" - #include <libsmbclient.h> #include "libsmb-compat.h" @@ -68,6 +61,7 @@ struct _GVfsBackendSmb char *share; char *user; char *domain; + char *default_workgroup; SMBCCTX *smb_context; @@ -91,7 +85,6 @@ struct _GVfsBackendSmb SMBCSRV *cached_server; }; -static char *default_workgroup = NULL; G_DEFINE_TYPE (GVfsBackendSmb, g_vfs_backend_smb, G_VFS_TYPE_BACKEND) @@ -113,6 +106,7 @@ g_vfs_backend_smb_finalize (GObject *object) g_free (backend->server); g_free (backend->user); g_free (backend->domain); + g_free (backend->default_workgroup); if (G_OBJECT_CLASS (g_vfs_backend_smb_parent_class)->finalize) (*G_OBJECT_CLASS (g_vfs_backend_smb_parent_class)->finalize) (object); @@ -121,27 +115,19 @@ g_vfs_backend_smb_finalize (GObject *object) static void g_vfs_backend_smb_init (GVfsBackendSmb *backend) { -#ifdef HAVE_GCONF - GConfClient *gclient; -#endif - -#ifdef HAVE_GCONF - gclient = gconf_client_get_default (); - if (gclient) - { - char *workgroup; + char *workgroup; + GSettings *settings; - workgroup = gconf_client_get_string (gclient, - PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL); + /* Get default workgroup name */ + settings = g_settings_new ("org.gnome.system.smb"); - if (workgroup && workgroup[0]) - default_workgroup = workgroup; - else - g_free (workgroup); + workgroup = g_settings_get_string (settings, "workgroup"); + if (workgroup && workgroup[0]) + backend->default_workgroup = workgroup; + else + g_free (workgroup); - g_object_unref (gclient); - } -#endif + g_object_unref (settings); } /** @@ -523,8 +509,8 @@ do_mount (GVfsBackend *backend, smbc_setFunctionPurgeCachedServers (smb_context, purge_cached); /* FIXME: is strdup() still needed here? -- removed */ - if (default_workgroup != NULL) - smbc_setWorkgroup (smb_context, default_workgroup); + if (op_backend->default_workgroup != NULL) + smbc_setWorkgroup (smb_context, op_backend->default_workgroup); #ifndef DEPRECATED_SMBC_INTERFACE smb_context->flags = 0; diff --git a/daemon/gvfsbackendsmbbrowse.c b/daemon/gvfsbackendsmbbrowse.c index dd3dc2a4..01d7da6e 100644 --- a/daemon/gvfsbackendsmbbrowse.c +++ b/daemon/gvfsbackendsmbbrowse.c @@ -48,13 +48,6 @@ #include <libsmbclient.h> #include "libsmb-compat.h" -#ifdef HAVE_GCONF -#include <gconf/gconf-client.h> -#endif - -/* We load a default workgroup from gconf */ -#define PATH_GCONF_GNOME_VFS_SMB_WORKGROUP "/system/smb/workgroup" - /* The magic "default workgroup" hostname */ #define DEFAULT_WORKGROUP_NAME "X-GNOME-DEFAULT-WORKGROUP" @@ -86,6 +79,7 @@ struct _GVfsBackendSmbBrowse char *domain; char *server; char *mounted_server; /* server or DEFAULT_WORKGROUP_NAME */ + char *default_workgroup; SMBCCTX *smb_context; char *last_user; @@ -107,7 +101,6 @@ struct _GVfsBackendSmbBrowse int entry_errno; }; -static char *default_workgroup = NULL; static GHashTable *server_cache = NULL; static GMountTracker *mount_tracker = NULL; @@ -231,6 +224,7 @@ g_vfs_backend_smb_browse_finalize (GObject *object) g_free (backend->domain); g_free (backend->mounted_server); g_free (backend->server); + g_free (backend->default_workgroup); g_mutex_free (backend->entries_lock); g_mutex_free (backend->update_cache_lock); @@ -247,9 +241,8 @@ g_vfs_backend_smb_browse_finalize (GObject *object) static void g_vfs_backend_smb_browse_init (GVfsBackendSmbBrowse *backend) { -#ifdef HAVE_GCONF - GConfClient *gclient; -#endif + char *workgroup; + GSettings *settings; backend->entries_lock = g_mutex_new (); backend->update_cache_lock = g_mutex_new (); @@ -257,25 +250,18 @@ g_vfs_backend_smb_browse_init (GVfsBackendSmbBrowse *backend) if (mount_tracker == NULL) mount_tracker = g_mount_tracker_new (NULL); -#ifdef HAVE_GCONF - gclient = gconf_client_get_default (); - if (gclient) - { - char *workgroup; - - workgroup = gconf_client_get_string (gclient, - PATH_GCONF_GNOME_VFS_SMB_WORKGROUP, NULL); + /* Get default workgroup name */ + settings = g_settings_new ("org.gnome.system.smb"); - if (workgroup && workgroup[0]) - default_workgroup = workgroup; - else - g_free (workgroup); + workgroup = g_settings_get_string (settings, "workgroup"); + if (workgroup && workgroup[0]) + backend->default_workgroup = workgroup; + else + g_free (workgroup); - g_object_unref (gclient); - } -#endif + g_object_unref (settings); - DEBUG ("g_vfs_backend_smb_browse_init: default workgroup = '%s'\n", default_workgroup ? default_workgroup : "NULL"); + DEBUG ("g_vfs_backend_smb_browse_init: default workgroup = '%s'\n", backend->default_workgroup ? backend->default_workgroup : "NULL"); } /** @@ -865,9 +851,8 @@ do_mount (GVfsBackend *backend, smbc_setFunctionRemoveCachedServer (smb_context, remove_cached_server); smbc_setFunctionPurgeCachedServers (smb_context, purge_cached); - /* FIXME: is strdup() still needed here? -- removed */ - if (default_workgroup != NULL) - smbc_setWorkgroup (smb_context, default_workgroup); + if (op_backend->default_workgroup != NULL) + smbc_setWorkgroup (smb_context, op_backend->default_workgroup); #ifndef DEPRECATED_SMBC_INTERFACE smb_context->flags = 0; |