/* ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- */ void CExPolicy_Server::TimerExpired() { if(iUpdateDelay) { StuffDoneL(696969,-1); } else { ShutMeDown(); } }
/* ----------------------------------------------------------------------------- ----------------------------------------------------------------------------- */ void CExPolicy_Server::TimerExpired() { if(iFile.SubSessionHandle()) { iFile.Write(_L8("Timer done\n,")); } if(iSessionCount <= 0) { // timer expired without cancellation and we dont have sessions // thus we can exit now. ShutMeDown(); } }
/****************************************************************************** MakeMeWindow - Create and setup the window we will need ******************************************************************************/ void MakeMeWindow(void) { XSizeHints hints; XGCValues gcval; unsigned long gcmask; unsigned int dummy1, dummy2; int x, y, ret, count; Window dummyroot, dummychild; int i; if ((count = ItemCountD(&windows))==0 && Transient) ShutMeDown(0); AdjustWindow(); hints.width=win_width; hints.height=win_height; hints.win_gravity=NorthWestGravity; hints.flags=PSize|PWinGravity|PResizeInc; hints.width_inc=0; hints.height_inc=0; if (geometry!= NULL) { ret=XParseGeometry(geometry,&x,&y,&dummy1,&dummy2); if (ret&XValue && ret &YValue) { hints.x=x; if (ret&XNegative) hints.x+=XDisplayWidth(dpy,screen)-win_width; hints.y=y; if (ret&YNegative) hints.y+=XDisplayHeight(dpy,screen)-win_height; hints.flags|=USPosition; } if (ret&XNegative) { if (ret&YNegative) hints.win_gravity=SouthEastGravity; else hints.win_gravity=NorthEastGravity; } else { if (ret&YNegative) hints.win_gravity=SouthWestGravity; else hints.win_gravity=NorthWestGravity; } } if (Transient) { XQueryPointer(dpy,Root,&dummyroot,&dummychild,&hints.x,&hints.y,&x,&y,&dummy1); hints.win_gravity=NorthWestGravity; hints.flags |= USPosition; } win_grav=hints.win_gravity; win_x=hints.x; win_y=hints.y; for (i = 0; i != MAX_COLOUR_SETS; i++) if(d_depth < 2) { back[i] = GetColor("white"); fore[i] = GetColor("black"); } else { back[i] = GetColor(BackColor[i] == NULL ? BackColor[0] : BackColor[i]); fore[i] = GetColor(ForeColor[i] == NULL ? ForeColor[0] : ForeColor[i]); } win=XCreateSimpleWindow(dpy,Root,hints.x,hints.y,hints.width,hints.height,1, fore[0],back[0]); wm_del_win=XInternAtom(dpy,"WM_DELETE_WINDOW",False); XSetWMProtocols(dpy,win,&wm_del_win,1); XSetWMNormalHints(dpy,win,&hints); if (!Transient) { XGrabButton(dpy,1,AnyModifier,win,True,GRAB_EVENTS,GrabModeAsync, GrabModeAsync,None,None); XGrabButton(dpy,2,AnyModifier,win,True,GRAB_EVENTS,GrabModeAsync, GrabModeAsync,None,None); XGrabButton(dpy,3,AnyModifier,win,True,GRAB_EVENTS,GrabModeAsync, GrabModeAsync,None,None); SetMwmHints(MWM_DECOR_ALL|MWM_DECOR_RESIZEH|MWM_DECOR_MAXIMIZE|MWM_DECOR_MINIMIZE, MWM_FUNC_ALL|MWM_FUNC_RESIZE|MWM_FUNC_MAXIMIZE|MWM_FUNC_MINIMIZE, MWM_INPUT_MODELESS); } else { SetMwmHints(0,MWM_FUNC_ALL,MWM_INPUT_MODELESS); } for (i = 0; i != MAX_COLOUR_SETS; i++) { gcval.foreground=fore[i]; gcval.background=back[i]; gcval.font=ButtonFont->fid; gcmask=GCForeground|GCBackground|GCFont; graph[i]=XCreateGC(dpy,Root,gcmask,&gcval); if(d_depth < 2) gcval.foreground=GetShadow(fore[i]); else gcval.foreground=GetShadow(back[i]); gcval.background=back[i]; gcmask=GCForeground|GCBackground; shadow[i]=XCreateGC(dpy,Root,gcmask,&gcval); gcval.foreground=GetHilite(back[i]); gcval.background=back[i]; gcmask=GCForeground|GCBackground; hilite[i]=XCreateGC(dpy,Root,gcmask,&gcval); gcval.foreground=back[i]; gcmask=GCForeground; background[i]=XCreateGC(dpy,Root,gcmask,&gcval); } XSelectInput(dpy,win,(ExposureMask | KeyPressMask)); ChangeWindowName(&Module[1]); if (ItemCountD(&windows) > 0) { XMapRaised(dpy,win); WaitForExpose(); WindowIsUp=1; } else WindowIsUp=2; if (Transient) { if ( XGrabPointer(dpy,win,True,GRAB_EVENTS,GrabModeAsync,GrabModeAsync, None,None,CurrentTime)!=GrabSuccess) ShutMeDown(1); XQueryPointer(dpy,Root,&dummyroot,&dummychild,&hints.x,&hints.y,&x,&y,&dummy1); if (!SomeButtonDown(dummy1)) ShutMeDown(0); } }
/****************************************************************************** LoopOnEvents - Process all the X events we get ******************************************************************************/ void LoopOnEvents() { int num; char buffer[10]; XEvent Event; Window dummyroot,dummychild; int x,x1,y,y1; unsigned int dummy1; if (Transient && !Checked) { XQueryPointer(dpy,win,&dummyroot,&dummychild,&x1,&y1,&x,&y,&dummy1); num=WhichButton(&buttons,x,y); if (num!=-1) { Pressed=1; ButPressed=num; SwitchButton(&buttons,num); } else Pressed=0; Checked=1; } while(XPending(dpy)) { XNextEvent(dpy,&Event); switch(Event.type) { case ButtonRelease: if (Pressed) { num=WhichButton(&buttons,Event.xbutton.x,Event.xbutton.y); if (num!=-1) { SendFvwmPipe(ClickAction[(Transient) ? 0:Event.xbutton.button-1], ItemID(&windows,num)); SwitchButton(&buttons,num); } } if (Transient) ShutMeDown(0); Pressed=0; ButPressed=-1; break; case ButtonPress: num=WhichButton(&buttons,Event.xbutton.x,Event.xbutton.y); if (num != -1) { SwitchButton(&buttons,num); ButPressed=num; } else ButPressed=-1; Pressed=1; break; case Expose: if (Event.xexpose.count==0) RedrawWindow(1); break; case KeyPress: num=XLookupString(&Event.xkey,buffer,10,NULL,0); if (num==1) { if (buffer[0]=='q' || buffer[0]=='Q') ShutMeDown(0); else if (buffer[0]=='i' || buffer[0]=='I') PrintList(&windows); else if (buffer[0]=='b' || buffer[0]=='B') PrintButtons(&buttons); } break; case ClientMessage: if ((Event.xclient.format==32) && (Event.xclient.data.l[0]==wm_del_win)) ShutMeDown(0); case EnterNotify: if (!SomeButtonDown(Event.xcrossing.state)) break; num=WhichButton(&buttons,Event.xcrossing.x,Event.xcrossing.y); if (num!=-1) { SwitchButton(&buttons,num); ButPressed=num; } else ButPressed=-1; Pressed=1; break; case LeaveNotify: if (!SomeButtonDown(Event.xcrossing.state)) break; if (ButPressed!=-1) SwitchButton(&buttons,ButPressed); Pressed=0; break; case MotionNotify: if (!Pressed) break; num=WhichButton(&buttons,Event.xmotion.x,Event.xmotion.y); if (num==ButPressed) break; if (ButPressed!=-1) SwitchButton(&buttons,ButPressed); if (num!=-1) { SwitchButton(&buttons,num); ButPressed=num; } else ButPressed=-1; break; } } }
/*********************************************************************** Detected a broken pipe - time to exit Based on DeadPipe() from FvwmIdent: Copyright 1994, Robert Nation and Nobutaka Suzuki. **********************************************************************/ void DeadPipe(int nonsense) { ShutMeDown(1); }