📄 main-window.c
字号:
gboolean open_side_pane, PtkFileBrowserSidePaneMode side_pane_mode ){ GtkWidget * tab_label; gint idx; GtkNotebook* notebook = GTK_NOTEBOOK( main_window->notebook ); PtkFileBrowser* file_browser = PTK_FILE_BROWSER( ptk_file_browser_new ( GTK_WIDGET( main_window ), appSettings.viewMode ) ); gtk_paned_set_position ( GTK_PANED ( file_browser ), main_window->splitter_pos ); ptk_file_browser_show_hidden_files( file_browser, appSettings.showHiddenFiles ); ptk_file_browser_show_thumbnails( file_browser, appSettings.showThumbnail ? appSettings.maxThumbSize : 0 ); if ( open_side_pane ) { ptk_file_browser_show_side_pane( file_browser, side_pane_mode ); } else { ptk_file_browser_hide_side_pane( file_browser ); } ptk_file_browser_set_sort_order( file_browser, appSettings.sortOrder ); ptk_file_browser_set_sort_type( file_browser, appSettings.sortType ); gtk_widget_show( GTK_WIDGET( file_browser ) ); g_signal_connect( file_browser, "before-chdir", G_CALLBACK( on_file_browser_before_chdir ), main_window ); g_signal_connect( file_browser, "after-chdir", G_CALLBACK( on_file_browser_after_chdir ), main_window ); g_signal_connect( file_browser, "open-item", G_CALLBACK( on_file_browser_open_item ), main_window ); g_signal_connect( file_browser, "content-change", G_CALLBACK( on_file_browser_content_change ), main_window ); g_signal_connect( file_browser, "sel-change", G_CALLBACK( on_file_browser_sel_change ), main_window ); g_signal_connect( file_browser, "pane-mode-change", G_CALLBACK( on_file_browser_pane_mode_change ), main_window ); g_signal_connect( file_browser, "notify::position", G_CALLBACK( on_file_browser_splitter_pos_change ), main_window ); tab_label = fm_main_window_create_tab_label( main_window, file_browser ); idx = gtk_notebook_append_page( notebook, GTK_WIDGET( file_browser ), tab_label ); gtk_notebook_set_current_page ( notebook, idx ); if ( gtk_notebook_get_n_pages ( notebook ) > 1 ) gtk_notebook_set_show_tabs( notebook, TRUE ); else gtk_notebook_set_show_tabs( notebook, FALSE ); ptk_file_browser_chdir( file_browser, folder_path, TRUE ); gtk_widget_grab_focus( GTK_WIDGET( file_browser->folder_view ) );}GtkWidget* fm_main_window_new(){ return ( GtkWidget* ) g_object_new ( FM_TYPE_MAIN_WINDOW, NULL );}GtkWidget* fm_main_window_get_current_file_browser ( FMMainWindow* main_window ){ GtkNotebook * notebook = main_window->notebook; gint idx = gtk_notebook_get_current_page( notebook ); return gtk_notebook_get_nth_page( notebook, idx );}void on_back_activate( GtkToolButton *toolbutton, FMMainWindow *main_window ){ PtkFileBrowser * file_browser = PTK_FILE_BROWSER( fm_main_window_get_current_file_browser( main_window ) ); if ( file_browser && ptk_file_browser_can_back( file_browser ) ) ptk_file_browser_go_back( file_browser );}void on_forward_activate( GtkToolButton *toolbutton, FMMainWindow *main_window ){ PtkFileBrowser * file_browser = PTK_FILE_BROWSER( fm_main_window_get_current_file_browser( main_window ) ); if ( file_browser && ptk_file_browser_can_forward( file_browser ) ) ptk_file_browser_go_forward( file_browser );}void on_up_activate( GtkToolButton *toolbutton, FMMainWindow *main_window ){ char * parent_dir; PtkFileBrowser* file_browser = PTK_FILE_BROWSER( fm_main_window_get_current_file_browser( main_window ) ); parent_dir = g_path_get_dirname( ptk_file_browser_get_cwd( file_browser ) ); ptk_file_browser_chdir( file_browser, parent_dir, TRUE ); g_free( parent_dir );}void on_home_activate( GtkToolButton *toolbutton, FMMainWindow *main_window ){ GtkWidget * file_browser = fm_main_window_get_current_file_browser( main_window ); ptk_file_browser_chdir( PTK_FILE_BROWSER( file_browser ), g_get_home_dir(), TRUE );}void on_address_bar_activate ( GtkWidget *entry, gpointer user_data ){ FMMainWindow * main_window = FM_MAIN_WINDOW( user_data ); gchar *dir_path, *final_path; PtkFileBrowser* file_browser = PTK_FILE_BROWSER( fm_main_window_get_current_file_browser( main_window ) ); /* Convert to on-disk encoding */ dir_path = g_filename_from_utf8( gtk_entry_get_text( GTK_ENTRY( entry ) ), -1, NULL, NULL, NULL ); final_path = vfs_file_resolve_path( ptk_file_browser_get_cwd(file_browser), dir_path ); g_free( dir_path ); ptk_file_browser_chdir( file_browser, final_path, TRUE ); g_free( final_path ); gtk_widget_grab_focus( GTK_WIDGET( file_browser->folder_view ) );}#if 0 /* This is not needed by a file manager *//* Patched by <cantona@cantona.net> */void on_fullscreen_activate ( GtkMenuItem *menuitem, gpointer user_data ){ GtkWindow * window; int is_fullscreen; window = GTK_WINDOW( user_data ); is_fullscreen = gtk_check_menu_item_get_active( GTK_CHECK_MENU_ITEM( menuitem ) ); if ( is_fullscreen ) { gtk_window_fullscreen( GTK_WINDOW( window ) ); } else { gtk_window_unfullscreen( GTK_WINDOW( window ) ); }}#endifvoid on_refresh_activate ( GtkToolButton *toolbutton, gpointer user_data ){ FMMainWindow * main_window = FM_MAIN_WINDOW( user_data ); GtkWidget* file_browser = fm_main_window_get_current_file_browser( main_window ); ptk_file_browser_refresh( PTK_FILE_BROWSER( file_browser ) );}voidon_quit_activate ( GtkMenuItem *menuitem, gpointer user_data ){ fm_main_window_close( GTK_WIDGET( user_data ) );}voidon_new_folder_activate ( GtkMenuItem *menuitem, gpointer user_data ){ FMMainWindow * main_window = FM_MAIN_WINDOW( user_data ); GtkWidget* file_browser = fm_main_window_get_current_file_browser( main_window ); ptk_file_browser_create_new_file( PTK_FILE_BROWSER( file_browser ), TRUE );}voidon_new_text_file_activate ( GtkMenuItem *menuitem, gpointer user_data ){ FMMainWindow * main_window = FM_MAIN_WINDOW( user_data ); GtkWidget* file_browser = fm_main_window_get_current_file_browser( main_window ); ptk_file_browser_create_new_file( PTK_FILE_BROWSER( file_browser ), FALSE );}voidon_preference_activate ( GtkMenuItem *menuitem, gpointer user_data ){ FMMainWindow * main_window = FM_MAIN_WINDOW( user_data ); fm_main_window_preference( main_window );}void fm_main_window_preference( FMMainWindow* main_window ){ int max_thumb = appSettings.maxThumbSize; gboolean show_thumbnails = appSettings.showThumbnail; int big_icon = appSettings.bigIconSize; int small_icon = appSettings.smallIconSize; gboolean show_desktop = appSettings.showDesktop; gboolean show_wallaper = appSettings.showWallpaper; GdkColor bg1 = appSettings.desktopBg1; GdkColor bg2 = appSettings.desktopBg2; GdkColor text = appSettings.desktopText; char* wallpaper; int i, n; GList* l; PtkFileBrowser* file_browser; if ( appSettings.wallpaper ) wallpaper = g_strdup( appSettings.wallpaper ); else wallpaper = g_strdup( "" ); show_preference_dialog( GTK_WINDOW( main_window ) ); if ( show_thumbnails != appSettings.showThumbnail || max_thumb != appSettings.maxThumbSize ) { for ( l = all_windows; l; l = l->next ) { main_window = FM_MAIN_WINDOW( l->data ); n = gtk_notebook_get_n_pages( main_window->notebook ); for ( i = 0; i < n; ++i ) { file_browser = PTK_FILE_BROWSER( gtk_notebook_get_nth_page( main_window->notebook, i ) ); ptk_file_browser_show_thumbnails( file_browser, appSettings.showThumbnail ? appSettings.maxThumbSize : 0 ); } } if ( appSettings.showDesktop ) fm_desktop_update_thumbnails(); } if ( big_icon != appSettings.bigIconSize || small_icon != appSettings.smallIconSize ) { vfs_mime_type_set_icon_size( appSettings.bigIconSize, appSettings.smallIconSize ); vfs_file_info_set_thumbnail_size( appSettings.bigIconSize, appSettings.smallIconSize ); for ( l = all_windows; l; l = l->next ) { main_window = FM_MAIN_WINDOW( l->data ); n = gtk_notebook_get_n_pages( main_window->notebook ); for ( i = 0; i < n; ++i ) { file_browser = PTK_FILE_BROWSER( gtk_notebook_get_nth_page( main_window->notebook, i ) ); ptk_file_browser_update_display( file_browser ); } } if ( appSettings.showDesktop ) fm_desktop_update_view(); } if ( show_desktop != appSettings.showDesktop ) { if ( appSettings.showDesktop ) fm_desktop_init(); else fm_desktop_cleanup(); } else if ( appSettings.showDesktop ) { if ( show_wallaper != appSettings.showWallpaper || ( appSettings.wallpaper && strcmp( wallpaper, appSettings.wallpaper ) ) ) { fm_desktop_update_wallpaper(); } if ( !gdk_color_equal( &bg1, &appSettings.desktopBg1 ) || !gdk_color_equal( &bg2, &appSettings.desktopBg2 ) || !gdk_color_equal( &text, &appSettings.desktopText ) ) { fm_desktop_update_colors(); } } g_free( wallpaper ); save_settings();}voidon_file_assoc_activate ( GtkMenuItem *menuitem, gpointer user_data ){ GtkWindow * main_window = GTK_WINDOW( user_data ); edit_file_associations( main_window );}voidon_about_activate ( GtkMenuItem *menuitem, gpointer user_data ){ GtkWidget * aboutDialog; const gchar *authors[] = { "洪任諭 Hong Jen Yee <pcman.tw@gmail.com>\n", _("Source code taken from other projects:"), _(" * xdgmime: Red Hat, Inc & Jonathan Blandford"), _(" * libmd5-rfc: Aladdin Enterprises"), _(" * Working area detection: Gary Kramlich"), _(" * ExoIconView: os-cillation e.K, Anders Carlsson, & Benedikt Meurer"), _(" * Text and icon renderer uese code from Jonathan Blandford"), _(" * Desktop icons use code from Brian Tarricone"), NULL }; /* TRANSLATORS: Replace this string with your names, one name per line. */ gchar *translators = _( "translator-credits" ); aboutDialog = gtk_about_dialog_new (); gtk_container_set_border_width ( GTK_CONTAINER ( aboutDialog ), 2 ); gtk_about_dialog_set_version ( GTK_ABOUT_DIALOG ( aboutDialog ), VERSION ); gtk_about_dialog_set_name ( GTK_ABOUT_DIALOG ( aboutDialog ), _( "PCMan File Manager" ) ); gtk_about_dialog_set_copyright ( GTK_ABOUT_DIALOG ( aboutDialog ), _( "Copyright (C) 2005 - 2006" ) ); gtk_about_dialog_set_comments ( GTK_ABOUT_DIALOG ( aboutDialog ), _( "Lightweight file manager\n\nDeveloped by Hon Jen Yee (PCMan)" ) ); gtk_about_dialog_set_license ( GTK_ABOUT_DIALOG ( aboutDialog ), "PCMan File Manager\n\nCopyright (C) 2005 - 2006 Hong Jen Yee (PCMan)\n\nThis program is free software; you can redistribute it and/or\nmodify it under the terms of the GNU General Public License\nas published by the Free Software Foundation; either version 2\nof the License, or (at your option) any later version.\n\nThis program is distributed in the hope that it will be useful,\nbut WITHOUT ANY WARRANTY; without even the implied warranty of\nMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\nGNU General Public License for more details.\n\nYou should have received a copy of the GNU General Public License\nalong with this program; if not, write to the Free Software\nFoundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA." ); gtk_about_dialog_set_website ( GTK_ABOUT_DIALOG ( aboutDialog ), "http://pcmanfm.sourceforge.net/" ); gtk_about_dialog_set_authors ( GTK_ABOUT_DIALOG ( aboutDialog ), authors ); gtk_about_dialog_set_translator_credits ( GTK_ABOUT_DIALOG ( aboutDialog ), translators ); gtk_window_set_transient_for( GTK_WINDOW( aboutDialog ), GTK_WINDOW( user_data ) ); gtk_dialog_run( GTK_DIALOG( aboutDialog ) ); gtk_widget_destroy( aboutDialog );}gbooleanon_back_btn_popup_menu ( GtkWidget *widget, gpointer user_data ){ /* GtkWidget* file_browser = fm_main_window_get_current_file_browser( widget );
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -