📄 interface.c
字号:
GTK_SIGNAL_FUNC(a_Commands_navpress_callback), bw); /* home button */ bw->home_button = gtk_toolbar_append_item( GTK_TOOLBAR(toolbar), label ? "Home" : NULL, "Go to the Home page", "Toolbar/Home", Interface_pixmap_new(bw->main_window, s ? s_home_xpm : home_xpm), (GtkSignalFunc) a_Commands_home_callback, bw); gtk_signal_connect(GTK_OBJECT(bw->home_button), "button-press-event", GTK_SIGNAL_FUNC(a_Commands_navpress_callback), bw); /* reload button */ bw->reload_button = gtk_toolbar_append_item( GTK_TOOLBAR(toolbar), label ? "Reload" : NULL, "Reload this page", "Toolbar/Reload", Interface_pixmap_new(bw->main_window, s ? s_reload_xpm : reload_xpm), (GtkSignalFunc) a_Commands_reload_callback, bw); /* save button */ bw->save_button = gtk_toolbar_append_item( GTK_TOOLBAR(toolbar), label ? "Save" : NULL, "Save this page", "Toolbar/Save", Interface_pixmap_new(bw->main_window, s ? s_save_xpm : save_xpm), (GtkSignalFunc) a_Commands_save_callback, bw); /* stop button */ bw->stop_button = gtk_toolbar_append_item( GTK_TOOLBAR(toolbar), label ? "Stop" : NULL, "Stop the current transfer", "Toolbar/Stop", Interface_pixmap_new(bw->main_window, s ? s_stop_xpm : stop_xpm), (GtkSignalFunc) a_Commands_stop_callback, bw); gtk_widget_set_sensitive(bw->stop_button, FALSE); gtk_widget_show(toolbar); return toolbar;}/* * Create the progressbar's box */static GtkWidget *Interface_progressbox_new(BrowserWindow *bw, gint vertical){ GtkWidget *progbox; progbox = vertical ? gtk_vbox_new(FALSE, 0) : gtk_hbox_new(FALSE, 0); bw->progress_box = progbox; bw->imgprogress = a_Progressbar_new(); bw->progress = a_Progressbar_new(); gtk_box_pack_start(GTK_BOX(progbox), bw->imgprogress, TRUE, TRUE, 0); gtk_widget_show(bw->imgprogress); gtk_box_pack_start(GTK_BOX(progbox), bw->progress, TRUE, TRUE, 0); gtk_widget_show(bw->progress); return (progbox);}/* * Hide/Unhide this bw's control panels. */void a_Interface_toggle_panel(BrowserWindow *bw){ static gint hide = 1; if (hide) { g_slist_foreach(bw->PanelHandles, (GFunc)gtk_widget_hide, NULL); gtk_widget_hide(bw->status); } else { g_slist_foreach(bw->PanelHandles, (GFunc)gtk_widget_show, NULL); gtk_widget_show(bw->status); } hide = !(hide);}/* * Customize the appearance of the bw. */static void Interface_browser_window_customize(BrowserWindow *bw){ if ( !prefs.show_back ) gtk_widget_hide(bw->back_button); if ( !prefs.show_forw ) gtk_widget_hide(bw->forw_button); if ( !prefs.show_home ) gtk_widget_hide(bw->home_button); if ( !prefs.show_reload ) gtk_widget_hide(bw->reload_button); if ( !prefs.show_save ) gtk_widget_hide(bw->save_button); if ( !prefs.show_stop ) gtk_widget_hide(bw->stop_button); if ( !prefs.show_menubar ) gtk_widget_hide(bw->menubar); if ( !prefs.show_clear_url) gtk_widget_hide(bw->clear_url_button); if ( !prefs.show_url ) gtk_widget_hide(bw->location); if ( !prefs.show_progress_box ) gtk_widget_hide(bw->progress_box);}/* * Handler for mouse-clicks that don't belong to the viewport. */static int Interface_click_callback(BrowserWindow *bw, GdkEventButton *event){ if (event->type == GDK_2BUTTON_PRESS && event->button == 1) a_Interface_toggle_panel(bw);// else g_print("Click!\n"); return FALSE;}/* * Create a new browser window and return it. * (the new window is stored in browser_window[]) */BrowserWindow *a_Interface_browser_window_new(gint width, gint height){ GtkWidget *box1, *box2, *hbox, *progbox, *toolbar, *handlebox, *menubar, *locbox; BrowserWindow *bw; char buf[64]; /* We use g_new0() to zero the memory */ bw = g_new0(BrowserWindow, 1); a_List_add(browser_window, num_bw, num_bw_max); browser_window[num_bw++] = bw; /* initialize nav_stack struct in browser_window struct */ a_Nav_init(bw); bw->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_policy(GTK_WINDOW(bw->main_window), TRUE, TRUE, FALSE); gtk_signal_connect(GTK_OBJECT(bw->main_window), "delete_event", GTK_SIGNAL_FUNC(gtk_object_destroy), bw); gtk_signal_connect(GTK_OBJECT(bw->main_window), "destroy", GTK_SIGNAL_FUNC(Interface_quit), bw); gtk_container_border_width(GTK_CONTAINER(bw->main_window), 0); gtk_window_set_wmclass(GTK_WINDOW(bw->main_window), "dillo", "Dillo"); /* -RL :: I must realize the window to see it correctly */ gtk_widget_realize(bw->main_window); /* Create and attach an accel group to the main window */ bw->accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(bw->main_window), bw->accel_group); /* set window title */ g_snprintf(buf, 64, "Version %s", VERSION); a_Interface_set_page_title(bw, buf); box1 = gtk_vbox_new(FALSE, 0); /* setup the control panel */ if (prefs.panel_size == 1) { handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); hbox = gtk_hbox_new(FALSE, 0); /* Control Buttons */ toolbar = Interface_toolbar_new(bw, 0); /* Menus */ menubar = a_Menu_mainbar_new(bw, 1); /* Location entry */ locbox = Interface_locbar_new(bw); /* progress bars */ progbox = Interface_progressbox_new(bw, 0); gtk_box_pack_start(GTK_BOX(hbox), toolbar, FALSE, FALSE, 0); gtk_widget_show(toolbar); gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0); gtk_widget_show(menubar); gtk_box_pack_start(GTK_BOX(hbox), locbox, TRUE, TRUE, 0); gtk_widget_show(locbox); gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0); gtk_widget_show(progbox); gtk_container_add(GTK_CONTAINER(handlebox), hbox); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); } else if (prefs.panel_size == 2) { handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); hbox = gtk_hbox_new(FALSE, 0); menubar = a_Menu_mainbar_new(bw, 0); locbox = Interface_locbar_new(bw); gtk_box_pack_start(GTK_BOX(hbox), menubar, FALSE, FALSE, 0); gtk_widget_show(menubar); gtk_box_pack_start(GTK_BOX(hbox), locbox, TRUE, TRUE, 0); gtk_widget_show(locbox); gtk_container_add(GTK_CONTAINER(handlebox), hbox); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); gtk_container_border_width(GTK_CONTAINER(handlebox), 4); hbox = gtk_hbox_new(FALSE, 0); toolbar = Interface_toolbar_new(bw, 1); progbox = Interface_progressbox_new(bw, 1); gtk_box_pack_start(GTK_BOX(hbox), toolbar, TRUE, TRUE, 0); gtk_widget_show(toolbar); gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0); gtk_widget_show(progbox); gtk_container_add(GTK_CONTAINER(handlebox), hbox); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); } else { handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); menubar = a_Menu_mainbar_new(bw, 0); gtk_container_add(GTK_CONTAINER(handlebox), menubar); gtk_widget_show(menubar); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); gtk_container_border_width(GTK_CONTAINER(handlebox), 4); hbox = gtk_hbox_new(FALSE, 0); toolbar = Interface_toolbar_new(bw, 1); progbox = Interface_progressbox_new(bw, 1); gtk_box_pack_start(GTK_BOX(hbox), toolbar, TRUE, TRUE, 0); gtk_widget_show(toolbar); gtk_box_pack_start(GTK_BOX(hbox), progbox, FALSE, FALSE, 0); gtk_widget_show(progbox); gtk_container_add(GTK_CONTAINER(handlebox), hbox); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); handlebox = gtk_handle_box_new(); bw->PanelHandles = g_slist_append(bw->PanelHandles, handlebox); locbox = Interface_locbar_new(bw); gtk_container_add(GTK_CONTAINER(handlebox), locbox); gtk_widget_show(locbox); gtk_box_pack_start(GTK_BOX(box1), handlebox, FALSE, FALSE, 0); gtk_widget_show(handlebox); } /* Add box1 */ gtk_container_add(GTK_CONTAINER(bw->main_window), box1); /* Now the main document window */ bw->docwin = a_Dw_gtk_scrolled_window_new(); gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(bw->docwin), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); gtk_box_pack_start(GTK_BOX(box1), bw->docwin, TRUE, TRUE, 0); gtk_widget_show(bw->docwin); gtk_signal_connect_object_after(GTK_OBJECT(GTK_BIN(bw->docwin)->child), "button_press_event", GTK_SIGNAL_FUNC(Interface_click_callback), (gpointer)bw); gtk_widget_set_usize(bw->main_window, width, height); /* status widget */ bw->status = a_Dw_gtk_statuslabel_new(""); gtk_misc_set_alignment(GTK_MISC(bw->status), 0.0, 0.5); box2 = gtk_hbox_new(FALSE, 0); gtk_box_pack_start(GTK_BOX(box2), bw->status, TRUE, TRUE, 2); gtk_widget_show(bw->status); gtk_box_pack_start(GTK_BOX(box1), box2, FALSE, FALSE, 2); gtk_widget_show(box2); gtk_widget_show(bw->main_window); gtk_widget_show(box1); /* initialize the rest of the bw's data. */ bw->pagemarks_menuitem = NULL; bw->pagemarks_menu = NULL; bw->pagemarks_last = NULL; bw->menu_popup.over_page = a_Menu_popup_op_new(bw); bw->menu_popup.over_link = a_Menu_popup_ol_new(bw); bw->menu_popup.over_back = NULL; bw->menu_popup.over_forw = NULL; bw->menu_popup.url = NULL; bw->sens_idle_tag = 0; bw->CursorType = -1; bw->RootClients = NULL; bw->NumRootClients = 0; bw->MaxRootClients = 8; bw->ImageClients = NULL; bw->NumImageClients = 0; bw->MaxImageClients = 8; bw->NumImages = 0; bw->NumImagesGot = 0; bw->PageUrls = NULL; bw->NumPageUrls = 0; bw->MaxPageUrls = 8; bw->open_dialog_window = NULL; bw->open_dialog_entry = NULL; bw->openfile_dialog_window = NULL; bw->quit_dialog_window = NULL; bw->save_dialog_window = NULL; bw->save_link_dialog_window = NULL; bw->findtext_dialog_window = NULL; bw->findtext_dialog_entry = NULL; bw->findtext_data = NULL; bw->question_dialog_window = NULL; bw->question_dialog_data = NULL; bw->viewsource_window = NULL; /* now that the bw is made, let's customize it.. */ Interface_browser_window_customize(bw); return bw;}/* * Set the title of the browser window to start with "Dillo: " * prepended to it. */void a_Interface_set_page_title(BrowserWindow *bw, char *title){ GString *buf; g_return_if_fail (bw != NULL && title != NULL); buf = g_string_new(""); g_string_sprintfa(buf, "Dillo: %s", title); gtk_window_set_title(GTK_WINDOW(bw->main_window), buf->str); g_string_free(buf, TRUE);}/* * Set location entry's text */void a_Interface_set_location_text(BrowserWindow *bw, char *text){ gtk_entry_set_text(GTK_ENTRY(bw->location), text);}/* * Get location entry's text */gchar *a_Interface_get_location_text(BrowserWindow *bw){ return gtk_entry_get_text(GTK_ENTRY(bw->location));}/* * Reset images and text progress bars */void a_Interface_reset_progress_bars(BrowserWindow *bw){ a_Progressbar_update(bw->progress, "", 0); a_Progressbar_update(bw->imgprogress, "", 0);}/* * Set the status string on the bottom of the dillo window. */void a_Interface_msg(BrowserWindow *bw, const char *format, ... ){static char msg[1024];va_list argp; if ( bw ) { va_start(argp, format); vsnprintf(msg, 1024, format, argp); va_end(argp); gtk_label_set(GTK_LABEL(bw->status), msg); bw->status_is_link = 0; }}/* * Called from `destroy' callback in Interface_make_*_dialog */static void Interface_destroy_window(GtkWidget *widget, GtkWidget **window){ gtk_widget_destroy(*window); *window = NULL;}/* * Close and free every single browser_window (called at exit time) */void a_Interface_quit_all(void){ BrowserWindow **bws; gint i, n_bw; n_bw = num_bw; bws = g_malloc(sizeof(BrowserWindow *) * n_bw); /* we copy into a new list because destroying the main window can * modify the browser_window array. */ for (i = 0; i < n_bw; i++) bws[i] = browser_window[i]; for (i = 0; i < n_bw; i++) gtk_widget_destroy(bws[i]->main_window); g_free(bws);}/* * Make a dialog for choosing files (by calling * gtk_file_selection_*() calls) * This can be used for saving, opening, or whatever, * just set the correct callbacks */static void Interface_make_choose_file_dialog(GtkWidget **DialogWindow, char *WmName, char *WmClass, char *WTitle, GtkSignalFunc B1CallBack, void *B1CbData){ *DialogWindow = gtk_file_selection_new(WTitle); gtk_window_set_modal(GTK_WINDOW(*DialogWindow), FALSE); gtk_window_set_wmclass(GTK_WINDOW(*DialogWindow), WmName, WmClass); gtk_file_selection_hide_fileop_buttons(GTK_FILE_SELECTION(*DialogWindow)); gtk_signal_connect( GTK_OBJECT(*DialogWindow), "destroy", (GtkSignalFunc) Interface_destroy_window, DialogWindow); gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION(*DialogWindow)->ok_button), "clicked", (GtkSignalFunc) B1CallBack, B1CbData); gtk_signal_connect( GTK_OBJECT(GTK_FILE_SELECTION (*DialogWindow)->cancel_button), "clicked", (GtkSignalFunc) Interface_destroy_window, DialogWindow);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -