У меня есть приложение, в котором при нажатии кнопки я хочу отобразить всплывающую подсказку, а затем скрыть ее через некоторое время. Задержка времени реализована с использованием { ссылка }.
Вот что я попробовал.
#include <gtk/gtk.h>
#include <stdio.h>
#include <time.h>
// https://stackoverflow.com/a/3930477/6286575
void wait(int unsigned delay)
{
int unsigned end_time = time(0) + delay;
while(time(0) < end_time);
}
void show_tooltip(GtkWidget *widget, gpointer data)
{
GtkWidget **window = data;
printf("Showing tooltip.\n");
gtk_widget_set_tooltip_text(*window, "Clicked!");
wait(5);
// printf("Hiding tooltip.\n");
// gtk_widget_set_has_tooltip(*window, FALSE);
}
int main(void)
{
gtk_init(0, NULL);
GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *grid = gtk_grid_new();
gtk_container_add(GTK_CONTAINER(window), grid);
GtkWidget *button = gtk_button_new_with_label("Click Me");
gtk_grid_attach(GTK_GRID(grid), button, 0, 0, 1, 1);
g_signal_connect(GTK_BUTTON(button), "clicked", G_CALLBACK(show_tooltip), &window);
gtk_widget_show_all(window);
g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
gtk_main();
}
Ожидание
Подсказка должна отображаться сразу после На терминале появляется Showing tooltip.
.
Наблюдение
Подсказка отображается приблизительно через 5 секунд после появления на терминале Showing tooltip.
.
Как можно убедиться, что всплывающая подсказка отображается одновременно с печатью Showing tooltip.
? После задержки wait(5);
я бы хотел скрыть всплывающую подсказку, чтобы подсказка была видна только на короткое время.
Для запуска кода требуется GTK3.
sudo apt install libgtk-3-dev
gcc $(pkg-config --libs --cflags gtk+-3.0) main.c
./a.out