2016-05-19 94 views
1

我试图找出如何使用GdkDeviceManager,所以我写了一个应该打印所有物理输入设备下面的程序:如何实例化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; 
} 

然而,当我尝试通过

gcc mousetest.c $(pkg-config --libs --cflags gtk+-3.0 gdk-3.0) -Wall 
编译它

我得到

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] 
+0

您不:设备管理器是由后端创建的。但是,更重要的是:为什么你认为你需要设备管理器呢? – ebassi

+0

我想修补一个使用它来管理输入设备的程序,但其中一个设备正在消失,所以我想编写一个程序,通过GdkDeviceManager简单列出设备,以查看设备管理器是否忽略了它,或者不。 –

回答

1

Aparently 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; 
}