AndrewCrewKuznetsov / xneur-devel

Xneur main repository
55 stars 25 forks source link

Возможная ошибка в функции window_createпри задании атрибутов окну флагов #53

Open Mingun opened 4 years ago

Mingun commented 4 years ago

В данном коде сразу 3 ошибки в одной строчке кода, а именно, последней: https://github.com/AndrewCrewKuznetsov/xneur-devel/blob/362019ac27f388b319b654d33ec3b1799339bf72/xneur/lib/main/window.c#L81-L98

  1. Передается указатель на структуру MWMHints, а размер передается от структуры XWMHints.
  2. Следствие ошибки выше -- переменная wmhints заполняется, но не используется. Согласно https://tronche.com/gui/x/icccm/sec-4.html#WM_HINTS, атрибуты заполнены таким образом, что у должен настроится режим No Input - The client never expects keyboard input. An example would be xload or another output-only client. В принципе, логичное пожелание для окна флагов.
  3. Мало того, для задания свойства используется атом _WIN_HINTS, который требует лишь одно значение uint32_t. А передается ему туда совсем не то, что ожидается. Согласно статье http://www.dailytelefrag.ru/blog/read.php?id=67666, передача туда 0 должно отключить границу окна в GNOME окружении. На самом деле, для этого свойства используется только первое поле структуры MWMHints, а именно flags. Согласно статье по первой ссылке выше, допустимые значения там:
    #define WIN_HINTS_SKIP_FOCUS      (1<<0) /*"alt-tab" skips this win*/
    #define WIN_HINTS_SKIP_WINLIST    (1<<1) /*do not show in window list*/
    #define WIN_HINTS_SKIP_TASKBAR    (1<<2) /*do not show on taskbar*/
    #define WIN_HINTS_GROUP_TRANSIENT (1<<3) /*Reserved - definition is unclear*/
    #define WIN_HINTS_FOCUS_ON_CLICK  (1<<4) /*app only accepts focus if clicked*/

    Это значение устанавливается в 1L << 1, т.е. на самом деле окно получает атрибут WIN_HINTS_SKIP_WINLIST и становится неперечисляемым в списке окон. В принципе, это логично для окна флага, но точно ли это ожидалось сделать?

В итоге получается, что допустимы варианты 2 и 3 и какой из них должен быть правильным, непонятно. История Git-репозитория начинается с этой ошибки.