2017-12-05 15 views
0

상황I 적절히 특성 X와 Y를 설정하여 화면 상에 임의로 배치 할 수있는 가변 크기

I는 POP_UP 위젯이 (예를 들어 텍스트 상자)에 위젯의 형상을 얻기. 반면에 기본 wibar에있는 프롬프트를 사용합니다.

내가 직접 내가 아직 프롬프트의 형상에 대한 유용한 정보를 수집 할 수 없습니다 프롬프트

문제

아래 POP_UP 위젯을 배치 할

. 기하학이란 높이와 너비와 함께 x와 y 값을 의미합니다. 나는 와이 바 자체의 높이를 사용하여 y- 위치를 풀었다. 하지만 x- 위치 확인 기능이 붙어 있습니다. 툴바에서 위젯의 너비를 가져 오는 방법이 있습니까?

공지 사항 나는 forced_width에 대해 뭔가를 읽을 수 있지만이 상황에서 나에게 해킹처럼 들린다. 그래서 나는 어떤 폭도 강요하는 것을 피하기를 원할 것이다.

내가 현재 페도라 26

답변

0

문제의 일부에 멋진 WM 4.2을 실행하고있어 멋진 위젯 한 번에 여러 위치에 표시 할 수 있기 때문에 "A"위젯은 위치와 크기를하지 않는다는 것입니다. 우리가이 문제를 무시할 경우, 다음과 같은 것을 일할 수있는 (정직하기 :이 테스트하지 않았다) :

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) 

을 그 위젯 계층은 다시 칠 때만 업데이트됩니다. 따라서 위의 코드는 시작시 위젯을 전혀 찾지 못하고 변경된 후에 (예 : 다른 문자를 프롬프트 상자에 입력 한 경우) 위의 코드는 이전의 형상을 여전히 "파악"합니다.