Измените звуковое меню индикатора, чтобы скрыть средства управления от неактивного игрока или удалить его после closeing

Мне нравится меню индикатора Spotify, которое расширяется каждый раз, когда приложение открыто. Мне не нравится Rhythmbox, который показывает все кнопки все время.

Я хотел бы скрыть кнопки Rew/Play/FF от Rhythmbox, когда приложение неактивно.

Спасибо за помощь.

5
задан 24 May 2014 в 10:23

1 ответ

Звуковой индикатор, без активного игрока (средства запуска только, никакие кнопки управления)

Sound indicator, with no active player (launchers only, no control buttons)

Звуковой индикатор, с активным игроком (кнопки полного контроля)

Sound indicator, with active player (full control buttons)


15.10

Имейте те же шаги сборки как 14,04.

  • Удалите плеер из меню после близко

    Изменить src/service.vala для desktop меню к HIDE_INACTIVE_PLAYERS.

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

    И измените src/sound-menu.vala для функции add_player к remove_player_section, если это не работает и скрывается неактивный, установлен.

    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);
    
  • Скройте средства управления плеера (Предыдущие/Играть/Следующие) от меню после близко, сохраните только его средство запуска

    То же как 14,04, никакое изменение.


14.04

  1. Загрузите зависимости от сборки и источник

    sudo apt-get build-dep indicator-sound
    apt-get source indicator-sound
    
  2. Выберите поведение, которое Вы хотите:

    • Удалите плеер из меню после близко

      Изменить src/service.vala для desktop меню.

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

      Я добавил | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS, Можно удалить SoundMenu.DisplayFlags.SHOW_MUTE | если Вы хотите, скрывают регулятор громкости с плеерами с отключенным звуком.

    • Скройте средства управления плеера (Предыдущие/Играть/Следующие) от меню после близко, сохраните только его средство запуска

      Изменить src/sound-menu.vala

      1. Добавьте новый флаг HIDE_INACTIVE_PLAYERS_CONTROLS = 128 с , в конце предыдущей строки.

        public enum DisplayFlags {
            NONE = 0,
            SHOW_MUTE = 1,
            HIDE_INACTIVE_PLAYERS = 2,
            HIDE_PLAYERS = 4,
            HIDE_INACTIVE_PLAYERS_CONTROLS = 128
        }
        
      2. Добавить bool hide_inactive_controls; переменная для содержания состояния флага

        bool hide_inactive;
        bool hide_inactive_controls;
        bool hide_players = false;
        
      3. Добавить this.hide_inactive_controls =... строка. передать флаговый параметр конструктора SoundMenu его переменной.

        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. Добавить if (player.is_running || !this.hide_inactive_controls) { и }. переносить инструкции, которые создают (предыдущий/играть/следующий) в пункте меню. Таким образом, они не создаются, только если плеер работает, или скройтесь, флаг неактивен.

        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. Добавить if (this.hide_inactive_controls) { к затем }. Вызвать воссоздание раздела меню плеера когда плеер is-running изменения состояния.

        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. Наконец, изменить src/service.vala. Добавьте наш новый созданный флаг | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS_CONTROLS кому: desktop меню.

        this.menus.insert ("desktop", new SoundMenu ("indicator.desktop-settings", SoundMenu.DisplayFlags.SHOW_MUTE | SoundMenu.DisplayFlags.HIDE_INACTIVE_PLAYERS_CONTROLS));
        
  3. Сборка и установка

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

Теперь, плееры исчезнут после закрытия их.


12.04

  1. Загрузите зависимости от сборки и источник

    sudo apt-get build-dep indicator-sound
    apt-get source indicator-sound
    
  2. Изменить src/player-controller.vala, Замена "rhythmbox.desktop" с "xrhythmbox.desktop" в этих двух случаях. (просто другое имя)

  3. Сборка и установка

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

Примечание: Это было быстрым приемом, корректный путь может быть:

  • Замена

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

    с

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

    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);         
    }
    

    с

    this.custom_items[widget_order.TRANSPORT].property_set_bool (MENUITEM_PROP_VISIBLE,
                                                               true);
    
4
ответ дан 23 November 2019 в 09:34

Другие вопросы по тегам:

Похожие вопросы: