Linux: Fixed problem with updating screen dimension globals
This commit is contained in:
parent
8b691bbe78
commit
9cb5176ce7
|
@ -225,7 +225,7 @@ static bool setXrandrMode(Display *disp, int screen, mode_info *mode) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool setMode(Display *disp, int screen, int width, int height, int freq/*, bool lock_mode*/) {
|
static bool setMode(Display *disp, int screen, int width, int height, int freq, bool temporary) {
|
||||||
if (current_extension == NONE)
|
if (current_extension == NONE)
|
||||||
return false;
|
return false;
|
||||||
int num_modes, i;
|
int num_modes, i;
|
||||||
|
@ -256,6 +256,11 @@ static bool setMode(Display *disp, int screen, int width, int height, int freq/*
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
result = true;
|
result = true;
|
||||||
|
if (!temporary) {
|
||||||
|
current_width = width;
|
||||||
|
current_height = height;
|
||||||
|
current_freq = freq;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -368,7 +373,7 @@ void temporaryRestoreMode(int screen) {
|
||||||
printfDebug("Could not open display");
|
printfDebug("Could not open display");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (!setMode(disp, screen, current_width, current_height, current_freq))
|
if (!setMode(disp, screen, current_width, current_height, current_freq, false))
|
||||||
printfDebug("Could not restore mode\n");
|
printfDebug("Could not restore mode\n");
|
||||||
setCurrentGamma(disp, screen, NULL);
|
setCurrentGamma(disp, screen, NULL);
|
||||||
XCloseDisplay(disp);
|
XCloseDisplay(disp);
|
||||||
|
@ -392,20 +397,16 @@ void switchDisplayMode(JNIEnv * env, jobject mode, int screen) {
|
||||||
throwException(env, "Could not open display");
|
throwException(env, "Could not open display");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (setMode(disp, screen, width, height, freq)) {
|
if (!setMode(disp, screen, width, height, freq, false))
|
||||||
current_width = width;
|
|
||||||
current_height = height;
|
|
||||||
current_freq = freq;
|
|
||||||
} else
|
|
||||||
throwException(env, "Could not switch mode.");
|
throwException(env, "Could not switch mode.");
|
||||||
XCloseDisplay(disp);
|
XCloseDisplay(disp);
|
||||||
}
|
}
|
||||||
|
|
||||||
void resetDisplayMode(int screen) {
|
void resetDisplayMode(int screen, bool temporary) {
|
||||||
Display *disp = XOpenDisplay(NULL);
|
Display *disp = XOpenDisplay(NULL);
|
||||||
if (disp == NULL)
|
if (disp == NULL)
|
||||||
return;
|
return;
|
||||||
if (!setMode(disp, screen, saved_width, saved_height, saved_freq)) {
|
if (!setMode(disp, screen, saved_width, saved_height, saved_freq, temporary)) {
|
||||||
printfDebug("Failed to reset mode");
|
printfDebug("Failed to reset mode");
|
||||||
}
|
}
|
||||||
if (saved_gamma_ramp_length > 0) {
|
if (saved_gamma_ramp_length > 0) {
|
||||||
|
|
|
@ -43,6 +43,7 @@
|
||||||
#define _DISPLAY_H
|
#define _DISPLAY_H
|
||||||
|
|
||||||
#include <jni.h>
|
#include <jni.h>
|
||||||
|
#include "common_tools.h"
|
||||||
|
|
||||||
typedef enum {XRANDR, XF86VIDMODE, NONE} extension;
|
typedef enum {XRANDR, XF86VIDMODE, NONE} extension;
|
||||||
|
|
||||||
|
@ -50,7 +51,7 @@ extern int getScreenModeWidth(void);
|
||||||
extern int getScreenModeHeight(void);
|
extern int getScreenModeHeight(void);
|
||||||
extern jobject initDisplay(JNIEnv *env, int screen);
|
extern jobject initDisplay(JNIEnv *env, int screen);
|
||||||
extern void switchDisplayMode(JNIEnv * env, jobject mode, int screen);
|
extern void switchDisplayMode(JNIEnv * env, jobject mode, int screen);
|
||||||
extern void resetDisplayMode(int screen);
|
extern void resetDisplayMode(int screen, bool temporary);
|
||||||
extern jobjectArray getAvailableDisplayModes(JNIEnv * env, int screen);
|
extern jobjectArray getAvailableDisplayModes(JNIEnv * env, int screen);
|
||||||
extern int getGammaRampLength(int screen);
|
extern int getGammaRampLength(int screen);
|
||||||
extern void setGammaRamp(JNIEnv *env, jobject gamma_ramp_buffer, int screen);
|
extern void setGammaRamp(JNIEnv *env, jobject gamma_ramp_buffer, int screen);
|
||||||
|
|
|
@ -207,7 +207,7 @@ bool releaseInput(void) {
|
||||||
updateInputGrab();
|
updateInputGrab();
|
||||||
if (current_window_mode == FULLSCREEN_NETWM) {
|
if (current_window_mode == FULLSCREEN_NETWM) {
|
||||||
XIconifyWindow(getDisplay(), getCurrentWindow(), getCurrentScreen());
|
XIconifyWindow(getDisplay(), getCurrentWindow(), getCurrentScreen());
|
||||||
resetDisplayMode(getCurrentScreen());
|
resetDisplayMode(getCurrentScreen(), true);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -664,7 +664,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_nSwitchDisplayMode(JNIEnv *
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_resetDisplayMode(JNIEnv *env, jclass clazz) {
|
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_Display_resetDisplayMode(JNIEnv *env, jclass clazz) {
|
||||||
resetDisplayMode(getCurrentScreen());
|
resetDisplayMode(getCurrentScreen(), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Display_getGammaRampLength(JNIEnv *env, jclass clazz) {
|
JNIEXPORT jint JNICALL Java_org_lwjgl_opengl_Display_getGammaRampLength(JNIEnv *env, jclass clazz) {
|
||||||
|
|
Loading…
Reference in New Issue