Мне нравится меню индикатора Spotify, которое расширяется каждый раз, когда приложение открыто. Мне не нравится Rhythmbox, который показывает все кнопки все время.
Я хотел бы скрыть кнопки Rew/Play/FF от Rhythmbox, когда приложение неактивно.
Спасибо за помощь.
Звуковой индикатор, без активного игрока (средства запуска только, никакие кнопки управления)
Звуковой индикатор, с активным игроком (кнопки полного контроля)
Имейте те же шаги сборки как 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, никакое изменение.
Загрузите зависимости от сборки и источник
sudo apt-get build-dep indicator-sound
apt-get source indicator-sound
Выберите поведение, которое Вы хотите:
Удалите плеер из меню после близко
Изменить 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
Добавьте новый флаг 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
Изменить 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);