2012-01-31 42 views
6

Tôi đang viết và ứng dụng OpenGL trên Linux (Ubuntu 11.10) bằng Xlib (X11). Cách đơn giản nhất để thực hiện chuyển đổi giữa chế độ cửa sổ và chế độ toàn màn hình là gì?X11 Cửa sổ toàn màn hình (OpenGL)

Trả lời

4

ở cấp giao thức, xem thuộc tính _NET_WM_STATE với thư khách hàng đi kèm và cờ trạng thái toàn màn hình. điều này được quy định trong thông số EWMH. cho điểm thưởng bạn có thể muốn thực hiện thủ công toàn màn hình nếu WM không báo cáo hỗ trợ cho gợi ý chính thức, EWMH sẽ chỉ ra cách kiểm tra những gì được hỗ trợ. Bạn cũng có thể muốn lấy con trỏ chuột và/hoặc bàn phím nếu bạn không muốn mọi người vô tình rời khỏi chế độ toàn màn hình.

hoặc, để tránh tìm hiểu mức độ thấp X gunge, chỉ cần sử dụng SDL hoặc GTK hoặc Qt hoặc một cái gì đó và tất cả họ nên có một cuộc gọi phương thức đơn giản để chuyển đổi toàn màn hình.

8

Dưới đây là một thực hiện what Havoc P suggested, để tiết kiệm người bên cạnh sự nỗ lực:

void fullscreen(Display* dpy, Window win) { 
    Atom atoms[2] = { XInternAtom(dpy, "_NET_WM_STATE_FULLSCREEN", False), None }; 
    XChangeProperty(
     dpy, 
     win, 
     XInternAtom(dpy, "_NET_WM_STATE", False), 
     XA_ATOM, 32, PropModeReplace, atoms, 1 
); 
} 
+0

Xin giải thích lý do tại sao công việc này thay vì chỉ đưa ra câu trả lời – ArtB

+0

Um, gcc được phàn nàn khi tôi sử dụng đoạn mã này. Theo manpage 'XChangeProperty', không nên đối số thứ hai-to-cuối của hàm nói trên là một chuỗi, không phải là một mảng các nguyên tử? – fouric

+0

'XChangeProperty' có lẽ sai lầm lấy 'dữ liệu char unsigned' nhưng nó thực sự có nghĩa là phải là một con trỏ đến một mảng các nguyên tử như trong đoạn mã trên. Khiếu nại của gcc là gì? Nếu bạn đang cố gắng biên dịch mã này thành mã C++, bạn cần phải sử dụng một cách rõ ràng như '(unsigned char *) atoms'. –

Các vấn đề liên quan