void fm_turn_on_desktop_icons() { GdkDisplay * gdpy; gint i; int big = 0; if( ! group ) group = gtk_window_group_new(); theme_change_notify = g_signal_connect( gtk_icon_theme_get_default(), "changed", G_CALLBACK(on_icon_theme_changed), NULL ); vfs_mime_type_get_icon_size( &big, NULL ); gdpy = gdk_display_get_default(); n_screens = gdk_display_get_n_screens( gdpy ); desktops = g_new( GtkWidget *, n_screens ); for ( i = 0; i < n_screens; i++ ) { desktops[ i ] = desktop_window_new(); desktop_window_set_icon_size( (DesktopWindow*)desktops[ i ], big ); desktop_window_set_single_click( (DesktopWindow*)desktops[ i ], app_settings.single_click ); gtk_widget_realize( desktops[ i ] ); /* without this, setting wallpaper won't work */ gtk_widget_show_all( desktops[ i ] ); gdk_window_lower( desktops[ i ] ->window ); gtk_window_group_add_window( GTK_WINDOW_GROUP(group), GTK_WINDOW( desktops[i] ) ); } fm_desktop_update_colors(); fm_desktop_update_wallpaper(); }
void fm_desktop_update_icons() { int i; int big = 0; vfs_mime_type_get_icon_size( &big, NULL ); for ( i = 0; i < n_screens; i++ ) desktop_window_set_icon_size( (DesktopWindow*)desktops[ i ], big ); }
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 ); } }
GdkPixbuf* vfs_file_info_get_big_icon( VFSFileInfo* fi ) { /* get special icons for special files, especially for some desktop icons */ if ( G_UNLIKELY( fi->flags != VFS_FILE_INFO_NONE ) ) { int w, h; int icon_size; vfs_mime_type_get_icon_size( &icon_size, NULL ); if ( fi->big_thumbnail ) { w = gdk_pixbuf_get_width( fi->big_thumbnail ); h = gdk_pixbuf_get_height( fi->big_thumbnail ); } else w = h = 0; if ( ABS( MAX( w, h ) - icon_size ) > 2 ) { char * icon_name = NULL; if ( fi->big_thumbnail ) { icon_name = ( char* ) g_object_steal_data( G_OBJECT(fi->big_thumbnail), "name" ); g_object_unref( fi->big_thumbnail ); fi->big_thumbnail = NULL; } if ( G_LIKELY( icon_name ) ) { if ( G_UNLIKELY( icon_name[ 0 ] == '/' ) ) fi->big_thumbnail = gdk_pixbuf_new_from_file( icon_name, NULL ); else fi->big_thumbnail = vfs_load_icon( gtk_icon_theme_get_default(), icon_name, icon_size ); } if ( fi->big_thumbnail ) g_object_set_data_full( G_OBJECT(fi->big_thumbnail), "name", icon_name, g_free ); else g_free( icon_name ); } return fi->big_thumbnail ? g_object_ref( fi->big_thumbnail ) : NULL; } if( G_UNLIKELY(!fi->mime_type) ) return NULL; return vfs_mime_type_get_icon( fi->mime_type, TRUE ); }