]> git.tdb.fi Git - libs/gui.git/blobdiff - source/graphics/x11/window.cpp
Use nullptr in place of 0 or NULL
[libs/gui.git] / source / graphics / x11 / window.cpp
index 7513d3ffb14ebb958efe5e7d9b33a9f65e0482e4..96d098551b561861254e65c2d1a59d6ba8ee0cdf 100644 (file)
@@ -1,10 +1,10 @@
+#include "window.h"
+#include "window_private.h"
 #include <vector>
 #include <X11/Xatom.h>
 #include <X11/Xutil.h>
 #include <msp/core/systemerror.h>
 #include "display_private.h"
-#include "window.h"
-#include "window_private.h"
 
 using namespace std;
 
@@ -25,18 +25,24 @@ void Window::platform_init()
        DisplayHandle dpy = display.get_private().display;
 
        priv->wm_delete_window = XInternAtom(dpy, "WM_DELETE_WINDOW", true);
-       priv->invisible_cursor = 0;
-       priv->reparented = false;
-       priv->rel_x = 0;
-       priv->rel_y = 0;
 
        XSetWindowAttributes attr;
        attr.override_redirect = options.fullscreen;
        attr.event_mask = ButtonPressMask|ButtonReleaseMask|PointerMotionMask|KeyPressMask|KeyReleaseMask|StructureNotifyMask|EnterWindowMask|ExposureMask|FocusChangeMask;
 
+       // User position is set when the window is mapped
+       int x = 0;
+       int y = 0;
+       if(options.fullscreen && !options.fullscreen_exclusive)
+       {
+               const Monitor::Settings &ms = options.fullscreen_monitor->current_settings;
+               x = ms.x;
+               y = ms.y;
+       }
+
        priv->window = XCreateWindow(dpy,
                display.get_private().root_window,
-               0, 0,    // User position is set when the window is mapped
+               x, y,
                options.width, options.height,
                0,
                CopyFromParent,
@@ -50,8 +56,8 @@ void Window::platform_init()
        {
                XSizeHints hints;
                hints.flags = PMinSize|PMaxSize;
-               hints.min_width=hints.max_width = options.width;
-               hints.min_height=hints.max_height = options.height;
+               hints.min_width = hints.max_width = options.width;
+               hints.min_height = hints.max_height = options.height;
                XSetWMNormalHints(dpy, priv->window, &hints);
        }
 }
@@ -111,7 +117,15 @@ void Window::platform_reconfigure(bool fullscreen_changed)
        XSetWMNormalHints(dpy, priv->window, &hints);
 
        if(options.fullscreen)
-               XMoveResizeWindow(dpy, priv->window, 0, 0, options.width, options.height);
+       {
+               if(options.fullscreen_exclusive)
+                       XMoveResizeWindow(dpy, priv->window, 0, 0, options.width, options.height);
+               else
+               {
+                       const Monitor::Settings &ms = options.fullscreen_monitor->current_settings;
+                       XMoveResizeWindow(dpy, priv->window, ms.x, ms.y, options.width, options.height);
+               }
+       }
        else if(options.user_position)
                XMoveResizeWindow(dpy, priv->window, options.x, options.y, options.width, options.height);
        else
@@ -134,7 +148,7 @@ void Window::show_cursor(bool s)
                        int screen = DefaultScreen(dpy);
 
                        Pixmap pm = XCreatePixmap(dpy, priv->window, 1, 1, 1);
-                       GC gc = XCreateGC(dpy, pm, 0, 0);
+                       GC gc = XCreateGC(dpy, pm, 0, nullptr);
                        XSetFunction(dpy, gc, GXclear);
                        XDrawPoint(dpy, pm, gc, 0, 0);
                        XFreeGC(dpy, gc);
@@ -164,7 +178,7 @@ void Window::platform_show()
 {
        DisplayHandle dpy = display.get_private().display;
        XMapRaised(dpy, priv->window);
-       if(options.user_position)
+       if(options.user_position && !options.fullscreen)
                XMoveWindow(dpy, priv->window, options.x, options.y);
 }
 
@@ -244,7 +258,7 @@ bool Window::event(const Event &evnt)
                        XSetInputFocus(display.get_private().display, priv->window, RevertToParent, CurrentTime);
                break;
        case MapNotify:
-               if(options.fullscreen)
+               if(options.fullscreen && options.fullscreen_exclusive)
                        XGrabPointer(display.get_private().display, priv->window, true, None, GrabModeAsync, GrabModeAsync, priv->window, None, CurrentTime);
                break;
        case Expose: