私は、アプリケーションが開くたびに展開するSpotifyのインジケーターメニューが好きです。すべてのボタンが常に表示されるRhythmboxが好きではありません。
アプリケーションがアクティブでない場合、RhythmboxからRew/Play/FFボタンを非表示にしたいと思います。
ご協力ありがとうございました。
サウンドインジケータ、アクティブプレーヤーなし(ランチャーのみ、コントロールボタンなし)
サウンドインジケータ、アクティブプレーヤー(フルコントロールボタン)
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と同じ、変更なし。
ビルドの依存関係とソースをダウンロードする
_Sudo apt-get build-dep indicator-sound
apt-get source indicator-sound
_
必要な動作を選択します。
閉じる後にメニューからプレーヤーを削除します
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
_
前の行の最後に_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
}
_
_bool hide_inactive_controls;
_変数を追加して、フラグの状態を保持します
_bool hide_inactive;
bool hide_inactive_controls;
bool hide_players = false;
_
_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);
_
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);
}
_
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);
});
_
最後に、_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));
_
ビルドとインストール
_cd indicator-sound-12.10.2+14.04.20140313/
mkdir build
cd build/
cmake ..
make
Sudo make install
_
これで、プレイヤーは閉じた後に消えます。
ビルドの依存関係とソースをダウンロードする
_Sudo apt-get build-dep indicator-sound
apt-get source indicator-sound
_
2つのオカレンスで_src/player-controller.vala
_を変更し、_"rhythmbox.desktop"
_を_"xrhythmbox.desktop"
_に置き換えます。 (ちょうど異なる名前)
ビルドとインストール
_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);
_