Search code examples
cxlib

Xlib: window is created in wrong position


I have simple xlib program which creates window. I think it has to show window on the upper-left corner of the screen because I pass 0, 0 to XCreateSimpleWindow function, but it's in upper-middle side. Why ?

#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) { }    
}

Solution

  • The top level windows are placed (and dimensioned) by the window manager which does whatever it suit it. Often the size is respected but the position not (in order to leave place for decoration, in order to respect placement policy of leaving toolbars clear, ...)

    Try on a display without a window manager if you want your request to be respected (use VNC or similar to get such a display, don't try to use your desktop like this)