Obter arquivo duplo clique nos argumentos do sistema no aplicativo

0

Eu criei um processador de imagem C ++ para o LINUX que abre um navegador de arquivos quando clicado duas vezes. Quando eu o executo a partir da linha de comando com um argumento de nome de arquivo, ele abre o arquivo. Eu configurei meu sistema para que os arquivos com extensões de imagem usem meu programa para abrir. Infelizmente, em vez de abrir o arquivo como quando iniciado com o nome do arquivo na linha de comando, meu programa age como se não houvesse nenhum parâmetro de nome de arquivo sendo passado para o programa e abrisse o navegador de arquivos.

Minha pergunta é; Como obtenho o argumento filename do O / S no meu programa quando um arquivo de imagem que usa meu programa para abrir é clicado duas vezes? Não consigo encontrar essa informação em nenhum lugar. Estou assumindo que o nome do arquivo está em argv [1], mas obviamente não é. O programa não requer um terminal para ser executado.

Estou executando o Gnome Desktop no CENTOS / Linux 7, todos atualizados. Configure um ícone do Google Desktop que funcione bem para iniciar o aplicativo clicando no ícone. O problema é quando você clica duas vezes em um arquivo de imagem, seu nome não está chegando ao aplicativo, então o navegador aparece. Isso é misterioso, porque todos os argumentos de linha de comando funcionam bem quando executados a partir de um terminal. A grande questão é 'Onde o sistema está colocando o nome do arquivo que foi clicado duas vezes?'

Obrigado.

    
por imagtek 08.11.2017 / 00:30

2 respostas

0

Você usou o arquivo .desktop. A chave Exec precisa de %f , %F , %u ou %U para saber o que processar.

    
por 08.11.2017 / 02:26
0

Resolvido: O aplicativo pode aceitar comandos de composição e carregamento de imagem com script por meio de um arquivo de comando ou via streaming de outro processo. Para fazer isso, o aplicativo estava consultando STDIN por meio da chamada de sistema poll () no topo da árvore de decisão antes de processar os argumentos. Assumiu que, se STDIN não estiver vazio, ele contém um fluxo de comandos para o aplicativo. Isso resultou no O / S criando um novo processo de shell para hospedar o aplicativo. Ao mover a chamada do sistema poll () para o final da árvore de decisão de processamento do argumento, o software se comporta como esperado. Não tenho certeza se a chamada do sistema poll () é a melhor maneira de testar se o STDIN está vazio, mas parece funcionar para esse propósito. Veredito: Erro de design de programação. Minhas desculpas por enviar um problema tão obscuro.

    
por 06.12.2017 / 12:49

Tags