Copiando o texto de um MessageDialog GTK
-
15-09-2020 - |
Pergunta
Com uma caixa de diálogo de erro do Windows, posso usar CTRL-C para copiar o texto da janela.
Gostaria de permitir que os usuários fizessem o mesmo com as caixas de diálogo de mensagens que estou usando em meu aplicativo GTK.
Existe uma maneira de permitir que uma classe GTK MessageDialog lide com o comando de cópia?
Solução
O que acabei fazendo foi adicionar um manipulador de mensagens à caixa de diálogo para prender o comando do teclado.
Quando isso foi acionado, verifiquei o combo Ctrl-C e coloque o texto na área de transferência lá.
Outras dicas
Existe uma maneira mais simples de fazer isso.Chame _set_lables_selectable() com a caixa de diálogo, após gtk_message_dialog_new()
static void _set_label_selectable(gpointer data, gpointer user_data)
{
GtkWidget *widget = GTK_WIDGET(data);
if (GTK_IS_LABEL(widget))
{
gtk_label_set_selectable(GTK_LABEL(widget), TRUE);
}
}
static void _set_lables_selectable(GtkWidget *dialog)
{
GtkWidget *area = gtk_message_dialog_get_message_area(
GTK_MESSAGE_DIALOG(dialog));
GtkContainer *box = (GtkContainer *) area;
GList *children = gtk_container_get_children(box);
g_list_foreach(children, _set_label_selectable, NULL);
g_list_free(children);
}
exemplo
GtkWidget *dialog = gtk_message_dialog_new(opgU_window,
GTK_DIALOG_DESTROY_WITH_PARENT,
GTK_MESSAGE_QUESTION,
GTK_BUTTONS_YES_NO,
"%s", mbuf);
_set_lables_selectable(dialog);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow