Xlib: окно создается в неправильном положении

У меня есть простая программа xlib, которая создает окно. Я думаю, что окно должно отображаться в верхнем левом углу экрана, потому что я передаю 0, 0 функции XCreateSimpleWindow, но оно находится в верхней средней части. Почему ?

#include <X11/Xlib.h>
#include <stdio.h>
#include <stdlib.h>     

int
main(int argc, char* argv[])
{
  Display* display;     
  int screen_num;       
  Window win;           
  unsigned int display_width,display_height;    
  unsigned int width, height;   
  char *display_name = getenv("DISPLAY");

  display = XOpenDisplay(display_name);
  screen_num = DefaultScreen(display);
  display_width = DisplayWidth(display, screen_num);
  display_height = DisplayHeight(display, screen_num);

  width = (display_width / 3);
  height = (display_height / 3);

  win = XCreateSimpleWindow(display, RootWindow(display, screen_num), 0, 0, width, height, 1, BlackPixel(display, screen_num), WhitePixel(display, screen_num));

  XMapWindow(display, win);

  XSync(display, False);

  while(1) { }    
}

person Ashot    schedule 10.10.2012    source источник


Ответы (1)


Окна верхнего уровня размещаются (и измеряются) оконным менеджером, который делает все, что ему удобно. Часто размер соблюдается, а положение нет (чтобы оставить место для украшения, чтобы соблюсти политику размещения, оставляя панели инструментов чистыми, ...)

Попробуйте использовать дисплей без оконного менеджера, если вы хотите, чтобы ваш запрос был соблюден (используйте VNC или аналогичный, чтобы получить такой дисплей, не пытайтесь использовать свой рабочий стол таким образом)

person AProgrammer    schedule 10.10.2012
comment
Как запустить его на дисплее без оконного менеджера? Я использую VNC для подключения к серверу. - person Ashot; 10.10.2012
comment
Запустить VNC-сервер, а затем убить оконный менеджер, вероятно, самый простой путь. Правильная настройка параметров для сервера vnc, чтобы он использовал специальные сценарии запуска, которые не запускают оконный менеджер, вероятно, так и должно быть. (Например, передача специального имени vncserver -name и проверка его в VNCDESKTOP в вашем xstartup). - person AProgrammer; 10.10.2012
comment
Я отключил оконный менеджер, и он работает, но без оконного менеджера я ничего не могу сделать, например. Я не могу переместить или изменить размер окна. Есть ли другой способ, не отключая его? - person Ashot; 10.10.2012
comment
Решение о том, где разместить окна, является работой оконного менеджера. Поэтому я далеко не уверен, что желание переопределить это хорошее решение. Есть случай, когда это правильно, и у IIRC есть какой-то атрибут, который вы можете поместить в окно для этого, посмотрите в ICCCM. - person AProgrammer; 10.10.2012