#include <X11/cursorfont.h>
#include <X11/extensions/XShm.h>
-#if !defined(__APPLE__) && !defined(__MACH__)
+#if !defined(__APPLE__) && !defined(__MACH__) && !defined(SUNOS)
#include <X11/extensions/xf86dga.h>
#endif
#include <X11/extensions/xf86vmode.h>
static qboolean mouse_avail = true;
static qboolean vid_usingmouse = false;
-static qboolean vid_usemouse = false;
static qboolean vid_usingvsync = false;
static qboolean vid_usevsync = false;
-static qboolean ignoremousemove = false;
static float mouse_x, mouse_y;
static int p_mouse_x, p_mouse_y;
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
cvar_t vid_dga = {CVAR_SAVE, "vid_dga", "1"};
cvar_t vid_dga_mouseaccel = {0, "vid_dga_mouseaccel", "1"};
#endif
static int win_x, win_y;
-static int scr_width, scr_height;
-
static XF86VidModeModeInfo **vidmodes;
static int num_vidmodes;
static qboolean vid_isfullscreen = false;
case XK_KP_Subtract: key = K_KP_MINUS; break;
case XK_KP_Divide: key = K_KP_SLASH; break;
+ case XK_section: key = '~'; break;
+
default:
if (keysym < 32 && keysym > 126)
break;
static void IN_Activate (qboolean grab)
{
- if (!mouse_avail || !vidx11_display || !win)
+ if (!vidx11_display)
return;
-
if (grab)
{
- if (!vid_usingmouse)
+ if (!vid_usingmouse && mouse_avail && win)
{
XWindowAttributes attribs_1;
XSetWindowAttributes attribs_2;
XGrabPointer(vidx11_display, win, True, 0, GrabModeAsync, GrabModeAsync, win, None, CurrentTime);
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
if (vid_dga.integer)
{
int MajorVersion, MinorVersion;
// unable to query, probably not supported
Con_Print( "Failed to detect XF86DGA Mouse\n" );
Cvar_SetValueQuick(&vid_dga, 0);
- XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, scr_width / 2, scr_height / 2);
+ XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
}
else
{
}
else
#endif
- XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, scr_width / 2, scr_height / 2);
+ XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, vid.width / 2, vid.height / 2);
XGrabKeyboard(vidx11_display, win, False, GrabModeAsync, GrabModeAsync, CurrentTime);
mouse_x = mouse_y = 0;
- ignoremousemove = true;
+ cl_ignoremousemove = true;
vid_usingmouse = true;
}
}
{
if (vid_usingmouse)
{
-#ifndef __APPLE__
- if (vid_dga.integer == 1)
+#if !defined(__APPLE__) && !defined(SUNOS)
+ if (vid_dga.integer)
XF86DGADirectVideo(vidx11_display, DefaultScreen(vidx11_display), 0);
#endif
XUngrabPointer(vidx11_display, CurrentTime);
XUngrabKeyboard(vidx11_display, CurrentTime);
- // inviso cursor
- XUndefineCursor(vidx11_display, win);
+ // inviso cursor
+ if (win)
+ XUndefineCursor(vidx11_display, win);
- ignoremousemove = true;
+ cl_ignoremousemove = true;
vid_usingmouse = false;
}
}
// mouse moved
if (vid_usingmouse)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
if (vid_dga.integer == 1)
{
mouse_x += event.xmotion.x_root * vid_dga_mouseaccel.value;
{
mouse_x += event.xmotion.x - p_mouse_x;
mouse_y += event.xmotion.y - p_mouse_y;
- if (abs(scr_width/2 - event.xmotion.x) > scr_width / 4 || abs(scr_height/2 - event.xmotion.y) > scr_height / 4)
+ if (abs(vid.width/2 - event.xmotion.x) > vid.width / 4 || abs(vid.height/2 - event.xmotion.y) > vid.height / 4)
dowarp = true;
}
p_mouse_x = event.xmotion.x;
if (dowarp)
{
/* move the mouse to the window center again */
- p_mouse_x = scr_width / 2;
- p_mouse_y = scr_height / 2;
+ p_mouse_x = vid.width / 2;
+ p_mouse_y = vid.height / 2;
XWarpPointer(vidx11_display, None, win, 0, 0, 0, 0, p_mouse_x, p_mouse_y);
}
-
- // if told to ignore one mouse move, do so
- if (ignoremousemove)
- {
- ignoremousemove = false;
- mouse_x = 0;
- mouse_y = 0;
- }
}
static void *prjobj = NULL;
if (!ctx || !vidx11_display)
return;
- vid_hidden = true;
- vid_usingmouse = false;
if (vidx11_display)
{
- VID_RestoreSystemGamma();
IN_Activate(false);
+ VID_RestoreSystemGamma();
// FIXME: glXDestroyContext here?
if (vid_isfullscreen)
XDestroyWindow(vidx11_display, win);
XCloseDisplay(vidx11_display);
}
+ vid_hidden = true;
vid_isfullscreen = false;
vidx11_display = NULL;
win = 0;
signal(SIGTERM, signal_handler);
}
-/*
-=================
-VID_GetWindowSize
-=================
-*/
-void VID_GetWindowSize (int *x, int *y, int *width, int *height)
-{
- *x = *y = 0;
- *width = scr_width;
- *height = scr_height;
-}
-
void VID_Finish (void)
{
+ qboolean vid_usemouse;
+
vid_usevsync = vid_vsync.integer && !cls.timedemo && gl_videosyncavailable;
if (vid_usingvsync != vid_usevsync && gl_videosyncavailable)
{
void VID_Init(void)
{
-#ifndef __APPLE__
+#if !defined(__APPLE__) && !defined(SUNOS)
Cvar_RegisterVariable (&vid_dga);
Cvar_RegisterVariable (&vid_dga_mouseaccel);
#endif
ctx = qglXCreateContext(vidx11_display, visinfo, NULL, True);
if (!ctx)
- Sys_Error ("glXCreateContext failed\n");
+ {
+ Con_Printf ("glXCreateContext failed\n");
+ return false;
+ }
if (!qglXMakeCurrent(vidx11_display, win, ctx))
- Sys_Error ("glXMakeCurrent failed\n");
+ {
+ Con_Printf ("glXMakeCurrent failed\n");
+ return false;
+ }
XSync(vidx11_display, False);
- scr_width = width;
- scr_height = height;
-
if ((qglGetString = GL_GetProcAddress("glGetString")) == NULL)
- Sys_Error("glGetString not found in %s", gl_driver);
+ {
+ Con_Printf ("glGetString not found in %s", gl_driver);
+ return false;
+ }
gl_renderer = qglGetString(GL_RENDERER);
gl_vendor = qglGetString(GL_VENDOR);
vid_usingmouse = false;
vid_usingvsync = false;
- ignoremousemove = true;
vid_hidden = false;
vid_activewindow = true;
GL_Init();