使用 dconf 监视回调
我正在尝试在 Ubuntu 11.04 中使用 dconf api 捕获后台更改事件。我已经创建了一个客户端并且可以读取背景值,但是当我更改 dconf 值(通过 dconf-editor)时,不会调用回调函数。
我应该如何使用回调技术?
谢谢。
这是代码:
#include <glib-2.0/glib.h>
#include <glib-2.0/glib-object.h>
#include <glib-2.0/gio/gio.h>
#include </usr/include/dconf/dconf.h>
#include <iostream>
void WatchBackground (DConfClient *client, const gchar* path, const gchar* const *items, gint n_items, const gchar* tag, gpointer user_data){
if (g_strcasecmp(path, (gchar*)"/org/gnome/desktop/background/picture_uri") == 0){
std::cout << "filename Ok" << std::endl;
}
std::cout << "Call callback" << std::endl;
}
int main(int argc, char** argv) {
g_type_init();
DConfClient *dcfc = dconf_client_new(NULL, WatchBackground, NULL, NULL);
if (dcfc != NULL){
std::cout << "DConfClient created." << std::endl;
GVariant *res = dconf_client_read(dcfc, (gchar*)"/org/gnome/desktop/background/picture-uri");
if (res != NULL){
gsize s = 0;
std::cout << "/org/gnome/desktop/background/picture-uri: " << g_variant_get_string(res, &s) << std::endl;
} else {
std::cout << "NULL read" << std::endl;
}
}
while(true){
sleep(1000);
}
return 0;
}
这是执行该程序的结果:
(process:6889): GLib-WARNING **: XDG_RUNTIME_DIR variable not set. Falling back to XDG cache dir.
DConfClient created.
/org/gnome/desktop/background/picture-uri: /usr/share/backgrounds/space-02.png
I'm trying to use the dconf api to capture the background change event, in an Ubuntu 11.04. I've created a client and can read the background value, but when I change a dconf value (through dconf-editor), the callback function is not called.
How should I use the callback technique?
Thanks.
Here is the code:
#include <glib-2.0/glib.h>
#include <glib-2.0/glib-object.h>
#include <glib-2.0/gio/gio.h>
#include </usr/include/dconf/dconf.h>
#include <iostream>
void WatchBackground (DConfClient *client, const gchar* path, const gchar* const *items, gint n_items, const gchar* tag, gpointer user_data){
if (g_strcasecmp(path, (gchar*)"/org/gnome/desktop/background/picture_uri") == 0){
std::cout << "filename Ok" << std::endl;
}
std::cout << "Call callback" << std::endl;
}
int main(int argc, char** argv) {
g_type_init();
DConfClient *dcfc = dconf_client_new(NULL, WatchBackground, NULL, NULL);
if (dcfc != NULL){
std::cout << "DConfClient created." << std::endl;
GVariant *res = dconf_client_read(dcfc, (gchar*)"/org/gnome/desktop/background/picture-uri");
if (res != NULL){
gsize s = 0;
std::cout << "/org/gnome/desktop/background/picture-uri: " << g_variant_get_string(res, &s) << std::endl;
} else {
std::cout << "NULL read" << std::endl;
}
}
while(true){
sleep(1000);
}
return 0;
}
And here's the result of executing this program:
(process:6889): GLib-WARNING **: XDG_RUNTIME_DIR variable not set. Falling back to XDG cache dir.
DConfClient created.
/org/gnome/desktop/background/picture-uri: /usr/share/backgrounds/space-02.png
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您必须使用
GMainLoop
来等待。这是一个简单的代码来演示。You must use
GMainLoop
to wait. Here is a simple code to demonstrate.