Exemplo n.º 1
0
void wm_draw_window_clear(wmWindow *win)
{
	bScreen *screen = win->screen;
	ScrArea *sa;
	ARegion *ar;

	wm_draw_data_free(win);

	/* clear screen swap flags */
	if (screen) {
		for (sa = screen->areabase.first; sa; sa = sa->next)
			for (ar = sa->regionbase.first; ar; ar = ar->next)
				ar->swap = WIN_NONE_OK;
		
		screen->swap = WIN_NONE_OK;
	}
}
Exemplo n.º 2
0
/* including window itself, C can be NULL.
 * ED_screen_exit should have been called */
void wm_window_free(bContext *C, wmWindowManager *wm, wmWindow *win)
{
    wmTimer *wt, *wtnext;

    /* update context */
    if (C) {
        WM_event_remove_handlers(C, &win->handlers);
        WM_event_remove_handlers(C, &win->modalhandlers);

        if (CTX_wm_window(C) == win)
            CTX_wm_window_set(C, NULL);
    }

    /* always set drawable and active to NULL,
     * prevents non-drawable state of main windows (bugs #22967 and #25071, possibly #22477 too) */
    wm->windrawable = NULL;
    wm->winactive = NULL;

    /* end running jobs, a job end also removes its timer */
    for (wt = wm->timers.first; wt; wt = wtnext) {
        wtnext = wt->next;
        if (wt->win == win && wt->event_type == TIMERJOBS)
            wm_jobs_timer_ended(wm, wt);
    }

    /* timer removing, need to call this api function */
    for (wt = wm->timers.first; wt; wt = wtnext) {
        wtnext = wt->next;
        if (wt->win == win)
            WM_event_remove_timer(wm, win, wt);
    }

    if (win->eventstate) MEM_freeN(win->eventstate);

    wm_event_free_all(win);
    wm_subwindows_free(win);

    wm_draw_data_free(win);

    wm_ghostwindow_destroy(win);

    MEM_freeN(win->stereo3d_format);

    MEM_freeN(win);
}