如何实例化GdkDeviceManager?

如何实例化GdkDeviceManager?,c,gtk,gdk,C,Gtk,Gdk,我试图弄清楚如何使用GdkDeviceManager,因此我编写了以下程序,该程序应该可以打印所有物理输入设备: #include <stdio.h> #include <gdk/gdk.h> int main(int argc, char **argv) { GList *devices, *it; GdkDeviceManager mgr; devices = gdk_device_manager_list_devices(&mgr

我试图弄清楚如何使用GdkDeviceManager,因此我编写了以下程序,该程序应该可以打印所有物理输入设备:

#include <stdio.h>
#include <gdk/gdk.h>

int main(int argc, char **argv) {
    GList *devices, *it;
    GdkDeviceManager mgr;

    devices = gdk_device_manager_list_devices(&mgr, GDK_DEVICE_TYPE_SLAVE);

    for (it = devices; it != NULL; it = it->next) {
        GdkDevice *dev = it->data;
        printf("Current device: %s\n", gdk_device_get_name(dev));
    }

    g_list_free(devices);
    return 0;
}
我明白了


另外,GdkDeviceManager无法实例化,您需要通过显示器从中获取指针。要获得显示,需要初始化Gtk+。 工作代码如下:

#include <stdio.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>

int main(int argc, char **argv) {

    gtk_init(&argc, &argv);

    GList *devices, *it;
    GdkDisplay *display = gdk_display_get_default();
    GdkDeviceManager *mgr = gdk_display_get_device_manager(display);

    devices = gdk_device_manager_list_devices(mgr, GDK_DEVICE_TYPE_SLAVE);

    for (it = devices; it != NULL; it = it->next) {
        GdkDevice *dev = it->data;
        printf("Current device: %s\n", gdk_device_get_name(dev));
    }

    g_list_free(devices);
    return 0;
}
#包括
#包括
#包括
int main(int argc,字符**argv){
gtk_init(&argc,&argv);
GList*设备,*it;
GdkDisplay*display=gdk_display_get_default();
GdkDeviceManager*mgr=gdk_显示_获取_设备_管理器(显示);
设备=gdk_设备管理器_列表_设备(管理器、gdk_设备类型_从设备);
for(it=devices;it!=NULL;it=it->next){
GdkDevice*dev=it->data;
printf(“当前设备:%s\n”,gdk_设备_获取_名称(dev));
}
g_列表_免费(设备);
返回0;
}

您不需要:设备管理器是由后端创建的。但是,更重要的是:为什么你认为你需要设备管理器呢?我想修补一个用它来管理输入设备的程序,但是其中一个设备正在消失,所以我想写一个程序,通过GdkDeviceManager简单地列出设备,看看是不是设备管理器忽略了它。
mousetest.c: In function ‘main’:
mousetest.c:6:22: error: storage size of ‘mgr’ isn’t known
     GdkDeviceManager mgr;
                      ^
mousetest.c:6:22: warning: unused variable ‘mgr’ [-Wunused-variable]
#include <stdio.h>
#include <gtk/gtk.h>
#include <gdk/gdk.h>

int main(int argc, char **argv) {

    gtk_init(&argc, &argv);

    GList *devices, *it;
    GdkDisplay *display = gdk_display_get_default();
    GdkDeviceManager *mgr = gdk_display_get_device_manager(display);

    devices = gdk_device_manager_list_devices(mgr, GDK_DEVICE_TYPE_SLAVE);

    for (it = devices; it != NULL; it = it->next) {
        GdkDevice *dev = it->data;
        printf("Current device: %s\n", gdk_device_get_name(dev));
    }

    g_list_free(devices);
    return 0;
}