Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198609
  • 博文数量: 60
  • 博客积分: 3269
  • 博客等级: 中校
  • 技术积分: 648
  • 用 户 组: 普通用户
  • 注册时间: 2005-09-21 10:48
文章存档

2012年(6)

2011年(6)

2010年(30)

2009年(8)

2007年(6)

2005年(4)

我的朋友

分类: C/C++

2010-03-20 07:58:27

干净的西宁,看来libgtkhtml-2.26.3是没有什么问题了。
 
去掉了Gnome的依赖。
 
注:源代码还未上传。
 
2010-02-22 (gtkhtml 3.26.3)
1、htmlenums.h 独立
2、gtkhtml-enums.h 独立
3、gtkhtml-types.h 依赖 2 gtkhtml-enums.h
4、htmltypes.h 依赖 1、2、3
5、htmlobject.h 依赖 1、4
6、有点烦了,头文件依赖关系复杂,全部拷贝再说
7、#define GETTEXT_PACKAGE "GETTEXT_PACKAGE in config.h"
 #define VERSION "3.26.3"
 http://leadgenius.cublog.cn/
8、以html*.c顺序添加编译.o
9、添加regex-2.7-bin 库,htmlclue.c->htmlsearch.h第一次依赖regex.h。
 可以注释掉对regex.h的引用,代码中有对HAVE_GNU_REGEX宏的预定义控制,在config.h中。
 htmlclue.c本身没发现HAVE_GNU_REGEX宏的预定义控制。
 处理方法:
 在config.h中。#define HAVE_GNU_REGEX 1
 
10、修改gtkhtml-properties模块
 htmlclueflow.c模块引用gtkhtml-properties.h第一次依赖GNOME的gconf/gconf-client.h
 注释掉这个引用和55、57行的两个函数。同gtkhtml-properties.c 106和116行。
 gtk_html_class_properties_load
 gtk_html_class_properties_update
 这两个函数体是空的,所以注视掉应该不会有太大的影响。
 
 并且发现HAVE_GNU_REGEX宏的预定义控制。
 
11、ver3.26.3 发现对GTK的版本要求高一点,本机一些函数如gtk_widget_get_window()未声明警告。
 改天试一下低版本。
2010-02-24
12、下载gtkhtml 3.0.10版本,查看代码至少没有较新的gtk_widget_get_window()调用,仍旧widget->window方式。同时下了1.1.10版本,可是在其它两台机器上环境不合适,无法configure通过。改天再说。
2010-03-05
13、前几天尝试直接移植3.0.10版本,虽然可以避开GTK(需要2.14以上)版本问题,但是却需要其他的库,懒得折腾了。
 今天有点时间仍旧改回3.26.3版,不就是重写一些函数么?
 
 另外一个感觉,通过不同版本的代码对比,GTKHTML正在向比较纯粹的GTK支持靠近。
 http://leadgenius.cublog.cn/
14、重建一个支持库环境,还好MinGW内部环境就是手动的,非gtk安装包。GTK的问题解决。
 下面主要是gtkhtml.c模块编译,解决gnome库调用的问题,我不想依赖gnome。
15、gtkhtml.c
 现在的问题集中于gtkhtml.c和test.c,主要是gnome库函数的调用。
 destroy()中引用gconf_client_notify_remove(),782行,对notify_monospace_font_id结构成员操作。
 notify_monospace_font_id定义于gtkhtml-private.h(46),仅在gtkhtml.c中用到。
 在gtkhtml.c(3440)被赋值,但是根本没有被用到。
 处理方式:
 直接赋0值,注释destroy()中的操作。
 
 get_font_options()通过gconf_client_get_string()获得字符串设置cairo_font_options,
 能够处理的字符串在函数体中有明确写出,所以。。。
 处理方式:
 a、去掉gconf相关代码。
 b、在config.h中加入宏定义3个
 c、直接用定义的宏赋值。
 
 gtk_html_set_fonts()
 同上类似
 处理方式:
 宏定义赋值,config.h
 
 setup_class_properties()
 其中有一大块进行gconf初始化的代码。也就2步,gconf_init和gconf_client_add_dir.
 处理方式:
 觉得没什么用,直接注释掉。
 
 read_key_theme()
 就是读取一个字符串看一下是否与Emacs相关,然后设置html_class->use_emacs_bindings。
 而use_emacs_bindings成员几乎没有什么用。
 可以直接赋0,也可以宏定义赋值。
 处理方式:
 直接html_class->use_emacs_bindings = 0;
 
 模块中有一些gconf的监视回调函数,处理不同设置文件的变化,基本如下:
 client_notify_key_theme();
 client_notify_monospace_font();
 client_notify_cursor_blink();
 处理方法:
 直接注释掉,相应的注视掉gtk_html_class_init()中的回调注册代码,gconf_client_notify_add().
 
 gtk_html_class_init()
 
 处理方法:
 a、注释gtk_html_accessibility_init(),3152行。在a11y目录中factory模块定义。
  注释#include "../a11y/factory.h",29行
 b、3154行左右是引用GTK rc文件的代码。可以宏赋值,还是直接注视掉吧。
 c、注视掉gtk_html_class_init()中的回调注册代码,3个gconf_client_notify_add().和gconf_client操作。
 d、用html_engine_set_cursor_blink_timeout (0);替代client_notify_cursor_blink (client, 0, NULL, NULL);
 
 init_properties_widget()
 注释gconf_client操作。
 
 注意gconf_error变量。
BUGs:
A、遇到一些劫持,比如网通就会这么干,弹出广告等。会造成意外退出。
 类似代码(复制于http://www.chingdao.com/blog/post/20100206026.asp

 
 
 
 
 
 
  
  
 
 现象为:
 1、url_request事件触发http://125.46.39.138:8080/ccc/blog2/index.asp
  和
  $baseURL/noresize
 
 2、首先引发htmlengine.c中的element_parse_frame()报告CRITICAL错误
  "html_frameset_append: assertion 'set != NULL' failed"
  随后大量警告出现。
  
 3、程序异常退出。
 http://leadgenius.cublog.cn/
 Debug:
 "html_frameset_append: assertion 'set != NULL' failed"
 警告由htmlframeset.c中的html_frameset_append函数输出,
 表示要加入一个frame到frameset,但是set等于NULL。
 
 调用html_frameset_append的一共两处,它们是htmlengine.c中的
 element_parse_frameset()和element_parse_frame().
 
 element_parse_frameset调用html_frameset_append前进行了检查。
 
 element_parse_frame调用html_frameset_append前没有检查,这时应该已经建立了frameset,
 但是跟踪代码时根本没有触发element_parse_frameset(建立frameset)
 我尝试抓取html代码看一下是否frame没有在frameset标记中,但是一直未成功,
 所以前面的html代码是copy别人的。
 
 所以:
 在element_parse_frame中加入代码检查之前是否已经有frameset建立,
 并确保建立frameset。
 
 具体还需测试。。。
测试程序:
A、test.c
 a、注释34行libgnomeui\gnome-ui-init.h
 b、在main()中用gtk_init (&argc, &argv);替代gnome_program_init().
 
B、gtkhtmltest.c
 一个小型的浏览器事例。
 项目setting中加入所需要的gnome、bonobo等额外的库编译通过,也挺好用。
 需要gconf支持,还要相应的gconf服务,用起来太麻烦,报告的不到设置数据。
 
 
 
 
 
 
阅读(769) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~