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]); + +                }              }          }  | 
