Tengo una ventana emergente (creada usando el tipo WINDOW_POPUP) que contiene algunos widgets, incluida una entrada de texto. El problema es que la entrada no se enfoca cuando hago clic en ella, así que no puedo escribir nada. ¿Hay alguna bandera que deba establecer para permitir que la ventana enfoque el teclado?Cómo dar el foco del teclado a una ventana emergente Gtk.Window
6
A
Respuesta
-1
#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;
}
4
No puede usar WINDOW_POPUP para gtk-windows que requieren el enfoque. En su lugar debe utilizar un GtkWindow con el tipo GTK_WINDOW_TOPLEVEL y llamar a las siguientes funciones (o métodos)
GtkWindow *result = g_object_new(GTK_TYPE_WINDOW, "type", GTK_WINDOW_TOPLEVEL, NULL);
gtk_widget_set_can_focus(result, TRUE);
gtk_window_set_decorated(GTK_WINDOW(result), FALSE);
gtk_window_set_type_hint(GTK_WINDOW(result), GDK_WINDOW_TYPE_HINT_POPUP_MENU);
gtk_window_set_transient_for(GTK_WINDOW(result), main_top_level_window);
Esto funcionó para mí ... por desgracia el icono en la lista de la ventana corta parpadea cuando este 'emergente' se destruye
1
A pesar de las respuestas anteriores y la referencia GTK, es posible tomar el foco del teclado cuando se utiliza un GTK_WINDOW_POPUP. Es necesario conectar al evento "espectáculo" ...
GtkWindow *w = gtk_window_new(GTK_WINDOW_POPUP);
g_signal_connect(G_OBJECT(w), "show", G_CALLBACK(on_window_show), NULL);
... con una devolución de llamada que trata de agarrar el teclado:
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);
}
}
que me funciona bastante bien.
Cuestiones relacionadas
- 1. Ventana emergente arriba Teclado virtual
- 2. Win32, C++: Crear una ventana emergente sin robar el foco
- 3. ajustar el foco de una ventana emergente cada vez que
- 4. El teclado suave cubre un EditText en una ventana emergente
- 5. Ventana emergente personalizada para la tecla del teclado
- 6. git-gui: mover el foco del teclado a "archivos modificados"
- 7. ¿Cómo establecer el enfoque lógico sin dar prioridad al teclado?
- 8. ¿Cómo llevar el foco a una ventana en jquery?
- 9. ¿Cómo borrar el foco y quitar el teclado en Android?
- 10. Cómo dar al diálogo del archivo Tkinter foco
- 11. ¿Cómo eliminar el foco automático/teclado emergente de un campo cuando aparece la pantalla?
- 12. Editar texto en una ventana emergente
- 13. Abrir una ventana emergente modal
- 14. catch cerrar gtk.window
- 15. Se ha robado el foco del teclado mediante Flash
- 16. ¿Cómo cerrar una ventana emergente de Liferay.util.openWindow?
- 17. ¿Cómo mostrar una ventana que actúa como un menú emergente?
- 18. traer ventana emergente al frente
- 19. ¿Cómo crear una ventana emergente en android?
- 20. Establecer el foco en un texto emergente Control de entrada
- 21. ¿Cómo actualizo el contenido en una ventana emergente de folleto?
- 22. ¿Cómo puedo controlar qué ventana tiene actualmente foco en el teclado?
- 23. GWT Ventana emergente en la nueva ventana del navegador
- 24. ¿Cómo establecer el foco en una ventana modal de JavaScript?
- 25. ¿Cómo establecer el foco en otra ventana?
- 26. Ventana emergente jQuery Valor devuelto a principal
- 27. Cómo configurar el foco WATIR en una nueva ventana
- 28. Ventana emergente de inicio del servicio
- 29. Ventana emergente en winforms
- 30. ¿Cómo cambio el foco a una nueva pestaña emergente en Selenium?
Esto agarrará el teclado exclusivamente. Al hacer clic en las ventanas de otros programas con el mouse, no se transferirá el foco del teclado hacia ellos. Puede haber trabajo alrededor, pero no estoy al tanto de ninguno. –