diff options
Diffstat (limited to 'recordmydesktop')
-rw-r--r-- | recordmydesktop/src/poll_events.c (renamed from recordmydesktop/src/poll_damage.c) | 116 |
1 files changed, 78 insertions, 38 deletions
diff --git a/recordmydesktop/src/poll_damage.c b/recordmydesktop/src/poll_events.c index f388a14..497b593 100644 --- a/recordmydesktop/src/poll_damage.c +++ b/recordmydesktop/src/poll_events.c @@ -54,7 +54,7 @@ int rmdErrorHandler( Display *dpy, XErrorEvent *e ) exit(1); } -void *PollDamage(ProgData *pdata){ +void *PollEvents(ProgData *pdata){ Window root_return, parent_return, *children; @@ -67,51 +67,91 @@ void *PollDamage(ProgData *pdata){ XSelectInput (pdata->dpy,pdata->specs.root, SubstructureNotifyMask); - XQueryTree (pdata->dpy, - pdata->specs.root, - &root_return, - &parent_return, - &children, - &nchildren); - - for (i = 0; i < nchildren; i++){ - XWindowAttributes attribs; - if (XGetWindowAttributes (pdata->dpy,children[i],&attribs)){ - if(!attribs.override_redirect && attribs.depth==pdata->specs.depth) - XDamageCreate(pdata->dpy, - children[i], - XDamageReportRawRectangles); + if(!pdata->args.full_shots){ + XQueryTree (pdata->dpy, + pdata->specs.root, + &root_return, + &parent_return, + &children, + &nchildren); + + for (i = 0; i < nchildren; i++){ + XWindowAttributes attribs; + if (XGetWindowAttributes (pdata->dpy,children[i],&attribs)){ + if(!attribs.override_redirect && + attribs.depth==pdata->specs.depth) + XDamageCreate(pdata->dpy, + children[i], + XDamageReportRawRectangles); + } } + XFree(children); + XDamageCreate(pdata->dpy, + pdata->specs.root, + XDamageReportRawRectangles); } - XFree(children); - XDamageCreate(pdata->dpy,pdata->specs.root,XDamageReportRawRectangles); while(pdata->running){ XNextEvent(pdata->dpy,&event); - if (event.type == MapNotify ){ - XWindowAttributes attribs; - if (!((XMapEvent *)(&event))->override_redirect&& - XGetWindowAttributes(pdata->dpy, - event.xcreatewindow.window, - &attribs)){ - if(!attribs.override_redirect&& - attribs.depth==pdata->specs.depth) - XDamageCreate(pdata->dpy, - event.xcreatewindow.window, - XDamageReportRawRectangles); + if(event.type == KeyPress){ + XKeyEvent *e=(XKeyEvent *)(&event); + if(e->keycode == pdata->pause_key.key){ + int i=0; + int found=0; + for(i=0;i<pdata->pause_key.modnum;i++){ + if(pdata->pause_key.mask[i]==e->state){ + found=1; + break; + } + } + if(found){ + raise(SIGUSR1); + continue; + } + } + if(e->keycode == pdata->stop_key.key){ + int i=0; + int found=0; + for(i=0;i<pdata->stop_key.modnum;i++){ + if(pdata->stop_key.mask[i]==e->state){ + found=1; + break; + } + } + if(found){ + raise(SIGINT); + continue; + } } } - else if(event.type == pdata->damage_event + XDamageNotify ){ - XDamageNotifyEvent *e =(XDamageNotifyEvent *)( &event ); - WGeometry wgeom; - CLIP_EVENT_AREA(e,&(pdata->brwin),&wgeom); - if((wgeom.x>=0)&&(wgeom.y>=0)&&(wgeom.width>0)&&(wgeom.height>0)) - { - int tlist_sel=pdata->list_selector; - pthread_mutex_lock(&pdata->list_mutex[tlist_sel]); - inserts+=RectInsert(&pdata->rect_root[tlist_sel],&wgeom); - pthread_mutex_unlock(&pdata->list_mutex[tlist_sel]); + else if(!pdata->args.full_shots){ + if(event.type == MapNotify ){ + XWindowAttributes attribs; + if (!((XMapEvent *)(&event))->override_redirect&& + XGetWindowAttributes(pdata->dpy, + event.xcreatewindow.window, + &attribs)){ + if(!attribs.override_redirect&& + attribs.depth==pdata->specs.depth) + XDamageCreate(pdata->dpy, + event.xcreatewindow.window, + XDamageReportRawRectangles); + } + } + else if(event.type == pdata->damage_event + XDamageNotify ){ + XDamageNotifyEvent *e =(XDamageNotifyEvent *)( &event ); + WGeometry wgeom; + CLIP_EVENT_AREA(e,&(pdata->brwin),&wgeom); + if((wgeom.x>=0)&&(wgeom.y>=0)&& + (wgeom.width>0)&&(wgeom.height>0)){ + + int tlist_sel=pdata->list_selector; + pthread_mutex_lock(&pdata->list_mutex[tlist_sel]); + inserts+=RectInsert(&pdata->rect_root[tlist_sel],&wgeom); + pthread_mutex_unlock(&pdata->list_mutex[tlist_sel]); + + } } } |