⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ptk-file-misc.c

📁 台湾人开发的Linux下的文件管理器
💻 C
📖 第 1 页 / 共 2 页
字号:
/**  C Implementation: ptk-file-misc** Description: Miscellaneous GUI-realated functions for files*** Author: Hong Jen Yee (PCMan) <pcman.tw (AT) gmail.com>, (C) 2006** Copyright: See COPYING file that comes with this distribution**/#include "ptk-file-misc.h"#include <glib.h>#include "glib-mem.h"#include <string.h>#include <fcntl.h>#include <sys/types.h>#include <sys/stat.h>#include <errno.h>#include <unistd.h>#include <glib/gi18n.h>#include "ptk-utils.h"#include "ptk-file-task.h"#include "vfs-file-task.h"#include "file-properties.h"#include "ptk-input-dialog.h"#include "ptk-file-browser.h"#include "vfs-app-desktop.h"#include "vfs-execute.h"void ptk_delete_files( GtkWindow* parent_win,                       const char* cwd,                       GList* sel_files ){    GtkWidget * dlg;    gchar* file_path;    gint ret;    GList* sel;    VFSFileInfo* file;    PtkFileTask* task = NULL;    GList* file_list;    if ( ! sel_files )        return ;    dlg = gtk_message_dialog_new( parent_win,                                  GTK_DIALOG_MODAL,                                  GTK_MESSAGE_WARNING,                                  GTK_BUTTONS_YES_NO,                                  _( "Really delete selected files?" ) );    ret = gtk_dialog_run( GTK_DIALOG( dlg ) );    gtk_widget_destroy( dlg );    if ( ret != GTK_RESPONSE_YES )        return ;    file_list = NULL;    for ( sel = sel_files; sel; sel = g_list_next( sel ) )    {        file = ( VFSFileInfo* ) sel->data;        file_path = g_build_filename( cwd,                                      vfs_file_info_get_name( file ), NULL );        file_list = g_list_prepend( file_list, file_path );    }    /* file_list = g_list_reverse( file_list ); */    task = ptk_file_task_new( VFS_FILE_TASK_DELETE,                              file_list,                              NULL,                              GTK_WINDOW( parent_win ) );    ptk_file_task_run( task );}static void select_file_name_part( GtkEntry* entry ){    GtkEditable * editable = GTK_EDITABLE( entry );    const char* file_name = gtk_entry_get_text( entry );    const char* dot;    int pos;    if ( !file_name[ 0 ] || file_name[ 0 ] == '.' )        return ;    /* FIXME: Simply finding '.' usually gets wrong filename suffix. */    dot = g_utf8_strrchr( file_name, -1, '.' );    if ( dot )    {        pos = g_utf8_pointer_to_offset( file_name, dot );        gtk_editable_select_region( editable, 0, pos );    }}void ptk_rename_file( GtkWindow* parent_win,                      const char* cwd,                      VFSFileInfo* file ){    GtkWidget * input_dlg;    GtkLabel* prompt;    GList* files;    char* ufile_name;    char* file_name;    char* from_path;    char* to_path;    if ( !cwd || !file )        return ;    input_dlg = ptk_input_dialog_new( _( "Rename File" ),                                      _( "Please input new file name:" ),                                      vfs_file_info_get_disp_name( file ), parent_win );    gtk_window_set_default_size( GTK_WINDOW( input_dlg ),                                 360, -1 );    /* Without this line, selected region in entry cannot be set */    gtk_widget_show( input_dlg );    if ( ! vfs_file_info_is_dir( file ) )        select_file_name_part( GTK_ENTRY( ptk_input_dialog_get_entry( GTK_WIDGET( input_dlg ) ) ) );    while ( gtk_dialog_run( GTK_DIALOG( input_dlg ) ) == GTK_RESPONSE_OK )    {        prompt = GTK_LABEL( ptk_input_dialog_get_label( input_dlg ) );        ufile_name = ptk_input_dialog_get_text( input_dlg );        file_name = g_filename_from_utf8( ufile_name, -1, NULL, NULL, NULL );        g_free( ufile_name );        if ( file_name )        {            from_path = g_build_filename( cwd,                                          vfs_file_info_get_name( file ), NULL );            to_path = g_build_filename( cwd,                                        file_name, NULL );            if ( g_file_test( to_path, G_FILE_TEST_EXISTS ) )            {                gtk_label_set_text( prompt,                                    _( "The file name you specified has existed.\n"                                       "Please input a new one:" ) );            }            else            {                if ( 0 == rename( from_path, to_path ) )                    break;                else                {                    gtk_label_set_text( prompt, strerror( errno ) );                }            }            g_free( from_path );            g_free( to_path );        }        else        {            gtk_label_set_text( prompt,                                _( "The file name you specified has existed.\n"                                   "Please input a new one:" ) );        }    }    gtk_widget_destroy( input_dlg );}void ptk_create_new_file( GtkWindow* parent_win,                          const char* cwd,                          gboolean create_folder ){    gchar * full_path;    gchar* ufile_name;    gchar* file_name;    GtkLabel* prompt;    int result;    GtkWidget* dlg;    if ( create_folder )    {        dlg = ptk_input_dialog_new( _( "New Folder" ),                                    _( "Input a name for the new folder:" ),                                    _( "New Folder" ),                                    parent_win );    }    else    {        dlg = ptk_input_dialog_new( _( "New File" ),                                    _( "Input a name for the new file:" ),                                    _( "New File" ),                                    parent_win );    }    while ( gtk_dialog_run( GTK_DIALOG( dlg ) ) == GTK_RESPONSE_OK )    {        ufile_name = ptk_input_dialog_get_text( dlg );        if ( g_get_filename_charsets( NULL ) )            file_name = ufile_name;        else        {            file_name = g_filename_from_utf8( ufile_name, -1,                                              NULL, NULL, NULL );            g_free( ufile_name );        }        full_path = g_build_filename( cwd, file_name, NULL );        g_free( file_name );        if ( g_file_test( full_path, G_FILE_TEST_EXISTS ) )        {            prompt = GTK_LABEL( ptk_input_dialog_get_label( dlg ) );            gtk_label_set_text( prompt,                                _( "The file name you specified has existed.\n"                                   "Please input a new one:" ) );            g_free( full_path );            continue;        }        if ( create_folder )        {            result = mkdir( full_path, S_IRWXU | S_IRUSR | S_IRGRP );        }        else        {            result = open( full_path, O_CREAT, S_IWUSR | S_IRUSR | S_IRGRP | S_IROTH );            if ( result != -1 )                close( result );        }        g_free( full_path );        break;    }    gtk_widget_destroy( dlg );    if ( result == -1 )        ptk_show_error( parent_win,                        _( "The new file cannot be created!" ) );}void ptk_show_file_properties( GtkWindow* parent_win,                               const char* cwd,                               GList* sel_files ){    GtkWidget * dlg;    VFSFileInfo* file;    char* dir_path = NULL;    /* Make a copy of the list */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -