JDimproved / JDim

2ch browser for linux
https://jdimproved.github.io/JDim/
GNU General Public License v2.0
44 stars 11 forks source link

JDimを多重起動したときは起動中のウインドウをデスクトップ画面の最前面に表示する #1368

Closed ma8ma closed 3 months ago

ma8ma commented 3 months ago

JDimを多重起動したときは起動中のウインドウをデスクトップ画面の最前面に表示する

背景や動機

GNOMEをはじめとするGTKアプリケーションはプログラムが多重起動しないように一意性の管理が導入されています。 JDimはGTKの機能を使っていませんが独自に多重起動の管理を実装しています。

現状のJDimは一般的なGTKアプリと起動処理に違いがあり他のアプリと同じように扱うことができません。

アプリケーション 起動中にプログラムを実行したときの挙動(多重起動)
一般的なGTKアプリ 起動中のウインドウをデスクトップ画面の最前面に表示する
webブラウザ 新しいウインドウを表示する
JDim 多重起動するかダイアログで確認する(「はい」ならウインドウを追加、「いいえ」なら何もしない)

JDimにはマルチモード(コマンドライン引数 --multiまたは-m)がありメインウインドウを複数表示することができます。 明示的にマルチモードを指定しない場合でも 多重起動したときに確認ダイアログを表示してウインドウを追加するか、または何もしないか選択する仕組みになっています。

しかし、ダイアログを表示して起動を一時中断するのは不意の出来事なので 自動的にマルチモード(多重起動)にするか、または起動中のウインドウをデスクトップ画面の最前面に表示するほうが自然な動作と感じます。

解決方法

マルチモード(-m)を指定しない場合は多重起動したときに確認ダイアログを表示するのを止めて 一般的なGTKアプリの起動と同じように起動中のウインドウをデスクトップ画面の最前面に表示するように変更します。

現在の挙動はバグではありませんがGNOMEやGTKのやり方に合せたほうが使い勝手が良くなると考えています。

代替案

追加の情報

「ウインドウを最前面に表示する」動作は gtk_window_present() のAPIを使う予定ですが デスクトップ環境によって挙動が異なる可能性があります。

多重起動のオンラインマニュアル https://jdimproved.github.io/JDim/start/#multiple

5chのレス https://mao.5ch.net/test/read.cgi/linux/1640504277/344 https://mao.5ch.net/test/read.cgi/linux/1640504277/412

ma8ma commented 3 months ago

gtk_window_present()が上手く動作するか分からない状態でしたが、GTKの情報を集めたところ同じような問題にあった方がいました。

どうやらgtk_window_present_with_time()g_get_monotonic_time()を組み合わせると期待通り動作するようです。