#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);
}
}
}