J'ai une fenêtre contextuelle (créée à l'aide du type Window_Popup) qui contient des widgets dessus, y compris une entrée de texte. Le problème est que l'entrée ne se concentre pas lorsque je clique sur elle, donc je ne peux rien taper. Y a-t-il un indicateur que je dois définir pour permettre à la fenêtre d'obtenir la mise au point sur le clavier? P>
3 Réponses :
#include <gtk/gtk.h> static gboolean delete_event( GtkWidget *widget, GdkEvent *event, gpointer data ) { g_print ("delete event occurred\n"); gtk_main_quit (); return TRUE; } static void destroy( GtkWidget *widget, gpointer data ) { gtk_main_quit (); } int main( int argc, char *argv[] ) { GtkWidget *window; GtkWidget *windowpopup; GtkWidget *button; gtk_init (&argc, &argv); /* create a new window */ window = gtk_window_new (GTK_WINDOW_TOPLEVEL); windowpopup = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_transient_for(GTK_WINDOW(windowpopup),GTK_WINDOW(window)); gtk_window_set_destroy_with_parent(GTK_WINDOW(windowpopup),TRUE); gtk_widget_show (windowpopup); g_signal_connect (G_OBJECT (window), "delete_event", G_CALLBACK (delete_event), NULL); g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy), NULL); /* Creates a new button with the label "Hello World". */ button = gtk_button_new_with_label ("Hello World"); g_signal_connect_swapped (G_OBJECT (button), "clicked", G_CALLBACK (gtk_widget_destroy), G_OBJECT (window)); gtk_container_add (GTK_CONTAINER (window), button); gtk_widget_show (button); gtk_widget_show (window); gtk_main (); return 0; }
Vous ne pouvez pas utiliser Window_Popup pour GTK-Windows nécessitant la mise au point. Au lieu de cela, vous devez utiliser un gtkwindow avec type gtk_window_toplevelvel et appeler les fonctions suivantes (ou méthodes) ceci a fonctionné pour moi ... Malheureusement, l'icône dans la liste des fenêtres clignote courte quand ce "popup 'est détruit p> p>
Malgré les réponses précédentes et la référence GTK, il est possible de saisir la mise au point du clavier lors de l'utilisation d'un GTK_Window_Popup. Vous devez vous connecter à l'événement "show" ... ... avec un rappel qui tente de saisir le clavier: P> static void on_window_show(GtkWidget *w, gpointer user_data) {
/* grabbing might not succeed immediately... */
while (gdk_keyboard_grab(w->window, FALSE, GDK_CURRENT_TIME) != GDK_GRAB_SUCCESS) {
/* ...wait a while and try again */
sleep(0.1);
}
}
Cela prendra le clavier exclusivement. En cliquant sur d'autres programmes, la souris ne transférera pas le clavier. Il pourrait y avoir du travail, mais je ne suis au courant d'aucun.