Hi,
I found a bug in my program and I do not understand it. In this testcode a gtklabel "1111" is shown in a gtkbox in a topwindow. When I enter the topwindow a signal is sent and the gtklabel "1111" is destroyed. When I leave a new gtklabel "2222" shall be created and shown but it does not work. If I leave a second time the gtklabel "2222" is shown.
I played around with realizing, mapping, showing but i can not get it to work. Any ideas?
Code:
#include <stdio.h>
#include <stdlib.h>
#include <gtk/gtk.h>
GtkWidget *window;
GtkWidget *box;
GtkWidget *label1;
GtkWidget *label2;
gboolean the_leave(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
label2 = gtk_label_new(" 2222 ");
gtk_container_add(GTK_CONTAINER(box), label2);
gtk_widget_show_now(label2);
gtk_widget_show_all(window);
return FALSE;
}
gboolean the_enter(GtkWidget *widget, GdkEventButton *event, gpointer data)
{
if (label1 != NULL)
{
gtk_widget_destroy(label1);
label1 = NULL;
}
gtk_widget_show_all(window);
return FALSE;
}
int main(int argc, char** argv)
{
gtk_init (&argc, &argv);
label2 = NULL;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_container_set_resize_mode(GTK_CONTAINER(window), GTK_RESIZE_IMMEDIATE);
gtk_container_set_border_width(GTK_CONTAINER(window), 100);
g_signal_connect(window, "delete_event", (GCallback)gtk_main_quit, 0);
gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
gtk_window_stick(GTK_WINDOW(window)); /* on all desktops or not */
gtk_window_set_keep_above(GTK_WINDOW(window), TRUE);
gtk_window_set_skip_taskbar_hint(GTK_WINDOW(window), TRUE);
gtk_window_set_skip_pager_hint(GTK_WINDOW(window), TRUE);
box = gtk_hbox_new(FALSE, 0);
gtk_container_add(GTK_CONTAINER(window), box);
label1 = gtk_label_new(" 1111 ");
gtk_container_add(GTK_CONTAINER(box), label1);
g_signal_connect(window, "enter-notify-event", G_CALLBACK(the_enter), NULL);
g_signal_connect(window, "leave-notify-event", G_CALLBACK(the_leave), NULL);
gtk_widget_show_all(window);
gtk_main ();
return (EXIT_SUCCESS);
}