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.