Re: Primary Monitor is 0?

Thomas Lübking thomas.luebking at gmail.com
Tue Dec 25 06:13:44 PST 2012


What WM and tried another?

On Dienstag, 25. Dezember 2012 13:37:20 CEST, kaifeng.zhu wrote:
> Hello,
>
> I'm not sure that is the correct mailing list to ask this question, but I
> didn't find an answer anywhere on the web.
>
> I have a laptop running Ubuntu 11.04 connected to an external Dell monitor.
> When I was calling XRRGetOutputPrimary, it returned me the primary monitor
> is 0. My code snippet is simple:
>     static void test1()
>     {
>         Display *dpy = XOpenDisplay(NULL);
>         int screen_count = ScreenCount(dpy);
>         int screen = DefaultScreen(dpy);
>         Window root = RootWindow(dpy, screen);
>         RROutput primary = XRRGetOutputPrimary(dpy, root);
>         printf("Primary = %ld\n", primary);
>     }
>
> That seems not a big trouble so I just run command 'xrandr --output LVDS1
> --primary' to set the primary monitor. But after that when I'm trying to
> create a window to maximize the window to both my monitors, it failed. The
> window only occupy part of the external monitor, with the window size
> equals to the size of the laptop owned monitor (my external monitor has
> higher resolution than my laptop owned monitor).
>     static void test2()
>     {
>         Display *dpy = XOpenDisplay(NULL);
>      const Atom _NET_WM_FULLSCREEN_MONITORS = XInternAtom(dpy,
> "_NET_WM_FULLSCREEN_MONITORS", False);
>     const Atom _NET_WM_STATE = XInternAtom(dpy, "_NET_WM_STATE", False);
>     const Atom _NET_WM_STATE_FULLSCREEN = XInternAtom(dpy,
> "_NET_WM_STATE_FULLSCREEN", False);
>
>     XSetWindowAttributes attrs;
>     attrs.event_mask = StructureNotifyMask | PropertyChangeMask;
>     Window wnd = XCreateWindow(dpy, DefaultRootWindow(dpy), 0, 0, 100, 100,
> 0, CopyFromParent, InputOutput, CopyFromParent, CWEventMask |
> CWBorderPixel, &attrs);
>
>     XMapWindow(dpy, wnd);
>
>      {
>     XClientMessageEvent ev;
>                 memset(&ev, 0, sizeof(ev));
>
>     ev.type = ClientMessage;
>     ev.window = wnd;
>     ev.message_type = _NET_WM_STATE;
>      ev.format = 32;
>     ev.data.l[0] = 1;
>     ev.data.l[1] = _NET_WM_STATE_FULLSCREEN;
>      ev.data.l[2] = 0;
>     ev.data.l[3] = 1;
>     ev.data.l[4] = 0;
>
>     XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureNotifyMask |
> SubstructureRedirectMask, (XEvent*)&ev);
>      }
>
>      {
>     XClientMessageEvent ev;
>             memset(&ev, 0, sizeof(ev));
>
>             int snumber = 0;
>             XineramaScreenInfo *sinfo = XineramaQueryScreens(dpy, &snumber);
>             int top = 0, bottom = 0, left = 0, right = 0;
>             for (int i=1; i<snumber; ++i)
>             {
>                 if (sinfo[i].x_org < sinfo[left].x_org)
>                     left = i;
>                 if (sinfo[i].y_org < sinfo[top].y_org)
>                     top = i;
>                 if (sinfo[i].x_org + sinfo[i].width > sinfo[right].x_org +
> sinfo[right].width)
>                     right = i;
>                 if (sinfo[i].y_org + sinfo[i].height > sinfo[bottom].y_org
> + sinfo[bottom].height)
>                     bottom = i;
>             }
>             printf("top = %d, bottom = %d, left = %d, right = %d\n",
>                 top, bottom, left, right);
>
>     ev.type = ClientMessage;
>     ev.window = wnd;
>     ev.message_type = _NET_WM_FULLSCREEN_MONITORS;
>      ev.format = 32;
>     ev.data.l[0] = top;
>     ev.data.l[1] = bottom;
>     ev.data.l[2] = left;
>     ev.data.l[3] = right;
>     ev.data.l[4] = 1;
>
>     XSendEvent(dpy, DefaultRootWindow(dpy), False, SubstructureNotifyMask |
> SubstructureRedirectMask, (XEvent*)&ev);
>      }
>
>         XSync(dpy, False);
>         sleep(10);
>
>         {
>             int black = BlackPixel(dpy, DefaultScreen(dpy));
>             int white = WhitePixel(dpy, DefaultScreen(dpy));
>             GC gc = XCreateGC(dpy, wnd, 0, NULL);
>             XSetForeground(dpy, gc, white);
>             XFillRectangle(dpy, wnd, gc, 0, 0, 4000, 1200);
>             XFlush(dpy);
>         }
>
>         sleep(10);
>     }
>
>
> Are my steps wrong to create full screen window span to multiple monitors?
> Any help or pointers will be greatly appreciated.
>
> Best Regards,
> Kaifeng
>
>
>
> _______________________________________________
> xorg at lists.x.org: X.Org support
> Archives: http://lists.freedesktop.org/archives/xorg
> Info: http://lists.x.org/mailman/listinfo/xorg
> Your subscription address: thomas.luebking at gmx.net
>
>


More information about the xorg mailing list