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

📄 interface.c

📁 嵌入式浏览器Dillo源码
💻 C
📖 第 1 页 / 共 3 页
字号:
                      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 + -