Modifique o menu indicador de som para ocultar os controles do player inativo ou removê-lo após o fechamento

5

Eu gosto do menu indicador do Spotify, que se expande sempre que o aplicativo é aberto. Eu não gosto do Rhythmbox, que mostra todos os botões o tempo todo.

Gostaria de ocultar os botões Rew / Play / FF do Rhythmbox quando o aplicativo estiver inativo.

Obrigado pela sua ajuda.

    
por Diego 16.03.2014 / 22:28

1 resposta

4

Indicador de som, sem player ativo (somente lançadores, sem botões de controle)

Indicador de som, com o player ativo (botões de controle total)

15.10

Tenha os mesmos passos de construção como 14.04.

  • Remover jogador do menu depois de fechar

    Modifique src/service.vala do menu desktop para HIDE_INACTIVE_PLAYERS.

    this.menus.insert ("desktop", new SoundMenu ("indicator.desktop-settings", SoundMenu.DisplayFlags.SHOW_MUTE|SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS));
    

    E modifique src/sound-menu.vala para a função add_player para remove_player_section, se ele não estiver em execução & amp; ocultar inativo está definido.

    public void add_player (MediaPlayer player) {
        if (this.notify_handlers.contains (player))
            return;
    
        if (player.is_running || !this.hide_inactive)
                this.insert_player_section (player);
            else         
                this.remove_player_section (player);
        this.update_playlists (player);
    
  • Ocultar os controles do player (Anterior / Reproduzir / Próximo) no menu depois de fechar, mantenha apenas o inicializador

    O mesmo que 14.04, sem alteração.

14,04

  1. Download de dependências e fontes de compilação

    sudo apt-get build-dep indicator-sound
    apt-get source indicator-sound
    
  2. Escolha o comportamento que você deseja:

    • Remover jogador do menu depois de fechar

      Modifique src/service.vala para o menu desktop .

      this.menus.insert ("desktop", new SoundMenu ("indicator.desktop-settings", SoundMenu.DisplayFlags.SHOW_MUTE | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS));
      

      Eu adicionei | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS , você pode remover SoundMenu.DisplayFlags.SHOW_MUTE | se quiser ocultar o controle de volume com players suaves.

    • Ocultar os controles do player (Anterior / Reproduzir / Próximo) no menu depois de fechar, mantenha apenas o inicializador

      Modifique src/sound-menu.vala

      1. Adicione um novo sinalizador HIDE_INACTIVE_PLAYERS_CONTROLS = 128 com , no final da linha anterior.

        public enum DisplayFlags {
            NONE = 0,
            SHOW_MUTE = 1,
            HIDE_INACTIVE_PLAYERS = 2,
            HIDE_PLAYERS = 4,
            HIDE_INACTIVE_PLAYERS_CONTROLS = 128
        }
        
      2. Adicione a variável bool hide_inactive_controls; para manter o status do sinalizador

        bool hide_inactive;
        bool hide_inactive_controls;
        bool hide_players = false;
        
      3. Adicione a linha this.hide_inactive_controls =... . para passar o parâmetro de sinalizador de construtor SoundMenu para sua variável.

        this.hide_inactive = (flags & DisplayFlags.HIDE_INACTIVE_PLAYERS) != 0;
        this.hide_inactive_controls = (flags & DisplayFlags.HIDE_INACTIVE_PLAYERS_CONTROLS) != 0;
        this.notify_handlers = new HashTable<MediaPlayer, ulong> (direct_hash, direct_equal);
        
      4. Adicione if (player.is_running || !this.hide_inactive_controls) { e } . para embrulhar instruções que criam (prev / play / next) no item de menu. Portanto, eles não são criados somente se o player estiver em execução ou o sinalizador de ocultar estiver inativo.

        if (player.is_running || !this.hide_inactive_controls) {
            var playback_item = new MenuItem (null, null);
            playback_item.set_attribute ("x-canonical-type", "s", "com.canonical.unity.playback-item");
            playback_item.set_attribute ("x-canonical-play-action", "s", "indicator.play." + player.id);
            playback_item.set_attribute ("x-canonical-next-action", "s", "indicator.next." + player.id);
            playback_item.set_attribute ("x-canonical-previous-action", "s", "indicator.previous." + player.id);
            section.append_item (playback_item);
        }
        
      5. Adicione if (this.hide_inactive_controls) { ao próximo } . Para forçar a recriação da seção do menu do player quando o estado is-running do player for alterado.

        var handler_id = player.notify["is-running"].connect ( () => {
            if (this.hide_inactive) {
                if (player.is_running) {
                    this.insert_player_section (player);
                }
                else {
                    this.remove_player_section (player);
                }
            }
            if (this.hide_inactive_controls) {
                this.remove_player_section (player);
                this.insert_player_section (player);
            }
            this.update_playlists (player);
        });
        
      6. Por fim, modifique src/service.vala . Adicione nosso novo sinalizador criado | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS_CONTROLS ao menu desktop .

        this.menus.insert ("desktop", new SoundMenu ("indicator.desktop-settings", SoundMenu.DisplayFlags.SHOW_MUTE | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS_CONTROLS));
        
  3. Compile e instale

    cd indicator-sound-12.10.2+14.04.20140313/
    mkdir build
    cd build/
    cmake ..
    make
    sudo make install
    

Agora, os jogadores desaparecerão depois de fechá-los.

12,04

  1. Download de dependências e fontes de compilação

    sudo apt-get build-dep indicator-sound
    apt-get source indicator-sound
    
  2. Modifique src/player-controller.vala , Substitua "rhythmbox.desktop" por "xrhythmbox.desktop" nas duas ocorrências. (apenas nome diferente)

  3. Compile e instale

    cd indicator-sound-0.8.5.0/
    ./configure
    make
    make install
    

Nota: Esse foi um truque rápido, a maneira correta pode ser:

  • Substituir

      this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE,
                                                              this.app_info.get_id() == "rhythmbox.desktop"); 
    

    com

      this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE,
                                                              false); 
    
  • e

    if (this.app_info.get_id() == "rhythmbox.desktop"){
      TransportMenuitem transport = this.custom_items[widget_order.TRANSPORT] as TransportMenuitem;
      transport.handle_cached_action();
    }
    else{
      this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE,
                                                               true);         
    }
    

    com

    this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE,
                                                               true);
    
por user.dz 17.03.2014 / 23:26