Skip to content

[Bug] GetPropertyType incorrectly holds a u8 instead of a u32 #92

@Jeansidharta

Description

@Jeansidharta

My Specific case

I'm writing a program that reads the current focused window title. For that, I'm trying to read the WM_NAME property of my focused window. By using the xprop command, I can see the atom type of the WM_NAME is UTF8_STRING, and by using the command xlsatoms | grep UTF8_STRING, I can see it's id is 408. Therefore, I tried writing this code:

const UTF8_STRING_ATOM: u32 = 408;
let window_title = {
    let cookie = connection.get_property(
        false,
        focused_window,
        wm_name_atom,
        UTF8_STRING_ATOM,
        0,
        1024,
    )?;
    connection.wait_for_reply(cookie)?
};

However, I'm getting this compiler error:

UTF8_STRING_ATOM,
^^^^^^^^^^^^^^^^ the trait `From<u32>` is not implemented for `GetPropertyType`

The Problem

The struct GetPropertyType internally holds a u8 instead of a u32, and therefore, when calling connection.get_property, the atom type can only be up to 255.

This does not conform to the X11 specification, which states that the type argument is of type ATOM, which is a 32 bit value.

Proposed Solution

Change the internal value of GetPropertyType to be a u32, and implement the trait From<u32>.

Workarounds

Instead of using the correct type in the function get_property, using the breadx::protocol::xproto::AtomEnum::ANY type works. Example:

let any_type_atom: u8 = breadx::protocol::xproto::AtomEnum::ANY.into();
let window_title = {
    let cookie = connection.get_property(
        false,
        focused_window,
        wm_name_atom,
        any_type_atom,
        0,
        1024,
    )?;
    connection.wait_for_reply(cookie)?
};

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions