bool region_fullscreen_scr(WRegion *reg, WScreen *scr, bool switchto) { int swf=(switchto ? MPLEX_ATTACH_SWITCHTO : 0); WPHolder *ph=NULL; bool newph=FALSE, ret; ph=region_unset_get_return(reg); if(ph==NULL){ ph=region_make_return_pholder(reg); newph=TRUE; } ret=(mplex_attach_simple((WMPlex*)scr, reg, swf)!=NULL); if(!ret) warn(TR("Failed to enter full screen mode.")); if(!ret && newph) destroy_obj((Obj*)ph); else if(!region_do_set_return(reg, ph)) destroy_obj((Obj*)ph); return TRUE; }
int stored_obj(struct mem_obj *obj) { // printf("stored obj now\n"); struct mem_obj *tmp_obj=NULL; int found=0; if(obj==NULL) return 0; if(obj->flags & (FLAG_DEAD)) { destroy_obj(obj,0); // printf("obj have set dead \n"); // obj=NULL; return -1; } // obj->last_access=time(NULL); // printf("obj->times.last_modified=%d %s:%d\n",obj->times.last_modified,__FILE__,__LINE__); obj->m_list.obj=(void *)obj; obj->prev=NULL; obj->resident_size =obj->content_length;//calculate_resident_size(obj); u_short url_hash=T_hash(&obj->url); LOCK_OBJ_LIST pthread_mutex_lock(&hash_table[url_hash].lock); tmp_obj=hash_table[url_hash].next; while(tmp_obj) { if ( (tmp_obj->url.port==obj->url.port) && !strcmp(tmp_obj->url.path, obj->url.path) && !strcasecmp(tmp_obj->url.host, obj->url.host) && !strcasecmp(tmp_obj->url.proto, obj->url.proto) && !(tmp_obj->flags & FLAG_DEAD) ) { found=1; break; } tmp_obj=tmp_obj->next; } if(found) { pthread_mutex_unlock(&hash_table[url_hash].lock); UNLOCK_OBJ_LIST destroy_obj(obj,0); // printf("have another obj in\n"); return 0; } obj->next=hash_table[url_hash].next; if (obj->next) obj->next->prev = obj; hash_table[url_hash].next=obj; obj->hash_back = &hash_table[url_hash]; if(TEST(obj->flags,FLAG_IN_MEM)) { increase_hash_size(obj->hash_back, obj->resident_size); } if(TEST(obj->flags,FLAG_IN_DISK)) { increase_hash_size(obj->hash_back, obj->resident_size,false); } add_list(&obj->m_list); pthread_mutex_unlock(&hash_table[url_hash].lock); UNLOCK_OBJ_LIST return 1; };
int main(int argc, char *argv[]) { char *progname = argv[0]; char *fname; shrc rc; if(argc != 1){ usage(cerr, progname); } // Establish a connection with the vas and initialize // the object cache. SH_DO(Shore::init(argc, argv)); SH_BEGIN_TRANSACTION(rc); // If that failed, or if a transaction aborted... if(rc){ // after longjmp cerr << rc << endl; return 1; } else { // The main body of the transaction goes here. SH_DO(Shore::chdir("/")); ////////////////////////////////// // GUTS HERE ////////////////////////////////// fname = "XXX"; { bool ok = true; SH_DO( REF(my_obj)::new_persistent (fname, 0644, o_ref) ) ; if(!o_ref ) { cerr << "Cannot create new objects " << fname << endl; ok = false; } else { SH_DO( REF(a)::new_persistent ("a_ref_junk", 0644, a_ref) ) ; if(!a_ref ) { cerr << "Cannot create new objects " << "a_ref_junk" << endl; ok = false; } } dotest(); } SH_DO(SH_COMMIT_TRANSACTION); } destroy_obj(fname); destroy_obj("a_ref_junk"); return 0; }
/* If hk==NULL to register, new is attempted to be created. */ WHook *mainloop_register_hook(const char *name, WHook *hk) { char *nnm; if(hk==NULL) return NULL; if(named_hooks==NULL){ named_hooks=make_rb(); if(named_hooks==NULL) return NULL; } nnm=scopy(name); if(nnm==NULL) return NULL; if(!rb_insert(named_hooks, nnm, hk)){ free(nnm); destroy_obj((Obj*)hk); } return hk; }
static void reset_scroll_timer() { if(scroll_timer!=NULL){ destroy_obj((Obj*)scroll_timer); scroll_timer=NULL; } }
bool moveresmode_do_end(WMoveresMode *mode, bool apply) { WRegion *reg=mode->reg; assert(reg!=NULL); assert(tmpmode==mode); tmpmode=NULL; if(XOR_RESIZE){ moveres_draw_rubberband(mode); if(apply){ WRQGeomParams rq=RQGEOMPARAMS_INIT; rq.geom=mode->geom; rq.flags=mode->rqflags&~REGION_RQGEOM_TRYONLY; region_rqgeom(reg, &rq, &mode->geom); } XUngrabServer(ioncore_g.dpy); } if(apply) set_saved(mode, reg); if(mode->infowin!=NULL){ mainloop_defer_destroy((Obj*)mode->infowin); mode->infowin=NULL; } destroy_obj((Obj*)mode); return TRUE; }
static WRegion *recreate_handler(WWindow *par, const WFitParams *fp, void *rp_) { WGroupPHolder *phtmp; RP *rp=(RP*)rp_; WGroup *grp; grp=(WGroup*)create_groupcw(par, fp); if(grp==NULL) return NULL; rp->ph->param.whatever=(fp->mode®ION_FIT_WHATEVER ? 1 : 0); rp->reg_ret=group_do_attach(grp, &rp->ph->param, rp->data); rp->ph->param.whatever=0; if(rp->reg_ret==NULL){ destroy_obj((Obj*)grp); return NULL; }else{ grp->phs=rp->ph_head; for(phtmp=grp->phs; phtmp!=NULL; phtmp=phtmp->next) phtmp->group=grp; } if(fp->mode®ION_FIT_WHATEVER) REGION_GEOM(grp)=REGION_GEOM(rp->reg_ret); return (WRegion*)grp; }
static void reset_resize_timer() { if(resize_timer!=NULL){ timer_reset(resize_timer); destroy_obj((Obj*)resize_timer); resize_timer=NULL; } }
void splitfloat_deinit(WSplitFloat *split) { if(split->tlpwin!=NULL){ WPaneHandle *tmp=split->tlpwin; split->tlpwin=NULL; tmp->splitfloat=NULL; destroy_obj((Obj*)tmp); } if(split->brpwin!=NULL){ WPaneHandle *tmp=split->brpwin; split->brpwin=NULL; tmp->splitfloat=NULL; destroy_obj((Obj*)tmp); } splitsplit_deinit(&(split->ssplit)); }
void CHSInterface::DestroyObject(HS_DBREF dbObject) { #ifdef PENNMUSH free_object(dbObject); #else destroy_obj(dbObject); #endif }
bool splitfloat_init(WSplitFloat *split, const WRectangle *geom, WTiling *ws, int dir) { WFitParams fp; WWindow *par=REGION_PARENT(ws); assert(par!=NULL); fp.g=*geom; fp.mode=REGION_FIT_EXACT; split->tlpwin=create_panehandle(par, &fp); if(split->tlpwin==NULL) return FALSE; fp.g=*geom; fp.mode=REGION_FIT_EXACT; split->brpwin=create_panehandle(par, &fp); if(split->brpwin==NULL){ destroy_obj((Obj*)split->tlpwin); return FALSE; } ((WRegion*)split->brpwin)->flags|=REGION_SKIP_FOCUS; ((WRegion*)split->tlpwin)->flags|=REGION_SKIP_FOCUS; if(!splitsplit_init(&(split->ssplit), geom, dir)){ destroy_obj((Obj*)split->brpwin); destroy_obj((Obj*)split->tlpwin); return FALSE; } split->tlpwin->splitfloat=split; split->brpwin->splitfloat=split; splitfloat_set_borderlines(split); if(REGION_IS_MAPPED(ws)){ region_map((WRegion*)(split->tlpwin)); region_map((WRegion*)(split->brpwin)); } return TRUE; }
static bool handle_target_winprops(WClientWin *cwin, const WManageParams *param, WScreen *scr, WPHolder **ph_ret) { char *layout=NULL, *target=NULL; WPHolder *ph=NULL; bool mgd=FALSE; if(extl_table_gets_s(cwin->proptab, "target", &target)) ph=try_target(cwin, param, target); if(ph==NULL && extl_table_gets_s(cwin->proptab, "new_group", &layout)){ ExtlTab lo=ioncore_get_layout(layout); free(layout); if(lo!=extl_table_none()){ WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; int mask=MPLEX_ATTACH_SWITCHTO; WRegion *reg; if(param->switchto) par.flags|=MPLEX_ATTACH_SWITCHTO; /*ioncore_newly_created=(WRegion*)cwin;*/ reg=mplex_attach_new_(&scr->mplex, &par, mask, lo); extl_unref_table(lo); /*ioncore_newly_created=NULL;*/ mgd=(region_manager((WRegion*)cwin)!=NULL); if(reg!=NULL && !mgd){ if(target!=NULL) ph=try_target(cwin, param, target); if(ph==NULL){ ph=region_prepare_manage(reg, cwin, param, MANAGE_PRIORITY_NONE); if(ph==NULL) destroy_obj((Obj*)reg); } } } } if(target!=NULL) free(target); *ph_ret=ph; return mgd; }
static void dock_deinit(WDock *dock) { while(dock->dockapps!=NULL) destroy_obj((Obj*)dock->dockapps->reg); UNLINK_ITEM(docks, dock, dock_next, dock_prev); dock_brush_release(dock); window_deinit((WWindow*) dock); }
void tiling_deinit(WTiling *ws) { WRegion *reg; WTilingIterTmp tmp; WMPlex *remanage_mplex=NULL; tiling_unmanage_stdisp(ws, FALSE, TRUE); FOR_ALL_MANAGED_BY_TILING(reg, ws, tmp){ destroy_obj((Obj*)reg); }
void destroy_guest(dbref guest) { if(!Wizard(mudconf.guest_nuker) || !Good_obj(mudconf.guest_nuker)) mudconf.guest_nuker = 1; if(!Guest(guest)) return; toast_player(guest); atr_add_raw(guest, A_DESTROYER, tprintf("%d", mudconf.guest_nuker)); destroy_player(guest); destroy_obj(mudconf.guest_nuker, guest); }
void mod_tiling_deinit() { mod_tiling_unregister_exports(); ioncore_unregister_regclass(&CLASSDESCR(WTiling)); if(mod_tiling_tiling_bindmap!=NULL){ ioncore_free_bindmap("WTiling", mod_tiling_tiling_bindmap); mod_tiling_tiling_bindmap=NULL; } if(tiling_placement_alt!=NULL){ destroy_obj((Obj*)tiling_placement_alt); tiling_placement_alt=NULL; } }
bool region_manage_clientwin(WRegion *reg, WClientWin *cwin, const WManageParams *par, int priority) { bool ret; WPHolder *ph=region_prepare_manage(reg, cwin, par, priority); int swf=(par->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); if(ph==NULL) return FALSE; ret=pholder_attach(ph, swf, (WRegion*)cwin); destroy_obj((Obj*)ph); return ret; }
void rootwin_deinit(WRootWin *rw) { WScreen *scr, *next; FOR_ALL_SCREENS_W_NEXT(scr, next){ if(REGION_MANAGER(scr)==(WRegion*)rw) destroy_obj((Obj*)scr); } UNLINK_ITEM(*(WRegion**)&ioncore_g.rootwins, (WRegion*)rw, p_next, p_prev); XSelectInput(ioncore_g.dpy, WROOTWIN_ROOT(rw), 0); XFreeGC(ioncore_g.dpy, rw->xor_gc); window_deinit((WWindow*)rw); }
bool tiling_do_attach_initial(WTiling *ws, WRegion *reg) { assert(ws->split_tree==NULL); ws->split_tree=(WSplit*)create_splitregion(®ION_GEOM(reg), reg); if(ws->split_tree==NULL) return FALSE; ws->split_tree->ws_if_root=ws; if(!tiling_managed_add(ws, reg)){ destroy_obj((Obj*)ws->split_tree); ws->split_tree=NULL; return FALSE; } return TRUE; }
bool region_leave_fullscreen(WRegion *reg, bool switchto) { int swf=(switchto ? PHOLDER_ATTACH_SWITCHTO : 0); WPHolder *ph=region_unset_get_return(reg); if(ph==NULL) return FALSE; if(!pholder_attach_mcfgoto(ph, swf, reg)){ warn(TR("Failed to return from full screen mode; remaining manager " "or parent from previous location refused to manage us.")); return FALSE; } destroy_obj((Obj*)ph); return TRUE; }
bool region_rescue(WRegion *reg, WPHolder *ph, int flags) { WRescueInfo info; bool ret; info.ph=ph; info.flags=flags; info.test=FALSE; info.get_rescue=reg; info.failed_get=FALSE; ret=region_rescue_clientwins(reg, &info); if(info.ph!=ph) destroy_obj((Obj*)info.ph); return ret; }
static void menu_do_select_nth(WMenu *menu, int n) { int oldn=menu->selected_entry; bool drawfull=FALSE; if(oldn==n) return; if(menu->submenu!=NULL) destroy_obj((Obj*)menu->submenu); assert(menu->submenu==NULL); menu->selected_entry=n; if(n>=0){ if(n<menu->first_entry){ menu->first_entry=n; drawfull=TRUE; }else if(n>=menu->first_entry+menu->vis_entries){ menu->first_entry=n-menu->vis_entries+1; drawfull=TRUE; } if(menu->entries[n].flags&WMENUENTRY_SUBMENU && menu->pmenu_mode){ show_sub(menu, n); } } if(drawfull){ menu_draw_entries(menu, TRUE); }else{ /* redraw new and old selected entry */ WRectangle igeom; get_inner_geom(menu, &igeom); /* !!!BEGIN!!! */ if(oldn!=-1) menu_draw_entry(menu, oldn, &igeom, TRUE); if(n!=-1) menu_draw_entry(menu, n, &igeom, TRUE); } }
void menu_deinit(WMenu *menu) { menu_typeahead_clear(menu); if(menu->submenu!=NULL) destroy_obj((Obj*)menu->submenu); /*if(menu->cycle_bindmap!=NULL) bindmap_destroy(menu->cycle_bindmap);*/ extl_unref_table(menu->tab); extl_unref_fn(menu->handler); deinit_entries(menu); menu_release_gr(menu); window_deinit((WWindow*)menu); }
static bool sm_do_manage(WClientWin *cwin, const WManageParams *param) { int transient_mode=TRANSIENT_MODE_OFF; WPHolder *ph; bool ret; if(param->tfor!=NULL) return FALSE; ph=mod_sm_match_cwin_to_saved(cwin); if(ph==NULL) return FALSE; ret=pholder_attach(ph, 0, (WRegion*)cwin); destroy_obj((Obj*)ph); return ret; }
static bool try_fullscreen(WClientWin *cwin, WScreen *dflt, const WManageParams *param) { WScreen *fs_scr=NULL; bool fs=FALSE, tmp; /* Check fullscreen mode. (This is intentionally not done * for transients and windows with target winprops.) */ if(extl_table_gets_b(cwin->proptab, "fullscreen", &tmp)){ if(!tmp) return FALSE; fs_scr=dflt; } if(fs_scr==NULL && netwm_check_initial_fullscreen(cwin)) fs_scr=dflt; if(fs_scr==NULL) fs_scr=clientwin_fullscreen_chkrq(cwin, param->geom.w, param->geom.h); if(fs_scr!=NULL){ WPHolder *fs_ph=region_prepare_manage((WRegion*)fs_scr, cwin, param, MANAGE_PRIORITY_NOREDIR); if(fs_ph!=NULL){ int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); cwin->flags|=CLIENTWIN_FS_RQ; fs=pholder_attach(fs_ph, swf, (WRegion*)cwin); if(!fs) cwin->flags&=~CLIENTWIN_FS_RQ; destroy_obj((Obj*)fs_ph); } } return fs; }
static void menu_do_finish(WMenu *menu) { ExtlFn handler; ExtlTab tab; bool ok; WMenu *head=menu_head(menu); handler=menu->handler; menu->handler=extl_fn_none(); ok=extl_table_geti_t(menu->tab, menu->selected_entry+1, &tab); if(!region_rqdispose((WRegion*)head)){ if(head->submenu!=NULL) destroy_obj((Obj*)head->submenu); } if(ok) extl_call(handler, "t", NULL, tab); extl_unref_fn(handler); extl_unref_table(tab); }
void mod_dock_deinit() { WDock *dock; ioncore_unregister_regclass(&CLASSDESCR(WDock)); hook_remove(clientwin_do_manage_alt, (WHookDummy*)clientwin_do_manage_hook); dock=docks; while(dock!=NULL){ WDock *next=dock->dock_next; destroy_obj((Obj*)dock); dock=next; } mod_dock_unregister_exports(); if(dock_bindmap!=NULL){ ioncore_free_bindmap("WDock", dock_bindmap); dock_bindmap=NULL; } }
int fill_mem_obj(request *rq,struct mem_obj *obj,struct mem_obj *old_obj) { // struct buff *to_server_request = NULL; char *answer=NULL; char *fake_header; head_info m_head; int fake_header_len=0; int r=CONNECT_ERR; char mk1123buff[50]; ERRBUF ; memset(&m_head,0,sizeof(m_head)); if(srv_connect(rq)<=0) goto error; /* to_server_request = alloc_buff(4*CHUNK_SIZE); if ( !to_server_request ) { // change_state(obj, OBJ_READY); obj->flags |= FLAG_DEAD; goto error; } */ // stored_obj(NULL); // printf("rq->if_modified_since=%d,obj->times.last_modified=%d\n",rq->if_modified_since,old_obj->times.last_modified); if(old_obj && !TEST(rq->flags,RQ_HAS_IF_MOD_SINCE)) { if(old_obj->times.last_modified) { if (!mk1123time(old_obj->times.last_modified, mk1123buff, sizeof(mk1123buff)) ) { klog(ERR_LOG,"cann't mk1123time obj obj->times.date=%d.\n",old_obj->times.last_modified); goto error; } } else { if (!mk1123time(obj->created, mk1123buff, sizeof(mk1123buff)) ) { klog(ERR_LOG,"cann't mk1123time obj created=%d.\n",old_obj->created); goto error; } } fake_header_len=19+sizeof(mk1123buff)+4; fake_header = (char *)malloc(fake_header_len); if ( !fake_header ) { goto error; //error goto validate_err; } // printf("fake_header=%s\n",fake_header); memset(fake_header,0,fake_header_len); snprintf(fake_header,fake_header_len-1, "If-Modified-Since: %s\r\n", mk1123buff); answer=build_direct_request("GET", &rq->url, fake_header, rq, 0); free(fake_header); // printf("client have no if-modified-since.\n"); } else { answer=build_direct_request("GET",&rq->url,NULL,rq,0);//连接远程主机 } // printf("answer=%s\n",answer); if ( !answer ) { klog(ERR_LOG,"no mem to alloc.\n"); goto error; } /* if ( attach_data(answer, strlen(answer), to_server_request) ) { free_container(to_server_request); goto error; } if(answer){ free(answer); answer = NULL; } */ r = rq->client->send(answer); // free(answer); // free_container(to_server_request); to_server_request = NULL; // printf("send data to remote is:%s",to_server_request->data); if ( r <=0 ) {//send error say_bad_request("Can't send","", ERR_TRANSFER, rq); // printf("cann't send to server.\n"); //printf("errno=%d\n",ERRNO); goto error; } r=load_head(rq,obj,m_head); switch(r) { case HEAD_OK: if(load_body(rq,obj)<=0) { //printf("load body failed.\n"); r=CONNECT_ERR; goto error; } goto done; case CONNECT_ERR: //printf("load head failed.\n"); goto error; case HEAD_NOT_MODIFIED: if(old_obj && !TEST(rq->flags,RQ_HAS_IF_MOD_SINCE)) { goto error; } else { if(rq->server->send(m_head.head,m_head.len)<0) goto error; } // printf("%s\n",m_head.head); break; default: // printf("obj->content_length=%d,path=%s\n",obj->content_length,obj->url.path); if(m_head.head) { if(rq->server->send(m_head.head,m_head.len)<0) goto error; if(create_select_pipe(rq->server,rq->client,conf.time_out[HTTP],0,-1)==-2) r=1; } } error: IF_FREE(answer); IF_FREE(m_head.head); rq->client->close(); destroy_obj(obj,0); return r; done: IF_FREE(answer); IF_FREE(m_head.head); rq->client->close(); if(!old_obj) stored_obj(obj); return r; };
EXTL_EXPORT WDock *mod_dock_create(ExtlTab tab) { char *mode=NULL; bool floating=FALSE; int screenid=0; WScreen *screen=NULL; WDock *dock=NULL; WRegion *stdisp=NULL; WMPlexSTDispInfo din; WFitParams fp; if(extl_table_gets_s(tab, "mode", &mode)){ if(strcmp(mode, "floating")==0){ floating=TRUE; }else if(strcmp(mode, "embedded")!=0){ warn("Invalid dock mode."); free(mode); return NULL; } free(mode); } extl_table_gets_i(tab, "screen", &screenid); screen=ioncore_find_screen_id(screenid); if(screen==NULL){ warn("Screen %d does not exist.", screenid); return NULL; } for(dock=docks; dock; dock=dock->dock_next){ if(region_screen_of((WRegion*)dock)==screen){ warn("Screen %d already has a dock. Refusing to create another.", screenid); return NULL; } } if(!floating){ mplex_get_stdisp((WMPlex*)screen, &stdisp, &din); if(stdisp!=NULL && !extl_table_is_bool_set(tab, "force")){ warn("Screen %d already has an stdisp. Refusing to add embedded " "dock.", screenid); return NULL; } } /* Create the dock */ fp.mode=REGION_FIT_BOUNDS|REGION_FIT_WHATEVER; fp.g.x=0; fp.g.y=0; fp.g.w=1; fp.g.h=1; dock=create_dock((WWindow*)screen, &fp); if(dock==NULL){ warn("Failed to create dock."); return NULL; } /* Get parameters */ dock->save=FALSE; dock_do_set(dock, tab, FALSE); /* Calculate min/max size */ dock_managed_rqgeom_(dock, NULL, 0, NULL, NULL, TRUE); /* Final setup */ if(floating){ WMPlexAttachParams par=MPLEXATTACHPARAMS_INIT; WRegionAttachData data; par.flags=(MPLEX_ATTACH_UNNUMBERED |MPLEX_ATTACH_SIZEPOLICY |MPLEX_ATTACH_GEOM |MPLEX_ATTACH_PASSIVE); par.geom.w=dock->min_w; par.geom.h=dock->min_h; par.geom.x=0; par.geom.y=0; mplexszplcy(dock->pos, &par.szplcy); if(extl_table_is_bool_set(tab, "floating_hidden")) par.flags|=MPLEX_ATTACH_HIDDEN; data.type=REGION_ATTACH_REPARENT; data.u.reg=(WRegion*)dock; if(mplex_do_attach((WMPlex*)screen, &par, &data)) return dock; }else{ mplexpos(dock->pos, &din.pos); din.fullsize=FALSE; /* not supported */ if(mplex_set_stdisp((WMPlex*)screen, (WRegion*)dock, &din)) return dock; } /* Failed to attach. */ warn("Failed to attach dock to screen."); destroy_obj((Obj*)dock); return NULL; }
bool clientwin_do_manage_default(WClientWin *cwin, const WManageParams *param) { WScreen *scr=NULL; WPHolder *ph=NULL; int swf=(param->switchto ? PHOLDER_ATTACH_SWITCHTO : 0); bool uq=FALSE; WRegion *createroot=NULL; /* Find a suitable screen */ scr=clientwin_find_suitable_screen(cwin, param); if(scr==NULL){ warn(TR("Unable to find a screen for a new client window.")); return FALSE; } if(handle_target_winprops(cwin, param, scr, &ph)) return TRUE; /* Check if param->tfor or any of its managers want to manage cwin. */ if(ph==NULL && param->tfor!=NULL){ assert(param->tfor!=cwin); ph=region_prepare_manage_transient((WRegion*)param->tfor, cwin, param, 0); uq=TRUE; } if(ph==NULL){ /* Find a placeholder for non-fullscreen state */ ph=region_prepare_manage((WRegion*)scr, cwin, param, MANAGE_PRIORITY_NONE); if(try_fullscreen(cwin, scr, param)){ if(pholder_target(ph)!=(WRegion*)region_screen_of((WRegion*)cwin)){ WRegion *grp=region_groupleader_of((WRegion*)cwin); if(region_do_set_return(grp, ph)) return TRUE; } destroy_obj((Obj*)ph); return TRUE; } } if(ph==NULL) return FALSE; /* Not in full-screen mode; use the placeholder to attach. */ { WRegionAttachData data; data.type=REGION_ATTACH_REPARENT; data.u.reg=(WRegion*)cwin; createroot=pholder_do_attach(ph, swf|PHOLDER_ATTACH_RETURN_CREATEROOT, &data); } destroy_obj((Obj*)ph); if(uq && createroot!=NULL) ioncore_unsqueeze(createroot, FALSE); return (createroot!=NULL); }