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

📄 interface.c

📁 著名的手机浏览器开源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
 * Handler for key presses that don't belong to the viewport. * (Used to customize the interface a bit) */static void Interface_key_press_handler(GtkWidget *widget,                                        GdkEventKey *event,                                        gpointer client_data){   BrowserWindow *bw = client_data;   switch (event->keyval) {   case GDK_BackSpace:      /* This key is handled here because GTK accel group ignores it */      if (event->state & GDK_SHIFT_MASK)         a_Commands_forw_callback(NULL, bw);      else         a_Commands_back_callback(NULL, bw);      break;   case GDK_slash:      /* This key is handled here because GTK accel group ignores it */      a_Commands_findtext_callback(NULL, bw);      break;   default:      _MSG(">> Key pressed!\n");      break;   }}/* * Add the button for switching into fullscreen mode */static void Interface_add_full_screen_button (BrowserWindow *bw, GtkBox *box){   /* The button is put into a vbox, so that it is not enlarged vertically. */   GtkWidget *vbox, *dummy, *button, *pixmap;   vbox = gtk_vbox_new (FALSE, 0);   gtk_box_pack_start (GTK_BOX (box), vbox, FALSE, FALSE, 0);   gtk_widget_show (vbox);   /* The dummy will make the button align at the bottom.    * (Important only when using large text fonts.) */   dummy = gtk_vbox_new (FALSE, 0);   gtk_box_pack_start (GTK_BOX (vbox), dummy, TRUE, TRUE, 0);   gtk_widget_show (dummy);   button = gtk_button_new ();   gtk_tooltips_set_tip (tooltips, button, "Hide Controls", "Show Controls");   GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);   gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0);   gtk_widget_show (button);   pixmap = Interface_pixmap_new(bw->main_window, full_screen_on_xpm);   gtk_container_add (GTK_CONTAINER (button), pixmap);   gtk_widget_show (pixmap);   gtk_signal_connect_object      (GTK_OBJECT (button), "clicked",       GTK_SIGNAL_FUNC (Interface_full_screen_callback), (gpointer)bw);}/* * 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, guint32 xid){   GtkWidget *box1, *hbox, *button, *label,             *progbox, *toolbar, *handlebox, *menubar, *locbox, *pixmap;   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);   if (!xid)       bw->main_window = gtk_window_new(GTK_WINDOW_TOPLEVEL);   else       bw->main_window = gtk_plug_new(xid);   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);   /* todo (GTK2): this call is a bit of a workaround to missing focus    * between the location box and the docwin. It's fixed in GTK2:    * http://mail.gnome.org/archives/gtk-list/2003-June/msg00307.html  */   gtk_widget_grab_focus(GTK_BIN(bw->docwin)->child);   /* Full screen mode via double click is done in two ways: First,    * a feature of the selection is used, since in complex pages,    * getting events back to the viewport is quite difficult. Second,    * a simple callback, called e.g. when viewing image resources. */   a_Selection_set_dclick_callback(      GTK_DW_VIEWPORT(GTK_BIN(GTK_BIN(bw->docwin)->child)->child)->selection,      (void(*)(gpointer))Interface_full_screen_callback, bw);   /* Selection requires an owner widget */   a_Selection_set_owner(      GTK_DW_VIEWPORT(GTK_BIN(GTK_BIN(bw->docwin)->child)->child)->selection,      GTK_BIN(bw->docwin)->child);   gtk_signal_connect_object_after(GTK_OBJECT(GTK_BIN(bw->docwin)->child),                                   "button_press_event",                                   GTK_SIGNAL_FUNC(Interface_click_callback),                                   (gpointer)bw);   /* full screen button: actually there're two buttons, one in the scrolled    * window (fs off) and one in the status bar (fs on). They look as one. */   bw->full_screen_off_button = gtk_button_new ();   gtk_tooltips_set_tip (tooltips, bw->full_screen_off_button,                         "Show Controls", "Hide Controls");   GTK_WIDGET_UNSET_FLAGS (bw->full_screen_off_button, GTK_CAN_FOCUS);   a_Dw_gtk_scrolled_window_add_gadget (GTK_DW_SCROLLED_WINDOW (bw->docwin),                                        bw->full_screen_off_button);   pixmap = Interface_pixmap_new(bw->main_window, full_screen_off_xpm);   gtk_container_add (GTK_CONTAINER (bw->full_screen_off_button), pixmap);   gtk_widget_show (pixmap);   gtk_signal_connect_object      (GTK_OBJECT (bw->full_screen_off_button), "clicked",       GTK_SIGNAL_FUNC (Interface_full_screen_callback), (gpointer)bw);   Interface_set_button_accel(GTK_BUTTON(bw->full_screen_off_button), GDK_h,                              GDK_CONTROL_MASK, bw->accel_group);   /* Catch key_press event */   gtk_signal_connect(GTK_OBJECT(GTK_BIN(bw->docwin)->child),                      "key_press_event",                      GTK_SIGNAL_FUNC(Interface_key_press_handler), bw);   gtk_widget_set_usize(bw->main_window, width, height);   /* status widget */   /* create the over-bug-meter menu */   bw->menu_popup.over_bug = a_Menu_popup_ob_new(bw);   bw->status = a_Dw_gtk_statuslabel_new("");   gtk_misc_set_alignment(GTK_MISC(bw->status), 0.0, 0.5);   /*  status widget for HTML errors.    *  Note: the "clicked" signal is hooked with the linkblock later */   button = bw->status_bug_meter = a_Gtk_ext_button_new();   GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);   a_Gtk_ext_button_set_command (GTK_EXT_BUTTON (button), 1);   a_Gtk_ext_button_attach_menu (GTK_EXT_BUTTON (button), 3,                                 GTK_MENU(bw->menu_popup.over_bug));   hbox = gtk_hbox_new(FALSE, 0);   pixmap = Interface_pixmap_new(bw->main_window, mini_bug_xpm);   gtk_object_set_data(GTK_OBJECT (button), "bug", pixmap);   gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 0);   pixmap = Interface_pixmap_new(bw->main_window, mini_ok_xpm);   gtk_object_set_data(GTK_OBJECT (button), "ok", pixmap);   gtk_box_pack_start(GTK_BOX(hbox), pixmap, FALSE, FALSE, 0);   gtk_widget_show (pixmap);   label = gtk_label_new("");   gtk_object_set_data(GTK_OBJECT (button), "label", label);   gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0);   gtk_container_add (GTK_CONTAINER (button), hbox);   gtk_widget_show(hbox);   gtk_tooltips_set_tip (tooltips, button,                         "Show HTML bugs (right-click for menu).", "");   bw->status_box = gtk_hbox_new(FALSE, 0);   gtk_box_pack_start(GTK_BOX(bw->status_box), bw->status, TRUE, TRUE, 2);   gtk_widget_show(bw->status);   gtk_box_pack_start(GTK_BOX(bw->status_box), button, FALSE, FALSE, 0);   gtk_widget_show(button);   Interface_add_full_screen_button (bw, GTK_BOX (bw->status_box));   gtk_box_pack_start(GTK_BOX(box1), bw->status_box, FALSE, FALSE, 0);   gtk_widget_show(bw->status_box);   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->viewbugs_menuitem = NULL;   /* the image menu is created first because it is used by the link menu */   bw->menu_popup.over_image = a_Menu_popup_oi_new(bw);   bw->menu_popup.over_link = a_Menu_popup_ol_new(bw);   bw->menu_popup.over_page = a_Menu_popup_op_new(bw);   bw->menu_popup.over_back = NULL;   bw->menu_popup.over_forw = NULL;   bw->menu_popup.url = NULL;   bw->menu_popup.url2 = NULL;   bw->sens_idle_id = 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_check = NULL;   bw->findtext_dialog_entry = NULL;   bw->search_dialog_window = NULL;   bw->search_dialog_entry = NULL;   bw->proxy_passwd_dialog_window = NULL;   bw->proxy_passwd_dialog_entry = NULL;   bw->question_dialog_window = NULL;   bw->question_dialog_data = NULL;   bw->viewsource_window = NULL;   bw->pagebugs_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){

⌨️ 快捷键说明

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