2012-02-09 8 views
1

私はlxpanelの上にとどまるウィンドウを作ろうとしています。本当にウィンドウを他のものより上に置く方法 - Linux PyGTK

は、私は窓がこれは確かに私の上にとどまるのウィンドウを与えない

import gtk 

myWindow = gtk.Window() 

myWindow.set_keep_above(True) 

myWindow.show_all() 

を使用して、アップロードされてしまった、それもドラッグ時にLXpanel上をスライドして管理します。それは他のウィンドウがクリックされたときでも上にとどまりますが、LXpanel自体をクリックすると、lxpanelが上にジャンプし、ウィンドウを後ろに押します。このウィンドウを本当に上に置くにはどうすればいいですか?

答えて

3

この動作は、ウィンドウマネージャによって制御され、実際にはそれほど大したことはできません。

(私のテストでは、それはXfwm4とFluxboxのはキープ上ドック/パネルウィンドウ上のウィンドウ、何EWMH recommendsにもかかわらず置き、おそらくあなたのWMにはないようです。)

しかし、があり、非常に制限された回避策:ユーザーが複数のドック/パネルを持つことはないと仮定すると、そのドックウィンドウに対してウィンドウをtransientに設定することができます。通常(ウィンドウマネージャによって)、これはウィンドウをドックウィンドウの上に保ちます。


更新:X11では、あなたは彼らが同じプロセスでない場合でも、過渡ウィンドウを設定することができます。私が見つけた最も簡単な方法は、libwnckを使ってパネルウィンドウのXIDを取得し、それをgdk_window_foreign_newを使ってGDKにインポートすることです。もちろん、これは非Xシステムでは機能しません。 reference page

import wnck 
screen = wnck.screen_get_default() 
# BUG: There needs to be a small delay between the previous line and the next; 
# otherwise get_windows returns an empty list. 
windows = screen.get_windows() 
panel = windows[1] # For example 
panel_xid = panel.get_xid() 

import gtk 
window = gtk.Window() 
window.show_all() 
window.window.set_transient_for(gtk.gdk.window_foreign_new(panel_xid)) 
+0

?私は家に帰るとき、これを試してみたいと熱望しています。 何かが一時的なものであれば、それが唯一のものが焦点を持つことができるという意味ではありませんか?それともモーダルですか? –

+0

myWindow.set_transient_for(親)でlxpanelを参照する方法についてちょっと混乱しています 私自身のパネルを作成していた場合、これを親子関係で簡単に設定できましたが、myWindow同じプログラムに関係しない他のウィンドウの子プロセスですか? –

+0

Fruckubus Crunt:更新を参照してください。 –

1

gtk.Window.set_keep_aboveが尊重されない場合がありますウィンドウマネージャにだけ要求されるので、私はそれはそれは、すべての状況下で実現する可能性は低いと言うだろうと述べています。

とにかく、それはまた、情報の興味深い作品を提供します:

あなたはgtk.Widget「window_state_event」信号を介して上記の状態を追跡することができます。

おそらくgtk.Window.set_keep_aboveができるだけ早く再度呼び出されるように、その信号のコールバックを設定しようとすることができます。

0

あなたはこのようにそれを行うことができます:私は唯一の彼らの親に物事が一時作ることができると思った

window = gtk.Window(gtk.WINDOW_POPUP) 
+0

このウィンドウにはタイトルバーがありません。 – shyam

関連する問題