2016-05-19 65 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; 
}