Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1030891
  • 博文数量: 166
  • 博客积分: 10217
  • 博客等级: 上将
  • 技术积分: 2133
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-09 19:45
文章分类

全部博文(166)

文章存档

2012年(3)

2011年(7)

2010年(18)

2009年(59)

2008年(79)

我的朋友

分类: LINUX

2008-06-24 15:29:05

/************* test.c         */
#include
#include
#define KEY_MISSED_CALL  "/user/gpephone/share/voc/missedcall"

int setting = 0;



static void
callback_test (int setting, int id, const char *key, type_t type, action_t action, void * user_data)
{
    int  missedcall_count;

 setting_get_int(setting, key, &missedcall_count);
    printf("\n*********test count is\n");

    GtkWidget *window;

        window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
        gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
        gtk_widget_set_size_request(window, 120, 180);
        gtk_widget_show_all(window);
}
int main(int argc, char *argv[])
{
    gtk_init(&argc, &argv);

    int notify_id = 0;
    int missed_call_count = 0;
    error_t  error_missedcall;    
    setting = setting_open ();
    if(        setting_entry_exist (setting, KEY_MISSED_CALL) )
    {
        printf("\nKEY_MISSED_CALL has existed\n");
    }
    error_missedcall = setting_set_int (setting, KEY_MISSED_CALL,  atoi(argv[1]));
    if(error_missedcall != SETTING_ERROR_SUCCESS)
    {
        printf("set missed call fail\n");
    }
    setting_notify_add (setting, KEY_MISSED_CALL, callback_test, NULL, ¬ify_id);
    gtk_main();
    return FALSE;        
}

使用libsettings时,我们无须关心该key的节点是否存在,或者是该key是否已被注册,libsettings以封好。

1 gconf相当于windows中的注册表机制,但比注册表工能要强大很多。比如,它有键植改变之后自动通知所有关心该键植的功能。
 
2、我们在系统中使用gconf作为注册表机制。但是没有直接使用,而是在gconf的基础上封状了一套命名为setting的机制
 
3、setting机制的每一个功能都是直接对应于gconf的相应功能的。它具有以下这些功能
 
3.1 设置或者获得某个键值的值的功能,可以被设置或者获取的值的类别只能是:boolean, int,string三个类型.
对应的函数:
    error_t setting_set_boolean (int setting, const char *key, boolean value)
    error_t setting_set_int (int setting, const char *key, int value)
    error_t setting_set_string (int setting, const char *key, const char * value)
 
    error_t setting_get_boolean (int setting, const char * key, boolean *value)
    error_t setting_get_int (int setting, const char * key, int *value)
    error_t setting_get_string (int setting, const char * key, char ** value)
 
3.2 判断某个键值是否存在的功能
    boolean setting_entry_exist (int setting, const char * key)
 
3.3 得到某个键值对应的类型的工能
    error_t setting_entry_get_type (int setting, const char *key, type_t *type)
3.4 设置某个键值发生变化时,对应的回调函数的功能
    error_t setting_notify_add (int setting, const char *key, SettingNotifyFunc func, void *user_data, int *id)
 
3.5删除已经注册的回调函数的功能
    void setting_notify_remove (int setting, int id)
    //gconf_client_notify_remove (client, id);
 
 
    需要指出的是,setting机制中对gconf回调函数机制作出了改进。
    在gconf机制中,我们注册一个回调函数,用下面的方法实现:
         int cnid = gconf_client_notify_add (client, key, gconf_client_notify_func, (gpointer) user_data, NULL, &error);
        client---是gconf的客户端
        key---是被关联的键值
        gconf_client_notify_func --- 我们的回调函数
        user_data---回调函数的参数
        error --- 注册回调函数返回的错误码
    我们最应该关注的是,这个函数的返回值
        cnid --- 回调函数对应的索引值
 
    我们在改进后的setting机制中,支持同一个应用程序中创建多个gconf的客户端的功能。所以我们引入了3个hash表,分别管理gconf 的客户端;管理回调函数和回调函数注册值的的对应关系;管理gconf客户端索引值和回调函数注册值的对应关系。
 
3.6 setting中的错误码有自己的一套,不过是和gconf一一对应的。

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

上一篇:gconf原理

下一篇:一例子

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