Rhythmboxで1曲ループを実現する −2−

今度こそ中身を見ていきます。

 

それでは早速Rhythmboxのソースをダウンロードして解凍しましょう。

今回扱うRhythmboxのバージョンは3.0.2です。しかし後述する改変を行えば3.4.1でも問題なく動作しますのでご安心を。

 

解凍するとrhythmbox-3.0.2というディレクトリが出来ると思います。

まず手始めに1曲ループ用のボタンを配置します。

 バックアップを取っておくと◎

 

rhythmbox-3.0.2/data/ui/main-toolbar.uiテキストエディタで開きます。

ここで記述されているのは、

f:id:kackoh:20161020122010p:plain

ここらへんのUIです(適当)

 

実際に中身を見るとまずこんな記述があると思います。

<object class="GtkImage" id="image1">
  <property name="visible">True</property>
  <property name="pixel_size">24</property>
  <property name="icon_name">media-playlist-shuffle-symbolic</property>
</object>

 

ここではgtk+を用いてアイコン画像を作っています。注目して頂きたいのは4行目のmedia-playlist-shuffle-symbolicという部分です。

当初、なんらかの画像ファイルを指定したりしてアイコンにしているのかな? と思ったのですが、どうやらgtk+に組み込まれたアイコンデータがあるようです。

末尾が-symbolicとなっているものは基本的にこういったアイコンデータを指しているみたいですね。なるほどなるほど。

 

また、1行目ではGtkImageクラスのオブジェクトにIDとしてimage1を振っています。続けて見ていくと同じようなものがimage1〜image5まで存在していることが確認できると思うので、ここにimage6として1曲ループボタン(のアイコン)を定義します。

(前略)
<object class="GtkImage" id="image5">
  <property name="visible">True</property>
  <property name="can_focus">False</property>
  <property name="xpad">8</property>
  <property name="ypad">9</property>
  <property name="pixel_size">24</property>
  <property name="icon_name">media-skip-backward-symbolic</property>
</object>
<object class="GtkImage" id="image6">
  <property name="visible">True</property>
  <property name="can_focus">False</property>
  <property name="pixel_size">24</property>
  <property name="icon_name">media-playlist-repeat-song-symbolic</property>
</object>
(後略)

 

青文字の部分を追加すればOKです。media-playlist-repeat-song-symbolicなんていうアイコンが用意されているのに1曲ループを実装しないRhythmboxさんェ……

 

次はボタンを配置します。main-toolbar.uiの以下の部分↓

<child>
  <object class="GtkToggleButton" id="repeat-button">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <property name="action_name">app.play-repeat</property>
    <property name="image">image2</property>
    <style>
      <class name="raised" />
    </style>
  </object>
  <packing>
    <property name="expand">False</property>
    <property name="fill">True</property>
    <property name="position">0</property>
  </packing>
</child>
<child>
  <object class="GtkToggleButton" id="shuffle-button">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <property name="action_name">app.play-shuffle</property>
    <property name="image">image1</property>
    <style>
      <class name="raised" />
    </style>
  </object>
  <packing>
    <property name="expand">False</property>
    <property name="fill">True</property>
    <property name="position">1</property>
  </packing>
</child>

 

 これを次のように変えます。

<child>
  <object class="GtkToggleButton" id="repeat1-button">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <property name="action_name">app.play-repeat1</property>
    <property name="image">image6</property>
    <style>
      <class name="raised" />
    </style>
  </object>
  <packing>
    <property name="expand">False</property>
    <property name="fill">True</property>
    <property name="position">0</property>
  </packing>
</child>
<child>
  <object class="GtkToggleButton" id="repeat-button">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <property name="action_name">app.play-repeat</property>
    <property name="image">image2</property>
    <style>
      <class name="raised" />
    </style>
  </object>
  <packing>
    <property name="expand">False</property>
    <property name="fill">True</property>
    <property name="position">1</property>
  </packing>
</child>
<child>
  <object class="GtkToggleButton" id="shuffle-button">
    <property name="visible">True</property>
    <property name="can_focus">True</property>
    <property name="receives_default">True</property>
    <property name="action_name">app.play-shuffle</property>
    <property name="image">image1</property>
    <style>
      <class name="raised" />
    </style>
  </object>
  <packing>
    <property name="expand">False</property>
    <property name="fill">True</property>
    <property name="position">2</property>
  </packing>
</child>

 

これで1曲ループ用のボタンが配置できます。positionは0を左端としてどの順番で並べるかを決めるオプションです。今回は[1曲ループ][ループ][シャッフル]の順で並べています。

 

これでmain-toolbar.uiに対する変更は完了です。

次回は1曲ループ動作を実現します。