Так как щелкните на границе окна и верхняя панель находится ВНЕ окна, при щелчке вы получите сигнал focus-out-event
. Что еще более важно, когда вы отпускаете кнопку мыши, она отправляет focus-in-event
, когда окно снова становится активным. Таким образом, вы можете попробовать использовать от gboolean on_focus_in (GtkWidget* w, GdkEventFocus* ef, gpointer p)
и от g_signal_connect
до focus-in-event
для обнаружения отпусканий щелчков мыши, происходящих из щелчков за пределами окна. Проблема, похоже, игнорирует другой фокус в сигнале, такой как открытие окна, нажатия, которые не находятся на границе, что потенциально может быть выполнено с помощью gdk_device_get_position
( этот ответ может привести вас на правильный путь), et c ...
Но вот общая идея, которую, возможно, стоит попробовать взломать:
#include <stdlib.h>
#include <gtk/gtk.h>
GtkWidget *window;
gboolean on_focus_in (GtkWidget* w, GdkEventFocus* ef, gpointer p) {
printf("release\n");
return TRUE;
}
gboolean on_focus_out (GtkWidget* w, GdkEventFocus* ef, gpointer p) {
printf("press\n");
return TRUE;
}
int
main(int argc, char *argv[]) {
gtk_init(0, NULL); // init Gtk
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
g_signal_connect (window,
"focus-in-event",
G_CALLBACK (on_focus_in),
NULL);
g_signal_connect (window,
"focus-out-event",
G_CALLBACK (on_focus_out),
NULL);
gtk_widget_show(window);
gtk_main();
return 0;
}
изменить размер мероприятия