系统在窗口切换的时候,闪烁,为此,学习matchbox。此外,组合框窗口的应用可以解决同一界面先出背景后出文字的现象。都在努力学习尝试中。下面是matchbox的阅读过程。
主函数
main()
{
Wm *w;
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = sig_handler;
act.sa_flags = 0;
sigaction(SIGTERM, &act, NULL);
sigaction(SIGINT, &act, NULL);
sigaction(SIGHUP, &act, NULL);
sigaction(SIGCHLD, &act, NULL);
signal (SIGCHLD, SIG_IGN); /* as now we exec via keyboard */
w = wm_new(argc, argv);
if (getenv("MB_SYNC"))
XSynchronize (w->dpy, True);
wm_init_existing(w);
wm_event_loop(w);
return 1;
}
wm_new()
{
wm_load_config(w, &argc, argv);//这个里面根据默认配置和启动matchbox的参数,来设置管理器
//XrmInitialize(),主要是通过这组函数来配置的。
/*
sm_connect()函数里面,主要是SmcOpenConnection()的过程中注册了4个函数
sm_save_yourself_cb
sm_die_cb
sm_save_complete_cb
sm_shutdown_cancelled_cb
并且,打开了Ice连接。(ice是 一个对远程服务的封装。是RPC和分布式对象的协定,相当于corba,.net构架,相对后者更容易实现。)
w->ice_conn = SmcGetIceConnection (smc_conn);
w->sm_ice_fd = IceConnectionNumber (w->ice_conn);
*/
sm_connect();//sesssion manager
XSelectInput();//设置响应事件
/*设置窗口开始之前的默认颜色为灰色*/
XAllocNamedColor(w->dpy,
DefaultColormap(w->dpy, w->screen),
"grey",
&w->grey_col, &dummy_col);
/*如果支持gconf,就建立一个gconf的客户端,
同时关联好gconf中key为/apps/matchbox的回调函数gconf_key_changed_callback*/
/*如果支持xsetting包,那么也建立一个xsetting的客户端*/
xsettings_client_new
接下来设置窗口小图标
mb_pixbuf_new();
misc_scale_wm_app_icon();
#ifndef NO_KBD
keys_init(w);//
#endif
ewmh_init(w);//在这里面建立原子串,并调用了X同步扩展函数ewmh_sync_init
comp_engine_init (w);//组合框引擎的初始化
//组合框可以较好地解决因为X交互导致界面延迟或者闪烁的问题。
//matchbox是把组合框技术较好的实现了的。为了改善窗口切换画面闪烁的问题
//在应用程序中打开组合框,但是这个功能依赖于cairo。如果为了增加整机速
//度,而去掉了cairo,那么在这里就无能为力了。呵呵。鱼与熊掌不能兼得
//下面三个不说了。
mbtheme_init(w, w->config->theme);
ewmh_init_props(w);
wm_set_cursor_visibility(w, !w->config->no_cursor);//启动的时候可以带参数,屏蔽鼠标指针显示
}
阅读(1025) | 评论(0) | 转发(0) |