2012-05-09 10 views
5

Tengo una colección de widgets GtkEntry, algunos de los cuales son editables y enfocables, y algunos de los cuales no lo son. Me gustaría averiguar cuál de ellos, en su caso, tiene texto seleccionado, para implementar una opción de menú Editar-> Copiar. ¿Hay alguna manera de hacer esto que no sea iterar sobre todos los widgets hasta que gtk_editable_get_selection_bounds devuelva verdadero?averiguar qué widget gtk tiene la selección actual

Actualmente estoy eludiendo el problema llamando al gtk_clipboard_get(GDK_SELECTION_PRIMARY), pero según lo que dicen los documentos, eso no es portátil (y también seleccionará texto seleccionado en cualquier lugar dentro de la pantalla actual, no solo desde mi aplicación).

+0

Lamentablemente, no parece haber una señal cuando un widget reclama una selección, pero es posible que pueda usar el mismo manejador de señal "selection-get" para cada entrada, y luego falsificar una conversión de selección para que se llame para la entrada con la selección (si la hay). – ergosys

+0

ergosys: ¿qué quiere decir con una conversión de selección falsa? –

+0

Solicite una conversión de selección sin tener la intención de recibir los datos. Es decir. llame a gtk_selection_convert(), pero no tenga (o tal vez un trozo) manejador de señal "selection-received". – ergosys

Respuesta

1

¿Has probado gtk_window_get_focus()? Los usuarios interactúan con frecuencia con las entradas, por lo que puede funcionar para usted. La documentación dice que "recupera el widget enfocado actual dentro de la ventana". Puede buscarlo usted mismo here. Luego, compare si el widget recuperado es una de sus entradas.

Una vez que obtenga la entrada enfocada, tal vez le gustaría obtener su texto usando gtk_entry_get_text(), sin embargo, obtendrá todo el texto en la entrada. Si esto no se ajusta a sus propósitos, la solución podría estar usando gtk_editable_copy_clipboard(), que copia los contenidos del contenido seleccionado actualmente en el campo editable (por supuesto, convierte la entrada en editable) y lo coloca en el portapapeles. Luego, si corresponde, pega lo que se copió usando gtk_editable_paste_clipboard().

+0

'g_signal_emit_by_name (entry," copy-clipboard ", NULL)' también funciona para copiar. – ptomato

+0

eso fue lo primero que intenté, pero no funcionó, ya que la entrada enfocada no es necesariamente la entrada con la selección de texto –

Cuestiones relacionadas