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

📄 menu.c

📁 浏览器的源代码,可移植到嵌入式设备.
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Dillo * * Some code copied from: * The GIMP -- an image manipulation program * Copyright (C) 1995 Spencer Kimball and Peter Mattis * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <gtk/gtk.h>#include <gdk/gdkkeysyms.h>#include "history.h"#include "nav.h"#include "commands.h"#include "dw_gtk_scrolled_window.h"#include "dw_page.h"         /* for a_Dw_page_add_anchor */#include "bookmark.h"#include "interface.h"#include "menu.h"#include "selection.h"#include "gtk_ext_menu.h"#include "gtk_ext_menu_item.h"#include "gtk_menu_title.h"/* * Forward declarations */static void Menu_pagemarks_goto_pagemark(GtkWidget *widget,                                         gpointer client_data);/* * Make a new menu, insert it into the menu bar, and return it. */static GtkWidget* Menu_new(GtkWidget *menubar, const char *name,                           gboolean right_justify, BrowserWindow *bw){   GtkWidget *menu;   GtkWidget *menuitem;   guint tmp_key;   menu = gtk_menu_new();   menuitem = gtk_menu_item_new_with_label((char *) name);   tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(menuitem)->child), name);   gtk_widget_add_accelerator(menuitem, "activate_item", bw->accel_group,                              tmp_key, GDK_MOD1_MASK, 0);   if ( right_justify )      gtk_menu_item_right_justify(GTK_MENU_ITEM(menuitem));   gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuitem), menu);   gtk_menu_bar_append(GTK_MENU_BAR(menubar), menuitem);   gtk_widget_show(menuitem);   gtk_menu_set_accel_group(GTK_MENU(menu), bw->accel_group);   return menu;}/* * Pick the right URL for this popup. */void Menu_pick_url (GtkWidget *widget, gpointer client_data){   BrowserWindow *bw = (BrowserWindow *)client_data;   if (gtk_object_get_data(GTK_OBJECT (GTK_MENU (widget->parent)), "url2")) {      a_Menu_popup_set_url(bw, bw->menu_popup.url2);   }   /* clean the url2 tag (currently "over_image" is the only one using it) */   gtk_object_remove_data(GTK_OBJECT (bw->menu_popup.over_image), "url2");}/* * Add an item to a menu, including the name, an accelerator (not yet * implemented), and a callback function for activation. */static GtkWidget * Menu_add (GtkWidget *menu, const char *name, const char *accel,           BrowserWindow *bw,           void (*callback) (GtkWidget *widget, void *data), void *data){   GtkWidget *menuitem;   GtkAccelGroup *menu_accels;   GdkModifierType accel_mods;   guint accel_key;   guint tmp_key;   menuitem = gtk_menu_item_new_with_label((char *) name);   gtk_menu_append(GTK_MENU(menu), menuitem);   menu_accels = gtk_menu_ensure_uline_accel_group(GTK_MENU(menu));   tmp_key = gtk_label_parse_uline(GTK_LABEL(GTK_BIN(menuitem)->child), name);   gtk_widget_add_accelerator(menuitem, "activate_item",                              menu_accels, tmp_key, 0, 0);   gtk_widget_show(menuitem);   if (accel != NULL) {      gtk_accelerator_parse(accel, &accel_key, &accel_mods);      gtk_widget_add_accelerator(menuitem, "activate", bw->accel_group,         accel_key, (guint)accel_mods, GTK_ACCEL_VISIBLE);   }   if (callback != NULL) {      gtk_signal_connect(GTK_OBJECT(menuitem), "activate",                         (GtkSignalFunc) Menu_pick_url, bw);      gtk_signal_connect(GTK_OBJECT(menuitem), "activate",                         (GtkSignalFunc) callback, data);   }   return menuitem;}/* * Add a menu title. */static GtkWidget *Menu_add_title (GtkWidget *menu, const char *name){   GtkWidget *menuitem;   menuitem = a_Gtk_menu_title_new(name);   gtk_menu_append(GTK_MENU(menu), menuitem);   gtk_widget_show(menuitem);   return menuitem;}/* * Add a separator into the menu. */static void Menu_sep(GtkWidget *menu){   GtkWidget *widget;   widget = gtk_menu_item_new();   gtk_menu_append(GTK_MENU(menu), widget);   gtk_widget_set_sensitive(widget, FALSE);   gtk_widget_show(widget);}/* * Make up a new menubar for a main browser window. The accelerator table * is stored in bw->accel_group. * Currently does not deal with dynamic menu items (bookmarks and history). * CP: It *seems* to handle dynamic menu items... */GtkWidget *a_Menu_mainbar_new(BrowserWindow *bw, gint tiny){   GtkWidget *menubar;   GtkWidget *file_menu;   /* GtkWidget *help_menu; */   bw->menubar = menubar = gtk_menu_bar_new();   /* FILE MENU */   file_menu = Menu_new(menubar, tiny ? "_F" : "_File", FALSE, bw);   Menu_add(file_menu, "_New Browser", "<ctrl>N", bw,            a_Commands_new_callback, bw);   Menu_add(file_menu, "_Open File...", "<ctrl>O", bw,            a_Commands_openfile_callback, bw);   Menu_add(file_menu, "Open _URL...", "<ctrl>L", bw,            a_Commands_openurl_callback, bw);   /*   Menu_add(file_menu, "_Preferences", "<ctrl>E", bw,            a_Commands_prefs_callback, bw);   */   Menu_add(file_menu, "Close Window", "<ctrl>Q", bw,            a_Commands_close_callback, bw);   Menu_sep(file_menu);   Menu_add(file_menu, "Exit Dillo", "<alt>Q", bw,            a_Commands_exit_callback, bw);   /* HELP MENU   help_menu = Menu_new(menubar, "_Help", TRUE, bw);   Menu_add(help_menu, "Dillo _Home", NULL, bw,            a_Commands_helphome_callback, bw);   */   return menubar;}/* * Make a new popup menu and return it. */GtkWidget *a_Menu_popup_op_new(BrowserWindow *bw){   GtkWidget *menu;   menu = gtk_menu_new();   Menu_sep(menu);   Menu_add_title(menu, "PAGE OPTIONS");   Menu_sep(menu);   Menu_add(menu, "View page Source", NULL, bw,            a_Commands_viewsource_callback, bw);   bw->viewbugs_menuitem = Menu_add(menu, "View page Bugs", NULL,bw, NULL,bw);   Menu_add(menu, "Bookmark this page", NULL, bw,            a_Commands_addbm_callback, bw);   Menu_sep(menu);   Menu_add(menu, "_Find Text", "<ctrl>F", bw,            a_Commands_findtext_callback, bw);   bw->pagemarks_menuitem = Menu_add(menu, "Jump to...", NULL, bw, NULL, bw);   Menu_sep(menu);   Menu_add(menu, "Save page As...", NULL, bw,            a_Commands_save_callback, bw);   return menu;}/* * Set the popup's primary DilloUrl */void a_Menu_popup_set_url(BrowserWindow *bw, const DilloUrl *url){   if (bw->menu_popup.url)      a_Url_free(bw->menu_popup.url);   bw->menu_popup.url = a_Url_dup(url);}/* * Set the popup's secondary DilloUrl * Note: this URL is used by the image submenu of the link popup. * (If the need arises, this can be extended using an URL array in the popup * structure, and by setting the to-be-picked-URL-index in the popup) */void a_Menu_popup_set_url2(BrowserWindow *bw, const DilloUrl *url){   if (bw->menu_popup.url2)      a_Url_free(bw->menu_popup.url2);   bw->menu_popup.url2 = a_Url_dup(url);}/* * Get the popup's DilloUrl */DilloUrl *a_Menu_popup_get_url(BrowserWindow *bw){   return bw->menu_popup.url;}/* * Put the url in the status bar when moving cursor over menuitem. */static voidMenu_popup_history_select_callback(GtkWidget *widget, gpointer data){   gint idx;   BrowserWindow *bw = data;   idx = GPOINTER_TO_INT(gtk_object_get_data(GTK_OBJECT (widget), "nav_idx"));

⌨️ 快捷键说明

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