static void g_win32_directory_monitor_class_init (GWin32DirectoryMonitorClass *klass) { g_win32_directory_monitor_parent_class = g_type_class_peek_parent (klass); G_OBJECT_CLASS (klass)->constructor = g_win32_directory_monitor_constructor; G_OBJECT_CLASS (klass)->finalize = g_win32_directory_monitor_finalize; G_FILE_MONITOR_CLASS (klass)->cancel = g_win32_directory_monitor_cancel; G_LOCAL_DIRECTORY_MONITOR_CLASS (klass)->mount_notify = FALSE; G_LOCAL_DIRECTORY_MONITOR_CLASS (klass)->is_supported = g_win32_directory_monitor_is_supported; }
static GObject * g_local_directory_monitor_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { GObject *obj; GLocalDirectoryMonitorClass *klass; GObjectClass *parent_class; GLocalDirectoryMonitor *local_monitor; const gchar *dirname = NULL; gint i; klass = G_LOCAL_DIRECTORY_MONITOR_CLASS (g_type_class_peek (G_TYPE_LOCAL_DIRECTORY_MONITOR)); parent_class = G_OBJECT_CLASS (g_type_class_peek_parent (klass)); obj = parent_class->constructor (type, n_construct_properties, construct_properties); local_monitor = G_LOCAL_DIRECTORY_MONITOR (obj); for (i = 0; i < n_construct_properties; i++) { if (strcmp ("dirname", g_param_spec_get_name (construct_properties[i].pspec)) == 0) { g_warn_if_fail (G_VALUE_HOLDS_STRING (construct_properties[i].value)); dirname = g_value_get_string (construct_properties[i].value); break; } } local_monitor->dirname = g_strdup (dirname); if (!klass->mount_notify) { #ifdef G_OS_WIN32 /*claim everything was mounted */ local_monitor->was_mounted = TRUE; #else GUnixMountEntry *mount; /* Emulate unmount detection */ mount = g_unix_mount_at (local_monitor->dirname, NULL); local_monitor->was_mounted = mount != NULL; if (mount) g_unix_mount_free (mount); local_monitor->mount_monitor = g_unix_mount_monitor_new (); g_signal_connect_object (local_monitor->mount_monitor, "mounts-changed", G_CALLBACK (mounts_changed), local_monitor, 0); #endif } return obj; }
static gpointer get_default_local_directory_monitor (gpointer data) { GLocalDirectoryMonitorClass *chosen_class; GLocalDirectoryMonitorClass **ret = data; GIOExtensionPoint *ep; GList *extensions, *l; _g_io_modules_ensure_loaded (); ep = g_io_extension_point_lookup (G_LOCAL_DIRECTORY_MONITOR_EXTENSION_POINT_NAME); extensions = g_io_extension_point_get_extensions (ep); chosen_class = NULL; for (l = extensions; l != NULL; l = l->next) { GIOExtension *extension = l->data; GLocalDirectoryMonitorClass *klass; klass = G_LOCAL_DIRECTORY_MONITOR_CLASS (g_io_extension_ref_class (extension)); if (klass->is_supported ()) { chosen_class = klass; break; } else g_type_class_unref (klass); } if (chosen_class) { *ret = chosen_class; return (gpointer)G_TYPE_FROM_CLASS (chosen_class); } else return (gpointer)G_TYPE_INVALID; }