web-dev-qa-db-ja.com

サウンドインジケータメニューを変更して、非アクティブなプレーヤーからコントロールを非表示にするか、閉じた後に削除します

私は、アプリケーションが開くたびに展開するSpotifyのインジケーターメニューが好きです。すべてのボタンが常に表示されるRhythmboxが好きではありません。

アプリケーションがアクティブでない場合、RhythmboxからRew/Play/FFボタンを非表示にしたいと思います。

ご協力ありがとうございました。

5
Diego

サウンドインジケータ、アクティブプレーヤーなし(ランチャーのみ、コントロールボタンなし)

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

サウンドインジケータ、アクティブプレーヤー(フルコントロールボタン)

Sound indicator, with active player (full control buttons)


15.10

14.04と同じビルド手順があります。

  • 閉じる後にメニューからプレーヤーを削除します

    desktopメニューの_src/service.vala_をHIDE_INACTIVE_PLAYERSに変更します。

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

    そして、add_player関数の_src/sound-menu.vala_を、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. 必要な動作を選択します。

    • 閉じる後にメニューからプレーヤーを削除します

      desktopメニューの_src/service.vala_を変更します。

      _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. 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
user.dz