Обнаружение щелчка мыши в любом месте экрана с помощью Gtk3

#c #c #gtk3

#c #c #gtk3

Вопрос:

Я пытаюсь создать программу, которая следует за положением мыши и проверяет, была ли нажата кнопка мыши в любом месте экрана, используя только gtk. Прямо сейчас я могу определить положение мыши, однако я не могу сделать последнее. я провел некоторое исследование, но не смог найти ни одного действительно хорошего примера, в котором для этого использовался только gtk.

Первоначально я попробовал что-то подобное в коде screenshot-area-selection.c из приложения gnome-screenshot, в котором выбирается область щелчка и перетаскивания, и, насколько я понимаю, была часть кода, которая использовала переменную-член GdkEventButton «button», чтобы увидеть, есть ли кнопканажмите или нет, однако я не смог заставить его работать

 /*void check_button(GdkEventButton *event, GdkWindow *root_window, GdkDevice *prim_device){
event->device = prim_device;
event->window = root_window;
switch(event->button){
    case 1:
        printf("button clicked: left mousen");
        sleep(2);
        break;
    case 2:
        printf("button clicked: middle mousen");
        sleep(2);
        break;
    case 3:
        printf("button clicked: right mousen");
        sleep(2);
        break;
    }
}*/
 

итак, я попытался использовать функции, доступные в документах gtk, но по-прежнему не отображается, было ли нажатие кнопки или нет. я только начал использовать gtk, пожалуйста, помогите мне сойти с ума.

 #include <gtk/gtk.h>
#include <stdlib.h>
//#include <unistd.h>

void check_button(GdkWindow* root_window, GdkDevice* prim_device){

    switch(gdk_window_get_device_events(root_window, prim_device)){
    case GDK_BUTTON_PRESS_MASK:
        printf("button pressed: pressedn");
        sleep(3);
        break;
    case GDK_BUTTON_RELEASE_MASK:
        printf("button released: releasedn");
        sleep(3);
        break;
    }
}

int main (int argc, char **argv){
  gdk_init(amp;argc, amp;argv);
  //GdkEventButton *event;
  GdkWindow *window = gdk_get_default_root_window ();
  GdkDisplay* display = gdk_display_get_default();
  GdkSeat* seat = gdk_display_get_default_seat(display);
  GdkDevice* device = gdk_seat_get_pointer(seat);
    int x, y;
    while(TRUE){
        //check_button(event, window, device);
        check_button(window, device);
        int a, b;
    a = x;
    b = y;
    gdk_window_get_device_position (window, device, amp;x, amp;y, NULL);
        if(a != x | b != y){
    system("clear");
    printf("x= %d, y= %dn",x,y);
    }
    } 
}