summaryrefslogtreecommitdiff
path: root/recordmydesktop
diff options
context:
space:
mode:
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]);
+
+ }
}
}
© All Rights Reserved