? mattintosh note ?

Hello Raspberry Pi!

Nihonshu シリーズでメニューバーの自動非表示を無効にできないの?という話

以前から何度か問い合わせがあるのですが、切り替え設定とかは特に用意してません。

Cocoa アプリケーションはバンドルの中にあるプロパティリストで Application UI Presentation Mode の値を追加したり変更することでこの動作を変更できることがあります。しかし、strings wine を実行してみていただくとわかるかと思いますが Wine の場合は実行ファイルにプロパティリストが埋め込まれているのでこの方法が使えません(1文字ならバイナリエディタで無理矢理書き換えもできなくはなさそうですが)。

OS X でのウィンドウ関連の制御は lib/wine/winemac.drv.so が行っているようなのでこちらを差し替えることによってメニューバーの動作を戻すことはできるようです。

この方法はパッチが適用されていない上記のファイルが必要になるので自分で Wine をビルドしているか、Homebrew や MacPorts で Wine をインストールしておく必要があります。

ここでは例として EasyWine.app 内のライブラリの置き換えをしてみます。

外部の Wine ライブラリで上書きする場合

# Homebrew users
cp /usr/local/lib/wine/winemac.drv.so \
   EasyWine.app/Contents/Resources/wine/lib/wine/winemac.drv.so

# MacPorts users
cp /opt/local/lib/wine/winemac.drv.so \
   EasyWine.app/Contents/Resources/wine/lib/wine/winemac.drv.so

シンボリックリンクによって使い分ける場合

既存ライブラリをリネーム(バックアップ)します。

mv EasyWine.app/Contents/Resources/wine/lib/wine/winemac.drv.so \
   EasyWine.app/Contents/Resources/wine/lib/wine/winemac_nihonshu.drv.so

外部の Wine ライブラリをコピーしてきます。とりあえず winemac_default.drv.so としておきます。

cp /usr/local/lib/wine/winemac.drv.so \
   EasyWine.app/Contents/Resources/wine/lib/wine/winemac_default.drv.so

使いたいライブラリに向けてシンボリックリンクを配置します。

ln -s winemac_default.drv.so \
      EasyWine.app/Contents/Resources/wine/lib/wine/winemac.drv.so

ライブラリを切り替える場合はシンボリックリンクrm してからリンクを再配置するか -f で上書きします。

ln -fs winemac_nihonshu.drv.so \
       EasyWine.app/contents/Resources/wine/lib/wine/winemac.drv.so

以上の方法でメニューバーの動作が使用するライブラリによって変わるはずです。

次のバージョンではパッチ適用済みとパッチ未適用の winemac.drv.so を用意し、シンボリックリンクによってユーザがライブラリを切り替えられるような仕様に変更しようかと思っています。

あ………Command+Q のキーバインドとかもパッチで変えてあるのでその辺は標準の Command+Option+Q になりますね。