Chinaunix首页 | 论坛 | 博客
  • 博客访问: 73500
  • 博文数量: 17
  • 博客积分: 1410
  • 博客等级: 上尉
  • 技术积分: 280
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-04 09:30
文章分类

全部博文(17)

文章存档

2011年(1)

2009年(1)

2008年(15)

我的朋友

分类: LINUX

2008-04-25 22:34:11

        系统在窗口切换的时候,闪烁,为此,学习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);//启动的时候可以带参数,屏蔽鼠标指针显示
}


阅读(985) | 评论(0) | 转发(0) |
0

上一篇:sscanf的复杂用法

下一篇:开源浏览器

给主人留下些什么吧!~~