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

📄 interface.c

📁 著名的手机浏览器开源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
   return;}/* * Create a pixmap and return it. */static GtkWidget *Interface_pixmap_new(GtkWidget *parent, gchar **data){   GtkWidget *pixmapwid;   GdkPixmap *pixmap;   GdkBitmap *mask;   GtkStyle *style;   style = gtk_widget_get_style(parent);   pixmap = gdk_pixmap_create_from_xpm_d(parent->window, &mask,                                         &style->bg[GTK_STATE_NORMAL], data);   pixmapwid = gtk_pixmap_new(pixmap, mask);   return (pixmapwid);}/* * Create an extended button for the toolbar. "label_text" may be NULL. * "icon_ret" and "label_ret " may be used to return the child widgets, but * may also be 0. */static GtkWidget *Interface_toolbox_ext_button_new(GtkWidget *parent,                                                   gchar *label_text,                                                   gchar **image_data,                                                   GtkWidget **icon_ret,                                                   GtkWidget **label_ret){   GtkWidget *button, *pixmap, *vbox, *label;   button = a_Gtk_ext_button_new ();   GTK_WIDGET_UNSET_FLAGS (button, GTK_CAN_FOCUS);   gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);   pixmap = Interface_pixmap_new (parent, image_data);   if (label_text) {      vbox = gtk_vbox_new(FALSE, 0);      gtk_container_add(GTK_CONTAINER (button), vbox);      gtk_box_pack_start(GTK_BOX(vbox), pixmap, FALSE, FALSE, 0);      label = gtk_label_new(label_text);      gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);   } else {      gtk_container_add(GTK_CONTAINER (button), pixmap);      label = NULL;   }   gtk_widget_show_all (button);   if (icon_ret)      *icon_ret = pixmap;   if (label_ret)      *label_ret = label;   return button;}/* * Set the bw's cursor type */void a_Interface_set_cursor(BrowserWindow *bw, GdkCursorType CursorType){   GdkCursor *cursor;   if ( bw->CursorType != CursorType ) {      cursor = gdk_cursor_new(CursorType);      gdk_window_set_cursor(bw->docwin->window, cursor);      gdk_cursor_destroy(cursor);      bw->CursorType = CursorType;   }}/* * Connect button's "clicked" event with (key, key_mod) pair. */static void Interface_set_button_accel(GtkButton *button,                                       gint key,                                       gint key_mod,                                       GtkAccelGroup *accel_group){   gtk_widget_add_accelerator(GTK_WIDGET(button), "clicked", accel_group,                              key, key_mod, GTK_ACCEL_LOCKED);}/* * Create the "NEW" button, its location-entry and the search button. */static GtkWidget *Interface_locbar_new(BrowserWindow *bw){   GtkWidget *hbox, *toolbar_l, *toolbar_r;   hbox = gtk_hbox_new(FALSE, 0);   /* location entry */   bw->location = gtk_entry_new();   gtk_signal_connect(GTK_OBJECT(bw->location), "activate",                      (GtkSignalFunc) a_Interface_entry_open_url, bw);   gtk_widget_add_accelerator(GTK_WIDGET(bw->location), "grab_focus",                              bw->accel_group, GDK_u,                              GDK_CONTROL_MASK, GTK_ACCEL_LOCKED);   /* left toolbar (Clear url) */   toolbar_l = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);   gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar_l), GTK_RELIEF_NONE);   GTK_WIDGET_UNSET_FLAGS (toolbar_l, GTK_CAN_FOCUS);   bw->clear_url_button =      Interface_toolbox_ext_button_new(bw->main_window, NULL, s_new_xpm,                                       NULL, NULL);   a_Gtk_ext_button_set_command(GTK_EXT_BUTTON(bw->clear_url_button), 1);   a_Gtk_ext_button_set_command(GTK_EXT_BUTTON(bw->clear_url_button), 2);   gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar_l), bw->clear_url_button,                             "Clear the URL box (middle-click to paste an "                             "URL).", "Toolbar/Clear");   gtk_signal_connect_object(GTK_OBJECT(bw->clear_url_button), "clicked",                             GTK_SIGNAL_FUNC (Interface_entry_clear),                             GTK_OBJECT(bw->location));   gtk_signal_connect_object(GTK_OBJECT(bw->clear_url_button), "clicked1",                             GTK_SIGNAL_FUNC (Interface_entry_clear),                             GTK_OBJECT(bw->location));   gtk_signal_connect(GTK_OBJECT(bw->clear_url_button), "clicked2",                      GTK_SIGNAL_FUNC (Interface_cub_get_selection),                      NULL);   gtk_signal_connect(GTK_OBJECT(bw->clear_url_button), "selection_received",                      GTK_SIGNAL_FUNC (Interface_cub_selection_received),                      bw);   /* right toolbar (Search) */   toolbar_r = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);   gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar_r), GTK_RELIEF_NONE);   GTK_WIDGET_UNSET_FLAGS (toolbar_r, GTK_CAN_FOCUS);   bw->search_button = gtk_toolbar_append_item(                          GTK_TOOLBAR(toolbar_r),                          NULL, "Search the Web", "Toolbar/New",                          Interface_pixmap_new(bw->main_window, search_xpm),                          GTK_SIGNAL_FUNC(a_Interface_search_dialog),                          bw);   gtk_widget_add_accelerator(GTK_WIDGET(bw->search_button), "clicked",                              bw->accel_group, GDK_s,                              GDK_CONTROL_MASK, GTK_ACCEL_LOCKED);   gtk_box_pack_start(GTK_BOX(hbox), toolbar_l, FALSE, FALSE, 0);   gtk_widget_show(toolbar_l);   gtk_box_pack_start(GTK_BOX(hbox), bw->location, TRUE, TRUE, 0);   gtk_widget_show(bw->location);   gtk_box_pack_start(GTK_BOX(hbox), toolbar_r, FALSE, FALSE, 0);   gtk_widget_show(toolbar_r);   gtk_widget_show(hbox);   return (hbox);}/* * Create a new toolbar (Back, Forward, Home, Reload, Save and Stop buttons) */static GtkWidget *Interface_toolbar_new(BrowserWindow *bw, gint label){   GtkWidget *toolbar, *label_widget, *icon_widget;   GtkToolbarChild *toolbar_child;   gboolean s = prefs.small_icons;   toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH);   gtk_toolbar_set_button_relief(GTK_TOOLBAR(toolbar), GTK_RELIEF_NONE);   /* back button */   bw->back_button =      Interface_toolbox_ext_button_new(bw->main_window, label ? "Back" : NULL,                                       s ? s_left_xpm : left_xpm,                                       &label_widget, &icon_widget);   gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), bw->back_button,                             "Go to previous page (right-click for menu).",                             "Toolbar/Back");   gtk_widget_set_sensitive(bw->back_button, FALSE);   Interface_set_button_accel(GTK_BUTTON(bw->back_button), GDK_comma,                              0, bw->accel_group);   a_Gtk_ext_button_set_command(GTK_EXT_BUTTON(bw->back_button), 1);   a_Gtk_ext_button_attach_menu_creator(      GTK_EXT_BUTTON(bw->back_button), 3,      a_Commands_back_button_menu_creator_callback, (gpointer)bw);   gtk_signal_connect(GTK_OBJECT(bw->back_button), "clicked",                      GTK_SIGNAL_FUNC(a_Commands_back_callback), (gpointer)bw);   gtk_signal_connect(GTK_OBJECT(bw->back_button), "clicked1",                      GTK_SIGNAL_FUNC(a_Commands_back_callback), (gpointer)bw);   /*    * HACK: We have added GtkExtButton's as widgets    * (gtk_toolbar_append_widget), but they should behave like buttons etc.    * (gtk_toolbar_append_item), especially, they should have the same size.    * So we change some parts of the internal representation.    */   toolbar_child = ((GtkToolbarChild*)GTK_TOOLBAR(toolbar)->children->data);   toolbar_child->type = GTK_TOOLBAR_CHILD_BUTTON;   toolbar_child->widget = bw->back_button;   toolbar_child->icon = icon_widget;   toolbar_child->label = label_widget;   /* forward button */   bw->forw_button =      Interface_toolbox_ext_button_new(bw->main_window,                                       label ? "Forward" : NULL,                                       s ? s_right_xpm : right_xpm,                                       &label_widget, &icon_widget);   gtk_toolbar_append_widget(GTK_TOOLBAR(toolbar), bw->forw_button,                             "Go to next page (right-click for menu).",                             "Toolbar/Forward");   gtk_widget_set_sensitive(bw->forw_button, FALSE);   Interface_set_button_accel(GTK_BUTTON(bw->forw_button), GDK_period,                              0, bw->accel_group);   a_Gtk_ext_button_set_command(GTK_EXT_BUTTON(bw->forw_button), 1);   a_Gtk_ext_button_attach_menu_creator(      GTK_EXT_BUTTON(bw->forw_button), 3,      a_Commands_forw_button_menu_creator_callback, (gpointer)bw);   gtk_signal_connect(GTK_OBJECT(bw->forw_button), "clicked",                      GTK_SIGNAL_FUNC(a_Commands_forw_callback), (gpointer)bw);   gtk_signal_connect(GTK_OBJECT(bw->forw_button), "clicked1",                      GTK_SIGNAL_FUNC(a_Commands_forw_callback), (gpointer)bw);   /*    * HACK: See above.    */   toolbar_child =      ((GtkToolbarChild*)GTK_TOOLBAR(toolbar)->children->next->data);   toolbar_child->type = GTK_TOOLBAR_CHILD_BUTTON;   toolbar_child->widget = bw->forw_button;   toolbar_child->icon = icon_widget;   toolbar_child->label = label_widget;   /* 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);   /*    * SG: This had never any effect, was it there for future extensions?    * 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);   Interface_set_button_accel(GTK_BUTTON(bw->reload_button), GDK_r,                              GDK_CONTROL_MASK, bw->accel_group);   /* 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);   /* bookmarks button */   bw->bookmarks_button = gtk_toolbar_append_item(                             GTK_TOOLBAR(toolbar),                             label ? "Book" : NULL,                             "View bookmarks", "Toolbar/Bookmarks",                             Interface_pixmap_new(bw->main_window,                                                  s ? s_bm_xpm : bm_xpm),                             (GtkSignalFunc) a_Commands_viewbm_callback, bw);   gtk_widget_set_sensitive(bw->bookmarks_button, TRUE);   Interface_set_button_accel(GTK_BUTTON(bw->bookmarks_button), GDK_semicolon,                              0, bw->accel_group);   Interface_set_button_accel(GTK_BUTTON(bw->bookmarks_button), GDK_b,                              GDK_CONTROL_MASK, bw->accel_group);   /*    * SG: This had never any effect, was it there for future extensions?    * gtk_signal_connect(GTK_OBJECT(bw->bookmarks_button),    *                    "button-press-event",    *                    GTK_SIGNAL_FUNC(a_Commands_navpress_callback), bw);    */   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. * toggle: Flag [toggle or set]. */void Interface_toggle_panel(BrowserWindow *bw, gint toggle){   if (toggle)      bw->fullwindow = !bw->fullwindow;   if (bw->fullwindow) {      g_slist_foreach(bw->PanelHandles, (GFunc)gtk_widget_hide, NULL);      gtk_widget_hide(bw->status_box);      gtk_widget_show (bw->full_screen_off_button);      gtk_widget_grab_focus(GTK_BIN(bw->docwin)->child);   } else {      g_slist_foreach(bw->PanelHandles, (GFunc)gtk_widget_show, NULL);      gtk_widget_show(bw->status_box);      gtk_widget_hide (bw->full_screen_off_button);   }}/* * 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_bookmarks )      gtk_widget_hide(bw->bookmarks_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_search )      gtk_widget_hide(bw->search_button);   if ( !prefs.show_progress_box )      gtk_widget_hide(bw->progress_box);   bw->fullwindow = prefs.fullwindow_start;   Interface_toggle_panel(bw, FALSE);}static void Interface_full_screen_callback (BrowserWindow *bw){   Interface_toggle_panel(bw, TRUE);}/* * Handler for double-mouse-clicks that don't belong to the viewport. */static gint Interface_click_callback(BrowserWindow *bw, GdkEventButton *event){   if (event->type == GDK_2BUTTON_PRESS && event->button == 1)      Interface_toggle_panel(bw, TRUE);   return TRUE;}/*

⌨️ 快捷键说明

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