]> de.git.xonotic.org Git - xonotic/darkplaces.git/blobdiff - vid_glx.c
add cl_dyntexture.o to makefile
[xonotic/darkplaces.git] / vid_glx.c
index e755f19b1bb9d92704bf00feb0d225dae6855deb..7f5fbe051eb359f4c47cc74f90f8e1cc00f32f53 100644 (file)
--- a/vid_glx.c
+++ b/vid_glx.c
@@ -25,8 +25,11 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #include <X11/Xutil.h>
 #include <GL/glx.h>
 
+#include "quakedef.h"
+
 #include <X11/keysym.h>
 #include <X11/cursorfont.h>
+#include <X11/xpm.h>
 
 #include <X11/extensions/XShm.h>
 #if !defined(__APPLE__) && !defined(__MACH__) && !defined(SUNOS)
@@ -34,7 +37,8 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
 #endif
 #include <X11/extensions/xf86vmode.h>
 
-#include "quakedef.h"
+#include "nexuiz.xpm"
+#include "darkplaces.xpm"
 
 // Tell startup code that we have a client
 int cl_available = true;
@@ -409,6 +413,11 @@ static void HandleEvents(void)
                        // window changed size/location
                        win_x = event.xconfigure.x;
                        win_y = event.xconfigure.y;
+                       if(vid_resizable.integer < 2)
+                       {
+                               vid.width = event.xconfigure.width;
+                               vid.height = event.xconfigure.height;
+                       }
                        break;
                case DestroyNotify:
                        // window has been destroyed
@@ -622,6 +631,9 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate
        int i;
        int attrib[32];
        XSetWindowAttributes attr;
+       XClassHint *clshints;
+       XWMHints *wmhints;
+       XSizeHints *szhints;
        unsigned long mask;
        Window root;
        XVisualInfo *visinfo;
@@ -759,7 +771,30 @@ int VID_InitMode(int fullscreen, int width, int height, int bpp, int refreshrate
                mask = CWBackPixel | CWBorderPixel | CWColormap | CWEventMask;
 
        win = XCreateWindow(vidx11_display, root, 0, 0, width, height, 0, visinfo->depth, InputOutput, visinfo->visual, mask, &attr);
-       XStoreName(vidx11_display, win, gamename);
+
+       wmhints = XAllocWMHints();
+       if(XpmCreatePixmapFromData(vidx11_display, win,
+               (gamemode == GAME_NEXUIZ) ? nexuiz_xpm : darkplaces_xpm,
+               &wmhints->icon_pixmap, &wmhints->icon_mask, NULL) == XpmSuccess)
+               wmhints->flags |= IconPixmapHint | IconMaskHint;
+
+       clshints = XAllocClassHint();
+       clshints->res_name = strdup(gamename);
+       clshints->res_class = strdup("DarkPlaces");
+
+       szhints = XAllocSizeHints();
+       if(vid_resizable.integer == 0)
+       {
+               szhints->min_width = szhints->max_width = width;
+               szhints->min_height = szhints->max_height = height;
+               szhints->flags |= PMinSize | PMaxSize;
+       }
+
+       XmbSetWMProperties(vidx11_display, win, gamename, gamename, (char **) com_argv, com_argc, szhints, wmhints, clshints);
+       XFree(clshints);
+       XFree(wmhints);
+       XFree(szhints);
+       //XStoreName(vidx11_display, win, gamename);
        XMapWindow(vidx11_display, win);
 
        // LordHavoc: making the close button on a window do the right thing
@@ -837,15 +872,21 @@ void Sys_SendKeyEvents(void)
        static qboolean sound_active = true;
 
        // enable/disable sound on focus gain/loss
-       if (!vid_activewindow && sound_active)
+       if (!vid_hidden && (vid_activewindow || !snd_mutewhenidle.integer))
        {
-               S_BlockSound ();
-               sound_active = false;
+               if (!sound_active)
+               {
+                       S_UnblockSound ();
+                       sound_active = true;
+               }
        }
-       else if (vid_activewindow && !sound_active)
+       else
        {
-               S_UnblockSound ();
-               sound_active = true;
+               if (sound_active)
+               {
+                       S_BlockSound ();
+                       sound_active = false;
+               }
        }
 
        HandleEvents();