📄 main-window.c
字号:
#ifdef HAVE_CONFIG_H# include <config.h>#endif#include <gtk/gtk.h>#include <glib.h>#include <glib/gstdio.h>#include <gdk/gdkkeysyms.h>#include <string.h>#include <sys/types.h>#include <fcntl.h>#include "ptk-file-browser.h"#include "main-window.h"#include "ptk-utils.h"#include "glade-support.h"#include "pref-dialog.h"#include "ptk-bookmarks.h"#include "edit-bookmarks.h"#include "file-properties.h"#include "file-assoc-dlg.h"#include "ptk-path-entry.h"#include "settings.h"#include "fm-desktop.h"#ifdef HAVE_STATVFS/* FIXME: statvfs support should be moved to src/vfs */#include <sys/statvfs.h>#endif#include "vfs-app-desktop.h"#include "vfs-execute.h"static void fm_main_window_class_init( FMMainWindowClass* klass );static void fm_main_window_init( FMMainWindow* main_window );static void fm_main_window_finalize( GObject *obj );static void fm_main_window_get_property ( GObject *obj, guint prop_id, GValue *value, GParamSpec *pspec );static void fm_main_window_set_property ( GObject *obj, guint prop_id, const GValue *value, GParamSpec *pspec );static GtkWidget* create_bookmarks_menu ( FMMainWindow* main_window );static GtkWidget* create_bookmarks_menu_item ( FMMainWindow* main_window, const char* item );static gboolean fm_main_window_delete_event ( GtkWidget *widget, GdkEvent *event );static void fm_main_window_destroy ( GtkObject *object );static gboolean fm_main_window_key_press_event ( GtkWidget *widget, GdkEventKey *event );/* Signal handlers */static void on_back_activate ( GtkToolButton *toolbutton, FMMainWindow *main_window );static void on_forward_activate ( GtkToolButton *toolbutton, FMMainWindow *main_window );static void on_up_activate ( GtkToolButton *toolbutton, FMMainWindow *main_window );static void on_home_activate( GtkToolButton *toolbutton, FMMainWindow *main_window );static void on_refresh_activate ( GtkToolButton *toolbutton, gpointer user_data );static void on_quit_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_new_folder_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_new_text_file_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_preference_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_file_assoc_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_about_activate ( GtkMenuItem *menuitem, gpointer user_data );static gboolean on_back_btn_popup_menu ( GtkWidget *widget, gpointer user_data );static gboolean on_forward_btn_popup_menu ( GtkWidget *widget, gpointer user_data );static void on_address_bar_activate ( GtkWidget *entry, gpointer user_data );static void on_new_window_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_new_tab_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_folder_notebook_switch_pape ( GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer user_data );static void on_cut_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_copy_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_paste_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_delete_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_select_all_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_add_to_bookmark_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_invert_selection_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_close_tab_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_rename_activate ( GtkMenuItem *menuitem, gpointer user_data );#if 0static void on_fullscreen_activate ( GtkMenuItem *menuitem, gpointer user_data );#endifstatic void on_show_hidden_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_name_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_size_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_mtime_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_type_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_perm_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_by_owner_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_ascending_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_sort_descending_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_view_as_icon_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_view_as_list_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_open_side_pane_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_show_dir_tree ( GtkMenuItem *menuitem, gpointer user_data );static void on_show_loation_pane ( GtkMenuItem *menuitem, gpointer user_data );static void on_side_pane_toggled ( GtkToggleToolButton *toggletoolbutton, gpointer user_data );static void on_go_btn_clicked ( GtkToolButton *toolbutton, gpointer user_data );static void on_open_terminal_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_open_current_folder_as_root ( GtkMenuItem *menuitem, gpointer user_data );static void on_file_properties_activate ( GtkMenuItem *menuitem, gpointer user_data );static void on_bookmark_item_activate ( GtkMenuItem* menu, gpointer user_data );static void on_file_browser_before_chdir( PtkFileBrowser* file_browser, const char* path, gboolean* cancel, FMMainWindow* main_window );static void on_file_browser_open_item( PtkFileBrowser* file_browser, const char* path, PtkOpenAction action, FMMainWindow* main_window );static void on_file_browser_after_chdir( PtkFileBrowser* file_browser, FMMainWindow* main_window );static void on_file_browser_content_change( PtkFileBrowser* file_browser, FMMainWindow* main_window );static void on_file_browser_sel_change( PtkFileBrowser* file_browser, FMMainWindow* main_window );static void on_file_browser_pane_mode_change( PtkFileBrowser* file_browser, FMMainWindow* main_window );static void on_file_browser_splitter_pos_change( PtkFileBrowser* file_browser, GParamSpec *param, FMMainWindow* main_window );static gboolean on_tab_drag_motion ( GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, guint time, PtkFileBrowser* file_browser );static void on_view_menu_popup( GtkMenuItem* item, FMMainWindow* main_window );/* Callback called when the bookmarks change */static void on_bookmarks_change( PtkBookmarks* bookmarks, FMMainWindow* main_window );static gboolean on_main_window_focus( GtkWidget* main_window, GdkEventFocus *event, gpointer user_data );/* Utilities */static void fm_main_window_update_status_bar( FMMainWindow* main_window, PtkFileBrowser* file_browser );static void fm_main_window_update_command_ui( FMMainWindow* main_window, PtkFileBrowser* file_browser );/* Automatically process busy cursor */static void fm_main_window_start_busy_task( FMMainWindow* main_window );static gboolean fm_main_window_stop_busy_task( FMMainWindow* main_window );static GtkWindowClass *parent_class = NULL;static int n_windows = 0;static GList* all_windows = NULL;/* Drag & Drop/Clipboard targets */static GtkTargetEntry drag_targets[] = { {"text/uri-list", 0 , 0 } };GType fm_main_window_get_type(){ static GType type = G_TYPE_INVALID; if ( G_UNLIKELY ( type == G_TYPE_INVALID ) ) { static const GTypeInfo info = { sizeof ( FMMainWindowClass ), NULL, NULL, ( GClassInitFunc ) fm_main_window_class_init, NULL, NULL, sizeof ( FMMainWindow ), 0, ( GInstanceInitFunc ) fm_main_window_init, NULL, }; type = g_type_register_static ( GTK_TYPE_WINDOW, "FMMainWindow", &info, 0 ); } return type;}void fm_main_window_class_init( FMMainWindowClass* klass ){ GObjectClass * object_class; GtkWidgetClass *widget_class; object_class = ( GObjectClass * ) klass; parent_class = g_type_class_peek_parent ( klass ); object_class->set_property = fm_main_window_set_property; object_class->get_property = fm_main_window_get_property; object_class->finalize = fm_main_window_finalize; widget_class = GTK_WIDGET_CLASS ( klass ); widget_class->delete_event = fm_main_window_delete_event; widget_class->key_press_event = fm_main_window_key_press_event;}/* Main menu definition */static PtkMenuItemEntry fm_file_create_new_manu[] = { PTK_IMG_MENU_ITEM( N_( "_Folder" ), "gtk-directory", on_new_folder_activate, 0, 0 ), PTK_IMG_MENU_ITEM( N_( "_Text File" ), "gtk-edit", on_new_text_file_activate, 0, 0 ), PTK_MENU_END };static PtkMenuItemEntry fm_file_menu[] = { PTK_IMG_MENU_ITEM( N_( "New _Window" ), "gtk-add", on_new_window_activate, GDK_N, GDK_CONTROL_MASK ), PTK_IMG_MENU_ITEM( N_( "New _Tab" ), "gtk-add", on_new_tab_activate, GDK_T, GDK_CONTROL_MASK ), PTK_IMG_MENU_ITEM( N_( "Close Tab" ), "gtk-close", on_close_tab_activate, GDK_W, GDK_CONTROL_MASK ), PTK_SEPARATOR_MENU_ITEM, PTK_POPUP_IMG_MENU( N_( "_Create New" ), "gtk-new", fm_file_create_new_manu ), PTK_IMG_MENU_ITEM( N_( "File _Properties" ), "gtk-info", on_file_properties_activate, GDK_Return, GDK_MOD1_MASK ), PTK_SEPARATOR_MENU_ITEM, PTK_STOCK_MENU_ITEM( "gtk-quit", on_quit_activate ), PTK_MENU_END };static PtkMenuItemEntry fm_edit_menu[] = { PTK_STOCK_MENU_ITEM( "gtk-cut", on_cut_activate ), PTK_STOCK_MENU_ITEM( "gtk-copy", on_copy_activate ), PTK_STOCK_MENU_ITEM( "gtk-paste", on_paste_activate ), PTK_IMG_MENU_ITEM( N_( "_Delete" ), "gtk-delete", on_delete_activate, GDK_Delete, 0 ), PTK_IMG_MENU_ITEM( N_( "_Rename" ), "gtk-edit", on_rename_activate, GDK_F2, 0 ), PTK_SEPARATOR_MENU_ITEM, PTK_MENU_ITEM( N_( "Select _All" ), on_select_all_activate, GDK_A, GDK_CONTROL_MASK ), PTK_MENU_ITEM( N_( "_Invert Selection" ), on_invert_selection_activate, GDK_I, GDK_CONTROL_MASK ), PTK_SEPARATOR_MENU_ITEM, // PTK_IMG_MENU_ITEM( N_( "_File Associations" ), "gtk-execute", on_file_assoc_activate , 0, 0 ), PTK_STOCK_MENU_ITEM( "gtk-preferences", on_preference_activate ), PTK_MENU_END };static PtkMenuItemEntry fm_go_menu[] = { PTK_IMG_MENU_ITEM( N_( "Go _Back" ), "gtk-go-back", on_back_activate, GDK_Left, GDK_MOD1_MASK ), PTK_IMG_MENU_ITEM( N_( "Go _Forward" ), "gtk-go-forward", on_forward_activate, GDK_Right, GDK_MOD1_MASK ), PTK_IMG_MENU_ITEM( N_( "Go to _Parent Folder" ), "gtk-go-up", on_up_activate, GDK_Up, GDK_MOD1_MASK ), PTK_IMG_MENU_ITEM( N_( "Go _Home" ), "gtk-home", on_home_activate, GDK_Home, GDK_MOD1_MASK ), PTK_MENU_END };static PtkMenuItemEntry fm_help_menu[] = { PTK_STOCK_MENU_ITEM( "gtk-about", on_about_activate ), PTK_MENU_END };static PtkMenuItemEntry fm_sort_menu[] = { PTK_RADIO_MENU_ITEM( N_( "Sort by _Name" ), on_sort_by_name_activate, 0, 0 ), PTK_RADIO_MENU_ITEM( N_( "Sort by _Size" ), on_sort_by_size_activate, 0, 0 ), PTK_RADIO_MENU_ITEM( N_( "Sort by _Modification Time" ), on_sort_by_mtime_activate, 0, 0 ), PTK_RADIO_MENU_ITEM( N_( "Sort by _Type" ), on_sort_by_type_activate, 0, 0 ), PTK_RADIO_MENU_ITEM( N_( "Sort by _Permission" ), on_sort_by_perm_activate, 0, 0 ),
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -