forked from bartvdbraak/blender
Ghost/Compiz bug:
Sometimes, events for window size or move are sent even when the window hasn't changed. This triggers unneeded refreshes. As a precaution, we now ignore all such events (eventually, it should be done in Ghost X11, but I don't know that code well enough).
This commit is contained in:
parent
e4a50e3f47
commit
4f6ea2b683
@ -627,6 +627,7 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
|
|||||||
if(state!=GHOST_kWindowStateMinimized) {
|
if(state!=GHOST_kWindowStateMinimized) {
|
||||||
GHOST_RectangleHandle client_rect;
|
GHOST_RectangleHandle client_rect;
|
||||||
int l, t, r, b, scr_w, scr_h;
|
int l, t, r, b, scr_w, scr_h;
|
||||||
|
int sizex, sizey, posx, posy;
|
||||||
|
|
||||||
client_rect= GHOST_GetClientBounds(win->ghostwin);
|
client_rect= GHOST_GetClientBounds(win->ghostwin);
|
||||||
GHOST_GetRectangle(client_rect, &l, &t, &r, &b);
|
GHOST_GetRectangle(client_rect, &l, &t, &r, &b);
|
||||||
@ -634,37 +635,56 @@ static int ghost_event_proc(GHOST_EventHandle evt, GHOST_TUserDataPtr private)
|
|||||||
GHOST_DisposeRectangle(client_rect);
|
GHOST_DisposeRectangle(client_rect);
|
||||||
|
|
||||||
wm_get_screensize(&scr_w, &scr_h);
|
wm_get_screensize(&scr_w, &scr_h);
|
||||||
win->sizex= r-l;
|
sizex= r-l;
|
||||||
win->sizey= b-t;
|
sizey= b-t;
|
||||||
win->posx= l;
|
posx= l;
|
||||||
win->posy= scr_h - t - win->sizey;
|
posy= scr_h - t - win->sizey;
|
||||||
|
|
||||||
/* debug prints */
|
/*
|
||||||
if(0) {
|
* Ghost sometimes send size or move events when the window hasn't changed.
|
||||||
state = GHOST_GetWindowState(win->ghostwin);
|
* One case of this is using compiz on linux. To alleviate the problem
|
||||||
|
* we ignore all such event here.
|
||||||
if(state==GHOST_kWindowStateNormal) {
|
*
|
||||||
if(G.f & G_DEBUG) printf("window state: normal\n");
|
* It might be good to eventually do that at Ghost level, but that is for
|
||||||
|
* another time.
|
||||||
|
*/
|
||||||
|
if (win->sizex != sizex ||
|
||||||
|
win->sizey != sizey ||
|
||||||
|
win->posx != posx ||
|
||||||
|
win->posy != posy)
|
||||||
|
{
|
||||||
|
win->sizex= sizex;
|
||||||
|
win->sizey= sizey;
|
||||||
|
win->posx= posx;
|
||||||
|
win->posy= posy;
|
||||||
|
|
||||||
|
/* debug prints */
|
||||||
|
if(0) {
|
||||||
|
state = GHOST_GetWindowState(win->ghostwin);
|
||||||
|
|
||||||
|
if(state==GHOST_kWindowStateNormal) {
|
||||||
|
if(G.f & G_DEBUG) printf("window state: normal\n");
|
||||||
|
}
|
||||||
|
else if(state==GHOST_kWindowStateMinimized) {
|
||||||
|
if(G.f & G_DEBUG) printf("window state: minimized\n");
|
||||||
|
}
|
||||||
|
else if(state==GHOST_kWindowStateMaximized) {
|
||||||
|
if(G.f & G_DEBUG) printf("window state: maximized\n");
|
||||||
|
}
|
||||||
|
else if(state==GHOST_kWindowStateFullScreen) {
|
||||||
|
if(G.f & G_DEBUG) printf("window state: fullscreen\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
if(type!=GHOST_kEventWindowSize) {
|
||||||
|
if(G.f & G_DEBUG) printf("win move event pos %d %d size %d %d\n", win->posx, win->posy, win->sizex, win->sizey);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
else if(state==GHOST_kWindowStateMinimized) {
|
|
||||||
if(G.f & G_DEBUG) printf("window state: minimized\n");
|
wm_window_make_drawable(C, win);
|
||||||
}
|
wm_draw_window_clear(win);
|
||||||
else if(state==GHOST_kWindowStateMaximized) {
|
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
|
||||||
if(G.f & G_DEBUG) printf("window state: maximized\n");
|
|
||||||
}
|
|
||||||
else if(state==GHOST_kWindowStateFullScreen) {
|
|
||||||
if(G.f & G_DEBUG) printf("window state: fullscreen\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(type!=GHOST_kEventWindowSize) {
|
|
||||||
if(G.f & G_DEBUG) printf("win move event pos %d %d size %d %d\n", win->posx, win->posy, win->sizex, win->sizey);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wm_window_make_drawable(C, win);
|
|
||||||
wm_draw_window_clear(win);
|
|
||||||
WM_event_add_notifier(C, NC_SCREEN|NA_EDITED, NULL);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user