void vfs_dir_load( VFSDir* dir ) { if ( G_LIKELY(dir->path) ) { dir->disp_path = g_filename_display_name( dir->path ); dir->flags = 0; /* FIXME: We should check access here! */ if( G_UNLIKELY( strcmp( dir->path, vfs_get_desktop_dir() ) == 0 ) ) dir->is_desktop = TRUE; else if( G_UNLIKELY( strcmp( dir->path, g_get_home_dir() ) == 0 ) ) dir->is_home = TRUE; if( G_UNLIKELY(is_dir_trash(dir->path)) ) { // g_free( dir->disp_path ); // dir->disp_path = g_strdup( _("Trash") ); dir->is_trash = TRUE; } if( G_UNLIKELY( is_dir_mount_point(dir->path)) ) dir->is_mount_point = TRUE; if( G_UNLIKELY( is_dir_remote(dir->path)) ) dir->is_remote = TRUE; if( G_UNLIKELY( is_dir_virtual(dir->path)) ) dir->is_virtual = TRUE; dir->task = vfs_async_task_new( (VFSAsyncFunc)vfs_dir_load_thread, dir ); g_signal_connect( dir->task, "finish", G_CALLBACK(on_list_task_finished), dir ); vfs_async_task_execute( dir->task ); } }
void vfs_file_info_load_special_info( VFSFileInfo* fi, const char* file_path ) { /*if ( G_LIKELY(fi->type) && G_UNLIKELY(fi->type->name, "application/x-desktop") ) */ if ( G_UNLIKELY( g_str_has_suffix( fi->name, ".desktop") ) ) { VFSAppDesktop * desktop; const char* icon_name; if ( !desktop_dir ) desktop_dir = vfs_get_desktop_dir(); char* file_dir = g_path_get_dirname( file_path ); fi->flags |= VFS_FILE_INFO_DESKTOP_ENTRY; desktop = vfs_app_desktop_new( file_path ); //MOD display real filenames of .desktop files not in desktop folder if ( desktop_dir && !strcmp( file_dir, desktop_dir ) ) { if ( vfs_app_desktop_get_disp_name( desktop ) ) { vfs_file_info_set_disp_name( fi, vfs_app_desktop_get_disp_name( desktop ) ); } } if ( (icon_name = vfs_app_desktop_get_icon_name( desktop )) ) { GdkPixbuf* icon; int big_size, small_size; vfs_mime_type_get_icon_size( &big_size, &small_size ); if( ! fi->big_thumbnail ) { icon = vfs_app_desktop_get_icon( desktop, big_size, FALSE ); if( G_LIKELY(icon) ) fi->big_thumbnail =icon; } if( ! fi->small_thumbnail ) { icon = vfs_app_desktop_get_icon( desktop, small_size, FALSE ); if( G_LIKELY(icon) ) fi->small_thumbnail =icon; } } vfs_app_desktop_unref( desktop ); g_free( file_dir ); } }
static void on_add_search_folder( GtkWidget* btn, FindFile* data ) { GtkWidget* menu = gtk_menu_new(); GtkWidget* item; GtkWidget* img; const char* dir; item = gtk_image_menu_item_new_with_label( _("Browse...") ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); g_signal_connect( item, "activate", G_CALLBACK(on_add_search_browse), data ); item = gtk_separator_menu_item_new(); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); item = gtk_image_menu_item_new_with_label( g_get_home_dir() ); //img = gtk_image_new_from_icon_name( "gnome-fs-directory", GTK_ICON_SIZE_MENU ); img = xset_get_image( "gtk-directory", GTK_ICON_SIZE_MENU ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( item ), img ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); g_signal_connect( item, "activate", G_CALLBACK(on_add_search_home), data ); if( dir = vfs_get_desktop_dir() ) { item = gtk_image_menu_item_new_with_label( dir ); //img = gtk_image_new_from_icon_name( "gnome-fs-desktop", GTK_ICON_SIZE_MENU ); img = xset_get_image( "gtk-directory", GTK_ICON_SIZE_MENU ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( item ), img ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); g_signal_connect( item, "activate", G_CALLBACK(on_add_search_desktop), data ); } item = gtk_image_menu_item_new_with_label( _("Local Volumes") ); //img = gtk_image_new_from_icon_name( "gnome-dev-harddisk", GTK_ICON_SIZE_MENU ); img = xset_get_image( "gtk-harddisk", GTK_ICON_SIZE_MENU ); gtk_image_menu_item_set_image( GTK_IMAGE_MENU_ITEM( item ), img ); gtk_menu_shell_append( GTK_MENU_SHELL( menu ), item ); g_signal_connect( item, "activate", G_CALLBACK(on_add_search_volumes), data ); /* FIXME: Add all volumes */ /* FIXME: Add all bookmarks */ gtk_widget_show_all( menu ); gtk_menu_popup( GTK_MENU( menu ), NULL, NULL, (GtkMenuPositionFunc)menu_pos, btn, 0, gtk_get_current_event_time() ); }
void vfs_dir_class_init( VFSDirClass* klass ) { GObjectClass * object_class; object_class = ( GObjectClass * ) klass; parent_class = g_type_class_peek_parent ( klass ); object_class->set_property = vfs_dir_set_property; object_class->get_property = vfs_dir_get_property; object_class->finalize = vfs_dir_finalize; /* signals */ // klass->file_created = on_vfs_dir_file_created; // klass->file_deleted = on_vfs_dir_file_deleted; // klass->file_changed = on_vfs_dir_file_changed; /* * file-created is emitted when there is a new file created in the dir. * The param is VFSFileInfo of the newly created file. */ signals[ FILE_CREATED_SIGNAL ] = g_signal_new ( "file-created", G_TYPE_FROM_CLASS ( klass ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET ( VFSDirClass, file_created ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); /* * file-deleted is emitted when there is a file deleted in the dir. * The param is VFSFileInfo of the newly created file. */ signals[ FILE_DELETED_SIGNAL ] = g_signal_new ( "file-deleted", G_TYPE_FROM_CLASS ( klass ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET ( VFSDirClass, file_deleted ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); /* * file-changed is emitted when there is a file changed in the dir. * The param is VFSFileInfo of the newly created file. */ signals[ FILE_CHANGED_SIGNAL ] = g_signal_new ( "file-changed", G_TYPE_FROM_CLASS ( klass ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET ( VFSDirClass, file_changed ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); signals[ THUMBNAIL_LOADED_SIGNAL ] = g_signal_new ( "thumbnail-loaded", G_TYPE_FROM_CLASS ( klass ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET ( VFSDirClass, thumbnail_loaded ), NULL, NULL, g_cclosure_marshal_VOID__POINTER, G_TYPE_NONE, 1, G_TYPE_POINTER ); signals[ FILE_LISTED_SIGNAL ] = g_signal_new ( "file-listed", G_TYPE_FROM_CLASS ( klass ), G_SIGNAL_RUN_FIRST, G_STRUCT_OFFSET ( VFSDirClass, file_listed ), NULL, NULL, g_cclosure_marshal_VOID__BOOLEAN, G_TYPE_NONE, 1, G_TYPE_BOOLEAN ); /* FIXME: Is there better way to do this? */ if( G_UNLIKELY( ! is_desktop_set ) ) vfs_get_desktop_dir(); if( ! home_trash_dir ) vfs_get_trash_dir(); }
static void on_add_search_desktop(GtkWidget* menu, FindFile* data) { add_search_dir( data, vfs_get_desktop_dir() ); }