2014-02-20 3 views
2

나는 그놈 작업 공간 사이에서 창을 이동할 수있는 비단뱀 응용 프로그램을 개발하려고합니다. wnck를 사용하여 창과 상호 작용하지만, 작업 공간에서 다른 창으로 창을 이동하는 방법을 알고 싶습니다. 누구나 나를 제안 할 수 있니? 어떻게 파이썬에서 wnck를 사용하여 작업 공간에서 gtk 창을 다른 곳으로 옮길 수 있습니까?

내가 코드를 다음과 같이 시도

screen = wnck.screen_get_default() 
window_list = screen.get_windows() 
titlePattern = re.compile('.*Downloads.*') 
    if len(window_list) == 0: 
     print "No Windows Found" 
    for win in window_list: 
     if(titlePattern.match(win.get_name())): 
      win.move_to_workspace(screen.get_workspace(2)) 

하지만 screen.get_workspace (2) 반환 '없음', 작동 (하지만 창을 이동하지 않습니다!) 내가 screen.get_workspace를 사용하는 경우 동안 (0)를 move_to_workspace 매개 변수로 사용하십시오.

문제를 해결할 수 있습니까?

미리 감사드립니다.

답변

2

screen.get_workspace(2)으로 전화를 걸면 창 관리자에게 작업 공간 2가 없습니다.

코드는 실제로 존재하는 모든 작업 영역에서 작동해야합니다. 그놈 3에서는 이미 윈도우와 빈 작업 영역이있는 모든 작업 공간을 의미합니다. 즉, screen.get_workspace(screen.get_workspace_count() - 1)은 "빈"작업 공간을 제공해야합니다. 마지막 작업 공간이 empy라는 스펙이 없다는 점에 유의하십시오. 이것은 현재 gnome-shell이하는 일입니다.

또한 창 관리자에게 화면의 작업 공간 수를 늘리라고 요청할 수도 있지만 그렇게 할 필요는 없습니다. 그놈 3 창 관리자는하지 않습니다.

아, 그리고 한 가지 Wnck에 대한 기억 : 그것의 창조에서

는 WnckScreen 객체는 X 서버에서 가져온 정보 이 없습니다. 창을 생성 한 직후 ( wnck_screen_get_windows() 또는 wnck_screen_get_workspaces()를 통해 예를 들어) 질의를하면 WnckScreen 객체는 작업 공간이 없거나 화면에 창이 나타나지 않습니다. 시작시 값 비싼 동기 작업을 피하기 위해이 정보는 유휴 소스와 함께 기본 이벤트 루프에서 반입됩니다. 기본 이벤트 루프가 사용되지 않거나 개체를 만든 후 최대한 빨리 정보가 필요한 경우 wnck_screen_force_update()를 사용하여 정보를 명시 적으로 가져올 수 있습니다.

나는 당신의 문제라고 생각하지 않습니다. (이미 윈도우 목록을 가지고 있기 때문에),하지만 나는 심한 함정이기 때문에 이중 검사 만하고 있습니다.

+0

감사합니다. @jku. 그래서 빈 작업 영역에서 창을 이동할 수 없습니까? 나는 그놈 클래식에 대한 작업을하고 있습니다. – sergioska

+0

빈 작업 영역으로 창을 이동하는 것을 막을 수는 없지만 작업 영역이 있어야합니다. 정상적인 그놈 3에는 빈 작업 공간 (마지막 하나)이 항상 있지만 고전적인 모드가 무엇인지 모릅니다. – jku

+0

내 환경에서 작업 공간이 4 개 있습니다 (Ctrl + Alt + 화살표로 점프합니다). 어쩌면 나는 '작업 공간'의 의미를 오해하고있는 것일까? – sergioska

관련 문제