Evince: mudanças entre as edições

De Pontão Nós Digitais
Ir para navegaçãoIr para pesquisar
Sem resumo de edição
 
(14 revisões intermediárias por 2 usuários não estão sendo mostradas)
Linha 1: Linha 1:
==Evince==
==O que é?==


Evince é um visualizador de documentos de múltiplos formatos.
Evince é um visualizador de documentos de múltiplos formatos.


O seu objetivo é substituir os diversos visualizadores (diferentes) de documentos que existe no GNOME por apenas um aplicativo simples.
O seu objetivo é substituir os diversos visualizadores (diferentes) de documentos que existe no GNOME por apenas um aplicativo simples.


==Git==
==Git==
Linha 16: Linha 15:
<pre>git clone git://git.freedesktop.org/git/poppler/poppler</pre>
<pre>git clone git://git.freedesktop.org/git/poppler/poppler</pre>


Outros [[comandos]]
==Informações==
[http://live.gnome.org/Evince/BugLists Bug List]
[http://mail.gnome.org/mailman/listinfo/evince-list/ Lista de e-mail do Evince]
[http://developer.gnome.org/libevview/3.0/ Documentação do Código]
IRC: <nowiki>#evince</nowiki> , no servidor  irc.gimp.net


==Desenvolvimento==
==Desenvolvimento==
===Nivaldo Bondança===
===Nivaldo Bondança===


- A princípio tive basante dificuldade com as dependências.
- A princípio, na parte de compilação, tive basante dificuldade com as dependências.


- Acabei tendo que pegar as versões mais recentes das autotools do linux para poder compilar o código.
- Acabei tendo que pegar as versões mais recentes das autotools do linux para poder compilar o código.


- Agora que o programa já está compilado apenas falta a análise do código e então poderei realizar as alterações.
- Tentei por bastante tempo consertar alguns bugs, mas descobri que isso não é muito possível sem conhecer a biblioteca Gtk.


- Depois de estudar bastante a Gtk, consegui consertar um bug e até já postei o patch.


===Daniel Calocci===
===Daniel Calocci===
Linha 33: Linha 45:
===Alexandre Koji Imai Negrão===
===Alexandre Koji Imai Negrão===


pacotes mais problemáticos:
==== Compilando ====
Pacotes mais problemáticos:


  gtk+ - http://ftp.gnome.org/pub/gnome/sources/gtk+/3.0/gtk+-3.0.10.tar.gz
  gtk+ - http://ftp.gnome.org/pub/gnome/sources/gtk+/3.0/gtk+-3.0.10.tar.gz
Linha 39: Linha 52:
  gnome-keyring - sudo apt-get install libgnome-keyring-dev
  gnome-keyring - sudo apt-get install libgnome-keyring-dev


comando de configuração:
Comando de configuração:


  ./autogen.sh --disable-nautilus
  ./autogen.sh --disable-nautilus


sem o disable nautilus não foi.
Sem o disable nautilus não foi.


Vídeo do dia(13/07/2011): http://vimeo.com/26397065
Vídeo do dia(13/07/2011): http://vimeo.com/26397065
Linha 49: Linha 62:
Problema com as libraries depois da instalação, na hora de executar o Evince - sudo ldconfig
Problema com as libraries depois da instalação, na hora de executar o Evince - sudo ldconfig
   
   
O Evince rodou!
==== Corrigindo um bug ====
A primeira dificuldade consistia em encontrar um bug que eu conseguisse resolver, considerando o tamanho do projeto, para resolver um bug até sexta-feira teria que ser algo simples.
Fui para a lista de bugs do Evince e procurei um "Easy fix": https://bugzilla.gnome.org/show_bug.cgi?id=648115
 
A facilidade nesse bug era a string. Sabia que ela deveria aparecer completa em algum lugar, fui até a pasta do Evince e digitei:
 
find . -name "*.c" | xargs grep -in "end of presentation"
 
o que retornou o arquivo /libview/ev-view-presentation.c
 
Dentro do arquivo, houve grande dificuldade em entender o código, principalmente por eu não conhecer o Gtk.
Após estudar um pouco da teoria de signals e callbacks do Gtk, pude ter uma compreensão muito melhor, assim tentei traçar a origem da chamada do "end of presentation", e concomitantemente, do clique do mouse que faria sair da apresentação.
 
ev_view_presentation_draw_end_page () -> ev_view_presentation_draw ()
 
case EV_PRESENTATION_END:
                ev_view_presentation_draw_end_page (pview, cr);
 
descobri a flag booleana que marcava a condição de fim da apresentação, resolvi traçar ela e encontrei a função que levantava essa flag:
 
ev_view_presentation_set_end () -> ev_view_presentation_next_page ()
 
consequentemente, cheguei na função:
 
ev_view_presentation_change_page ()
 
Esta função era a que decidia a mudança de páginas e possuia uma flag booleana (GTK_SCROLL_PAGE_FORWARD) que decidia quando ir para a próxima página da apresentação.
Assim sendo, eu já saberia onde editar para corrigir o bug. resolvi seguir a flag para ver se encontrava o clique do mouse/setas associad@s a flag.
eis o que encontrei:
add_change_page_binding_keypad (binding_set, GDK_KEY_Right, 0, GTK_SCROLL_PAGE_FORWARD);
add_change_page_binding_keypad (binding_set, GDK_KEY_Down,  0, GTK_SCROLL_PAGE_FORWARD);
chegando na função ev_view_presentation_class_init (), onde todos os bindings estavam sendo inicializados. Assim pude ver todas as funções relacionadas às teclas e ao mouse.
 
widget_class->button_release_event = ev_view_presentation_button_release_event;
 
Sabia que esse evento estava relacionado ao mouse, pois se estivesse ao teclado não seria 'button', seria 'key'. Dentro da função encontrei o que eu esperava:
 
  if (pview->state == EV_PRESENTATION_END) {
                        g_signal_emit (pview, signals[FINISHED], 0, NULL);
 
Sendo este exatamente o sinal de final de apresentação emitido pelo mouse somente quando a flag EV_PRESENTATION_END estava levantada(na tela preta do final da apresentação), não hesitei em usá-lo para terminar a apresentação de outra forma.
 
[[Category:Lab Macambira]]

Edição atual tal como às 18h58min de 22 de julho de 2011

O que é?

Evince é um visualizador de documentos de múltiplos formatos.

O seu objetivo é substituir os diversos visualizadores (diferentes) de documentos que existe no GNOME por apenas um aplicativo simples.

Git

Para obter a última versão do evince pelo git, pode-se usar o comando

git clone git://git.gnome.org/evince

E também será necessário utilizar algumas bibliotecas do poppler,

git clone git://git.freedesktop.org/git/poppler/poppler

Outros comandos

Informações

Bug List

Lista de e-mail do Evince

Documentação do Código

IRC: #evince , no servidor irc.gimp.net

Desenvolvimento

Nivaldo Bondança

- A princípio, na parte de compilação, tive basante dificuldade com as dependências.

- Acabei tendo que pegar as versões mais recentes das autotools do linux para poder compilar o código.

- Tentei por bastante tempo consertar alguns bugs, mas descobri que isso não é muito possível sem conhecer a biblioteca Gtk.

- Depois de estudar bastante a Gtk, consegui consertar um bug e até já postei o patch.

Daniel Calocci

Primeiras Experiências

Alexandre Koji Imai Negrão

Compilando

Pacotes mais problemáticos:

gtk+ - http://ftp.gnome.org/pub/gnome/sources/gtk+/3.0/gtk+-3.0.10.tar.gz
gio - sudo apt-get install libghc6-gio-dev
gnome-keyring - sudo apt-get install libgnome-keyring-dev

Comando de configuração:

./autogen.sh --disable-nautilus

Sem o disable nautilus não foi.

Vídeo do dia(13/07/2011): http://vimeo.com/26397065

Problema com as libraries depois da instalação, na hora de executar o Evince - sudo ldconfig

Corrigindo um bug

A primeira dificuldade consistia em encontrar um bug que eu conseguisse resolver, considerando o tamanho do projeto, para resolver um bug até sexta-feira teria que ser algo simples. Fui para a lista de bugs do Evince e procurei um "Easy fix": https://bugzilla.gnome.org/show_bug.cgi?id=648115

A facilidade nesse bug era a string. Sabia que ela deveria aparecer completa em algum lugar, fui até a pasta do Evince e digitei:

find . -name "*.c" | xargs grep -in "end of presentation"

o que retornou o arquivo /libview/ev-view-presentation.c

Dentro do arquivo, houve grande dificuldade em entender o código, principalmente por eu não conhecer o Gtk. Após estudar um pouco da teoria de signals e callbacks do Gtk, pude ter uma compreensão muito melhor, assim tentei traçar a origem da chamada do "end of presentation", e concomitantemente, do clique do mouse que faria sair da apresentação.

ev_view_presentation_draw_end_page () -> ev_view_presentation_draw ()
case EV_PRESENTATION_END:
               ev_view_presentation_draw_end_page (pview, cr);

descobri a flag booleana que marcava a condição de fim da apresentação, resolvi traçar ela e encontrei a função que levantava essa flag:

ev_view_presentation_set_end () -> ev_view_presentation_next_page ()

consequentemente, cheguei na função:

ev_view_presentation_change_page ()

Esta função era a que decidia a mudança de páginas e possuia uma flag booleana (GTK_SCROLL_PAGE_FORWARD) que decidia quando ir para a próxima página da apresentação. Assim sendo, eu já saberia onde editar para corrigir o bug. resolvi seguir a flag para ver se encontrava o clique do mouse/setas associad@s a flag. eis o que encontrei:

add_change_page_binding_keypad (binding_set, GDK_KEY_Right, 0, GTK_SCROLL_PAGE_FORWARD);
add_change_page_binding_keypad (binding_set, GDK_KEY_Down,  0, GTK_SCROLL_PAGE_FORWARD);

chegando na função ev_view_presentation_class_init (), onde todos os bindings estavam sendo inicializados. Assim pude ver todas as funções relacionadas às teclas e ao mouse.

widget_class->button_release_event = ev_view_presentation_button_release_event;

Sabia que esse evento estava relacionado ao mouse, pois se estivesse ao teclado não seria 'button', seria 'key'. Dentro da função encontrei o que eu esperava:

 if (pview->state == EV_PRESENTATION_END) {
                       g_signal_emit (pview, signals[FINISHED], 0, NULL);

Sendo este exatamente o sinal de final de apresentação emitido pelo mouse somente quando a flag EV_PRESENTATION_END estava levantada(na tela preta do final da apresentação), não hesitei em usá-lo para terminar a apresentação de outra forma.