2011-02-27 22 views
7

Mã sau xóa đường viền cửa sổ như thế nào?Xlib Cách này (Loại bỏ trang trí cửa sổ) hoạt động như thế nào?

//note the struct is declared elsewhere, is here just for clarity. 
//code is from [http://tonyobryan.com/index.php?article=9][1] 
typedef struct Hints 
{ 
    unsigned long flags; 
    unsigned long functions; 
    unsigned long decorations; 
    long   inputMode; 
    unsigned long status; 
} Hints; 

//code to remove decoration 
Hints hints; 
Atom property; 
hints.flags = 2; 
hints.decorations = 0; 
property = XInternAtom(display, "_MOTIF_WM_HINTS", true); 
XChangeProperty(display,window,property,property,32,PropModeReplace,(unsigned char *)&hints,5); 
XMapWindow(display, window); 

Cho đến nay tôi đã thu thập được rằng một Atom là một loại nhận dạng tương tự như cửa sổ và hiển thị nhưng tôi không thể tìm ra nơi cấu trúc gợi ý hay "_MOTIF_WM_HINTS" đến từ đâu. Bất cứ ai có thể giải thích tất cả các mã này cho tôi? Cảm ơn trước, ell.

+0

Đây là nguồn của bạn hoặc đích đến của bạn? http://tonyobryan.com/index.php?article=9 – xanatos

+0

Đây là một đoạn trích nhỏ về nguồn của tôi. Cấu trúc Gợi ý được khai báo ở nơi khác nhưng được hiển thị ở đây để rõ ràng. Và tôi đã đọc bài báo đó, nó không giải thích cấu trúc gợi ý ("Tôi nghĩ cấu trúc này đến từ Motif, nhưng tôi không chắc chắn" ...) – Ell

+0

Vâng, nó không thực sự là nguồn của tôi, điểm tốt. – Ell

Trả lời

9

Thật khó để đi theo bất kỳ loại tiêu chuẩn "chính thức" nào hoặc như vậy, nhưng thuộc tính _MOTIF_WM_HINTS dường như đến từ ... Bộ công cụ Motif (ok, bạn đoán rằng :-)). Xem the MotifZone site.

Cảnh báo: những điều sau không đầy đủ, nhưng nên làm sáng tỏ một số điều tôi hy vọng.

Tài liệu dành cho XmNmwmDecorations, XmNmwmFunctions và XmNmwmInputMode chức năng của bộ công cụ chỉ ra rằng tài sản đó là một bitmask của giá trị khác nhau dùng để điều khiển sự xuất hiện, chức năng (thay đổi kích thước, di chuyển, ...) và đầu vào chế độ mà trình quản lý cửa sổ sẽ cung cấp/cung cấp cho cửa sổ. Xem man vendorshell hoặc Oreilly Motif reference books, Vol6a chapter 16.

Thuộc tính là một phần của toàn bộ điều X11. Một cửa sổ có thể có bất kỳ số nào của các thuộc tính được xác định trên đó. Thuộc tính có tên, nhưng thiết lập/nhận được thuộc tính được thực hiện thông qua một "nguyên tử" (số nhận dạng của các loại) để tránh gửi toàn bộ chuỗi trên dây cho mỗi lệnh gọi/gọi. Xem Properties and Atoms

hiện đang quản lý cửa sổ (nếu có) có thể phản ứng với tính chất cửa sổ thay đổi bằng cách thiết lập các bộ lọc sự kiện phù hợp và hành động trên PropertyNotify sự kiện, hoặc đơn giản là kiểm tra các tính chất cửa sổ có khi nó được ánh xạ (hoặc di chuyển , hay bất cứ cái gì). Nếu trình quản lý cửa sổ biết thuộc tính _MOTIF_WM_HINT, nó sẽ giải thích chúng và (hy vọng) làm những gì bạn muốn. (Lưu ý:.. Tôi không entierly chắc chắn nếu đặc quyền được phân cấp để quản lý cửa sổ , hoặc nếu các cửa sổ khác có thể nghe những sự kiện "PropertyNotify" Không chắc chắn đó là thực sự liên quan đến câu hỏi của bạn)

Vì vậy, mã bạn chỉ hoạt động tốt miễn là người quản lý cửa sổ của bạn biết về thuộc tính _MOTIF_WM_HINTS.

Bạn bắt đầu bằng cách nhận các nguyên tử (định danh/shortcut) cho nó với XInternAtom, và thiết lập giá trị của nó qua XChangeProperty() trước khi cửa sổ đang thực sự rút ra qua MapWindow() (không chắc chắn nếu điều đó sẽ công việc nếu bạn làm điều đó sau MapWindow(), điều đó có thể phụ thuộc vào trình quản lý cửa sổ của bạn ).

[Edit:. Thiết lập các phần .decorations để không xóa tất cả các bit trang trí, vì vậy đây yêu cầu rằng người quản lý cửa sổ rời khỏi biên giới của bạn địa ngục một mình, về cơ bản]

tôi không thể đưa ra ở đâu đó " chính thức "với định nghĩa về cấu trúc đó. Nó được định nghĩa trong lib/X11/MwmUtils.h của bản phân phối openmotif-2.3.3. Không chắc chắn cách mục nhập .flags được sử dụng (không thể tìm thấy mã cho cuộc sống của tôi: - /) nhưng tôi nghi ngờ nó được sử dụng để cho biết thuộc tính phụ {decoration, function, inputMode} "nào mà bạn đang sử dụng hành động. (Đừng lấy lời của tôi vì điều đó.)

Lưu ý phụ, sử dụng _MOTIF_WM_HINTS có thể không phải là lựa chọn tốt nhất của bạn ngay ngay bây giờ. Bạn đã xem số Extended Window Manager hints specification và các thông tin/tiêu chuẩn/dự thảo khác tại freedesktop chưa? Tôi sẽ đặt cược hầu hết các "nhà quản lý cửa sổ" hiện đại/môi trường làm việc/bồn rửa nhà bếp sẽ có xu hướng tuân theo điều đó hơn là giữ tính tương thích ngược với Motif. Tất cả phụ thuộc vào những gì bạn đang mã hóa cho tôi đoán.

Cảm ơn bạn đã đọc :-)

+0

Cảm ơn tất cả các gợi ý này và tôi sẽ xem xét tất cả các liên kết mà bạn đã cung cấp cho tôi! – Ell

+1

+1 lời giải thích rất hay! – Venemo

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