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

📄 main-window.c

📁 台湾人开发的Linux下的文件管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
        PTK_RADIO_MENU_ITEM( N_( "Sort by _Owner" ), on_sort_by_owner_activate, 0, 0 ),        PTK_SEPARATOR_MENU_ITEM,        PTK_RADIO_MENU_ITEM( N_( "Ascending" ), on_sort_ascending_activate, 0, 0 ),        PTK_RADIO_MENU_ITEM( N_( "Descending" ), on_sort_descending_activate, 0, 0 ),        PTK_MENU_END    };static PtkMenuItemEntry fm_side_pane_menu[] =    {        PTK_CHECK_MENU_ITEM( N_( "_Open Side Pane" ), on_open_side_pane_activate, GDK_F9, 0 ),        PTK_SEPARATOR_MENU_ITEM,        PTK_RADIO_MENU_ITEM( N_( "Show _Location Pane" ), on_show_loation_pane, 0, 0 ),        PTK_RADIO_MENU_ITEM( N_( "Show _Directory Tree" ), on_show_dir_tree, 0, 0 ),        PTK_MENU_END    };static PtkMenuItemEntry fm_view_menu[] =    {        PTK_IMG_MENU_ITEM( N_( "_Refresh" ), "gtk-refresh", on_refresh_activate, GDK_F5, 0 ),        PTK_POPUP_MENU( N_( "Side _Pane" ), fm_side_pane_menu ),        /* PTK_CHECK_MENU_ITEM( N_( "_Full Screen" ), on_fullscreen_activate, GDK_F11, 0 ), */        PTK_SEPARATOR_MENU_ITEM,        PTK_CHECK_MENU_ITEM( N_( "Show _Hidden Files" ), on_show_hidden_activate, GDK_H, GDK_CONTROL_MASK ),        PTK_POPUP_MENU( N_( "_Sort..." ), fm_sort_menu ),        PTK_SEPARATOR_MENU_ITEM,        PTK_RADIO_MENU_ITEM( N_( "View as _Icons" ), on_view_as_icon_activate, 0, 0 ),        PTK_RADIO_MENU_ITEM( N_( "View as Detailed _List" ), on_view_as_list_activate, 0, 0 ),        PTK_MENU_END    };static PtkMenuItemEntry fm_tool_menu[] =    {        PTK_IMG_MENU_ITEM( N_( "Open _Terminal" ), GTK_STOCK_EXECUTE, on_open_terminal_activate, GDK_F4, 0 ),        PTK_IMG_MENU_ITEM( N_( "Open Current Folder as _Root" ),                           GTK_STOCK_DIALOG_AUTHENTICATION,                           on_open_current_folder_as_root, 0, 0 ),        PTK_MENU_END    };static PtkMenuItemEntry fm_menu_bar[] =    {        PTK_POPUP_MENU( N_( "_File" ), fm_file_menu ),        PTK_MENU_ITEM( N_( "_Edit" ), NULL, 0, 0 ),        /* PTK_POPUP_MENU( N_( "_Edit" ), fm_edit_menu ), */        PTK_POPUP_MENU( N_( "_Go" ), fm_go_menu ),        PTK_MENU_ITEM( N_( "_Bookmark" ), NULL, 0, 0 ),        PTK_POPUP_MENU( N_( "_View" ), fm_view_menu ),        PTK_POPUP_MENU( N_( "_Tool" ), fm_tool_menu ),        PTK_POPUP_MENU( N_( "_Help" ), fm_help_menu ),        PTK_MENU_END    };/* Toolbar items defiinition */static PtkToolItemEntry fm_toolbar_btns[] =    {        PTK_TOOL_ITEM( N_( "New Tab" ), "gtk-add", N_( "New Tab" ), on_new_tab_activate ),        PTK_TOOL_ITEM( N_( "Back" ), "gtk-go-back", N_( "Back" ), on_back_activate ),        PTK_TOOL_ITEM( N_( "Forward" ), "gtk-go-forward", N_( "Forward" ), on_forward_activate ),        PTK_TOOL_ITEM( N_( "Parent Folder" ), "gtk-go-up", N_( "Parent Folder" ), on_up_activate ),        PTK_TOOL_ITEM( N_( "Refresh" ), "gtk-refresh", N_( "Refresh" ), on_refresh_activate ),        PTK_TOOL_ITEM( N_( "Home Directory" ), "gtk-home", N_( "Home Directory" ), on_home_activate ),        PTK_CHECK_TOOL_ITEM( N_( "Open Side Pane" ), "gtk-open", N_( "Open Side Pane" ), on_side_pane_toggled ),        PTK_TOOL_END    };static PtkToolItemEntry fm_toolbar_jump_btn[] =    {        PTK_TOOL_ITEM( NULL, "gtk-jump-to", N_( "Go" ), on_go_btn_clicked ),        PTK_TOOL_END    };void fm_main_window_init( FMMainWindow* main_window ){    GtkWidget *bookmark_menu;    GtkWidget *view_menu_item;    GtkWidget *edit_menu_item, *edit_menu;    GtkToolItem *toolitem;    GtkWidget *hbox;    GtkLabel *label;    GtkAccelGroup *edit_accel_group;    /* Initialize parent class */    GTK_WINDOW( main_window ) ->type = GTK_WINDOW_TOPLEVEL;    /* Add to total window count */    ++n_windows;    all_windows = g_list_prepend( all_windows, main_window );    /* Set a monitor for changes of the bookmarks */    ptk_bookmarks_add_callback( ( GFunc ) on_bookmarks_change, main_window );    /* Start building GUI */    gtk_window_set_icon_name( GTK_WINDOW( main_window ),                              "gnome-fs-directory" );    main_window->main_vbox = gtk_vbox_new ( FALSE, 0 );    gtk_container_add ( GTK_CONTAINER ( main_window ), main_window->main_vbox );    main_window->splitter_pos = appSettings.splitterPos;    /* Create menu bar */    main_window->menu_bar = gtk_menu_bar_new ();    gtk_box_pack_start ( GTK_BOX ( main_window->main_vbox ),                         main_window->menu_bar, FALSE, FALSE, 0 );    main_window->accel_group = gtk_accel_group_new ();    fm_side_pane_menu[ 0 ].ret = ( GtkWidget** ) & main_window->open_side_pane_menu;    fm_side_pane_menu[ 2 ].ret = ( GtkWidget** ) & main_window->show_location_menu;    fm_side_pane_menu[ 3 ].ret = ( GtkWidget** ) & main_window->show_dir_tree_menu;    fm_view_menu[ 3 ].ret = ( GtkWidget** ) & main_window->show_hidden_files_menu;    fm_view_menu[ 6 ].ret = ( GtkWidget** ) & main_window->view_as_icon;    fm_view_menu[ 7 ].ret = ( GtkWidget** ) & main_window->view_as_list;    fm_sort_menu[ 0 ].ret = ( GtkWidget** ) & main_window->sort_by_name;    fm_sort_menu[ 1 ].ret = ( GtkWidget** ) & main_window->sort_by_size;    fm_sort_menu[ 2 ].ret = ( GtkWidget** ) & main_window->sort_by_mtime;    fm_sort_menu[ 3 ].ret = ( GtkWidget** ) & main_window->sort_by_type;    fm_sort_menu[ 4 ].ret = ( GtkWidget** ) & main_window->sort_by_perm;    fm_sort_menu[ 5 ].ret = ( GtkWidget** ) & main_window->sort_by_owner;    fm_sort_menu[ 7 ].ret = ( GtkWidget** ) & main_window->sort_ascending;    fm_sort_menu[ 8 ].ret = ( GtkWidget** ) & main_window->sort_descending;    fm_menu_bar[ 1 ].ret = &edit_menu_item;    fm_menu_bar[ 3 ].ret = &main_window->bookmarks;    fm_menu_bar[ 4 ].ret = &view_menu_item;    ptk_menu_add_items_from_data( main_window->menu_bar, fm_menu_bar,                                  main_window, main_window->accel_group );    /* This accel_group is useless and just used to show        shortcuts in edit menu. These shortcuts are        provided by PtkFileBrowser itself. */    edit_accel_group = gtk_accel_group_new();    edit_menu = ptk_menu_new_from_data( fm_edit_menu, main_window, edit_accel_group );    g_object_weak_ref( G_OBJECT(edit_menu), g_object_unref, edit_accel_group);    gtk_menu_item_set_submenu( GTK_MENU_ITEM( edit_menu_item ), edit_menu );    bookmark_menu = create_bookmarks_menu( main_window );    gtk_menu_item_set_submenu( GTK_MENU_ITEM( main_window->bookmarks ),                               bookmark_menu );    g_signal_connect( view_menu_item, "activate",                      G_CALLBACK( on_view_menu_popup ), main_window );    /* Create toolbar */    main_window->toolbar = gtk_toolbar_new ();    gtk_toolbar_set_style ( GTK_TOOLBAR ( main_window->toolbar ), GTK_TOOLBAR_ICONS );    gtk_box_pack_start ( GTK_BOX ( main_window->main_vbox ),                         main_window->toolbar, FALSE, FALSE, 0 );    main_window->tooltips = gtk_tooltips_new ();    fm_toolbar_btns[ 1 ].ret = &main_window->back_btn;    fm_toolbar_btns[ 2 ].ret = &main_window->forward_btn;    fm_toolbar_btns[ 6 ].ret = ( GtkWidget** ) & main_window->open_side_pane_btn;    ptk_toolbar_add_items_from_data( ( main_window->toolbar ),                                     fm_toolbar_btns,                                     main_window, main_window->tooltips );    toolitem = gtk_tool_item_new ();    gtk_tool_item_set_expand ( toolitem, TRUE );    gtk_toolbar_insert( GTK_TOOLBAR( main_window->toolbar ), toolitem, -1 );    hbox = gtk_hbox_new ( FALSE, 0 );    gtk_container_add ( GTK_CONTAINER ( toolitem ), hbox );    /* FIXME: Is this label required? What about the hotkey? */    label = ( GtkLabel* ) gtk_label_new_with_mnemonic ( _( "A_ddress:" ) );    gtk_box_pack_start ( GTK_BOX ( hbox ), ( GtkWidget* ) label, FALSE, FALSE, 0 );    gtk_label_set_justify ( label, GTK_JUSTIFY_FILL );    gtk_misc_set_padding ( GTK_MISC ( label ), 6, 0 );    /*    gtk_box_pack_start ( GTK_BOX ( hbox ), gtk_separator_tool_item_new(),                         FALSE, FALSE, 0 );    */    main_window->address_bar = ( GtkEntry* ) ptk_path_entry_new ();    g_signal_connect( main_window->address_bar, "activate",                      on_address_bar_activate, main_window );    gtk_box_pack_start ( GTK_BOX ( hbox ), GTK_WIDGET( main_window->address_bar ), TRUE, TRUE, 0 );    ptk_toolbar_add_items_from_data( ( main_window->toolbar ),                                     fm_toolbar_jump_btn,                                     main_window, main_window->tooltips );    gtk_label_set_mnemonic_widget ( GTK_LABEL ( label ), GTK_WIDGET( main_window->address_bar ) );    gtk_window_add_accel_group ( GTK_WINDOW ( main_window ), main_window->accel_group );    gtk_widget_grab_focus ( GTK_WIDGET( main_window->address_bar ) );    /* Create warning bar for super user */    if ( geteuid() == 0 )                 /* Run as super user! */    {        main_window->status_bar = gtk_event_box_new();        gtk_widget_modify_bg( main_window->status_bar, GTK_STATE_NORMAL,                              &main_window->status_bar->style->bg[ GTK_STATE_SELECTED ] );        label = GTK_LABEL( gtk_label_new ( _( "Warning: You are in super user mode" ) ) );        gtk_misc_set_padding( GTK_MISC( label ), 0, 2 );        gtk_widget_modify_fg( GTK_WIDGET( label ), GTK_STATE_NORMAL,                              &GTK_WIDGET( label ) ->style->fg[ GTK_STATE_SELECTED ] );        gtk_container_add( GTK_CONTAINER( main_window->status_bar ), GTK_WIDGET( label ) );        gtk_box_pack_start ( GTK_BOX ( main_window->main_vbox ),                             main_window->status_bar, FALSE, FALSE, 2 );    }    /* Create client area */    main_window->notebook = GTK_NOTEBOOK( gtk_notebook_new () );    gtk_notebook_set_scrollable ( GTK_NOTEBOOK( main_window->notebook ), TRUE );    gtk_box_pack_start ( GTK_BOX ( main_window->main_vbox ), GTK_WIDGET( main_window->notebook ), TRUE, TRUE, 0 );    g_signal_connect ( main_window->notebook, "switch_page",                       G_CALLBACK ( on_folder_notebook_switch_pape ), main_window );    /* Create Status bar */    main_window->status_bar = gtk_statusbar_new ();    gtk_box_pack_start ( GTK_BOX ( main_window->main_vbox ),                         main_window->status_bar, FALSE, FALSE, 0 );    gtk_widget_show_all( main_window->main_vbox );    g_signal_connect ( main_window, "focus-in-event",                       G_CALLBACK ( on_main_window_focus ), NULL );}void fm_main_window_finalize( GObject *obj ){    all_windows = g_list_remove( all_windows, obj );    --n_windows;    /* Remove the monitor for changes of the bookmarks */    ptk_bookmarks_remove_callback( ( GFunc ) on_bookmarks_change, obj );    if ( 0 == n_windows && !appSettings.showDesktop )        gtk_main_quit();    G_OBJECT_CLASS( parent_class ) ->finalize( obj );}void fm_main_window_get_property ( GObject *obj,                                   guint prop_id,                                   GValue *value,                                   GParamSpec *pspec ){}void fm_main_window_set_property ( GObject *obj,                                   guint prop_id,                                   const GValue *value,                                   GParamSpec *pspec ){}static void fm_main_window_close( GtkWidget* main_window ){    appSettings.width = GTK_WIDGET( main_window ) ->allocation.width;    appSettings.height = GTK_WIDGET( main_window ) ->allocation.height;    appSettings.splitterPos = FM_MAIN_WINDOW( main_window ) ->splitter_pos;    gtk_widget_destroy( main_window );}gbooleanfm_main_window_delete_event ( GtkWidget *widget,                              GdkEvent *event ){    fm_main_window_close( widget );    return TRUE;}static voidon_close_notebook_page( GtkButton* btn, PtkFileBrowser* file_browser ){    GtkNotebook * notebook = GTK_NOTEBOOK(                                 gtk_widget_get_ancestor( GTK_WIDGET( file_browser ),                                                          GTK_TYPE_NOTEBOOK ) );    gtk_widget_destroy( GTK_WIDGET( file_browser ) );    if ( gtk_notebook_get_n_pages ( notebook ) == 1 )        gtk_notebook_set_show_tabs( notebook, FALSE );}static GtkWidget* fm_main_window_create_tab_label( FMMainWindow* main_window,                                                   PtkFileBrowser* file_browser ){    GtkEventBox * evt_box;    GtkWidget* tab_label;    GtkWidget* tab_text;    GtkWidget* tab_icon;    GtkWidget* close_btn;    /* Create tab label */    evt_box = GTK_EVENT_BOX( gtk_event_box_new () );    gtk_event_box_set_visible_window ( GTK_EVENT_BOX( evt_box ), FALSE );    tab_label = gtk_hbox_new( FALSE, 0 );    tab_icon = gtk_image_new_from_icon_name ( "gnome-fs-directory",                                              GTK_ICON_SIZE_MENU );    gtk_box_pack_start( GTK_BOX( tab_label ),                        tab_icon, FALSE, FALSE, 4 );    tab_text = gtk_label_new( "" );    gtk_box_pack_start( GTK_BOX( tab_label ),                        tab_text, FALSE, FALSE, 4 );    close_btn = gtk_button_new ();    gtk_button_set_focus_on_click ( GTK_BUTTON ( close_btn ), FALSE );    gtk_button_set_relief( GTK_BUTTON ( close_btn ), GTK_RELIEF_NONE );    gtk_container_add ( GTK_CONTAINER ( close_btn ),                        gtk_image_new_from_icon_name( "gtk-close", GTK_ICON_SIZE_MENU ) );    gtk_widget_set_size_request ( close_btn, 20, 20 );    gtk_box_pack_start ( GTK_BOX( tab_label ),                         close_btn, FALSE, FALSE, 0 );    g_signal_connect( G_OBJECT( close_btn ), "clicked",                      G_CALLBACK( on_close_notebook_page ), file_browser );    gtk_container_add ( GTK_CONTAINER ( evt_box ), tab_label );    gtk_widget_set_events ( GTK_WIDGET( evt_box ), GDK_ALL_EVENTS_MASK );    gtk_drag_dest_set ( GTK_WIDGET( evt_box ), GTK_DEST_DEFAULT_ALL,                        drag_targets,                        sizeof( drag_targets ) / sizeof( GtkTargetEntry ),                        GDK_ACTION_DEFAULT | GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_LINK );    g_signal_connect ( ( gpointer ) evt_box, "drag-motion",                       G_CALLBACK ( on_tab_drag_motion ),                       file_browser );    gtk_widget_show_all( GTK_WIDGET( evt_box ) );    return GTK_WIDGET( evt_box );}void fm_main_window_add_new_tab( FMMainWindow* main_window,                                 const char* folder_path,

⌨️ 快捷键说明

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