2017-12-05 3 views
0

状況私はそれに応じて、プロパティxとyを設定することで、画面上で任意に置くことができる可変サイズ

私はPOP_UPウィジェットを持っている(たとえばテキストボックス)、とウィジェットのジオメトリを取得します。 一方、デフォルトのワイバーにあるプロンプトを使用します。

私は直接、私はまだプロンプトのジオメトリに関する有用な情報を収集することができませんでしたプロンプト

問題

の下POP_UPウィジェットを配置したいと思います

。ジオメトリでは、そのxとyの値とその高さと幅を意味します。私はワイパー自体の高さを使ってyの位置を解いた。 しかし、私はxポジションで立ち往生しています。 ツールバー内でウィジェットの幅を取得する方法はありますか?

通知は私がforced_widthについて何かを読んで、このような状況では、それは私にはハックのように聞こえます。だから、私は任意の幅を強制的に避けることを好むだろう。

は、私は現在のFedora 26

答えて

0

問題の一部に素晴らしいWM 4.2を実行していることは素晴らしいが、ウィジェットが一度に複数の場所に表示することを可能にするため、「」ウィジェットの位置とサイズを持っていないことです。私たちはこの問題を無視する場合は、次のようなものは、仕事ができる(正直に言う:私はこれをテストしていない):

function find_widget_in_wibox(wb, widget) 
    local function find_widget_in_hierarchy(h, widget) 
    if h:get_widget() == widget then 
     return h 
    end 
    local result 
    for _, ch in ipairs(h:get_children()) do 
     result = result or find_widget_in_hierarchy(ch, widget) 
    end 
    return result 
    end 
    local h = wb._drawable._widget_hierarchy 
    return h and find_widget_in_hierarchy(h, widget) 
end 

は、しかし、私は上記の新しいバージョンで破ることができることを警告しなければなりません非公開のAPI(wb._drawable._widget_hierarchyの部分)にアクセスするのですばらしいです。 :find_widgets()を使用して公開APIだけで作業する方法がありますが、今はあまりにも怠惰です。

上記の関数は(素晴らしい4.2のデフォルトの設定では)次のようなものを経由して、プロンプトのジオメトリを取得することができますウィジェットを表すwibox.hierarchyインスタンスを取得します:

最後に
local s = screen.primary -- Pick a screen to work with 
local h = find_widget_in_wibox(s.mywibox, s.mypromptbox) 
local x, y, width, height = h:get_matrix_to_device() 
          :transform_rectangle(0, 0, h:get_size()) 
local geo = s.mywibox:geometry() 
x, y = x + geo.x, y + geo.y 
print(string.format("The widget is inside of the rectangle (%d, %d, %d, %d) on the screen", x, y, width, height) 

、ということに注意してくださいウィジェット階層は、再塗りつぶし時にのみ更新されます。したがって、起動時に上記のコードは何か変更された直後(たとえば、別の文字をプロンプトボックスに入力した直後)にウィジェットを見つけることができませんが、上記の場合でも古いジオメトリを把握できます。

関連する問題