summaryrefslogtreecommitdiff
path: root/src/events.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/events.c')
-rw-r--r--src/events.c3393
1 files changed, 1665 insertions, 1728 deletions
diff --git a/src/events.c b/src/events.c
index ce66446..6c34261 100644
--- a/src/events.c
+++ b/src/events.c
@@ -49,12 +49,11 @@ in this Software without prior written authorization from The Open Group.
/** OR PERFORMANCE OF THIS SOFTWARE. **/
/*****************************************************************************/
-
/***********************************************************************
*
* twm event handling
*
- * 17-Nov-87 Thomas E. LaStrange File created
+ * 17-Nov-87 Thomas E. LaStrange File created
*
***********************************************************************/
@@ -78,20 +77,20 @@ in this Software without prior written authorization from The Open Group.
#endif
#define MAX_X_EVENT 256
-event_proc EventHandler[MAX_X_EVENT]; /* event handler jump table */
+event_proc EventHandler[MAX_X_EVENT]; /* event handler jump table */
static const char *Action;
-int Context = C_NO_CONTEXT; /* current button press context */
-static TwmWindow *ButtonWindow; /* button press window structure */
-static XEvent ButtonEvent; /* button press event */
-XEvent Event; /* the current event */
-static TwmWindow *Tmp_win; /* the current twm window */
+int Context = C_NO_CONTEXT; /* current button press context */
+static TwmWindow *ButtonWindow; /* button press window structure */
+static XEvent ButtonEvent; /* button press event */
+XEvent Event; /* the current event */
+static TwmWindow *Tmp_win; /* the current twm window */
/** Used in HandleEnterNotify to remove border highlight from a window
* that has not recieved a LeaveNotify event because of a pointer grab
*/
static TwmWindow *UnHighLight_win = NULL;
-Window DragWindow; /* variables used in moving windows */
+Window DragWindow; /* variables used in moving windows */
int origDragX;
int origDragY;
int DragX;
@@ -105,38 +104,38 @@ static int enter_flag;
static int ColortableThrashing;
static TwmWindow *enter_win, *raise_win;
-static void free_window_names ( TwmWindow *tmp, Bool nukefull, Bool nukename, Bool nukeicon );
-static void remove_window_from_ring ( TwmWindow *tmp );
-static void do_menu ( MenuRoot *menu, Window w );
-static Bool HENQueueScanner ( Display *dpy, XEvent *ev, char *args );
-static Bool HLNQueueScanner ( Display *dpy, XEvent *ev, char *args );
-static void flush_expose ( Window w );
-static Bool UninstallRootColormapQScanner ( Display *dpy, XEvent *ev, char *args );
-static void RedoIconName ( void );
+static void free_window_names(TwmWindow *tmp, Bool nukefull, Bool nukename,
+ Bool nukeicon);
+static void remove_window_from_ring(TwmWindow *tmp);
+static void do_menu(MenuRoot *menu, Window w);
+static Bool HENQueueScanner(Display *dpy, XEvent *ev, char *args);
+static Bool HLNQueueScanner(Display *dpy, XEvent *ev, char *args);
+static void flush_expose(Window w);
+static Bool UninstallRootColormapQScanner(Display *dpy, XEvent *ev, char *args);
+static void RedoIconName(void);
int ButtonPressed = -1;
int Cancel = FALSE;
-
-void AutoRaiseWindow (TwmWindow *tmp)
+void
+AutoRaiseWindow(TwmWindow *tmp)
{
- XRaiseWindow (dpy, tmp->frame);
- XSync (dpy, 0);
+ XRaiseWindow(dpy, tmp->frame);
+ XSync(dpy, 0);
enter_win = NULL;
enter_flag = TRUE;
raise_win = tmp;
}
-void SetRaiseWindow (TwmWindow *tmp)
+void
+SetRaiseWindow(TwmWindow *tmp)
{
enter_flag = TRUE;
enter_win = NULL;
raise_win = tmp;
- XSync (dpy, 0);
+ XSync(dpy, 0);
}
-
-
/**
* initialize the event jump table.
*/
@@ -145,14 +144,13 @@ InitEvents(void)
{
int i;
-
ResizeWindow = (Window) 0;
DragWindow = (Window) 0;
enter_flag = FALSE;
enter_win = raise_win = NULL;
for (i = 0; i < MAX_X_EVENT; i++)
- EventHandler[i] = HandleUnknown;
+ EventHandler[i] = HandleUnknown;
EventHandler[Expose] = HandleExpose;
EventHandler[CreateNotify] = HandleCreateNotify;
@@ -172,141 +170,141 @@ InitEvents(void)
EventHandler[ColormapNotify] = HandleColormapNotify;
EventHandler[VisibilityNotify] = HandleVisibilityNotify;
if (HasShape)
- EventHandler[ShapeEventBase+ShapeNotify] = HandleShapeNotify;
+ EventHandler[ShapeEventBase + ShapeNotify] = HandleShapeNotify;
#ifdef HAVE_XRANDR
- if (HasXrandr)
- {
- int scrnum;
-
- EventHandler[XrandrEventBase+RRScreenChangeNotify] = HandleScreenChangeNotify;
- for (scrnum = 0; scrnum < NumScreens; scrnum++)
- {
- XRRSelectInput(dpy,ScreenList[scrnum]->Root,RRScreenChangeNotifyMask);
- }
+ if (HasXrandr) {
+ int scrnum;
+
+ EventHandler[XrandrEventBase + RRScreenChangeNotify] =
+ HandleScreenChangeNotify;
+ for (scrnum = 0; scrnum < NumScreens; scrnum++) {
+ XRRSelectInput(dpy, ScreenList[scrnum]->Root,
+ RRScreenChangeNotifyMask);
+ }
}
#endif
}
+Time lastTimestamp = CurrentTime; /* until Xlib does this for us */
-
-
-Time lastTimestamp = CurrentTime; /* until Xlib does this for us */
-
-Bool StashEventTime (XEvent *ev)
+Bool
+StashEventTime(XEvent *ev)
{
switch (ev->type) {
- case KeyPress:
- case KeyRelease:
- lastTimestamp = ev->xkey.time;
- return True;
- case ButtonPress:
- case ButtonRelease:
- lastTimestamp = ev->xbutton.time;
- return True;
- case MotionNotify:
- lastTimestamp = ev->xmotion.time;
- return True;
- case EnterNotify:
- case LeaveNotify:
- lastTimestamp = ev->xcrossing.time;
- return True;
- case PropertyNotify:
- lastTimestamp = ev->xproperty.time;
- return True;
- case SelectionClear:
- lastTimestamp = ev->xselectionclear.time;
- return True;
- case SelectionRequest:
- lastTimestamp = ev->xselectionrequest.time;
- return True;
- case SelectionNotify:
- lastTimestamp = ev->xselection.time;
- return True;
+ case KeyPress:
+ case KeyRelease:
+ lastTimestamp = ev->xkey.time;
+ return True;
+ case ButtonPress:
+ case ButtonRelease:
+ lastTimestamp = ev->xbutton.time;
+ return True;
+ case MotionNotify:
+ lastTimestamp = ev->xmotion.time;
+ return True;
+ case EnterNotify:
+ case LeaveNotify:
+ lastTimestamp = ev->xcrossing.time;
+ return True;
+ case PropertyNotify:
+ lastTimestamp = ev->xproperty.time;
+ return True;
+ case SelectionClear:
+ lastTimestamp = ev->xselectionclear.time;
+ return True;
+ case SelectionRequest:
+ lastTimestamp = ev->xselectionrequest.time;
+ return True;
+ case SelectionNotify:
+ lastTimestamp = ev->xselection.time;
+ return True;
}
return False;
}
-
-
/**
* return the window about which this event is concerned; this
* window may not be the same as XEvent.xany.window (the first window listed
* in the structure).
*/
-Window WindowOfEvent (XEvent *e)
+Window
+WindowOfEvent(XEvent *e)
{
/*
* Each window subfield is marked with whether or not it is the same as
* XEvent.xany.window or is different (which is the case for some of the
* notify events).
*/
+ /* *INDENT-OFF* */
switch (e->type) {
case KeyPress:
- case KeyRelease: return e->xkey.window; /* same */
+ case KeyRelease: return e->xkey.window; /* same */
case ButtonPress:
- case ButtonRelease: return e->xbutton.window; /* same */
- case MotionNotify: return e->xmotion.window; /* same */
+ case ButtonRelease: return e->xbutton.window; /* same */
+ case MotionNotify: return e->xmotion.window; /* same */
case EnterNotify:
- case LeaveNotify: return e->xcrossing.window; /* same */
+ case LeaveNotify: return e->xcrossing.window; /* same */
case FocusIn:
- case FocusOut: return e->xfocus.window; /* same */
- case KeymapNotify: return e->xkeymap.window; /* same */
- case Expose: return e->xexpose.window; /* same */
- case GraphicsExpose: return e->xgraphicsexpose.drawable; /* same */
- case NoExpose: return e->xnoexpose.drawable; /* same */
- case VisibilityNotify: return e->xvisibility.window; /* same */
- case CreateNotify: return e->xcreatewindow.window; /* DIFF */
- case DestroyNotify: return e->xdestroywindow.window; /* DIFF */
- case UnmapNotify: return e->xunmap.window; /* DIFF */
- case MapNotify: return e->xmap.window; /* DIFF */
- case MapRequest: return e->xmaprequest.window; /* DIFF */
- case ReparentNotify: return e->xreparent.window; /* DIFF */
- case ConfigureNotify: return e->xconfigure.window; /* DIFF */
+ case FocusOut: return e->xfocus.window; /* same */
+ case KeymapNotify: return e->xkeymap.window; /* same */
+ case Expose: return e->xexpose.window; /* same */
+ case GraphicsExpose: return e->xgraphicsexpose.drawable; /* same */
+ case NoExpose: return e->xnoexpose.drawable; /* same */
+ case VisibilityNotify: return e->xvisibility.window; /* same */
+ case CreateNotify: return e->xcreatewindow.window; /* DIFF */
+ case DestroyNotify: return e->xdestroywindow.window; /* DIFF */
+ case UnmapNotify: return e->xunmap.window; /* DIFF */
+ case MapNotify: return e->xmap.window; /* DIFF */
+ case MapRequest: return e->xmaprequest.window; /* DIFF */
+ case ReparentNotify: return e->xreparent.window; /* DIFF */
+ case ConfigureNotify: return e->xconfigure.window; /* DIFF */
case ConfigureRequest: return e->xconfigurerequest.window; /* DIFF */
- case GravityNotify: return e->xgravity.window; /* DIFF */
- case ResizeRequest: return e->xresizerequest.window; /* same */
- case CirculateNotify: return e->xcirculate.window; /* DIFF */
+ case GravityNotify: return e->xgravity.window; /* DIFF */
+ case ResizeRequest: return e->xresizerequest.window; /* same */
+ case CirculateNotify: return e->xcirculate.window; /* DIFF */
case CirculateRequest: return e->xcirculaterequest.window; /* DIFF */
- case PropertyNotify: return e->xproperty.window; /* same */
- case SelectionClear: return e->xselectionclear.window; /* same */
- case SelectionRequest: return e->xselectionrequest.requestor; /* DIFF */
- case SelectionNotify: return e->xselection.requestor; /* same */
- case ColormapNotify: return e->xcolormap.window; /* same */
- case ClientMessage: return e->xclient.window; /* same */
- case MappingNotify: return None;
- }
+ case PropertyNotify: return e->xproperty.window; /* same */
+ case SelectionClear: return e->xselectionclear.window; /* same */
+ case SelectionRequest: return e->xselectionrequest.requestor; /* DIFF */
+ case SelectionNotify: return e->xselection.requestor; /* same */
+ case ColormapNotify: return e->xcolormap.window; /* same */
+ case ClientMessage: return e->xclient.window; /* same */
+ case MappingNotify: return None;
+ }
+ /* *INDENT-ON* */
return None;
}
-
-
/**
* handle a single X event stored in global var Event
* this routine for is for a call during an f.move
*/
-Bool DispatchEvent2 (void)
+Bool
+DispatchEvent2(void)
{
Window w = Event.xany.window;
XPointer context_data;
- StashEventTime (&Event);
+ StashEventTime(&Event);
- if (XFindContext (dpy, w, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
+ if (XFindContext(dpy, w, TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
else
- Tmp_win = NULL;
+ Tmp_win = NULL;
- if (XFindContext (dpy, w, ScreenContext, &context_data) == 0)
- Scr = (struct ScreenInfo *) context_data;
+ if (XFindContext(dpy, w, ScreenContext, &context_data) == 0)
+ Scr = (struct ScreenInfo *) context_data;
else
- Scr = FindScreenInfo (WindowOfEvent (&Event));
+ Scr = FindScreenInfo(WindowOfEvent(&Event));
- if (!Scr) return False;
+ if (!Scr)
+ return False;
if (menuFromFrameOrWindowOrTitlebar && Event.type == Expose)
- HandleExpose();
+ HandleExpose();
- if (!menuFromFrameOrWindowOrTitlebar && Event.type>= 0 && Event.type < MAX_X_EVENT) {
- (*EventHandler[Event.type])();
+ if (!menuFromFrameOrWindowOrTitlebar && Event.type >= 0 &&
+ Event.type < MAX_X_EVENT) {
+ (*EventHandler[Event.type]) ();
}
return True;
@@ -315,62 +313,61 @@ Bool DispatchEvent2 (void)
/**
* handle a single X event stored in global var Event
*/
-Bool DispatchEvent (void)
+Bool
+DispatchEvent(void)
{
Window w = Event.xany.window;
XPointer context_data;
- StashEventTime (&Event);
+ StashEventTime(&Event);
- if (XFindContext (dpy, w, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
+ if (XFindContext(dpy, w, TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
else
- Tmp_win = NULL;
+ Tmp_win = NULL;
- if (XFindContext (dpy, w, ScreenContext, &context_data) == 0)
- Scr = (struct ScreenInfo *) context_data;
+ if (XFindContext(dpy, w, ScreenContext, &context_data) == 0)
+ Scr = (struct ScreenInfo *) context_data;
else
- Scr = FindScreenInfo (WindowOfEvent (&Event));
+ Scr = FindScreenInfo(WindowOfEvent(&Event));
- if (!Scr) return False;
+ if (!Scr)
+ return False;
- if (Event.type>= 0 && Event.type < MAX_X_EVENT) {
- (*EventHandler[Event.type])();
+ if (Event.type >= 0 && Event.type < MAX_X_EVENT) {
+ (*EventHandler[Event.type]) ();
}
return True;
}
-
-
/**
* handle X events
*/
void
HandleEvents(void)
{
- while (TRUE)
- {
- if (enter_flag && !QLength(dpy)) {
- if (enter_win && enter_win != raise_win) {
- AutoRaiseWindow (enter_win); /* sets enter_flag T */
- } else {
- enter_flag = FALSE;
- }
- }
- if (ColortableThrashing && !QLength(dpy) && Scr) {
- InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
- }
- WindowMoved = FALSE;
- XtAppNextEvent(appContext, &Event);
- if (Event.type>= 0 && Event.type < MAX_X_EVENT)
- (void) DispatchEvent ();
- else
- XtDispatchEvent (&Event);
+ while (TRUE) {
+ if (enter_flag && !QLength(dpy)) {
+ if (enter_win && enter_win != raise_win) {
+ AutoRaiseWindow(enter_win); /* sets enter_flag T */
+ }
+ else {
+ enter_flag = FALSE;
+ }
+ }
+ if (ColortableThrashing && !QLength(dpy) && Scr) {
+ InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
+ }
+ WindowMoved = FALSE;
+ XtAppNextEvent(appContext, &Event);
+
+ if (Event.type >= 0 && Event.type < MAX_X_EVENT)
+ (void) DispatchEvent();
+ else
+ XtDispatchEvent(&Event);
}
}
-
-
/**
* colormap notify event handler.
*
@@ -389,148 +386,135 @@ HandleColormapNotify(void)
XPointer context_data;
if (XFindContext(dpy, cevent->window, ColormapContext, &context_data) == 0)
- cwin = (ColormapWindow *) context_data;
+ cwin = (ColormapWindow *) context_data;
else
- return;
+ return;
cmap = cwin->colormap;
- if (cevent->new)
- {
- if (XFindContext(dpy, cevent->colormap, ColormapContext,
- &context_data) == XCNOENT)
- cwin->colormap = CreateTwmColormap(cevent->colormap);
- else
- {
- cwin->colormap = (TwmColormap *) context_data;
- cwin->colormap->refcnt++;
- }
-
- cmap->refcnt--;
-
- if (cevent->state == ColormapUninstalled)
- cmap->state &= ~CM_INSTALLED;
- else
- cmap->state |= CM_INSTALLED;
-
- if (cmap->state & CM_INSTALLABLE)
- InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
-
- if (cmap->refcnt == 0)
- {
- XDeleteContext(dpy, cmap->c, ColormapContext);
- free(cmap);
- }
-
- return;
- }
-
- if (cevent->state == ColormapUninstalled &&
- (cmap->state & CM_INSTALLABLE))
- {
- if (!(cmap->state & CM_INSTALLED))
- return;
- cmap->state &= ~CM_INSTALLED;
-
- if (!ColortableThrashing)
- {
- ColortableThrashing = TRUE;
- XSync(dpy, 0);
- }
-
- if (cevent->serial >= Scr->cmapInfo.first_req)
- {
- number_cwins = Scr->cmapInfo.cmaps->number_cwins;
-
- /*
- * Find out which colortables collided.
- */
-
- cwins = Scr->cmapInfo.cmaps->cwins;
- for (lost = won = -1, n = 0;
- (lost == -1 || won == -1) && n < number_cwins;
- n++)
- {
- if (lost == -1 && cwins[n] == cwin)
- {
- lost = n; /* This is the window which lost its colormap */
- continue;
- }
-
- if (won == -1 &&
- cwins[n]->colormap->install_req == cevent->serial)
- {
- won = n; /* This is the window whose colormap caused */
- continue; /* the de-install of the previous colormap */
- }
- }
-
- /*
- ** Cases are:
- ** Both the request and the window were found:
- ** One of the installs made honoring the WM_COLORMAP
- ** property caused another of the colormaps to be
- ** de-installed, just mark the scoreboard.
- **
- ** Only the request was found:
- ** One of the installs made honoring the WM_COLORMAP
- ** property caused a window not in the WM_COLORMAP
- ** list to lose its map. This happens when the map
- ** it is losing is one which is trying to be installed,
- ** but is getting getting de-installed by another map
- ** in this case, we'll get a scoreable event later,
- ** this one is meaningless.
- **
- ** Neither the request nor the window was found:
- ** Somebody called installcolormap, but it doesn't
- ** affect the WM_COLORMAP windows. This case will
- ** probably never occur.
- **
- ** Only the window was found:
- ** One of the WM_COLORMAP windows lost its colormap
- ** but it wasn't one of the requests known. This is
- ** probably because someone did an "InstallColormap".
- ** The colormap policy is "enforced" by re-installing
- ** the colormaps which are believed to be correct.
- */
-
- if (won != -1) {
- if (lost != -1)
- {
- /* lower diagonal index calculation */
- if (lost > won)
- n = lost*(lost-1)/2 + won;
- else
- n = won*(won-1)/2 + lost;
- Scr->cmapInfo.cmaps->scoreboard[n] = 1;
- } else
- {
- /*
- ** One of the cwin installs caused one of the cwin
- ** colormaps to be de-installed, so I'm sure to get an
- ** UninstallNotify for the cwin I know about later.
- ** I haven't got it yet, or the test of CM_INSTALLED
- ** above would have failed. Turning the CM_INSTALLED
- ** bit back on makes sure we get back here to score
- ** the collision.
- */
- cmap->state |= CM_INSTALLED;
- }
- } else if (lost != -1) {
- InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
- }
- }
+ if (cevent->new) {
+ if (XFindContext(dpy, cevent->colormap, ColormapContext,
+ &context_data) == XCNOENT)
+ cwin->colormap = CreateTwmColormap(cevent->colormap);
+ else {
+ cwin->colormap = (TwmColormap *) context_data;
+ cwin->colormap->refcnt++;
+ }
+
+ cmap->refcnt--;
+
+ if (cevent->state == ColormapUninstalled)
+ cmap->state &= ~CM_INSTALLED;
+ else
+ cmap->state |= CM_INSTALLED;
+
+ if (cmap->state & CM_INSTALLABLE)
+ InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
+
+ if (cmap->refcnt == 0) {
+ XDeleteContext(dpy, cmap->c, ColormapContext);
+ free(cmap);
+ }
+
+ return;
+ }
+
+ if (cevent->state == ColormapUninstalled && (cmap->state & CM_INSTALLABLE)) {
+ if (!(cmap->state & CM_INSTALLED))
+ return;
+ cmap->state &= ~CM_INSTALLED;
+
+ if (!ColortableThrashing) {
+ ColortableThrashing = TRUE;
+ XSync(dpy, 0);
+ }
+
+ if (cevent->serial >= Scr->cmapInfo.first_req) {
+ number_cwins = Scr->cmapInfo.cmaps->number_cwins;
+
+ /*
+ * Find out which colortables collided.
+ */
+
+ cwins = Scr->cmapInfo.cmaps->cwins;
+ for (lost = won = -1, n = 0;
+ (lost == -1 || won == -1) && n < number_cwins; n++) {
+ if (lost == -1 && cwins[n] == cwin) {
+ lost = n; /* This is the window which lost its colormap */
+ continue;
+ }
+
+ if (won == -1 &&
+ cwins[n]->colormap->install_req == cevent->serial) {
+ won = n; /* This is the window whose colormap caused */
+ continue; /* the de-install of the previous colormap */
+ }
+ }
+
+ /*
+ ** Cases are:
+ ** Both the request and the window were found:
+ ** One of the installs made honoring the WM_COLORMAP
+ ** property caused another of the colormaps to be
+ ** de-installed, just mark the scoreboard.
+ **
+ ** Only the request was found:
+ ** One of the installs made honoring the WM_COLORMAP
+ ** property caused a window not in the WM_COLORMAP
+ ** list to lose its map. This happens when the map
+ ** it is losing is one which is trying to be installed,
+ ** but is getting getting de-installed by another map
+ ** in this case, we'll get a scoreable event later,
+ ** this one is meaningless.
+ **
+ ** Neither the request nor the window was found:
+ ** Somebody called installcolormap, but it doesn't
+ ** affect the WM_COLORMAP windows. This case will
+ ** probably never occur.
+ **
+ ** Only the window was found:
+ ** One of the WM_COLORMAP windows lost its colormap
+ ** but it wasn't one of the requests known. This is
+ ** probably because someone did an "InstallColormap".
+ ** The colormap policy is "enforced" by re-installing
+ ** the colormaps which are believed to be correct.
+ */
+
+ if (won != -1) {
+ if (lost != -1) {
+ /* lower diagonal index calculation */
+ if (lost > won)
+ n = lost * (lost - 1) / 2 + won;
+ else
+ n = won * (won - 1) / 2 + lost;
+ Scr->cmapInfo.cmaps->scoreboard[n] = 1;
+ }
+ else {
+ /*
+ ** One of the cwin installs caused one of the cwin
+ ** colormaps to be de-installed, so I'm sure to get an
+ ** UninstallNotify for the cwin I know about later.
+ ** I haven't got it yet, or the test of CM_INSTALLED
+ ** above would have failed. Turning the CM_INSTALLED
+ ** bit back on makes sure we get back here to score
+ ** the collision.
+ */
+ cmap->state |= CM_INSTALLED;
+ }
+ }
+ else if (lost != -1) {
+ InstallWindowColormaps(ColormapNotify, (TwmWindow *) NULL);
+ }
+ }
}
else if (cevent->state == ColormapUninstalled)
- cmap->state &= ~CM_INSTALLED;
+ cmap->state &= ~CM_INSTALLED;
else if (cevent->state == ColormapInstalled)
- cmap->state |= CM_INSTALLED;
+ cmap->state |= CM_INSTALLED;
}
-
-
/**
* visibility notify event handler.
*
@@ -548,9 +532,9 @@ HandleVisibilityNotify(void)
XPointer context_data;
if (XFindContext(dpy, vevent->window, ColormapContext, &context_data) == 0)
- cwin = (ColormapWindow *) context_data;
+ cwin = (ColormapWindow *) context_data;
else
- return;
+ return;
/*
* when Saber complains about retreiving an <int> from an <unsigned int>
@@ -558,19 +542,16 @@ HandleVisibilityNotify(void)
*/
cmap = cwin->colormap;
if ((cmap->state & CM_INSTALLABLE) &&
- vevent->state != cwin->visibility &&
- (vevent->state == VisibilityFullyObscured ||
- cwin->visibility == VisibilityFullyObscured) &&
- cmap->w == cwin->w) {
- cwin->visibility = vevent->state;
- InstallWindowColormaps(VisibilityNotify, (TwmWindow *) NULL);
- } else
- cwin->visibility = vevent->state;
+ vevent->state != cwin->visibility &&
+ (vevent->state == VisibilityFullyObscured ||
+ cwin->visibility == VisibilityFullyObscured) && cmap->w == cwin->w) {
+ cwin->visibility = vevent->state;
+ InstallWindowColormaps(VisibilityNotify, (TwmWindow *) NULL);
+ }
+ else
+ cwin->visibility = vevent->state;
}
-
-
-
int MovedFromKeyPress = False;
/**
@@ -584,112 +565,108 @@ HandleKeyPress(void)
int len;
unsigned int modifier;
- if (InfoLines) XUnmapWindow(dpy, Scr->InfoWindow);
+ if (InfoLines)
+ XUnmapWindow(dpy, Scr->InfoWindow);
Context = C_NO_CONTEXT;
if (Event.xany.window == Scr->Root)
- Context = C_ROOT;
- if (Tmp_win)
- {
- if (Event.xany.window == Tmp_win->title_w)
- Context = C_TITLE;
- if (Event.xany.window == Tmp_win->w)
- Context = C_WINDOW;
- if (Event.xany.window == Tmp_win->icon_w)
- Context = C_ICON;
- if (Event.xany.window == Tmp_win->frame)
- Context = C_FRAME;
- if (Tmp_win->list && Event.xany.window == Tmp_win->list->w)
- Context = C_ICONMGR;
- if (Tmp_win->list && Event.xany.window == Tmp_win->list->icon)
- Context = C_ICONMGR;
+ Context = C_ROOT;
+ if (Tmp_win) {
+ if (Event.xany.window == Tmp_win->title_w)
+ Context = C_TITLE;
+ if (Event.xany.window == Tmp_win->w)
+ Context = C_WINDOW;
+ if (Event.xany.window == Tmp_win->icon_w)
+ Context = C_ICON;
+ if (Event.xany.window == Tmp_win->frame)
+ Context = C_FRAME;
+ if (Tmp_win->list && Event.xany.window == Tmp_win->list->w)
+ Context = C_ICONMGR;
+ if (Tmp_win->list && Event.xany.window == Tmp_win->list->icon)
+ Context = C_ICONMGR;
}
modifier = (Event.xkey.state & mods_used);
ks = XLookupKeysym((XKeyEvent *) &Event, /* KeySyms index */ 0);
- for (key = Scr->FuncKeyRoot.next; key != NULL; key = key->next)
- {
- if (key->keysym == ks &&
- (unsigned)key->mods == modifier &&
- (key->cont == Context || key->cont == C_NAME))
- {
- /* weed out the functions that don't make sense to execute
- * from a key press
- */
- if (key->func == F_RESIZE)
- return;
+
+ for (key = Scr->FuncKeyRoot.next; key != NULL; key = key->next) {
+ if (key->keysym == ks &&
+ (unsigned) key->mods == modifier &&
+ (key->cont == Context || key->cont == C_NAME)) {
+ /* weed out the functions that don't make sense to execute
+ * from a key press
+ */
+ if (key->func == F_RESIZE)
+ return;
/* special case for F_MOVE/F_FORCEMOVE activated from a keypress */
if (key->func == F_MOVE || key->func == F_FORCEMOVE)
MovedFromKeyPress = True;
- if (key->cont != C_NAME)
- {
- ExecuteFunction(key->func, key->action, Event.xany.window,
- Tmp_win, &Event, Context, FALSE);
- XUngrabPointer(dpy, CurrentTime);
- return;
- }
- else
- {
- int matched = FALSE;
- len = (int)strlen(key->win_name);
-
- /* try and match the name first */
- for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
- Tmp_win = Tmp_win->next)
- {
- if (!strncmp(key->win_name, Tmp_win->name, (size_t)len))
- {
- matched = TRUE;
- ExecuteFunction(key->func, key->action, Tmp_win->frame,
- Tmp_win, &Event, C_FRAME, FALSE);
- XUngrabPointer(dpy, CurrentTime);
- }
- }
-
- /* now try the res_name */
- if (!matched)
- for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
- Tmp_win = Tmp_win->next)
- {
- if (!strncmp(key->win_name, Tmp_win->class.res_name, (size_t)len))
- {
- matched = TRUE;
- ExecuteFunction(key->func, key->action, Tmp_win->frame,
- Tmp_win, &Event, C_FRAME, FALSE);
- XUngrabPointer(dpy, CurrentTime);
- }
- }
-
- /* now try the res_class */
- if (!matched)
- for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
- Tmp_win = Tmp_win->next)
- {
- if (!strncmp(key->win_name, Tmp_win->class.res_class, (size_t)len))
- {
- matched = TRUE;
- ExecuteFunction(key->func, key->action, Tmp_win->frame,
- Tmp_win, &Event, C_FRAME, FALSE);
- XUngrabPointer(dpy, CurrentTime);
- }
- }
- if (matched)
- return;
- }
- }
+ if (key->cont != C_NAME) {
+ ExecuteFunction(key->func, key->action, Event.xany.window,
+ Tmp_win, &Event, Context, FALSE);
+ XUngrabPointer(dpy, CurrentTime);
+ return;
+ }
+ else {
+ int matched = FALSE;
+
+ len = (int) strlen(key->win_name);
+
+ /* try and match the name first */
+ for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
+ Tmp_win = Tmp_win->next) {
+ if (!strncmp(key->win_name, Tmp_win->name, (size_t) len)) {
+ matched = TRUE;
+ ExecuteFunction(key->func, key->action, Tmp_win->frame,
+ Tmp_win, &Event, C_FRAME, FALSE);
+ XUngrabPointer(dpy, CurrentTime);
+ }
+ }
+
+ /* now try the res_name */
+ if (!matched)
+ for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
+ Tmp_win = Tmp_win->next) {
+ if (!strncmp
+ (key->win_name, Tmp_win->class.res_name,
+ (size_t) len)) {
+ matched = TRUE;
+ ExecuteFunction(key->func, key->action,
+ Tmp_win->frame, Tmp_win, &Event,
+ C_FRAME, FALSE);
+ XUngrabPointer(dpy, CurrentTime);
+ }
+ }
+
+ /* now try the res_class */
+ if (!matched)
+ for (Tmp_win = Scr->TwmRoot.next; Tmp_win != NULL;
+ Tmp_win = Tmp_win->next) {
+ if (!strncmp
+ (key->win_name, Tmp_win->class.res_class,
+ (size_t) len)) {
+ matched = TRUE;
+ ExecuteFunction(key->func, key->action,
+ Tmp_win->frame, Tmp_win, &Event,
+ C_FRAME, FALSE);
+ XUngrabPointer(dpy, CurrentTime);
+ }
+ }
+ if (matched)
+ return;
+ }
+ }
}
/* if we get here, no function key was bound to the key. Send it
* to the client if it was in a window we know about.
*/
- if (Tmp_win)
- {
+ if (Tmp_win) {
if (Event.xany.window == Tmp_win->icon_w ||
- Event.xany.window == Tmp_win->frame ||
- Event.xany.window == Tmp_win->title_w ||
- (Tmp_win->list && (Event.xany.window == Tmp_win->list->w)))
- {
+ Event.xany.window == Tmp_win->frame ||
+ Event.xany.window == Tmp_win->title_w ||
+ (Tmp_win->list && (Event.xany.window == Tmp_win->list->w))) {
Event.xkey.window = Tmp_win->w;
XSendEvent(dpy, Tmp_win->w, False, KeyPressMask, &Event);
}
@@ -697,55 +674,54 @@ HandleKeyPress(void)
}
-
-
static void
-free_window_names (TwmWindow *tmp, Bool nukefull, Bool nukename, Bool nukeicon)
+free_window_names(TwmWindow *tmp, Bool nukefull, Bool nukename, Bool nukeicon)
{
/*
* XXX - are we sure that nobody ever sets these to another constant (check
* twm windows)?
*/
- if (tmp->name == tmp->full_name) nukefull = False;
- if (tmp->icon_name == tmp->name) nukename = False;
-
- if (nukefull && tmp->full_name) free (tmp->full_name);
- if (nukename && tmp->name) free (tmp->name);
- if (nukeicon && tmp->icon_name) free (tmp->icon_name);
+ if (tmp->name == tmp->full_name)
+ nukefull = False;
+ if (tmp->icon_name == tmp->name)
+ nukename = False;
+
+ if (nukefull && tmp->full_name)
+ free(tmp->full_name);
+ if (nukename && tmp->name)
+ free(tmp->name);
+ if (nukeicon && tmp->icon_name)
+ free(tmp->icon_name);
return;
}
-
-
void
-free_cwins (TwmWindow *tmp)
+free_cwins(TwmWindow *tmp)
{
int i;
TwmColormap *cmap;
if (tmp->cmaps.number_cwins) {
- for (i = 0; i < tmp->cmaps.number_cwins; i++) {
- if (--tmp->cmaps.cwins[i]->refcnt == 0) {
- cmap = tmp->cmaps.cwins[i]->colormap;
- if (--cmap->refcnt == 0) {
- XDeleteContext(dpy, cmap->c, ColormapContext);
- free(cmap);
- }
- XDeleteContext(dpy, tmp->cmaps.cwins[i]->w, ColormapContext);
- free(tmp->cmaps.cwins[i]);
- }
- }
- free(tmp->cmaps.cwins);
- if (tmp->cmaps.number_cwins > 1) {
- free(tmp->cmaps.scoreboard);
- tmp->cmaps.scoreboard = NULL;
- }
- tmp->cmaps.number_cwins = 0;
+ for (i = 0; i < tmp->cmaps.number_cwins; i++) {
+ if (--tmp->cmaps.cwins[i]->refcnt == 0) {
+ cmap = tmp->cmaps.cwins[i]->colormap;
+ if (--cmap->refcnt == 0) {
+ XDeleteContext(dpy, cmap->c, ColormapContext);
+ free(cmap);
+ }
+ XDeleteContext(dpy, tmp->cmaps.cwins[i]->w, ColormapContext);
+ free(tmp->cmaps.cwins[i]);
+ }
+ }
+ free(tmp->cmaps.cwins);
+ if (tmp->cmaps.number_cwins > 1) {
+ free(tmp->cmaps.scoreboard);
+ tmp->cmaps.scoreboard = NULL;
+ }
+ tmp->cmaps.number_cwins = 0;
}
}
-
-
/**
* property notify event handler
*/
@@ -753,208 +729,225 @@ void
HandlePropertyNotify(void)
{
char *name = NULL;
- unsigned long valuemask; /* mask for create windows */
- XSetWindowAttributes attributes; /* attributes for create windows */
+ unsigned long valuemask; /* mask for create windows */
+ XSetWindowAttributes attributes; /* attributes for create windows */
Pixmap pm;
/* watch for standard colormap changes */
if (Event.xproperty.window == Scr->Root) {
- XStandardColormap *maps = NULL;
- int nmaps;
-
- switch (Event.xproperty.state) {
- case PropertyNewValue:
- if (XGetRGBColormaps (dpy, Scr->Root, &maps, &nmaps,
- Event.xproperty.atom)) {
- /* if got one, then replace any existing entry */
- InsertRGBColormap (Event.xproperty.atom, maps, nmaps, True);
- }
- return;
-
- case PropertyDelete:
- RemoveRGBColormap (Event.xproperty.atom);
- return;
- }
+ XStandardColormap *maps = NULL;
+ int nmaps;
+
+ switch (Event.xproperty.state) {
+ case PropertyNewValue:
+ if (XGetRGBColormaps(dpy, Scr->Root, &maps, &nmaps,
+ Event.xproperty.atom)) {
+ /* if got one, then replace any existing entry */
+ InsertRGBColormap(Event.xproperty.atom, maps, nmaps, True);
+ }
+ return;
+
+ case PropertyDelete:
+ RemoveRGBColormap(Event.xproperty.atom);
+
+ return;
+ }
}
- if (!Tmp_win) return; /* unknown window */
+ if (!Tmp_win)
+ return; /* unknown window */
-#define MAX_NAME_LEN 200L /* truncate to this many */
-#define MAX_ICON_NAME_LEN 200L /* ditto */
+#define MAX_NAME_LEN 200L /* truncate to this many */
+#define MAX_ICON_NAME_LEN 200L /* ditto */
switch (Event.xproperty.atom) {
- case XA_WM_NAME:
- if (!I18N_FetchName(dpy, Tmp_win->w, &name)) return;
- free_window_names (Tmp_win, True, True, False);
-
- Tmp_win->full_name = strdup(name ? name : NoName);
- Tmp_win->name = strdup(name ? name : NoName);
- if (name) free(name);
-
- Tmp_win->nameChanged = 1;
-
- Tmp_win->name_width = MyFont_TextWidth (&Scr->TitleBarFont,
- Tmp_win->name,
- (int)strlen (Tmp_win->name));
-
- SetupWindow (Tmp_win, Tmp_win->frame_x, Tmp_win->frame_y,
- Tmp_win->frame_width, Tmp_win->frame_height, -1);
-
- if (Tmp_win->title_w) XClearArea(dpy, Tmp_win->title_w, 0,0,0,0, True);
-
- /*
- * if the icon name is NoName, set the name of the icon to be
- * the same as the window
- */
- if (Tmp_win->icon_name == NoName) {
- Tmp_win->icon_name = Tmp_win->name;
- RedoIconName();
- }
- break;
-
- case XA_WM_ICON_NAME:
- if (!I18N_GetIconName(dpy, Tmp_win->w, &name)) return;
- free_window_names (Tmp_win, False, False, True);
- Tmp_win->icon_name = strdup(name ? name : NoName);
- if (name) free(name);
-
- RedoIconName();
- break;
-
- case XA_WM_HINTS:
- if (Tmp_win->wmhints) XFree (Tmp_win->wmhints);
- Tmp_win->wmhints = XGetWMHints(dpy, Event.xany.window);
-
- if (Tmp_win->wmhints && (Tmp_win->wmhints->flags & WindowGroupHint))
- Tmp_win->group = Tmp_win->wmhints->window_group;
-
- if (Tmp_win->icon_not_ours && Tmp_win->wmhints &&
- !(Tmp_win->wmhints->flags & IconWindowHint)) {
- /* IconWindowHint was formerly on, now off; revert
- // to a default icon */
- int icon_x = 0, icon_y = 0;
- XGetGeometry (dpy, Tmp_win->icon_w, &JunkRoot,
- &icon_x, &icon_y,
- &JunkWidth, &JunkHeight, &JunkBW, &JunkDepth);
- XSelectInput (dpy, Tmp_win->icon_w, None);
- XDeleteContext (dpy, Tmp_win->icon_w, TwmContext);
- XDeleteContext (dpy, Tmp_win->icon_w, ScreenContext);
- CreateIconWindow(Tmp_win, icon_x, icon_y);
- break;
- }
-
- if (!Tmp_win->forced && Tmp_win->wmhints &&
- Tmp_win->wmhints->flags & IconWindowHint) {
- if (Tmp_win->icon_w) {
- int icon_x, icon_y;
-
- /*
- * There's already an icon window.
- * Try to find out where it is; if we succeed, move the new
- * window to where the old one is.
- */
- if (XGetGeometry (dpy, Tmp_win->icon_w, &JunkRoot, &icon_x,
- &icon_y, &JunkWidth, &JunkHeight, &JunkBW, &JunkDepth)) {
- /*
- * Move the new icon window to where the old one was.
- */
- XMoveWindow(dpy, Tmp_win->wmhints->icon_window, icon_x,
- icon_y);
- }
-
- /*
- * If the window is iconic, map the new icon window.
- */
- if (Tmp_win->icon)
- XMapWindow(dpy, Tmp_win->wmhints->icon_window);
-
- /*
- * Now, if the old window isn't ours, unmap it, otherwise
- * just get rid of it completely.
- */
- if (Tmp_win->icon_not_ours) {
- if (Tmp_win->icon_w != Tmp_win->wmhints->icon_window)
- XUnmapWindow(dpy, Tmp_win->icon_w);
- } else
- XDestroyWindow(dpy, Tmp_win->icon_w);
-
- XDeleteContext(dpy, Tmp_win->icon_w, TwmContext);
- XDeleteContext(dpy, Tmp_win->icon_w, ScreenContext);
-
- /*
- * The new icon window isn't our window, so note that fact
- * so that we don't treat it as ours.
- */
- Tmp_win->icon_not_ours = TRUE;
-
- /*
- * Now make the new window the icon window for this window,
- * and set it up to work as such (select for key presses
- * and button presses/releases, set up the contexts for it,
- * and define the cursor for it).
- */
- Tmp_win->icon_w = Tmp_win->wmhints->icon_window;
- XSelectInput (dpy, Tmp_win->icon_w,
- KeyPressMask | ButtonPressMask | ButtonReleaseMask);
- XSaveContext(dpy, Tmp_win->icon_w, TwmContext, (XPointer)Tmp_win);
- XSaveContext(dpy, Tmp_win->icon_w, ScreenContext, (XPointer)Scr);
- XDefineCursor(dpy, Tmp_win->icon_w, Scr->IconCursor);
- }
- }
-
- if (Tmp_win->icon_w && !Tmp_win->forced && Tmp_win->wmhints &&
- (Tmp_win->wmhints->flags & IconPixmapHint)) {
- if (!XGetGeometry (dpy, Tmp_win->wmhints->icon_pixmap, &JunkRoot,
- &JunkX, &JunkY, (unsigned int *)&Tmp_win->icon_width,
- (unsigned int *)&Tmp_win->icon_height, &JunkBW, &JunkDepth)) {
- return;
- }
-
- pm = XCreatePixmap (dpy, Scr->Root, (unsigned)Tmp_win->icon_width,
- (unsigned)Tmp_win->icon_height, (unsigned)Scr->d_depth);
-
- FB(Tmp_win->iconc.fore, Tmp_win->iconc.back);
- XCopyPlane(dpy, Tmp_win->wmhints->icon_pixmap, pm,
- Scr->NormalGC,
- 0,0, (unsigned)Tmp_win->icon_width, (unsigned)Tmp_win->icon_height, 0, 0, 1 );
-
- valuemask = CWBackPixmap;
- attributes.background_pixmap = pm;
-
- if (Tmp_win->icon_bm_w)
- XDestroyWindow(dpy, Tmp_win->icon_bm_w);
-
- Tmp_win->icon_bm_w =
- XCreateWindow (dpy, Tmp_win->icon_w, 0, 0,
- (unsigned int) Tmp_win->icon_width,
- (unsigned int) Tmp_win->icon_height,
- (unsigned int) 0, Scr->d_depth,
- (unsigned int) CopyFromParent, Scr->d_visual,
- valuemask, &attributes);
-
- XFreePixmap (dpy, pm);
- RedoIconName();
- }
- break;
-
- case XA_WM_NORMAL_HINTS:
- GetWindowSizeHints (Tmp_win);
- break;
-
- default:
- if (Event.xproperty.atom == _XA_WM_COLORMAP_WINDOWS) {
- FetchWmColormapWindows (Tmp_win); /* frees old data */
- break;
- } else if (Event.xproperty.atom == _XA_WM_PROTOCOLS) {
- FetchWmProtocols (Tmp_win);
- break;
- }
- break;
+ case XA_WM_NAME:
+ if (!I18N_FetchName(dpy, Tmp_win->w, &name))
+ return;
+ free_window_names(Tmp_win, True, True, False);
+
+ Tmp_win->full_name = strdup(name ? name : NoName);
+ Tmp_win->name = strdup(name ? name : NoName);
+ if (name)
+ free(name);
+
+ Tmp_win->nameChanged = 1;
+
+ Tmp_win->name_width = MyFont_TextWidth(&Scr->TitleBarFont,
+ Tmp_win->name,
+ (int) strlen(Tmp_win->name));
+
+ SetupWindow(Tmp_win, Tmp_win->frame_x, Tmp_win->frame_y,
+ Tmp_win->frame_width, Tmp_win->frame_height, -1);
+
+ if (Tmp_win->title_w)
+ XClearArea(dpy, Tmp_win->title_w, 0, 0, 0, 0, True);
+
+ /*
+ * if the icon name is NoName, set the name of the icon to be
+ * the same as the window
+ */
+ if (Tmp_win->icon_name == NoName) {
+ Tmp_win->icon_name = Tmp_win->name;
+ RedoIconName();
+ }
+ break;
+
+ case XA_WM_ICON_NAME:
+ if (!I18N_GetIconName(dpy, Tmp_win->w, &name))
+ return;
+ free_window_names(Tmp_win, False, False, True);
+ Tmp_win->icon_name = strdup(name ? name : NoName);
+ if (name)
+ free(name);
+
+ RedoIconName();
+ break;
+
+ case XA_WM_HINTS:
+ if (Tmp_win->wmhints)
+ XFree(Tmp_win->wmhints);
+ Tmp_win->wmhints = XGetWMHints(dpy, Event.xany.window);
+
+ if (Tmp_win->wmhints && (Tmp_win->wmhints->flags & WindowGroupHint))
+ Tmp_win->group = Tmp_win->wmhints->window_group;
+
+ if (Tmp_win->icon_not_ours && Tmp_win->wmhints &&
+ !(Tmp_win->wmhints->flags & IconWindowHint)) {
+ /* IconWindowHint was formerly on, now off; revert
+ // to a default icon */
+ int icon_x = 0, icon_y = 0;
+
+ XGetGeometry(dpy, Tmp_win->icon_w, &JunkRoot,
+ &icon_x, &icon_y,
+ &JunkWidth, &JunkHeight, &JunkBW, &JunkDepth);
+ XSelectInput(dpy, Tmp_win->icon_w, None);
+ XDeleteContext(dpy, Tmp_win->icon_w, TwmContext);
+ XDeleteContext(dpy, Tmp_win->icon_w, ScreenContext);
+ CreateIconWindow(Tmp_win, icon_x, icon_y);
+ break;
+ }
+
+ if (!Tmp_win->forced && Tmp_win->wmhints &&
+ Tmp_win->wmhints->flags & IconWindowHint) {
+ if (Tmp_win->icon_w) {
+ int icon_x, icon_y;
+
+ /*
+ * There's already an icon window.
+ * Try to find out where it is; if we succeed, move the new
+ * window to where the old one is.
+ */
+ if (XGetGeometry(dpy, Tmp_win->icon_w, &JunkRoot, &icon_x,
+ &icon_y, &JunkWidth, &JunkHeight, &JunkBW,
+ &JunkDepth)) {
+ /*
+ * Move the new icon window to where the old one was.
+ */
+ XMoveWindow(dpy, Tmp_win->wmhints->icon_window, icon_x,
+ icon_y);
+ }
+
+ /*
+ * If the window is iconic, map the new icon window.
+ */
+ if (Tmp_win->icon)
+ XMapWindow(dpy, Tmp_win->wmhints->icon_window);
+
+ /*
+ * Now, if the old window isn't ours, unmap it, otherwise
+ * just get rid of it completely.
+ */
+ if (Tmp_win->icon_not_ours) {
+ if (Tmp_win->icon_w != Tmp_win->wmhints->icon_window)
+ XUnmapWindow(dpy, Tmp_win->icon_w);
+ }
+ else
+ XDestroyWindow(dpy, Tmp_win->icon_w);
+
+ XDeleteContext(dpy, Tmp_win->icon_w, TwmContext);
+ XDeleteContext(dpy, Tmp_win->icon_w, ScreenContext);
+
+ /*
+ * The new icon window isn't our window, so note that fact
+ * so that we don't treat it as ours.
+ */
+ Tmp_win->icon_not_ours = TRUE;
+
+ /*
+ * Now make the new window the icon window for this window,
+ * and set it up to work as such (select for key presses
+ * and button presses/releases, set up the contexts for it,
+ * and define the cursor for it).
+ */
+ Tmp_win->icon_w = Tmp_win->wmhints->icon_window;
+ XSelectInput(dpy, Tmp_win->icon_w,
+ KeyPressMask | ButtonPressMask |
+ ButtonReleaseMask);
+ XSaveContext(dpy, Tmp_win->icon_w, TwmContext,
+ (XPointer) Tmp_win);
+ XSaveContext(dpy, Tmp_win->icon_w, ScreenContext,
+ (XPointer) Scr);
+ XDefineCursor(dpy, Tmp_win->icon_w, Scr->IconCursor);
+ }
+ }
+
+ if (Tmp_win->icon_w && !Tmp_win->forced && Tmp_win->wmhints &&
+ (Tmp_win->wmhints->flags & IconPixmapHint)) {
+ if (!XGetGeometry(dpy, Tmp_win->wmhints->icon_pixmap, &JunkRoot,
+ &JunkX, &JunkY,
+ (unsigned int *) &Tmp_win->icon_width,
+ (unsigned int *) &Tmp_win->icon_height, &JunkBW,
+ &JunkDepth)) {
+ return;
+ }
+
+ pm = XCreatePixmap(dpy, Scr->Root, (unsigned) Tmp_win->icon_width,
+ (unsigned) Tmp_win->icon_height,
+ (unsigned) Scr->d_depth);
+
+ FB(Tmp_win->iconc.fore, Tmp_win->iconc.back);
+ XCopyPlane(dpy, Tmp_win->wmhints->icon_pixmap, pm,
+ Scr->NormalGC,
+ 0, 0, (unsigned) Tmp_win->icon_width,
+ (unsigned) Tmp_win->icon_height, 0, 0, 1);
+
+ valuemask = CWBackPixmap;
+ attributes.background_pixmap = pm;
+
+ if (Tmp_win->icon_bm_w)
+ XDestroyWindow(dpy, Tmp_win->icon_bm_w);
+
+ Tmp_win->icon_bm_w =
+ XCreateWindow(dpy, Tmp_win->icon_w, 0, 0,
+ (unsigned int) Tmp_win->icon_width,
+ (unsigned int) Tmp_win->icon_height,
+ (unsigned int) 0, Scr->d_depth,
+ (unsigned int) CopyFromParent, Scr->d_visual,
+ valuemask, &attributes);
+
+ XFreePixmap(dpy, pm);
+ RedoIconName();
+ }
+ break;
+
+ case XA_WM_NORMAL_HINTS:
+ GetWindowSizeHints(Tmp_win);
+ break;
+
+ default:
+ if (Event.xproperty.atom == _XA_WM_COLORMAP_WINDOWS) {
+ FetchWmColormapWindows(Tmp_win); /* frees old data */
+ break;
+ }
+ else if (Event.xproperty.atom == _XA_WM_PROTOCOLS) {
+ FetchWmProtocols(Tmp_win);
+ break;
+ }
+ break;
}
}
-
-
/**
* procedure to re-position the icon window and name
*/
@@ -963,90 +956,79 @@ RedoIconName(void)
{
int x, y;
- if (Tmp_win->list)
- {
- /* let the expose event cause the repaint */
- XClearArea(dpy, Tmp_win->list->w, 0,0,0,0, True);
+ if (Tmp_win->list) {
+ /* let the expose event cause the repaint */
+ XClearArea(dpy, Tmp_win->list->w, 0, 0, 0, 0, True);
- if (Scr->SortIconMgr)
- SortIconManager(Tmp_win->list->iconmgr);
+ if (Scr->SortIconMgr)
+ SortIconManager(Tmp_win->list->iconmgr);
}
if (Tmp_win->icon_w == (Window) 0)
- return;
+ return;
if (Tmp_win->icon_not_ours)
- return;
+ return;
Tmp_win->icon_w_width = MyFont_TextWidth(&Scr->IconFont,
- Tmp_win->icon_name, (int)strlen(Tmp_win->icon_name));
+ Tmp_win->icon_name,
+ (int) strlen(Tmp_win->icon_name));
Tmp_win->icon_w_width += 6;
- if (Tmp_win->icon_w_width < Tmp_win->icon_width)
- {
- Tmp_win->icon_x = (Tmp_win->icon_width - Tmp_win->icon_w_width)/2;
- Tmp_win->icon_x += 3;
- Tmp_win->icon_w_width = Tmp_win->icon_width;
+ if (Tmp_win->icon_w_width < Tmp_win->icon_width) {
+ Tmp_win->icon_x = (Tmp_win->icon_width - Tmp_win->icon_w_width) / 2;
+ Tmp_win->icon_x += 3;
+ Tmp_win->icon_w_width = Tmp_win->icon_width;
}
- else
- {
- Tmp_win->icon_x = 3;
+ else {
+ Tmp_win->icon_x = 3;
}
if (Tmp_win->icon_w_width == Tmp_win->icon_width)
- x = 0;
+ x = 0;
else
- x = (Tmp_win->icon_w_width - Tmp_win->icon_width)/2;
+ x = (Tmp_win->icon_w_width - Tmp_win->icon_width) / 2;
y = 0;
Tmp_win->icon_w_height = Tmp_win->icon_height + Scr->IconFont.height + 4;
Tmp_win->icon_y = Tmp_win->icon_height + Scr->IconFont.height;
- XResizeWindow(dpy, Tmp_win->icon_w, (unsigned)Tmp_win->icon_w_width,
- (unsigned)Tmp_win->icon_w_height);
- if (Tmp_win->icon_bm_w)
- {
- XMoveWindow(dpy, Tmp_win->icon_bm_w, x, y);
- XMapWindow(dpy, Tmp_win->icon_bm_w);
+ XResizeWindow(dpy, Tmp_win->icon_w, (unsigned) Tmp_win->icon_w_width,
+ (unsigned) Tmp_win->icon_w_height);
+ if (Tmp_win->icon_bm_w) {
+ XMoveWindow(dpy, Tmp_win->icon_bm_w, x, y);
+ XMapWindow(dpy, Tmp_win->icon_bm_w);
}
- if (Tmp_win->icon)
- {
- XClearArea(dpy, Tmp_win->icon_w, 0, 0, 0, 0, True);
+ if (Tmp_win->icon) {
+ XClearArea(dpy, Tmp_win->icon_w, 0, 0, 0, 0, True);
}
}
-
-
/**
*client message event handler
*/
void
HandleClientMessage(void)
{
- if (Event.xclient.message_type == _XA_WM_CHANGE_STATE)
- {
- if (Tmp_win != NULL)
- {
- if (Event.xclient.data.l[0] == IconicState && !Tmp_win->icon)
- {
- XEvent button;
-
- XQueryPointer( dpy, Scr->Root, &JunkRoot, &JunkChild,
- &(button.xmotion.x_root),
- &(button.xmotion.y_root),
- &JunkX, &JunkY, &JunkMask);
-
- ExecuteFunction(F_ICONIFY, NULLSTR, Event.xany.window,
- Tmp_win, &button, FRAME, FALSE);
- XUngrabPointer(dpy, CurrentTime);
- }
- }
+ if (Event.xclient.message_type == _XA_WM_CHANGE_STATE) {
+ if (Tmp_win != NULL) {
+ if (Event.xclient.data.l[0] == IconicState && !Tmp_win->icon) {
+ XEvent button;
+
+ XQueryPointer(dpy, Scr->Root, &JunkRoot, &JunkChild,
+ &(button.xmotion.x_root),
+ &(button.xmotion.y_root),
+ &JunkX, &JunkY, &JunkMask);
+
+ ExecuteFunction(F_ICONIFY, NULLSTR, Event.xany.window,
+ Tmp_win, &button, FRAME, FALSE);
+ XUngrabPointer(dpy, CurrentTime);
+ }
+ }
}
}
-
-
/**
* expose event handler
*/
@@ -1055,127 +1037,130 @@ HandleExpose(void)
{
XPointer context_data;
- if (XFindContext(dpy, Event.xany.window, MenuContext, &context_data) == 0)
- {
- MenuRoot *tmp = (MenuRoot *) context_data;
- PaintMenu(tmp, &Event);
- return;
+ if (XFindContext(dpy, Event.xany.window, MenuContext, &context_data) == 0) {
+ MenuRoot *tmp = (MenuRoot *) context_data;
+ PaintMenu(tmp, &Event);
+
+ return;
}
if (Event.xexpose.count != 0)
- return;
-
- if (Event.xany.window == Scr->InfoWindow && InfoLines)
- {
- int i;
- int height;
-
- MyFont_ChangeGC(Scr->DefaultC.fore, Scr->DefaultC.back,
- &Scr->DefaultFont);
-
- height = Scr->DefaultFont.height+2;
- for (i = 0; i < InfoLines; i++)
- {
- MyFont_DrawString(dpy, Scr->InfoWindow, &Scr->DefaultFont,
- Scr->NormalGC, 5, (i*height) + Scr->DefaultFont.y, Info[i],
- (int)strlen(Info[i]));
- }
- flush_expose (Event.xany.window);
- }
- else if (Tmp_win != NULL)
- {
- if (Event.xany.window == Tmp_win->title_w)
- {
- MyFont_ChangeGC(Tmp_win->title.fore, Tmp_win->title.back,
- &Scr->TitleBarFont);
-
- MyFont_DrawString (dpy, Tmp_win->title_w, &Scr->TitleBarFont,
- Scr->NormalGC, Scr->TBInfo.titlex, Scr->TitleBarFont.y,
- Tmp_win->name, (int)strlen(Tmp_win->name));
- flush_expose (Event.xany.window);
- }
- else if (Event.xany.window == Tmp_win->icon_w)
- {
- MyFont_ChangeGC(Tmp_win->iconc.fore, Tmp_win->iconc.back,
- &Scr->IconFont);
-
- MyFont_DrawString (dpy, Tmp_win->icon_w, &Scr->IconFont,
- Scr->NormalGC, Tmp_win->icon_x, Tmp_win->icon_y,
- Tmp_win->icon_name, (int)strlen(Tmp_win->icon_name));
- flush_expose (Event.xany.window);
- return;
- } else if (Tmp_win->titlebuttons) {
- int i;
- Window w = Event.xany.window;
- register TBWindow *tbw;
- int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
-
- for (i = 0, tbw = Tmp_win->titlebuttons; i < nb; i++, tbw++) {
- if (w == tbw->window) {
- register TitleButton *tb = tbw->info;
-
- FB(Tmp_win->title.fore, Tmp_win->title.back);
- XCopyPlane (dpy, tb->bitmap, w, Scr->NormalGC,
- tb->srcx, tb->srcy, tb->width, tb->height,
- tb->dstx, tb->dsty, 1);
- flush_expose (w);
- return;
- }
- }
- }
- if (Tmp_win->list) {
- if (Event.xany.window == Tmp_win->list->w)
- {
- MyFont_ChangeGC(Tmp_win->list->fore, Tmp_win->list->back,
- &Scr->IconManagerFont);
- MyFont_DrawString (dpy, Event.xany.window,
- &Scr->IconManagerFont, Scr->NormalGC,
- iconmgr_textx, Scr->IconManagerFont.y+4,
- Tmp_win->icon_name, (int)strlen(Tmp_win->icon_name));
- DrawIconManagerBorder(Tmp_win->list);
- flush_expose (Event.xany.window);
- return;
- }
- if (Event.xany.window == Tmp_win->list->icon)
- {
- FB(Tmp_win->list->fore, Tmp_win->list->back);
- XCopyPlane(dpy, Scr->siconifyPm, Tmp_win->list->icon,
- Scr->NormalGC,
- 0,0, (unsigned)iconifybox_width, (unsigned)iconifybox_height, 0, 0, 1);
- flush_expose (Event.xany.window);
- return;
- }
- }
+ return;
+
+ if (Event.xany.window == Scr->InfoWindow && InfoLines) {
+ int i;
+ int height;
+
+ MyFont_ChangeGC(Scr->DefaultC.fore, Scr->DefaultC.back,
+ &Scr->DefaultFont);
+
+ height = Scr->DefaultFont.height + 2;
+ for (i = 0; i < InfoLines; i++) {
+ MyFont_DrawString(dpy, Scr->InfoWindow, &Scr->DefaultFont,
+ Scr->NormalGC, 5,
+ (i * height) + Scr->DefaultFont.y, Info[i],
+ (int) strlen(Info[i]));
+ }
+ flush_expose(Event.xany.window);
+ }
+ else if (Tmp_win != NULL) {
+ if (Event.xany.window == Tmp_win->title_w) {
+ MyFont_ChangeGC(Tmp_win->title.fore, Tmp_win->title.back,
+ &Scr->TitleBarFont);
+
+ MyFont_DrawString(dpy, Tmp_win->title_w, &Scr->TitleBarFont,
+ Scr->NormalGC, Scr->TBInfo.titlex,
+ Scr->TitleBarFont.y, Tmp_win->name,
+ (int) strlen(Tmp_win->name));
+ flush_expose(Event.xany.window);
+ }
+ else if (Event.xany.window == Tmp_win->icon_w) {
+ MyFont_ChangeGC(Tmp_win->iconc.fore, Tmp_win->iconc.back,
+ &Scr->IconFont);
+
+ MyFont_DrawString(dpy, Tmp_win->icon_w, &Scr->IconFont,
+ Scr->NormalGC, Tmp_win->icon_x, Tmp_win->icon_y,
+ Tmp_win->icon_name,
+ (int) strlen(Tmp_win->icon_name));
+ flush_expose(Event.xany.window);
+
+ return;
+ }
+ else if (Tmp_win->titlebuttons) {
+ int i;
+ Window w = Event.xany.window;
+ register TBWindow *tbw;
+ int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
+
+ for (i = 0, tbw = Tmp_win->titlebuttons; i < nb; i++, tbw++) {
+ if (w == tbw->window) {
+ register TitleButton *tb = tbw->info;
+
+ FB(Tmp_win->title.fore, Tmp_win->title.back);
+ XCopyPlane(dpy, tb->bitmap, w, Scr->NormalGC,
+ tb->srcx, tb->srcy, tb->width, tb->height,
+ tb->dstx, tb->dsty, 1);
+ flush_expose(w);
+ return;
+ }
+ }
+ }
+ if (Tmp_win->list) {
+ if (Event.xany.window == Tmp_win->list->w) {
+ MyFont_ChangeGC(Tmp_win->list->fore, Tmp_win->list->back,
+ &Scr->IconManagerFont);
+ MyFont_DrawString(dpy, Event.xany.window,
+ &Scr->IconManagerFont, Scr->NormalGC,
+ iconmgr_textx, Scr->IconManagerFont.y + 4,
+ Tmp_win->icon_name,
+ (int) strlen(Tmp_win->icon_name));
+ DrawIconManagerBorder(Tmp_win->list);
+ flush_expose(Event.xany.window);
+
+ return;
+ }
+ if (Event.xany.window == Tmp_win->list->icon) {
+ FB(Tmp_win->list->fore, Tmp_win->list->back);
+ XCopyPlane(dpy, Scr->siconifyPm, Tmp_win->list->icon,
+ Scr->NormalGC,
+ 0, 0, (unsigned) iconifybox_width,
+ (unsigned) iconifybox_height, 0, 0, 1);
+ flush_expose(Event.xany.window);
+
+ return;
+ }
+ }
}
}
-
-
-static void remove_window_from_ring (TwmWindow *tmp)
+static void
+remove_window_from_ring(TwmWindow *tmp)
{
TwmWindow *prev = tmp->ring.prev, *next = tmp->ring.next;
if (enter_win == tmp) {
- enter_flag = FALSE;
- enter_win = NULL;
+ enter_flag = FALSE;
+ enter_win = NULL;
}
- if (raise_win == Tmp_win) raise_win = NULL;
+ if (raise_win == Tmp_win)
+ raise_win = NULL;
/*
* 1. Unlink window
* 2. If window was only thing in ring, null out ring
* 3. If window was ring leader, set to next (or null)
*/
- if (prev) prev->ring.next = next;
- if (next) next->ring.prev = prev;
+ if (prev)
+ prev->ring.next = next;
+ if (next)
+ next->ring.prev = prev;
if (Scr->Ring == tmp)
- Scr->Ring = (next != tmp ? next : (TwmWindow *) NULL);
+ Scr->Ring = (next != tmp ? next : (TwmWindow *) NULL);
- if (!Scr->Ring || Scr->RingLeader == tmp) Scr->RingLeader = Scr->Ring;
+ if (!Scr->Ring || Scr->RingLeader == tmp)
+ Scr->RingLeader = Scr->Ring;
}
-
-
/**
* DestroyNotify event handler
*/
@@ -1191,43 +1176,40 @@ HandleDestroyNotify(void)
*/
if (Tmp_win == NULL)
- return;
+ return;
- if (Tmp_win == Scr->Focus)
- {
- FocusOnRoot();
+ if (Tmp_win == Scr->Focus) {
+ FocusOnRoot();
}
XDeleteContext(dpy, Tmp_win->w, TwmContext);
XDeleteContext(dpy, Tmp_win->w, ScreenContext);
XDeleteContext(dpy, Tmp_win->frame, TwmContext);
XDeleteContext(dpy, Tmp_win->frame, ScreenContext);
- if (Tmp_win->icon_w)
- {
- XDeleteContext(dpy, Tmp_win->icon_w, TwmContext);
- XDeleteContext(dpy, Tmp_win->icon_w, ScreenContext);
- }
- if (Tmp_win->title_height)
- {
- int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
- XDeleteContext(dpy, Tmp_win->title_w, TwmContext);
- XDeleteContext(dpy, Tmp_win->title_w, ScreenContext);
- if (Tmp_win->hilite_w)
- {
- XDeleteContext(dpy, Tmp_win->hilite_w, TwmContext);
- XDeleteContext(dpy, Tmp_win->hilite_w, ScreenContext);
- }
- if (Tmp_win->titlebuttons) {
- for (i = 0; i < nb; i++) {
- XDeleteContext (dpy, Tmp_win->titlebuttons[i].window,
- TwmContext);
- XDeleteContext (dpy, Tmp_win->titlebuttons[i].window,
- ScreenContext);
- }
+ if (Tmp_win->icon_w) {
+ XDeleteContext(dpy, Tmp_win->icon_w, TwmContext);
+ XDeleteContext(dpy, Tmp_win->icon_w, ScreenContext);
+ }
+ if (Tmp_win->title_height) {
+ int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
+
+ XDeleteContext(dpy, Tmp_win->title_w, TwmContext);
+ XDeleteContext(dpy, Tmp_win->title_w, ScreenContext);
+ if (Tmp_win->hilite_w) {
+ XDeleteContext(dpy, Tmp_win->hilite_w, TwmContext);
+ XDeleteContext(dpy, Tmp_win->hilite_w, ScreenContext);
+ }
+ if (Tmp_win->titlebuttons) {
+ for (i = 0; i < nb; i++) {
+ XDeleteContext(dpy, Tmp_win->titlebuttons[i].window,
+ TwmContext);
+ XDeleteContext(dpy, Tmp_win->titlebuttons[i].window,
+ ScreenContext);
+ }
}
}
if (Scr->cmapInfo.cmaps == &Tmp_win->cmaps)
- InstallWindowColormaps(DestroyNotify, &Scr->TwmRoot);
+ InstallWindowColormaps(DestroyNotify, &Scr->TwmRoot);
/*
* TwmWindows contain the following pointers
@@ -1244,54 +1226,54 @@ HandleDestroyNotify(void)
* 10. titlebuttons
* 11. window ring
*/
- if (Tmp_win->gray) XFreePixmap (dpy, Tmp_win->gray);
+ if (Tmp_win->gray)
+ XFreePixmap(dpy, Tmp_win->gray);
XDestroyWindow(dpy, Tmp_win->frame);
if (Tmp_win->icon_w && !Tmp_win->icon_not_ours) {
- XDestroyWindow(dpy, Tmp_win->icon_w);
- IconDown (Tmp_win);
+ XDestroyWindow(dpy, Tmp_win->icon_w);
+ IconDown(Tmp_win);
}
- RemoveIconManager(Tmp_win); /* 7 */
+ RemoveIconManager(Tmp_win); /* 7 */
Tmp_win->prev->next = Tmp_win->next;
if (Tmp_win->next != NULL)
- Tmp_win->next->prev = Tmp_win->prev;
- if (Tmp_win->auto_raise) Scr->NumAutoRaises--;
-
- free_window_names (Tmp_win, True, True, True); /* 1, 2, 3 */
- if (Tmp_win->wmhints) /* 4 */
- XFree (Tmp_win->wmhints);
- if (Tmp_win->class.res_name && Tmp_win->class.res_name != NoName) /* 5 */
- XFree (Tmp_win->class.res_name);
+ Tmp_win->next->prev = Tmp_win->prev;
+ if (Tmp_win->auto_raise)
+ Scr->NumAutoRaises--;
+
+ free_window_names(Tmp_win, True, True, True); /* 1, 2, 3 */
+ if (Tmp_win->wmhints) /* 4 */
+ XFree(Tmp_win->wmhints);
+ if (Tmp_win->class.res_name && Tmp_win->class.res_name != NoName) /* 5 */
+ XFree(Tmp_win->class.res_name);
if (Tmp_win->class.res_class && Tmp_win->class.res_class != NoName) /* 6 */
- XFree (Tmp_win->class.res_class);
- free_cwins (Tmp_win); /* 9 */
- if (Tmp_win->titlebuttons) /* 10 */
- free (Tmp_win->titlebuttons);
- remove_window_from_ring (Tmp_win); /* 11 */
+ XFree(Tmp_win->class.res_class);
+ free_cwins(Tmp_win); /* 9 */
+ if (Tmp_win->titlebuttons) /* 10 */
+ free(Tmp_win->titlebuttons);
+ remove_window_from_ring(Tmp_win); /* 11 */
if (UnHighLight_win == Tmp_win)
- UnHighLight_win = NULL;
+ UnHighLight_win = NULL;
free(Tmp_win);
}
-
-
void
HandleCreateNotify(void)
{
#ifdef DEBUG_EVENTS
fprintf(stderr, "CreateNotify w = 0x%x\n", Event.xcreatewindow.window);
+
fflush(stderr);
- Bell(XkbBI_Info,0,Event.xcreatewindow.window);
+ Bell(XkbBI_Info, 0, Event.xcreatewindow.window);
+
XSync(dpy, 0);
#endif
}
-
-
/**
- * HandleMapRequest - MapRequest event handler
+ * HandleMapRequest - MapRequest event handler
*/
void
HandleMapRequest(void)
@@ -1301,87 +1283,81 @@ HandleMapRequest(void)
Event.xany.window = Event.xmaprequest.window;
if (XFindContext(dpy, Event.xany.window, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
+ Tmp_win = (TwmWindow *) context_data;
+
else
- Tmp_win = NULL;
+ Tmp_win = NULL;
/* If the window has never been mapped before ... */
- if (Tmp_win == NULL)
- {
- /* Add decorations. */
- Tmp_win = AddWindow(Event.xany.window, FALSE, (IconMgr *) NULL);
- if (Tmp_win == NULL)
- return;
+ if (Tmp_win == NULL) {
+ /* Add decorations. */
+ Tmp_win = AddWindow(Event.xany.window, FALSE, (IconMgr *) NULL);
+
+ if (Tmp_win == NULL)
+ return;
}
- else
- {
- /*
- * If the window has been unmapped by the client, it won't be listed
- * in the icon manager. Add it again, if requested.
- */
- if (Tmp_win->list == NULL)
- (void) AddIconManager (Tmp_win);
+ else {
+ /*
+ * If the window has been unmapped by the client, it won't be listed
+ * in the icon manager. Add it again, if requested.
+ */
+ if (Tmp_win->list == NULL)
+ (void) AddIconManager(Tmp_win);
}
/* If it's not merely iconified, and we have hints, use them. */
- if ((! Tmp_win->icon) &&
- Tmp_win->wmhints && (Tmp_win->wmhints->flags & StateHint))
- {
- int state;
- Window icon;
-
- /* use WM_STATE if enabled */
- if (!(RestartPreviousState && GetWMState(Tmp_win->w, &state, &icon) &&
- (state == NormalState || state == IconicState)))
- state = Tmp_win->wmhints->initial_state;
-
- switch (state)
- {
- case DontCareState:
- case NormalState:
- case ZoomState:
- case InactiveState:
- XMapWindow(dpy, Tmp_win->w);
- XMapWindow(dpy, Tmp_win->frame);
- SetMapStateProp(Tmp_win, NormalState);
- SetRaiseWindow (Tmp_win);
- break;
-
- case IconicState:
- zoom_save = Scr->DoZoom;
- Scr->DoZoom = FALSE;
- Iconify(Tmp_win, 0, 0);
- Scr->DoZoom = (short)zoom_save;
- break;
- }
+ if ((!Tmp_win->icon) &&
+ Tmp_win->wmhints && (Tmp_win->wmhints->flags & StateHint)) {
+ int state;
+ Window icon;
+
+ /* use WM_STATE if enabled */
+ if (!(RestartPreviousState && GetWMState(Tmp_win->w, &state, &icon) &&
+ (state == NormalState || state == IconicState)))
+ state = Tmp_win->wmhints->initial_state;
+
+ switch (state) {
+ case DontCareState:
+ case NormalState:
+ case ZoomState:
+ case InactiveState:
+ XMapWindow(dpy, Tmp_win->w);
+ XMapWindow(dpy, Tmp_win->frame);
+ SetMapStateProp(Tmp_win, NormalState);
+ SetRaiseWindow(Tmp_win);
+ break;
+
+ case IconicState:
+ zoom_save = Scr->DoZoom;
+ Scr->DoZoom = FALSE;
+ Iconify(Tmp_win, 0, 0);
+ Scr->DoZoom = (short) zoom_save;
+ break;
+ }
}
/* If no hints, or currently an icon, just "deiconify" */
- else
- {
- DeIconify(Tmp_win);
- SetRaiseWindow (Tmp_win);
+ else {
+ DeIconify(Tmp_win);
+ SetRaiseWindow(Tmp_win);
}
}
-
-
void
-SimulateMapRequest (Window w)
+SimulateMapRequest(Window w)
{
Event.xmaprequest.window = w;
- HandleMapRequest ();
-}
-
+ HandleMapRequest();
+}
/**
- * MapNotify event handler
+ * MapNotify event handler
*/
void
HandleMapNotify(void)
{
if (Tmp_win == NULL)
- return;
+ return;
/*
* Need to do the grab to avoid race condition of having server send
@@ -1389,25 +1365,23 @@ HandleMapNotify(void)
* the client would think that the window has a chance of being viewable
* when it really isn't.
*/
- XGrabServer (dpy);
+ XGrabServer(dpy);
if (Tmp_win->icon_w)
- XUnmapWindow(dpy, Tmp_win->icon_w);
+ XUnmapWindow(dpy, Tmp_win->icon_w);
if (Tmp_win->title_w)
- XMapSubwindows(dpy, Tmp_win->title_w);
+ XMapSubwindows(dpy, Tmp_win->title_w);
XMapSubwindows(dpy, Tmp_win->frame);
if (Scr->Focus != Tmp_win && Tmp_win->hilite_w)
- XUnmapWindow(dpy, Tmp_win->hilite_w);
+ XUnmapWindow(dpy, Tmp_win->hilite_w);
XMapWindow(dpy, Tmp_win->frame);
- XUngrabServer (dpy);
- XFlush (dpy);
+ XUngrabServer(dpy);
+ XFlush(dpy);
Tmp_win->mapped = TRUE;
Tmp_win->icon = FALSE;
Tmp_win->icon_on = FALSE;
}
-
-
/**
* UnmapNotify event handler
*/
@@ -1426,18 +1400,18 @@ HandleUnmapNotify(void)
* we looked for the TwmContext using that field, so try the window
* field also.
*/
- if (Tmp_win == NULL)
- {
- Event.xany.window = Event.xunmap.window;
- if (XFindContext(dpy, Event.xany.window,
- TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
- else
- Tmp_win = NULL;
+ if (Tmp_win == NULL) {
+ Event.xany.window = Event.xunmap.window;
+ if (XFindContext(dpy, Event.xany.window,
+ TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
+
+ else
+ Tmp_win = NULL;
}
if (Tmp_win == NULL || (!Tmp_win->mapped && !Tmp_win->icon))
- return;
+ return;
/*
* The program may have unmapped the client window, from either
@@ -1448,33 +1422,35 @@ HandleUnmapNotify(void)
* that we've received a DestroyNotify).
*/
- XGrabServer (dpy);
- if (XTranslateCoordinates (dpy, Event.xunmap.window, Tmp_win->attr.root,
- 0, 0, &dstx, &dsty, &dumwin)) {
- XEvent ev;
- Bool reparented = XCheckTypedWindowEvent (dpy, Event.xunmap.window,
- ReparentNotify, &ev);
- SetMapStateProp (Tmp_win, WithdrawnState);
- if (reparented) {
- if (Tmp_win->old_bw) XSetWindowBorderWidth (dpy,
- Event.xunmap.window,
- (unsigned)Tmp_win->old_bw);
- if (Tmp_win->wmhints && (Tmp_win->wmhints->flags & IconWindowHint))
- XUnmapWindow (dpy, Tmp_win->wmhints->icon_window);
- } else {
- XReparentWindow (dpy, Event.xunmap.window, Tmp_win->attr.root,
- dstx, dsty);
- RestoreWithdrawnLocation (Tmp_win);
- }
- XRemoveFromSaveSet (dpy, Event.xunmap.window);
- XSelectInput (dpy, Event.xunmap.window, NoEventMask);
- HandleDestroyNotify (); /* do not need to mash event before */
- } /* else window no longer exists and we'll get a destroy notify */
- XUngrabServer (dpy);
- XFlush (dpy);
-}
+ XGrabServer(dpy);
+ if (XTranslateCoordinates(dpy, Event.xunmap.window, Tmp_win->attr.root,
+ 0, 0, &dstx, &dsty, &dumwin)) {
+ XEvent ev;
+ Bool reparented = XCheckTypedWindowEvent(dpy, Event.xunmap.window,
+ ReparentNotify, &ev);
+
+ SetMapStateProp(Tmp_win, WithdrawnState);
+ if (reparented) {
+ if (Tmp_win->old_bw)
+ XSetWindowBorderWidth(dpy,
+ Event.xunmap.window,
+ (unsigned) Tmp_win->old_bw);
+ if (Tmp_win->wmhints && (Tmp_win->wmhints->flags & IconWindowHint))
+ XUnmapWindow(dpy, Tmp_win->wmhints->icon_window);
+ }
+ else {
+ XReparentWindow(dpy, Event.xunmap.window, Tmp_win->attr.root,
+ dstx, dsty);
+ RestoreWithdrawnLocation(Tmp_win);
+ }
+ XRemoveFromSaveSet(dpy, Event.xunmap.window);
+ XSelectInput(dpy, Event.xunmap.window, NoEventMask);
-
+ HandleDestroyNotify(); /* do not need to mash event before */
+ } /* else window no longer exists and we'll get a destroy notify */
+ XUngrabServer(dpy);
+ XFlush(dpy);
+}
/**
* MotionNotify event handler
@@ -1484,28 +1460,24 @@ HandleMotionNotify(void)
{
XPointer context_data;
- if (ResizeWindow != (Window) 0)
- {
- XQueryPointer( dpy, Event.xany.window,
- &(Event.xmotion.root), &JunkChild,
- &(Event.xmotion.x_root), &(Event.xmotion.y_root),
- &(Event.xmotion.x), &(Event.xmotion.y),
- &JunkMask);
+ if (ResizeWindow != (Window) 0) {
+ XQueryPointer(dpy, Event.xany.window,
+ &(Event.xmotion.root), &JunkChild,
+ &(Event.xmotion.x_root), &(Event.xmotion.y_root),
+ &(Event.xmotion.x), &(Event.xmotion.y), &JunkMask);
- /* Set WindowMoved appropriately so that f.deltastop will
- work with resize as well as move. */
- if (abs (Event.xmotion.x - ResizeOrigX) >= Scr->MoveDelta
- || abs (Event.xmotion.y - ResizeOrigY) >= Scr->MoveDelta)
- WindowMoved = TRUE;
+ /* Set WindowMoved appropriately so that f.deltastop will
+ work with resize as well as move. */
+ if (abs(Event.xmotion.x - ResizeOrigX) >= Scr->MoveDelta
+ || abs(Event.xmotion.y - ResizeOrigY) >= Scr->MoveDelta)
+ WindowMoved = TRUE;
- if (XFindContext(dpy, ResizeWindow, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
- DoResize(Event.xmotion.x_root, Event.xmotion.y_root, Tmp_win);
+ if (XFindContext(dpy, ResizeWindow, TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
+ DoResize(Event.xmotion.x_root, Event.xmotion.y_root, Tmp_win);
}
}
-
-
/**
* ButtonRelease event handler
*/
@@ -1516,207 +1488,198 @@ HandleButtonRelease(void)
unsigned mask;
XPointer context_data;
- if (InfoLines) /* delete info box on 2nd button release */
- if (Context == C_IDENTIFY) {
- XUnmapWindow(dpy, Scr->InfoWindow);
- InfoLines = 0;
- Context = C_NO_CONTEXT;
- }
-
- if (DragWindow != None)
- {
- MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0);
-
- if (XFindContext(dpy, DragWindow, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
- if (DragWindow == Tmp_win->frame)
- {
- xl = Event.xbutton.x_root - DragX - Tmp_win->frame_bw;
- yt = Event.xbutton.y_root - DragY - Tmp_win->frame_bw;
- w = DragWidth + 2 * Tmp_win->frame_bw;
- h = DragHeight + 2 * Tmp_win->frame_bw;
- }
- else
- {
- xl = Event.xbutton.x_root - DragX - Scr->IconBorderWidth;
- yt = Event.xbutton.y_root - DragY - Scr->IconBorderWidth;
- w = DragWidth + 2 * Scr->IconBorderWidth;
- h = DragHeight + 2 * Scr->IconBorderWidth;
- }
-
- if (ConstMove)
- {
- if (ConstMoveDir == MOVE_HORIZ)
- yt = ConstMoveY;
-
- if (ConstMoveDir == MOVE_VERT)
- xl = ConstMoveX;
-
- if (ConstMoveDir == MOVE_NONE)
- {
- yt = ConstMoveY;
- xl = ConstMoveX;
- }
- }
-
- if (Scr->DontMoveOff && MoveFunction != F_FORCEMOVE)
- {
- xr = xl + w;
- yb = yt + h;
-
- if (xl < 0)
- xl = 0;
- if (xr > Scr->MyDisplayWidth)
- xl = Scr->MyDisplayWidth - w;
-
- if (yt < 0)
- yt = 0;
- if (yb > Scr->MyDisplayHeight)
- yt = Scr->MyDisplayHeight - h;
- }
-
- CurrentDragX = xl;
- CurrentDragY = yt;
- if (DragWindow == Tmp_win->frame)
- SetupWindow (Tmp_win, xl, yt,
- Tmp_win->frame_width, Tmp_win->frame_height, -1);
- else
- XMoveWindow (dpy, DragWindow, xl, yt);
-
- if (!Scr->NoRaiseMove && !Scr->OpaqueMove) /* opaque already did */
- XRaiseWindow(dpy, DragWindow);
-
- if (!Scr->OpaqueMove)
- UninstallRootColormap();
- else
- XSync(dpy, 0);
-
- if (Scr->NumAutoRaises) {
- enter_flag = TRUE;
- enter_win = NULL;
- raise_win = ((DragWindow == Tmp_win->frame && !Scr->NoRaiseMove)
- ? Tmp_win : NULL);
- }
-
- DragWindow = (Window) 0;
- ConstMove = FALSE;
- }
-
- if (ResizeWindow != (Window) 0)
- {
- EndResize();
- }
-
- if (ActiveMenu != NULL && RootFunction == 0)
- {
- if (ActiveItem != NULL)
- {
- int func = ActiveItem->func;
- Action = ActiveItem->action;
- switch (func) {
- case F_MOVE:
- case F_FORCEMOVE:
- ButtonPressed = -1;
- break;
- case F_WARPTOSCREEN:
- XUngrabPointer(dpy, CurrentTime);
- /* fall through */
- case F_CIRCLEUP:
- case F_CIRCLEDOWN:
- case F_REFRESH:
- PopDownMenu();
- break;
- default:
- break;
- }
- ExecuteFunction(func, Action,
- ButtonWindow ? ButtonWindow->frame : None,
- ButtonWindow, &Event/*&ButtonEvent*/, Context, TRUE);
- Context = C_NO_CONTEXT;
- ButtonWindow = NULL;
-
- /* if we are not executing a defered command, then take down the
- * menu
- */
- if (RootFunction == 0)
- {
- PopDownMenu();
- }
- }
- else
- PopDownMenu();
- }
-
- mask = (Button1Mask|Button2Mask|Button3Mask|Button4Mask|Button5Mask);
- switch (Event.xbutton.button)
- {
- case Button1: mask &= (unsigned)(~Button1Mask); break;
- case Button2: mask &= (unsigned)(~Button2Mask); break;
- case Button3: mask &= (unsigned)(~Button3Mask); break;
- case Button4: mask &= (unsigned)(~Button4Mask); break;
- case Button5: mask &= (unsigned)(~Button5Mask); break;
- }
-
- if (RootFunction != 0 ||
- ResizeWindow != None ||
- DragWindow != None)
- ButtonPressed = -1;
+ if (InfoLines) /* delete info box on 2nd button release */
+ if (Context == C_IDENTIFY) {
+ XUnmapWindow(dpy, Scr->InfoWindow);
+ InfoLines = 0;
+ Context = C_NO_CONTEXT;
+ }
+
+ if (DragWindow != None) {
+ MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0);
+
+ if (XFindContext(dpy, DragWindow, TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
+ if (DragWindow == Tmp_win->frame) {
+ xl = Event.xbutton.x_root - DragX - Tmp_win->frame_bw;
+ yt = Event.xbutton.y_root - DragY - Tmp_win->frame_bw;
+
+ w = DragWidth + 2 * Tmp_win->frame_bw;
+ h = DragHeight + 2 * Tmp_win->frame_bw;
+ }
+ else {
+ xl = Event.xbutton.x_root - DragX - Scr->IconBorderWidth;
+ yt = Event.xbutton.y_root - DragY - Scr->IconBorderWidth;
+
+ w = DragWidth + 2 * Scr->IconBorderWidth;
+ h = DragHeight + 2 * Scr->IconBorderWidth;
+ }
+
+ if (ConstMove) {
+ if (ConstMoveDir == MOVE_HORIZ)
+ yt = ConstMoveY;
+
+ if (ConstMoveDir == MOVE_VERT)
+ xl = ConstMoveX;
+
+ if (ConstMoveDir == MOVE_NONE) {
+ yt = ConstMoveY;
+ xl = ConstMoveX;
+ }
+ }
+
+ if (Scr->DontMoveOff && MoveFunction != F_FORCEMOVE) {
+ xr = xl + w;
+ yb = yt + h;
+
+ if (xl < 0)
+ xl = 0;
+ if (xr > Scr->MyDisplayWidth)
+ xl = Scr->MyDisplayWidth - w;
+
+ if (yt < 0)
+ yt = 0;
+ if (yb > Scr->MyDisplayHeight)
+ yt = Scr->MyDisplayHeight - h;
+ }
+
+ CurrentDragX = xl;
+ CurrentDragY = yt;
+ if (DragWindow == Tmp_win->frame)
+ SetupWindow(Tmp_win, xl, yt,
+ Tmp_win->frame_width, Tmp_win->frame_height, -1);
+ else
+ XMoveWindow(dpy, DragWindow, xl, yt);
+
+ if (!Scr->NoRaiseMove && !Scr->OpaqueMove) /* opaque already did */
+ XRaiseWindow(dpy, DragWindow);
+
+ if (!Scr->OpaqueMove)
+ UninstallRootColormap();
+ else
+ XSync(dpy, 0);
+
+ if (Scr->NumAutoRaises) {
+ enter_flag = TRUE;
+ enter_win = NULL;
+ raise_win = ((DragWindow == Tmp_win->frame && !Scr->NoRaiseMove)
+ ? Tmp_win : NULL);
+ }
+
+ DragWindow = (Window) 0;
+ ConstMove = FALSE;
+ }
+
+ if (ResizeWindow != (Window) 0) {
+ EndResize();
+ }
+
+ if (ActiveMenu != NULL && RootFunction == 0) {
+ if (ActiveItem != NULL) {
+ int func = ActiveItem->func;
+
+ Action = ActiveItem->action;
+ switch (func) {
+ case F_MOVE:
+ case F_FORCEMOVE:
+ ButtonPressed = -1;
+ break;
+ case F_WARPTOSCREEN:
+ XUngrabPointer(dpy, CurrentTime);
+ /* fall through */
+ case F_CIRCLEUP:
+ case F_CIRCLEDOWN:
+ case F_REFRESH:
+ PopDownMenu();
+ break;
+ default:
+ break;
+ }
+ ExecuteFunction(func, Action,
+ ButtonWindow ? ButtonWindow->frame : None,
+ ButtonWindow, &Event /*&ButtonEvent */ , Context,
+ TRUE);
+
+ Context = C_NO_CONTEXT;
+ ButtonWindow = NULL;
+
+ /* if we are not executing a defered command, then take down the
+ * menu
+ */
+ if (RootFunction == 0) {
+ PopDownMenu();
+ }
+ }
+ else
+ PopDownMenu();
+ }
+
+ mask =
+ (Button1Mask | Button2Mask | Button3Mask | Button4Mask | Button5Mask);
+ switch (Event.xbutton.button) {
+ /* *INDENT-OFF* */
+ case Button1: mask &= (unsigned)(~Button1Mask); break;
+ case Button2: mask &= (unsigned)(~Button2Mask); break;
+ case Button3: mask &= (unsigned)(~Button3Mask); break;
+ case Button4: mask &= (unsigned)(~Button4Mask); break;
+ case Button5: mask &= (unsigned)(~Button5Mask); break;
+ /* *INDENT-ON* */
+ }
+
+ if (RootFunction != 0 || ResizeWindow != None || DragWindow != None)
+ ButtonPressed = -1;
if (RootFunction == 0 &&
- (Event.xbutton.state & mask) == 0 &&
- DragWindow == None &&
- ResizeWindow == None)
- {
- XUngrabPointer(dpy, CurrentTime);
- XUngrabServer(dpy);
- XFlush(dpy);
- EventHandler[EnterNotify] = HandleEnterNotify;
- EventHandler[LeaveNotify] = HandleLeaveNotify;
- ButtonPressed = -1;
- if (DownIconManager)
- {
- DownIconManager->down = FALSE;
- if (Scr->Highlight) DrawIconManagerBorder(DownIconManager);
- DownIconManager = NULL;
- }
- Cancel = FALSE;
+ (Event.xbutton.state & mask) == 0 &&
+ DragWindow == None && ResizeWindow == None) {
+ XUngrabPointer(dpy, CurrentTime);
+ XUngrabServer(dpy);
+ XFlush(dpy);
+ EventHandler[EnterNotify] = HandleEnterNotify;
+ EventHandler[LeaveNotify] = HandleLeaveNotify;
+ ButtonPressed = -1;
+ if (DownIconManager) {
+ DownIconManager->down = FALSE;
+ if (Scr->Highlight)
+ DrawIconManagerBorder(DownIconManager);
+ DownIconManager = NULL;
+ }
+ Cancel = FALSE;
}
}
-
-
/**
*
* \param menu menu to pop up
* \param w invoking window, or None
*/
static void
-do_menu (MenuRoot *menu, Window w)
+do_menu(MenuRoot *menu, Window w)
{
int x = Event.xbutton.x_root;
int y = Event.xbutton.y_root;
Bool center;
if (!Scr->NoGrabServer)
- XGrabServer(dpy);
+ XGrabServer(dpy);
if (w) {
- int h = Scr->TBInfo.width - Scr->TBInfo.border;
- Window child;
+ int h = Scr->TBInfo.width - Scr->TBInfo.border;
+ Window child;
- (void) XTranslateCoordinates (dpy, w, Scr->Root, 0, h, &x, &y, &child);
- center = False;
- } else {
- center = True;
+ (void) XTranslateCoordinates(dpy, w, Scr->Root, 0, h, &x, &y, &child);
+ center = False;
}
- if (PopUpMenu (menu, x, y, center)) {
- UpdateMenu();
- } else {
- Bell(XkbBI_MinorError,0,w);
+ else {
+ center = True;
+ }
+ if (PopUpMenu(menu, x, y, center)) {
+ UpdateMenu();
+ }
+ else {
+ Bell(XkbBI_MinorError, 0, w);
}
}
-
-
/**
* ButtonPress event handler
*/
@@ -1728,194 +1691,188 @@ HandleButtonPress(void)
/* too much code relies on this assumption */
if (Event.xbutton.button > MAX_BUTTONS)
- return;
+ return;
/* pop down the menu, if any */
if (ActiveMenu != NULL)
- PopDownMenu();
-
- XSync(dpy, 0); /* XXX - remove? */
-
- if (ButtonPressed != -1 && !InfoLines) /* want menus if we have info box */
- {
- /* we got another butt press in addition to one still held
- * down, we need to cancel the operation we were doing
- */
- Cancel = TRUE;
- CurrentDragX = origDragX;
- CurrentDragY = origDragY;
- if (!menuFromFrameOrWindowOrTitlebar) {
- if (Scr->OpaqueMove && DragWindow != None) {
- XMoveWindow (dpy, DragWindow, origDragX, origDragY);
- } else {
- MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0);
- }
- }
- XUnmapWindow(dpy, Scr->SizeWindow);
- if (!Scr->OpaqueMove)
- UninstallRootColormap();
- ResizeWindow = None;
- DragWindow = None;
- cur = LeftButt;
- if (Event.xbutton.button == Button2)
- cur = MiddleButt;
- else if (Event.xbutton.button >= Button3)
- cur = RightButt;
-
- XGrabPointer(dpy, Scr->Root, True,
- ButtonReleaseMask | ButtonPressMask,
- GrabModeAsync, GrabModeAsync,
- Scr->Root, cur, CurrentTime);
-
- return;
+ PopDownMenu();
+
+ XSync(dpy, 0); /* XXX - remove? */
+
+ if (ButtonPressed != -1 && !InfoLines) { /* want menus if we have info box */
+ /* we got another butt press in addition to one still held
+ * down, we need to cancel the operation we were doing
+ */
+ Cancel = TRUE;
+ CurrentDragX = origDragX;
+ CurrentDragY = origDragY;
+ if (!menuFromFrameOrWindowOrTitlebar) {
+ if (Scr->OpaqueMove && DragWindow != None) {
+ XMoveWindow(dpy, DragWindow, origDragX, origDragY);
+ }
+ else {
+ MoveOutline(Scr->Root, 0, 0, 0, 0, 0, 0);
+ }
+ }
+ XUnmapWindow(dpy, Scr->SizeWindow);
+ if (!Scr->OpaqueMove)
+ UninstallRootColormap();
+ ResizeWindow = None;
+ DragWindow = None;
+ cur = LeftButt;
+ if (Event.xbutton.button == Button2)
+ cur = MiddleButt;
+ else if (Event.xbutton.button >= Button3)
+ cur = RightButt;
+
+ XGrabPointer(dpy, Scr->Root, True,
+ ButtonReleaseMask | ButtonPressMask,
+ GrabModeAsync, GrabModeAsync, Scr->Root, cur, CurrentTime);
+
+ return;
}
else
- ButtonPressed = (int)Event.xbutton.button;
+ ButtonPressed = (int) Event.xbutton.button;
- if (ResizeWindow != None ||
- DragWindow != None ||
- ActiveMenu != NULL)
- return;
+ if (ResizeWindow != None || DragWindow != None || ActiveMenu != NULL)
+ return;
/* check the title bar buttons */
- if (Tmp_win && Tmp_win->title_height && Tmp_win->titlebuttons)
- {
- register int i;
- register TBWindow *tbw;
- int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
-
- for (i = 0, tbw = Tmp_win->titlebuttons; i < nb; i++, tbw++) {
- if (Event.xany.window == tbw->window) {
- if (tbw->info->func == F_MENU) {
- Context = C_TITLE;
- ButtonEvent = Event;
- ButtonWindow = Tmp_win;
- do_menu (tbw->info->menuroot, tbw->window);
- } else {
- ExecuteFunction (tbw->info->func, tbw->info->action,
- Event.xany.window, Tmp_win, &Event,
- C_TITLE, FALSE);
- }
- return;
- }
- }
+ if (Tmp_win && Tmp_win->title_height && Tmp_win->titlebuttons) {
+ register int i;
+ register TBWindow *tbw;
+ int nb = Scr->TBInfo.nleft + Scr->TBInfo.nright;
+
+ for (i = 0, tbw = Tmp_win->titlebuttons; i < nb; i++, tbw++) {
+ if (Event.xany.window == tbw->window) {
+ if (tbw->info->func == F_MENU) {
+ Context = C_TITLE;
+ ButtonEvent = Event;
+
+ ButtonWindow = Tmp_win;
+ do_menu(tbw->info->menuroot, tbw->window);
+ }
+ else {
+ ExecuteFunction(tbw->info->func, tbw->info->action,
+ Event.xany.window, Tmp_win, &Event,
+ C_TITLE, FALSE);
+ }
+ return;
+ }
+ }
}
Context = C_NO_CONTEXT;
if (Event.xany.window == Scr->InfoWindow)
- Context = C_IDENTIFY;
+ Context = C_IDENTIFY;
if (Event.xany.window == Scr->Root)
- Context = C_ROOT;
- if (Tmp_win)
- {
- if (Tmp_win->list && RootFunction != 0 &&
- (Event.xany.window == Tmp_win->list->w ||
- Event.xany.window == Tmp_win->list->icon))
- {
- Tmp_win = Tmp_win->list->iconmgr->twm_win;
- XTranslateCoordinates(dpy, Event.xany.window, Tmp_win->w,
- Event.xbutton.x, Event.xbutton.y,
- &JunkX, &JunkY, &JunkChild);
-
- Event.xbutton.x = JunkX;
- Event.xbutton.y = JunkY - Tmp_win->title_height;
- Event.xany.window = Tmp_win->w;
- Context = C_WINDOW;
- }
- else if (Event.xany.window == Tmp_win->title_w)
- {
- Context = C_TITLE;
- }
- else if (Event.xany.window == Tmp_win->w)
- {
- printf("ERROR! ERROR! ERROR! YOU SHOULD NOT BE HERE!!!\n");
- Context = C_WINDOW;
- }
- else if (Event.xany.window == Tmp_win->icon_w)
- {
- Context = C_ICON;
- }
- else if (Event.xany.window == Tmp_win->frame)
- {
- /* since we now place a button grab on the frame instead
+ Context = C_ROOT;
+ if (Tmp_win) {
+ if (Tmp_win->list && RootFunction != 0 &&
+ (Event.xany.window == Tmp_win->list->w ||
+ Event.xany.window == Tmp_win->list->icon)) {
+ Tmp_win = Tmp_win->list->iconmgr->twm_win;
+ XTranslateCoordinates(dpy, Event.xany.window, Tmp_win->w,
+ Event.xbutton.x, Event.xbutton.y,
+ &JunkX, &JunkY, &JunkChild);
+
+ Event.xbutton.x = JunkX;
+ Event.xbutton.y = JunkY - Tmp_win->title_height;
+ Event.xany.window = Tmp_win->w;
+
+ Context = C_WINDOW;
+ }
+ else if (Event.xany.window == Tmp_win->title_w) {
+ Context = C_TITLE;
+ }
+ else if (Event.xany.window == Tmp_win->w) {
+ printf("ERROR! ERROR! ERROR! YOU SHOULD NOT BE HERE!!!\n");
+ Context = C_WINDOW;
+ }
+ else if (Event.xany.window == Tmp_win->icon_w) {
+ Context = C_ICON;
+ }
+ else if (Event.xany.window == Tmp_win->frame) {
+ /* since we now place a button grab on the frame instead
* of the window, (see GrabButtons() in add_window.c), we
* need to figure out where the pointer exactly is before
* assigning Context. If the pointer is on the application
* window we will change the event structure to look as if
* it came from the application window.
- */
- if (Event.xbutton.subwindow == Tmp_win->w) {
- Event.xbutton.window = Tmp_win->w;
- Event.xbutton.y -= Tmp_win->title_height;
+ */
+ if (Event.xbutton.subwindow == Tmp_win->w) {
+ Event.xbutton.window = Tmp_win->w;
+ Event.xbutton.y -= Tmp_win->title_height;
+
/*****
Event.xbutton.x -= Tmp_win->frame_bw;
*****/
- Context = C_WINDOW;
- }
- else Context = C_FRAME;
- }
- else if (Tmp_win->list &&
- (Event.xany.window == Tmp_win->list->w ||
- Event.xany.window == Tmp_win->list->icon))
- {
- Tmp_win->list->down = TRUE;
- if (Scr->Highlight) DrawIconManagerBorder(Tmp_win->list);
- DownIconManager = Tmp_win->list;
- Context = C_ICONMGR;
- }
+ Context = C_WINDOW;
+ }
+ else
+ Context = C_FRAME;
+ }
+ else if (Tmp_win->list &&
+ (Event.xany.window == Tmp_win->list->w ||
+ Event.xany.window == Tmp_win->list->icon)) {
+ Tmp_win->list->down = TRUE;
+ if (Scr->Highlight)
+ DrawIconManagerBorder(Tmp_win->list);
+ DownIconManager = Tmp_win->list;
+ Context = C_ICONMGR;
+ }
}
/* this section of code checks to see if we were in the middle of
* a command executed from a menu
*/
- if (RootFunction != 0)
- {
- if (Event.xany.window == Scr->Root)
- {
- /* if the window was the Root, we don't know for sure it
- * it was the root. We must check to see if it happened to be
- * inside of a client that was getting button press events.
- */
- XPointer context_data;
-
- XTranslateCoordinates(dpy, Scr->Root, Scr->Root,
- Event.xbutton.x,
- Event.xbutton.y,
- &JunkX, &JunkY, &Event.xany.window);
-
- if (Event.xany.window == 0 ||
- (XFindContext(dpy, Event.xany.window, TwmContext,
- &context_data) == XCNOENT))
- {
- RootFunction = 0;
- Bell(XkbBI_MinorError,0,Event.xany.window);
- return;
- }
- else
- Tmp_win = (TwmWindow *) context_data;
-
- XTranslateCoordinates(dpy, Scr->Root, Event.xany.window,
- Event.xbutton.x,
- Event.xbutton.y,
- &JunkX, &JunkY, &JunkChild);
-
- Event.xbutton.x = JunkX;
- Event.xbutton.y = JunkY;
- Context = C_WINDOW;
- }
-
- /* make sure we are not trying to move an identify window */
- if (Event.xany.window != Scr->InfoWindow)
- ExecuteFunction(RootFunction, Action, Event.xany.window,
- Tmp_win, &Event, Context, FALSE);
-
- RootFunction = 0;
- return;
+ if (RootFunction != 0) {
+ if (Event.xany.window == Scr->Root) {
+ /* if the window was the Root, we don't know for sure it
+ * it was the root. We must check to see if it happened to be
+ * inside of a client that was getting button press events.
+ */
+ XPointer context_data;
+
+ XTranslateCoordinates(dpy, Scr->Root, Scr->Root,
+ Event.xbutton.x,
+ Event.xbutton.y,
+ &JunkX, &JunkY, &Event.xany.window);
+
+ if (Event.xany.window == 0 ||
+ (XFindContext(dpy, Event.xany.window, TwmContext,
+ &context_data) == XCNOENT)) {
+ RootFunction = 0;
+ Bell(XkbBI_MinorError, 0, Event.xany.window);
+
+ return;
+ }
+ else
+ Tmp_win = (TwmWindow *) context_data;
+
+ XTranslateCoordinates(dpy, Scr->Root, Event.xany.window,
+ Event.xbutton.x,
+ Event.xbutton.y, &JunkX, &JunkY, &JunkChild);
+
+ Event.xbutton.x = JunkX;
+ Event.xbutton.y = JunkY;
+
+ Context = C_WINDOW;
+ }
+
+ /* make sure we are not trying to move an identify window */
+ if (Event.xany.window != Scr->InfoWindow)
+ ExecuteFunction(RootFunction, Action, Event.xany.window,
+ Tmp_win, &Event, Context, FALSE);
+
+ RootFunction = 0;
+ return;
}
ButtonEvent = Event;
+
ButtonWindow = Tmp_win;
/* if we get to here, we have to execute a function or pop up a
@@ -1924,77 +1881,72 @@ HandleButtonPress(void)
modifier = (Event.xbutton.state & mods_used);
if (Context == C_NO_CONTEXT)
- return;
+ return;
RootFunction = 0;
- if (Scr->Mouse[Event.xbutton.button][Context][modifier].func == F_MENU)
- {
- do_menu (Scr->Mouse[Event.xbutton.button][Context][modifier].menu,
- (Window) None);
- }
- else if (Scr->Mouse[Event.xbutton.button][Context][modifier].func != 0)
- {
- Action = Scr->Mouse[Event.xbutton.button][Context][modifier].item ?
- Scr->Mouse[Event.xbutton.button][Context][modifier].item->action : NULL;
- ExecuteFunction(Scr->Mouse[Event.xbutton.button][Context][modifier].func,
- Action, Event.xany.window, Tmp_win, &Event, Context, FALSE);
- }
- else if (Scr->DefaultFunction.func != 0)
- {
- if (Scr->DefaultFunction.func == F_MENU)
- {
- do_menu (Scr->DefaultFunction.menu, (Window) None);
- }
- else
- {
- Action = Scr->DefaultFunction.item ?
- Scr->DefaultFunction.item->action : NULL;
- ExecuteFunction(Scr->DefaultFunction.func, Action,
- Event.xany.window, Tmp_win, &Event, Context, FALSE);
- }
+ if (Scr->Mouse[Event.xbutton.button][Context][modifier].func == F_MENU) {
+ do_menu(Scr->Mouse[Event.xbutton.button][Context][modifier].menu,
+ (Window) None);
+ }
+ else if (Scr->Mouse[Event.xbutton.button][Context][modifier].func != 0) {
+ Action = Scr->Mouse[Event.xbutton.button][Context][modifier].item ?
+ Scr->Mouse[Event.xbutton.button][Context][modifier].
+ item->action : NULL;
+ ExecuteFunction(Scr->
+ Mouse[Event.xbutton.button][Context][modifier].func,
+ Action, Event.xany.window, Tmp_win, &Event, Context,
+ FALSE);
+ }
+ else if (Scr->DefaultFunction.func != 0) {
+ if (Scr->DefaultFunction.func == F_MENU) {
+ do_menu(Scr->DefaultFunction.menu, (Window) None);
+ }
+ else {
+ Action = Scr->DefaultFunction.item ?
+ Scr->DefaultFunction.item->action : NULL;
+ ExecuteFunction(Scr->DefaultFunction.func, Action,
+ Event.xany.window, Tmp_win, &Event, Context, FALSE);
+ }
}
}
-
-
/** \fn HENQueueScanner
* EnterNotify event q scanner.
*
- * Looks at the queued events and determines if any matching
- * LeaveNotify events or EnterEvents deriving from the
- * termination of a grab are behind this event to allow
- * skipping of unnecessary processing.
+ * Looks at the queued events and determines if any matching
+ * LeaveNotify events or EnterEvents deriving from the
+ * termination of a grab are behind this event to allow
+ * skipping of unnecessary processing.
*/
typedef struct HENScanArgs {
- Window w; /**< Window we are currently entering */
- Bool leaves; /**< Any LeaveNotifies found for this window */
- Bool inferior; /**< Was NotifyInferior the mode for LeaveNotify */
- Bool enters; /**< Any EnterNotify events with NotifyUngrab */
+ Window w; /**< Window we are currently entering */
+ Bool leaves; /**< Any LeaveNotifies found for this window */
+ Bool inferior; /**< Was NotifyInferior the mode for LeaveNotify */
+ Bool enters; /**< Any EnterNotify events with NotifyUngrab */
} HENScanArgs;
static Bool
HENQueueScanner(Display *dpy2 _X_UNUSED, XEvent *ev, char *args)
{
if (ev->type == LeaveNotify) {
- if (ev->xcrossing.window == ((HENScanArgs *) args)->w &&
- ev->xcrossing.mode == NotifyNormal) {
- ((HENScanArgs *) args)->leaves = True;
- /*
- * Only the last event found matters for the Inferior field.
- */
- ((HENScanArgs *) args)->inferior =
- (ev->xcrossing.detail == NotifyInferior);
- }
- } else if (ev->type == EnterNotify) {
- if (ev->xcrossing.mode == NotifyUngrab)
- ((HENScanArgs *) args)->enters = True;
+ if (ev->xcrossing.window == ((HENScanArgs *) args)->w &&
+ ev->xcrossing.mode == NotifyNormal) {
+ ((HENScanArgs *) args)->leaves = True;
+ /*
+ * Only the last event found matters for the Inferior field.
+ */
+ ((HENScanArgs *) args)->inferior =
+ (ev->xcrossing.detail == NotifyInferior);
+ }
+ }
+ else if (ev->type == EnterNotify) {
+ if (ev->xcrossing.mode == NotifyUngrab)
+ ((HENScanArgs *) args)->enters = True;
}
return (False);
}
-
-
/**
* EnterNotify event handler
*/
@@ -2012,177 +1964,178 @@ HandleEnterNotify(void)
* border highlight on entering the next application window.
*/
if (UnHighLight_win && ewp->window != UnHighLight_win->w) {
- SetBorder (UnHighLight_win, False); /* application window */
- if (UnHighLight_win->list) /* in the icon box */
- NotActiveIconManager(UnHighLight_win->list);
+ SetBorder(UnHighLight_win, False); /* application window */
+ if (UnHighLight_win->list) /* in the icon box */
+ NotActiveIconManager(UnHighLight_win->list);
}
if (ewp->window == Scr->Root)
- UnHighLight_win = NULL;
+ UnHighLight_win = NULL;
else if (Tmp_win)
- UnHighLight_win = Tmp_win;
+ UnHighLight_win = Tmp_win;
/*
* if we aren't in the middle of menu processing
*/
if (!ActiveMenu) {
- /*
- * We're not interested in pseudo Enter/Leave events generated
- * from grab initiations.
- */
- if (ewp->mode == NotifyGrab)
- return;
-
- /*
- * Scan for Leave and Enter Notify events to see if we can avoid some
- * unnecessary processing.
- */
- scanArgs.w = ewp->window;
- scanArgs.leaves = scanArgs.enters = False;
- (void) XCheckIfEvent(dpy, &dummy, HENQueueScanner, (char *) &scanArgs);
-
- /*
- * if entering root window, restore twm default colormap so that
- * titlebars are legible
- */
- if (ewp->window == Scr->Root) {
- if (!scanArgs.leaves && !scanArgs.enters)
- InstallWindowColormaps(EnterNotify, &Scr->TwmRoot);
- return;
- }
-
- /*
- * if we have an event for a specific one of our windows
- */
- if (Tmp_win) {
- /*
- * If currently in PointerRoot mode (indicated by FocusRoot), then
- * focus on this window
- */
- if (Scr->FocusRoot && (!scanArgs.leaves || scanArgs.inferior)) {
- if (Tmp_win->list) ActiveIconManager(Tmp_win->list);
- if (Tmp_win->mapped) {
- /*
- * unhighlight old focus window
- */
- if (Scr->Focus &&
- Scr->Focus != Tmp_win && Tmp_win->hilite_w)
- XUnmapWindow(dpy, Scr->Focus->hilite_w);
-
- /*
- * If entering the frame or the icon manager, then do
- * "window activation things":
- *
- * 1. turn on highlight window (if any)
- * 2. install frame colormap
- * 3. set frame and highlight window (if any) border
- * 4. focus on client window to forward typing
- * 4a. same as 4 but for icon mgr w/with NoTitlebar on.
- * 5. send WM_TAKE_FOCUS if requested
- */
- if (ewp->window == Tmp_win->frame ||
- (Tmp_win->list && ewp->window == Tmp_win->list->w)) {
- if (Tmp_win->hilite_w) /* 1 */
- XMapWindow (dpy, Tmp_win->hilite_w);
- if (!scanArgs.leaves && !scanArgs.enters)
- InstallWindowColormaps (EnterNotify, /* 2 */
- &Scr->TwmRoot);
- SetBorder (Tmp_win, True); /* 3 */
- if (Tmp_win->title_w && Scr->TitleFocus && /* 4 */
- Tmp_win->wmhints && Tmp_win->wmhints->input)
- SetFocus (Tmp_win, ewp->time);
- if (Scr->NoTitlebar && Scr->TitleFocus && /*4a */
- Tmp_win->wmhints && Tmp_win->wmhints->input)
- SetFocus (Tmp_win, ewp->time);
- if (Tmp_win->protocols & DoesWmTakeFocus) /* 5 */
- SendTakeFocusMessage (Tmp_win, ewp->time);
- Scr->Focus = Tmp_win;
- } else if (ewp->window == Tmp_win->w) {
- /*
- * If we are entering the application window, install
- * its colormap(s).
- */
- if (!scanArgs.leaves || scanArgs.inferior)
- InstallWindowColormaps(EnterNotify, Tmp_win);
- }
- } /* end if Tmp_win->mapped */
- if (Tmp_win->wmhints != NULL &&
- ewp->window == Tmp_win->wmhints->icon_window &&
- (!scanArgs.leaves || scanArgs.inferior))
- InstallWindowColormaps(EnterNotify, Tmp_win);
- } /* end if FocusRoot */
- /*
- * If this window is to be autoraised, mark it so
- */
- if (Tmp_win->auto_raise) {
- enter_win = Tmp_win;
- if (enter_flag == FALSE) AutoRaiseWindow (Tmp_win);
- } else if (enter_flag && raise_win == Tmp_win)
- enter_win = Tmp_win;
- /*
- * set ring leader
- */
- if (Tmp_win->ring.next && (!enter_flag || raise_win == enter_win))
- Scr->RingLeader = Tmp_win;
- XSync (dpy, 0);
- return;
- } /* end if Tmp_win */
- } /* end if !ActiveMenu */
+ /*
+ * We're not interested in pseudo Enter/Leave events generated
+ * from grab initiations.
+ */
+ if (ewp->mode == NotifyGrab)
+ return;
+
+ /*
+ * Scan for Leave and Enter Notify events to see if we can avoid some
+ * unnecessary processing.
+ */
+ scanArgs.w = ewp->window;
+ scanArgs.leaves = scanArgs.enters = False;
+ (void) XCheckIfEvent(dpy, &dummy, HENQueueScanner, (char *) &scanArgs);
+
+ /*
+ * if entering root window, restore twm default colormap so that
+ * titlebars are legible
+ */
+ if (ewp->window == Scr->Root) {
+ if (!scanArgs.leaves && !scanArgs.enters)
+ InstallWindowColormaps(EnterNotify, &Scr->TwmRoot);
+ return;
+ }
+
+ /*
+ * if we have an event for a specific one of our windows
+ */
+ if (Tmp_win) {
+ /*
+ * If currently in PointerRoot mode (indicated by FocusRoot), then
+ * focus on this window
+ */
+ if (Scr->FocusRoot && (!scanArgs.leaves || scanArgs.inferior)) {
+ if (Tmp_win->list)
+ ActiveIconManager(Tmp_win->list);
+ if (Tmp_win->mapped) {
+ /*
+ * unhighlight old focus window
+ */
+ if (Scr->Focus &&
+ Scr->Focus != Tmp_win && Tmp_win->hilite_w)
+ XUnmapWindow(dpy, Scr->Focus->hilite_w);
+
+ /*
+ * If entering the frame or the icon manager, then do
+ * "window activation things":
+ *
+ * 1. turn on highlight window (if any)
+ * 2. install frame colormap
+ * 3. set frame and highlight window (if any) border
+ * 4. focus on client window to forward typing
+ * 4a. same as 4 but for icon mgr w/with NoTitlebar on.
+ * 5. send WM_TAKE_FOCUS if requested
+ */
+ if (ewp->window == Tmp_win->frame ||
+ (Tmp_win->list && ewp->window == Tmp_win->list->w)) {
+ if (Tmp_win->hilite_w) /* 1 */
+ XMapWindow(dpy, Tmp_win->hilite_w);
+ if (!scanArgs.leaves && !scanArgs.enters)
+ InstallWindowColormaps(EnterNotify, /* 2 */
+ &Scr->TwmRoot);
+ SetBorder(Tmp_win, True); /* 3 */
+ if (Tmp_win->title_w && Scr->TitleFocus && /* 4 */
+ Tmp_win->wmhints && Tmp_win->wmhints->input)
+ SetFocus(Tmp_win, ewp->time);
+ if (Scr->NoTitlebar && Scr->TitleFocus && /*4a */
+ Tmp_win->wmhints && Tmp_win->wmhints->input)
+ SetFocus(Tmp_win, ewp->time);
+ if (Tmp_win->protocols & DoesWmTakeFocus) /* 5 */
+ SendTakeFocusMessage(Tmp_win, ewp->time);
+ Scr->Focus = Tmp_win;
+ }
+ else if (ewp->window == Tmp_win->w) {
+ /*
+ * If we are entering the application window, install
+ * its colormap(s).
+ */
+ if (!scanArgs.leaves || scanArgs.inferior)
+ InstallWindowColormaps(EnterNotify, Tmp_win);
+ }
+ } /* end if Tmp_win->mapped */
+ if (Tmp_win->wmhints != NULL &&
+ ewp->window == Tmp_win->wmhints->icon_window &&
+ (!scanArgs.leaves || scanArgs.inferior))
+ InstallWindowColormaps(EnterNotify, Tmp_win);
+ } /* end if FocusRoot */
+ /*
+ * If this window is to be autoraised, mark it so
+ */
+ if (Tmp_win->auto_raise) {
+ enter_win = Tmp_win;
+ if (enter_flag == FALSE)
+ AutoRaiseWindow(Tmp_win);
+ }
+ else if (enter_flag && raise_win == Tmp_win)
+ enter_win = Tmp_win;
+ /*
+ * set ring leader
+ */
+ if (Tmp_win->ring.next && (!enter_flag || raise_win == enter_win))
+ Scr->RingLeader = Tmp_win;
+ XSync(dpy, 0);
+ return;
+ } /* end if Tmp_win */
+ } /* end if !ActiveMenu */
/*
* Find the menu that we are dealing with now; punt if unknown
*/
- if (XFindContext (dpy, ewp->window, MenuContext, &context_data) == 0)
- mr = (MenuRoot *) context_data;
+ if (XFindContext(dpy, ewp->window, MenuContext, &context_data) == 0)
+ mr = (MenuRoot *) context_data;
else
- return;
+ return;
mr->entered = TRUE;
if (ActiveMenu && mr == ActiveMenu->prev && RootFunction == 0) {
- if (Scr->Shadow) XUnmapWindow (dpy, ActiveMenu->shadow);
- XUnmapWindow (dpy, ActiveMenu->w);
- ActiveMenu->mapped = UNMAPPED;
- UninstallRootColormap ();
- if (ActiveItem) {
- ActiveItem->state = 0;
- PaintEntry (ActiveMenu, ActiveItem, False);
- }
- ActiveItem = NULL;
- ActiveMenu = mr;
- MenuDepth--;
+ if (Scr->Shadow)
+ XUnmapWindow(dpy, ActiveMenu->shadow);
+ XUnmapWindow(dpy, ActiveMenu->w);
+ ActiveMenu->mapped = UNMAPPED;
+ UninstallRootColormap();
+ if (ActiveItem) {
+ ActiveItem->state = 0;
+ PaintEntry(ActiveMenu, ActiveItem, False);
+ }
+ ActiveItem = NULL;
+ ActiveMenu = mr;
+ MenuDepth--;
}
return;
}
-
-
/** \fn HLNQueueScanner
* LeaveNotify event q scanner.
*
- * Looks at the queued events and determines if any
- * EnterNotify events are behind this event to allow
- * skipping of unnecessary processing.
+ * Looks at the queued events and determines if any
+ * EnterNotify events are behind this event to allow
+ * skipping of unnecessary processing.
*/
typedef struct HLNScanArgs {
- Window w; /**< The window getting the LeaveNotify */
- Bool enters; /**< Any EnterNotify event at all */
- Bool matches; /**< Any matching EnterNotify events */
+ Window w; /**< The window getting the LeaveNotify */
+ Bool enters; /**< Any EnterNotify event at all */
+ Bool matches; /**< Any matching EnterNotify events */
} HLNScanArgs;
static Bool
HLNQueueScanner(Display *dpy2 _X_UNUSED, XEvent *ev, char *args)
{
if (ev->type == EnterNotify && ev->xcrossing.mode != NotifyGrab) {
- ((HLNScanArgs *) args)->enters = True;
- if (ev->xcrossing.window == ((HLNScanArgs *) args)->w)
- ((HLNScanArgs *) args)->matches = True;
+ ((HLNScanArgs *) args)->enters = True;
+ if (ev->xcrossing.window == ((HLNScanArgs *) args)->w)
+ ((HLNScanArgs *) args)->matches = True;
}
return (False);
}
-
-
/**
* LeaveNotify event handler
*/
@@ -2192,74 +2145,74 @@ HandleLeaveNotify(void)
HLNScanArgs scanArgs;
XEvent dummy;
- if (Tmp_win != NULL)
- {
- Bool inicon;
-
- /*
- * We're not interested in pseudo Enter/Leave events generated
- * from grab initiations and terminations.
- */
- if (Event.xcrossing.mode != NotifyNormal)
- return;
-
- inicon = (Tmp_win->list &&
- Tmp_win->list->w == Event.xcrossing.window);
-
- if (Scr->RingLeader && Scr->RingLeader == Tmp_win &&
- (Event.xcrossing.detail != NotifyInferior &&
- Event.xcrossing.window != Tmp_win->w)) {
- if (!inicon) {
- if (Tmp_win->mapped) {
- Tmp_win->ring.cursor_valid = False;
- } else {
- Tmp_win->ring.cursor_valid = True;
- Tmp_win->ring.curs_x = (Event.xcrossing.x_root -
- Tmp_win->frame_x);
- Tmp_win->ring.curs_y = (Event.xcrossing.y_root -
- Tmp_win->frame_y);
- }
- }
- Scr->RingLeader = (TwmWindow *) NULL;
- }
- if (Scr->FocusRoot) {
-
- if (Event.xcrossing.detail != NotifyInferior) {
-
- /*
- * Scan for EnterNotify events to see if we can avoid some
- * unnecessary processing.
- */
- scanArgs.w = Event.xcrossing.window;
- scanArgs.enters = scanArgs.matches = False;
- (void) XCheckIfEvent(dpy, &dummy, HLNQueueScanner,
- (char *) &scanArgs);
-
- if ((Event.xcrossing.window == Tmp_win->frame &&
- !scanArgs.matches) || inicon) {
- if (Tmp_win->list) NotActiveIconManager(Tmp_win->list);
- if (Tmp_win->hilite_w)
- XUnmapWindow (dpy, Tmp_win->hilite_w);
- SetBorder (Tmp_win, False);
- if (Scr->TitleFocus ||
- Tmp_win->protocols & DoesWmTakeFocus)
- SetFocus ((TwmWindow *) NULL, Event.xcrossing.time);
- Scr->Focus = NULL;
- } else if (Event.xcrossing.window == Tmp_win->w &&
- !scanArgs.enters) {
- InstallWindowColormaps (LeaveNotify, &Scr->TwmRoot);
- }
- }
- }
- XSync (dpy, 0);
- return;
+ if (Tmp_win != NULL) {
+ Bool inicon;
+
+ /*
+ * We're not interested in pseudo Enter/Leave events generated
+ * from grab initiations and terminations.
+ */
+ if (Event.xcrossing.mode != NotifyNormal)
+ return;
+
+ inicon = (Tmp_win->list && Tmp_win->list->w == Event.xcrossing.window);
+
+ if (Scr->RingLeader && Scr->RingLeader == Tmp_win &&
+ (Event.xcrossing.detail != NotifyInferior &&
+ Event.xcrossing.window != Tmp_win->w)) {
+ if (!inicon) {
+ if (Tmp_win->mapped) {
+ Tmp_win->ring.cursor_valid = False;
+ }
+ else {
+ Tmp_win->ring.cursor_valid = True;
+ Tmp_win->ring.curs_x = (Event.xcrossing.x_root -
+ Tmp_win->frame_x);
+ Tmp_win->ring.curs_y = (Event.xcrossing.y_root -
+ Tmp_win->frame_y);
+ }
+ }
+ Scr->RingLeader = (TwmWindow *) NULL;
+ }
+ if (Scr->FocusRoot) {
+
+ if (Event.xcrossing.detail != NotifyInferior) {
+
+ /*
+ * Scan for EnterNotify events to see if we can avoid some
+ * unnecessary processing.
+ */
+ scanArgs.w = Event.xcrossing.window;
+
+ scanArgs.enters = scanArgs.matches = False;
+ (void) XCheckIfEvent(dpy, &dummy, HLNQueueScanner,
+ (char *) &scanArgs);
+
+ if ((Event.xcrossing.window == Tmp_win->frame &&
+ !scanArgs.matches) ||inicon) {
+ if (Tmp_win->list)
+ NotActiveIconManager(Tmp_win->list);
+ if (Tmp_win->hilite_w)
+ XUnmapWindow(dpy, Tmp_win->hilite_w);
+ SetBorder(Tmp_win, False);
+ if (Scr->TitleFocus || Tmp_win->protocols & DoesWmTakeFocus)
+ SetFocus((TwmWindow *) NULL, Event.xcrossing.time);
+
+ Scr->Focus = NULL;
+ }
+ else if (Event.xcrossing.window == Tmp_win->w &&
+ !scanArgs.enters) {
+ InstallWindowColormaps(LeaveNotify, &Scr->TwmRoot);
+ }
+ }
+ }
+ XSync(dpy, 0);
+ return;
}
}
-
-
/**
- * HandleConfigureRequest - ConfigureRequest event handler
+ * HandleConfigureRequest - ConfigureRequest event handler
*/
void
HandleConfigureRequest(void)
@@ -2274,29 +2227,29 @@ HandleConfigureRequest(void)
#ifdef DEBUG_EVENTS
fprintf(stderr, "ConfigureRequest\n");
if (cre->value_mask & CWX)
- fprintf(stderr, " x = %d\n", cre->x);
+ fprintf(stderr, " x = %d\n", cre->x);
if (cre->value_mask & CWY)
- fprintf(stderr, " y = %d\n", cre->y);
+ fprintf(stderr, " y = %d\n", cre->y);
if (cre->value_mask & CWWidth)
- fprintf(stderr, " width = %d\n", cre->width);
+ fprintf(stderr, " width = %d\n", cre->width);
if (cre->value_mask & CWHeight)
- fprintf(stderr, " height = %d\n", cre->height);
+ fprintf(stderr, " height = %d\n", cre->height);
if (cre->value_mask & CWSibling)
- fprintf(stderr, " above = 0x%x\n", cre->above);
+ fprintf(stderr, " above = 0x%x\n", cre->above);
if (cre->value_mask & CWStackMode)
- fprintf(stderr, " stack = %d\n", cre->detail);
+ fprintf(stderr, " stack = %d\n", cre->detail);
#endif
/*
* Event.xany.window is Event.xconfigurerequest.parent, so Tmp_win will
* be wrong
*/
- Event.xany.window = cre->window; /* mash parent field */
- if (XFindContext (dpy, cre->window, TwmContext, &context_data) == 0)
- Tmp_win = (TwmWindow *) context_data;
- else
- Tmp_win = NULL;
+ Event.xany.window = cre->window; /* mash parent field */
+ if (XFindContext(dpy, cre->window, TwmContext, &context_data) == 0)
+ Tmp_win = (TwmWindow *) context_data;
+ else
+ Tmp_win = NULL;
/*
* According to the July 27, 1988 ICCCM draft, we should ignore size and
@@ -2305,32 +2258,32 @@ HandleConfigureRequest(void)
* to configuration requests for windows which have never been mapped.
*/
if (!Tmp_win || Tmp_win->icon_w == cre->window) {
- xwcm = cre->value_mask &
- (CWX | CWY | CWWidth | CWHeight | CWBorderWidth);
- xwc.x = cre->x;
- xwc.y = cre->y;
- xwc.width = cre->width;
- xwc.height = cre->height;
- xwc.border_width = cre->border_width;
- XConfigureWindow(dpy, Event.xany.window, (unsigned)xwcm, &xwc);
- return;
+ xwcm = cre->value_mask &
+ (CWX | CWY | CWWidth | CWHeight | CWBorderWidth);
+ xwc.x = cre->x;
+ xwc.y = cre->y;
+ xwc.width = cre->width;
+ xwc.height = cre->height;
+ xwc.border_width = cre->border_width;
+ XConfigureWindow(dpy, Event.xany.window, (unsigned) xwcm, &xwc);
+
+ return;
}
if ((cre->value_mask & CWStackMode) && Tmp_win->stackmode) {
- TwmWindow *otherwin = NULL;
+ TwmWindow *otherwin = NULL;
- if (cre->value_mask & CWSibling) {
- if (XFindContext (dpy, cre->above, TwmContext, &context_data) == 0)
- otherwin = (TwmWindow *) context_data;
- }
+ if (cre->value_mask & CWSibling) {
+ if (XFindContext(dpy, cre->above, TwmContext, &context_data) == 0)
+ otherwin = (TwmWindow *) context_data;
+ }
- xwc.sibling = (otherwin != NULL) ? otherwin->frame : cre->above;
- xwc.stack_mode = cre->detail;
- XConfigureWindow (dpy, Tmp_win->frame,
- cre->value_mask & (CWSibling | CWStackMode), &xwc);
+ xwc.sibling = (otherwin != NULL) ? otherwin->frame : cre->above;
+ xwc.stack_mode = cre->detail;
+ XConfigureWindow(dpy, Tmp_win->frame,
+ cre->value_mask & (CWSibling | CWStackMode), &xwc);
}
-
/* Don't modify frame_XXX fields before calling SetupWindow! */
x = Tmp_win->frame_x;
y = Tmp_win->frame_y;
@@ -2348,37 +2301,39 @@ HandleConfigureRequest(void)
* allow border width changes, we will need to send the synthetic
* ConfigureNotify event.
*/
- GetGravityOffsets (Tmp_win, &gravx, &gravy);
+ GetGravityOffsets(Tmp_win, &gravx, &gravy);
if (cre->value_mask & CWBorderWidth) {
- int bwdelta = cre->border_width - Tmp_win->old_bw; /* posit growth */
- if (bwdelta && Scr->ClientBorderWidth) { /* if change allowed */
- x += gravx * bwdelta; /* change default values only */
- y += gravy * bwdelta; /* ditto */
- bw = cre->border_width;
- if (Tmp_win->title_height) height += bwdelta;
- x += (gravx < 0) ? bwdelta : -bwdelta;
- y += (gravy < 0) ? bwdelta : -bwdelta;
- }
- Tmp_win->old_bw = cre->border_width; /* for restoring */
+ int bwdelta = cre->border_width - Tmp_win->old_bw; /* posit growth */
+
+ if (bwdelta && Scr->ClientBorderWidth) { /* if change allowed */
+ x += gravx * bwdelta; /* change default values only */
+ y += gravy * bwdelta; /* ditto */
+ bw = cre->border_width;
+ if (Tmp_win->title_height)
+ height += bwdelta;
+ x += (gravx < 0) ? bwdelta : -bwdelta;
+ y += (gravy < 0) ? bwdelta : -bwdelta;
+ }
+ Tmp_win->old_bw = cre->border_width; /* for restoring */
}
- if (cre->value_mask & CWX) { /* override even if border change */
- x = cre->x - bw;
+ if (cre->value_mask & CWX) { /* override even if border change */
+ x = cre->x - bw;
}
if (cre->value_mask & CWY) {
- y = cre->y - ((gravy < 0) ? 0 : Tmp_win->title_height) - bw;
+ y = cre->y - ((gravy < 0) ? 0 : Tmp_win->title_height) - bw;
}
if (cre->value_mask & CWWidth) {
- width = cre->width;
+ width = cre->width;
}
if (cre->value_mask & CWHeight) {
- height = cre->height + Tmp_win->title_height;
+ height = cre->height + Tmp_win->title_height;
}
if (width != Tmp_win->frame_width || height != Tmp_win->frame_height)
- Tmp_win->zoomed = ZOOM_NONE;
+ Tmp_win->zoomed = ZOOM_NONE;
/*
* SetupWindow (x,y) are the location of the upper-left outer corner and
@@ -2387,58 +2342,49 @@ HandleConfigureRequest(void)
* requested client window width; the inner height is the same as the
* requested client window height plus any title bar slop.
*/
- SetupWindow (Tmp_win, x, y, width, height, bw);
+ SetupWindow(Tmp_win, x, y, width, height, bw);
}
-
-
/**
* shape notification event handler
*/
void
-HandleShapeNotify (void)
+HandleShapeNotify(void)
{
- XShapeEvent *sev = (XShapeEvent *) &Event;
+ XShapeEvent *sev = (XShapeEvent *) & Event;
if (Tmp_win == NULL)
- return;
+ return;
if (sev->kind != ShapeBounding)
- return;
+ return;
if (!Tmp_win->wShaped && sev->shaped) {
- XShapeCombineMask (dpy, Tmp_win->frame, ShapeClip, 0, 0, None,
- ShapeSet);
+ XShapeCombineMask(dpy, Tmp_win->frame, ShapeClip, 0, 0, None, ShapeSet);
}
- Tmp_win->wShaped = (short)sev->shaped;
- SetFrameShape (Tmp_win);
+ Tmp_win->wShaped = (short) sev->shaped;
+ SetFrameShape(Tmp_win);
}
-
-
#ifdef HAVE_XRANDR
/**
* xrandr screen configuration change-notification handler
*/
void
-HandleScreenChangeNotify (void)
+HandleScreenChangeNotify(void)
{
- XRRScreenChangeNotifyEvent *xev = (XRRScreenChangeNotifyEvent *) &Event;
+ XRRScreenChangeNotifyEvent *xev = (XRRScreenChangeNotifyEvent *) & Event;
int scrnum;
- for (scrnum = 0; scrnum < NumScreens; scrnum++)
- {
- if ( ScreenList[scrnum]->Root == xev->root )
- {
- ScreenList[scrnum]->MyDisplayWidth = xev->width;
- ScreenList[scrnum]->MyDisplayHeight = xev->height;
- }
+ for (scrnum = 0; scrnum < NumScreens; scrnum++) {
+ if (ScreenList[scrnum]->Root == xev->root) {
+ ScreenList[scrnum]->MyDisplayWidth = xev->width;
+ ScreenList[scrnum]->MyDisplayHeight = xev->height;
+ }
}
XRRUpdateConfiguration(&Event);
}
#endif
-
-
/**
* unknown event handler
*/
@@ -2450,15 +2396,13 @@ HandleUnknown(void)
#endif
}
-
-
/**
* checks to see if the window is a transient.
*
* \return TRUE if window is a transient
* \return FALSE if window is not a transient
*
- * \param w the window to check
+ * \param w the window to check
*/
int
Transient(Window w, Window *propw)
@@ -2466,8 +2410,6 @@ Transient(Window w, Window *propw)
return (XGetTransientForHint(dpy, w, propw));
}
-
-
/**
* get ScreenInfo struct associated with a given window
*
@@ -2482,39 +2424,35 @@ FindScreenInfo(Window w)
attr.screen = NULL;
if (XGetWindowAttributes(dpy, w, &attr)) {
- for (scrnum = 0; scrnum < NumScreens; scrnum++) {
- if (ScreenList[scrnum] != NULL &&
- (ScreenOfDisplay(dpy, ScreenList[scrnum]->screen) ==
- attr.screen))
- return ScreenList[scrnum];
- }
+ for (scrnum = 0; scrnum < NumScreens; scrnum++) {
+ if (ScreenList[scrnum] != NULL &&
+ (ScreenOfDisplay(dpy, ScreenList[scrnum]->screen) ==
+ attr.screen))
+ return ScreenList[scrnum];
+ }
}
return NULL;
}
-
-
static void
-flush_expose (Window w)
+flush_expose(Window w)
{
XEvent dummy;
- /* SUPPRESS 530 */
- while (XCheckTypedWindowEvent (dpy, w, Expose, &dummy)) ;
+ /* SUPPRESS 530 */
+ while (XCheckTypedWindowEvent(dpy, w, Expose, &dummy));
}
-
-
/**
* install the colormaps for one twm window.
*
* \param type type of event that caused the installation
* \param tmp for a subset of event types, the address of the
- * window structure, whose colormaps are to be installed.
+ * window structure, whose colormaps are to be installed.
*/
void
-InstallWindowColormaps (int type, TwmWindow *tmp)
+InstallWindowColormaps(int type, TwmWindow *tmp)
{
int i, j, n, number_cwins, state;
ColormapWindow **cwins, *cwin, **maxcwin = NULL;
@@ -2526,136 +2464,133 @@ InstallWindowColormaps (int type, TwmWindow *tmp)
case LeaveNotify:
case DestroyNotify:
default:
- /* Save the colormap to be loaded for when force loading of
- * root colormap(s) ends.
- */
- Scr->cmapInfo.pushed_window = tmp;
- /* Don't load any new colormap if root colormap(s) has been
- * force loaded.
- */
- if (Scr->cmapInfo.root_pushes)
- return;
- /* Don't reload the currend window colormap list.
- */
- if (Scr->cmapInfo.cmaps == &tmp->cmaps)
- return;
- if (Scr->cmapInfo.cmaps)
- for (i = Scr->cmapInfo.cmaps->number_cwins,
- cwins = Scr->cmapInfo.cmaps->cwins; i-- > 0; cwins++)
- (*cwins)->colormap->state &= ~CM_INSTALLABLE;
- Scr->cmapInfo.cmaps = &tmp->cmaps;
- break;
+ /* Save the colormap to be loaded for when force loading of
+ * root colormap(s) ends.
+ */
+ Scr->cmapInfo.pushed_window = tmp;
+ /* Don't load any new colormap if root colormap(s) has been
+ * force loaded.
+ */
+ if (Scr->cmapInfo.root_pushes)
+ return;
+ /* Don't reload the currend window colormap list.
+ */
+ if (Scr->cmapInfo.cmaps == &tmp->cmaps)
+ return;
+ if (Scr->cmapInfo.cmaps)
+ for (i = Scr->cmapInfo.cmaps->number_cwins,
+ cwins = Scr->cmapInfo.cmaps->cwins; i-- > 0; cwins++)
+ (*cwins)->colormap->state &= ~CM_INSTALLABLE;
+ Scr->cmapInfo.cmaps = &tmp->cmaps;
+ break;
case PropertyNotify:
case VisibilityNotify:
case ColormapNotify:
- break;
+ break;
}
number_cwins = Scr->cmapInfo.cmaps->number_cwins;
cwins = Scr->cmapInfo.cmaps->cwins;
scoreboard = Scr->cmapInfo.cmaps->scoreboard;
- ColortableThrashing = FALSE; /* in case installation aborted */
+ ColortableThrashing = FALSE; /* in case installation aborted */
state = CM_INSTALLED;
- for (i = n = 0; i < number_cwins; i++) {
- cwin = cwins[i];
- cmap = cwin->colormap;
- cmap->state |= CM_INSTALLABLE;
- cmap->state &= ~CM_INSTALL;
- cmap->w = cwin->w;
- }
- for (i = n = 0; i < number_cwins; i++) {
- cwin = cwins[i];
- cmap = cwin->colormap;
- if (cwin->visibility != VisibilityFullyObscured &&
- n < Scr->cmapInfo.maxCmaps) {
- row = scoreboard + (i*(i-1)/2);
- for (j = 0; j < i; j++)
- if (row[j] && (cwins[j]->colormap->state & CM_INSTALL))
- break;
- if (j != i)
- continue;
- n++;
- maxcwin = &cwins[i];
- state &= (cmap->state & CM_INSTALLED);
- cmap->state |= CM_INSTALL;
- }
+ for (i = n = 0; i < number_cwins; i++) {
+ cwin = cwins[i];
+ cmap = cwin->colormap;
+ cmap->state |= CM_INSTALLABLE;
+ cmap->state &= ~CM_INSTALL;
+ cmap->w = cwin->w;
+ }
+ for (i = n = 0; i < number_cwins; i++) {
+ cwin = cwins[i];
+ cmap = cwin->colormap;
+ if (cwin->visibility != VisibilityFullyObscured &&
+ n < Scr->cmapInfo.maxCmaps) {
+ row = scoreboard + (i * (i - 1) / 2);
+ for (j = 0; j < i; j++)
+ if (row[j] && (cwins[j]->colormap->state & CM_INSTALL))
+ break;
+ if (j != i)
+ continue;
+ n++;
+ maxcwin = &cwins[i];
+ state &= (cmap->state & CM_INSTALLED);
+ cmap->state |= CM_INSTALL;
+ }
}
Scr->cmapInfo.first_req = NextRequest(dpy);
- for ( ; n > 0 && maxcwin >= cwins; maxcwin--) {
- cmap = (*maxcwin)->colormap;
- if (cmap->state & CM_INSTALL) {
- cmap->state &= ~CM_INSTALL;
- if (!(state & CM_INSTALLED)) {
- cmap->install_req = NextRequest(dpy);
- XInstallColormap(dpy, cmap->c);
- }
- cmap->state |= CM_INSTALLED;
- n--;
- }
+ for (; n > 0 && maxcwin >= cwins; maxcwin--) {
+ cmap = (*maxcwin)->colormap;
+ if (cmap->state & CM_INSTALL) {
+ cmap->state &= ~CM_INSTALL;
+ if (!(state & CM_INSTALLED)) {
+ cmap->install_req = NextRequest(dpy);
+ XInstallColormap(dpy, cmap->c);
+ }
+ cmap->state |= CM_INSTALLED;
+ n--;
+ }
}
}
-
-
/** \fn InstallRootColormap
* \fn UninstallRootColormap
*
* Force (un)loads root colormap(s)
*
- * These matching routines provide a mechanism to insure that
- * the root colormap(s) is installed during operations like
- * rubber banding or menu display that require colors from
- * that colormap. Calls may be nested arbitrarily deeply,
- * as long as there is one UninstallRootColormap call per
- * InstallRootColormap call.
+ * These matching routines provide a mechanism to insure that
+ * the root colormap(s) is installed during operations like
+ * rubber banding or menu display that require colors from
+ * that colormap. Calls may be nested arbitrarily deeply,
+ * as long as there is one UninstallRootColormap call per
+ * InstallRootColormap call.
*
- * The final UninstallRootColormap will cause the colormap list
- * which would otherwise have be loaded to be loaded, unless
- * Enter or Leave Notify events are queued, indicating some
- * other colormap list would potentially be loaded anyway.
+ * The final UninstallRootColormap will cause the colormap list
+ * which would otherwise have be loaded to be loaded, unless
+ * Enter or Leave Notify events are queued, indicating some
+ * other colormap list would potentially be loaded anyway.
*/
void
InstallRootColormap(void)
{
TwmWindow *tmp;
+
if (Scr->cmapInfo.root_pushes == 0) {
- /*
- * The saving and restoring of cmapInfo.pushed_window here
- * is a slimy way to remember the actual pushed list and
- * not that of the root window.
- */
- tmp = Scr->cmapInfo.pushed_window;
- InstallWindowColormaps(0, &Scr->TwmRoot);
- Scr->cmapInfo.pushed_window = tmp;
+ /*
+ * The saving and restoring of cmapInfo.pushed_window here
+ * is a slimy way to remember the actual pushed list and
+ * not that of the root window.
+ */
+ tmp = Scr->cmapInfo.pushed_window;
+ InstallWindowColormaps(0, &Scr->TwmRoot);
+ Scr->cmapInfo.pushed_window = tmp;
}
Scr->cmapInfo.root_pushes++;
}
-
-
static Bool
UninstallRootColormapQScanner(Display *dpy2 _X_UNUSED, XEvent *ev, char *args)
{
if (!*args) {
- if (ev->type == EnterNotify) {
- if (ev->xcrossing.mode != NotifyGrab)
- *args = 1;
- } else if (ev->type == LeaveNotify) {
- if (ev->xcrossing.mode == NotifyNormal)
+ if (ev->type == EnterNotify) {
+ if (ev->xcrossing.mode != NotifyGrab)
+ *args = 1;
+ }
+ else if (ev->type == LeaveNotify) {
+ if (ev->xcrossing.mode == NotifyNormal)
- *args = 1;
- }
+ *args = 1;
+ }
}
return (False);
}
-
void
UninstallRootColormap(void)
{
@@ -2663,69 +2598,71 @@ UninstallRootColormap(void)
XEvent dummy;
if (Scr->cmapInfo.root_pushes)
- Scr->cmapInfo.root_pushes--;
+ Scr->cmapInfo.root_pushes--;
if (!Scr->cmapInfo.root_pushes) {
- /*
- * If we have subsequent Enter or Leave Notify events,
- * we can skip the reload of pushed colormaps.
- */
- XSync (dpy, 0);
- args = 0;
- (void) XCheckIfEvent(dpy, &dummy, UninstallRootColormapQScanner, &args);
+ /*
+ * If we have subsequent Enter or Leave Notify events,
+ * we can skip the reload of pushed colormaps.
+ */
+ XSync(dpy, 0);
+ args = 0;
+ (void) XCheckIfEvent(dpy, &dummy, UninstallRootColormapQScanner, &args);
- if (!args)
- InstallWindowColormaps(0, Scr->cmapInfo.pushed_window);
+ if (!args)
+ InstallWindowColormaps(0, Scr->cmapInfo.pushed_window);
}
}
#ifdef TRACE
void
-dumpevent (XEvent *e)
+dumpevent(XEvent *e)
{
char *name = NULL;
switch (e->type) {
- case KeyPress: name = "KeyPress"; break;
- case KeyRelease: name = "KeyRelease"; break;
- case ButtonPress: name = "ButtonPress"; break;
- case ButtonRelease: name = "ButtonRelease"; break;
- case MotionNotify: name = "MotionNotify"; break;
- case EnterNotify: name = "EnterNotify"; break;
- case LeaveNotify: name = "LeaveNotify"; break;
- case FocusIn: name = "FocusIn"; break;
- case FocusOut: name = "FocusOut"; break;
- case KeymapNotify: name = "KeymapNotify"; break;
- case Expose: name = "Expose"; break;
- case GraphicsExpose: name = "GraphicsExpose"; break;
- case NoExpose: name = "NoExpose"; break;
- case VisibilityNotify: name = "VisibilityNotify"; break;
- case CreateNotify: name = "CreateNotify"; break;
- case DestroyNotify: name = "DestroyNotify"; break;
- case UnmapNotify: name = "UnmapNotify"; break;
- case MapNotify: name = "MapNotify"; break;
- case MapRequest: name = "MapRequest"; break;
- case ReparentNotify: name = "ReparentNotify"; break;
- case ConfigureNotify: name = "ConfigureNotify"; break;
- case ConfigureRequest: name = "ConfigureRequest"; break;
- case GravityNotify: name = "GravityNotify"; break;
- case ResizeRequest: name = "ResizeRequest"; break;
- case CirculateNotify: name = "CirculateNotify"; break;
- case CirculateRequest: name = "CirculateRequest"; break;
- case PropertyNotify: name = "PropertyNotify"; break;
- case SelectionClear: name = "SelectionClear"; break;
- case SelectionRequest: name = "SelectionRequest"; break;
- case SelectionNotify: name = "SelectionNotify"; break;
- case ColormapNotify: name = "ColormapNotify"; break;
- case ClientMessage: name = "ClientMessage"; break;
- case MappingNotify: name = "MappingNotify"; break;
+ /* *INDENT-OFF* */
+ case KeyPress: name = "KeyPress"; break;
+ case KeyRelease: name = "KeyRelease"; break;
+ case ButtonPress: name = "ButtonPress"; break;
+ case ButtonRelease: name = "ButtonRelease"; break;
+ case MotionNotify: name = "MotionNotify"; break;
+ case EnterNotify: name = "EnterNotify"; break;
+ case LeaveNotify: name = "LeaveNotify"; break;
+ case FocusIn: name = "FocusIn"; break;
+ case FocusOut: name = "FocusOut"; break;
+ case KeymapNotify: name = "KeymapNotify"; break;
+ case Expose: name = "Expose"; break;
+ case GraphicsExpose: name = "GraphicsExpose"; break;
+ case NoExpose: name = "NoExpose"; break;
+ case VisibilityNotify: name = "VisibilityNotify"; break;
+ case CreateNotify: name = "CreateNotify"; break;
+ case DestroyNotify: name = "DestroyNotify"; break;
+ case UnmapNotify: name = "UnmapNotify"; break;
+ case MapNotify: name = "MapNotify"; break;
+ case MapRequest: name = "MapRequest"; break;
+ case ReparentNotify: name = "ReparentNotify"; break;
+ case ConfigureNotify: name = "ConfigureNotify"; break;
+ case ConfigureRequest: name = "ConfigureRequest"; break;
+ case GravityNotify: name = "GravityNotify"; break;
+ case ResizeRequest: name = "ResizeRequest"; break;
+ case CirculateNotify: name = "CirculateNotify"; break;
+ case CirculateRequest: name = "CirculateRequest"; break;
+ case PropertyNotify: name = "PropertyNotify"; break;
+ case SelectionClear: name = "SelectionClear"; break;
+ case SelectionRequest: name = "SelectionRequest"; break;
+ case SelectionNotify: name = "SelectionNotify"; break;
+ case ColormapNotify: name = "ColormapNotify"; break;
+ case ClientMessage: name = "ClientMessage"; break;
+ case MappingNotify: name = "MappingNotify"; break;
+ /* *INDENT-ON* */
}
if (name) {
- printf ("event: %s, %d remaining\n", name, QLength(dpy));
- } else {
- printf ("unknown event %d, %d remaining\n", e->type, QLength(dpy));
+ printf("event: %s, %d remaining\n", name, QLength(dpy));
+ }
+ else {
+ printf("unknown event %d, %d remaining\n", e->type, QLength(dpy));
}
}
-#endif /* TRACE */
-
+#endif /* TRACE */