干净的西宁,看来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变量。
现象为:
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) |