cvsimport

This commit is contained in:
okan 2013-12-13 15:56:44 +00:00
commit ddb67559f6
7 changed files with 45 additions and 8 deletions

View File

@ -109,6 +109,7 @@ enum cursor_font {
enum color { enum color {
CWM_COLOR_BORDER_ACTIVE, CWM_COLOR_BORDER_ACTIVE,
CWM_COLOR_BORDER_INACTIVE, CWM_COLOR_BORDER_INACTIVE,
CWM_COLOR_BORDER_URGENCY,
CWM_COLOR_BORDER_GROUP, CWM_COLOR_BORDER_GROUP,
CWM_COLOR_BORDER_UNGROUP, CWM_COLOR_BORDER_UNGROUP,
CWM_COLOR_MENU_FG, CWM_COLOR_MENU_FG,
@ -174,6 +175,7 @@ struct client_ctx {
#define CLIENT_INPUT 0x0080 #define CLIENT_INPUT 0x0080
#define CLIENT_WM_DELETE_WINDOW 0x0100 #define CLIENT_WM_DELETE_WINDOW 0x0100
#define CLIENT_WM_TAKE_FOCUS 0x0200 #define CLIENT_WM_TAKE_FOCUS 0x0200
#define CLIENT_URGENCY 0x0400
#define CLIENT_HIGHLIGHT (CLIENT_GROUP | CLIENT_UNGROUP) #define CLIENT_HIGHLIGHT (CLIENT_GROUP | CLIENT_UNGROUP)
#define CLIENT_MAXFLAGS (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED) #define CLIENT_MAXFLAGS (CLIENT_VMAXIMIZED | CLIENT_HMAXIMIZED)
@ -362,9 +364,10 @@ enum {
_NET_WM_DESKTOP, _NET_WM_DESKTOP,
_NET_CLOSE_WINDOW, _NET_CLOSE_WINDOW,
_NET_WM_STATE, _NET_WM_STATE,
#define _NET_WM_STATES_NITEMS 2 #define _NET_WM_STATES_NITEMS 3
_NET_WM_STATE_MAXIMIZED_VERT, _NET_WM_STATE_MAXIMIZED_VERT,
_NET_WM_STATE_MAXIMIZED_HORZ, _NET_WM_STATE_MAXIMIZED_HORZ,
_NET_WM_STATE_DEMANDS_ATTENTION,
EWMH_NITEMS EWMH_NITEMS
}; };
enum { enum {
@ -408,6 +411,7 @@ void client_setname(struct client_ctx *);
int client_snapcalc(int, int, int, int, int); int client_snapcalc(int, int, int, int, int);
void client_transient(struct client_ctx *); void client_transient(struct client_ctx *);
void client_unhide(struct client_ctx *); void client_unhide(struct client_ctx *);
void client_urgency(struct client_ctx *);
void client_vmaximize(struct client_ctx *); void client_vmaximize(struct client_ctx *);
void client_vtile(struct client_ctx *); void client_vtile(struct client_ctx *);
void client_warp(struct client_ctx *); void client_warp(struct client_ctx *);

View File

@ -103,6 +103,8 @@ client_init(Window win, struct screen_ctx *sc, int mapped)
XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask | XSelectInput(X_Dpy, cc->win, ColormapChangeMask | EnterWindowMask |
PropertyChangeMask | KeyReleaseMask); PropertyChangeMask | KeyReleaseMask);
XAddToSaveSet(X_Dpy, cc->win);
client_transient(cc); client_transient(cc);
/* Notify client of its configuration. */ /* Notify client of its configuration. */
@ -192,6 +194,7 @@ client_setactive(struct client_ctx *cc)
_curcc = cc; _curcc = cc;
cc->active = 1; cc->active = 1;
cc->flags &= ~CLIENT_URGENCY;
client_draw_border(cc); client_draw_border(cc);
conf_grab_mouse(cc->win); conf_grab_mouse(cc->win);
xu_ewmh_net_active_window(sc, cc->win); xu_ewmh_net_active_window(sc, cc->win);
@ -461,6 +464,12 @@ client_unhide(struct client_ctx *cc)
client_draw_border(cc); client_draw_border(cc);
} }
void
client_urgency(struct client_ctx *cc)
{
cc->flags |= CLIENT_URGENCY;
}
void void
client_draw_border(struct client_ctx *cc) client_draw_border(struct client_ctx *cc)
{ {
@ -482,6 +491,9 @@ client_draw_border(struct client_ctx *cc)
else else
pixel = sc->xftcolor[CWM_COLOR_BORDER_INACTIVE].pixel; pixel = sc->xftcolor[CWM_COLOR_BORDER_INACTIVE].pixel;
if (cc->flags & CLIENT_URGENCY)
pixel = sc->xftcolor[CWM_COLOR_BORDER_URGENCY].pixel;
XSetWindowBorderWidth(X_Dpy, cc->win, cc->bwidth); XSetWindowBorderWidth(X_Dpy, cc->win, cc->bwidth);
XSetWindowBorder(X_Dpy, cc->win, pixel); XSetWindowBorder(X_Dpy, cc->win, pixel);
} }
@ -511,6 +523,9 @@ client_wm_hints(struct client_ctx *cc)
if ((cc->wmh->flags & InputHint) && (cc->wmh->input)) if ((cc->wmh->flags & InputHint) && (cc->wmh->input))
cc->flags |= CLIENT_INPUT; cc->flags |= CLIENT_INPUT;
if ((cc->wmh->flags & XUrgencyHint))
client_urgency(cc);
} }
void void

2
conf.c
View File

@ -88,6 +88,7 @@ conf_ignore(struct conf *c, char *val)
static char *color_binds[] = { static char *color_binds[] = {
"#CCCCCC", /* CWM_COLOR_BORDER_ACTIVE */ "#CCCCCC", /* CWM_COLOR_BORDER_ACTIVE */
"#666666", /* CWM_COLOR_BORDER_INACTIVE */ "#666666", /* CWM_COLOR_BORDER_INACTIVE */
"#FC8814", /* CWM_COLOR_BORDER_URGENCY */
"blue", /* CWM_COLOR_BORDER_GROUP */ "blue", /* CWM_COLOR_BORDER_GROUP */
"red", /* CWM_COLOR_BORDER_UNGROUP */ "red", /* CWM_COLOR_BORDER_UNGROUP */
"black", /* CWM_COLOR_MENU_FG */ "black", /* CWM_COLOR_MENU_FG */
@ -687,6 +688,7 @@ static char *ewmhints[] = {
"_NET_WM_STATE", "_NET_WM_STATE",
"_NET_WM_STATE_MAXIMIZED_VERT", "_NET_WM_STATE_MAXIMIZED_VERT",
"_NET_WM_STATE_MAXIMIZED_HORZ", "_NET_WM_STATE_MAXIMIZED_HORZ",
"_NET_WM_STATE_DEMANDS_ATTENTION",
}; };
void void

View File

@ -14,7 +14,7 @@
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
.\" .\"
.Dd $Mdocdate: July 8 2013 $ .Dd $Mdocdate: November 27 2013 $
.Dt CWMRC 5 .Dt CWMRC 5
.Os .Os
.Sh NAME .Sh NAME
@ -125,6 +125,9 @@ Set menu background color.
.It Ic color menufg Ar color .It Ic color menufg Ar color
Set menu foreground color. Set menu foreground color.
.Pp .Pp
.It Ic color urgencyborder Ar color
Set the color of the border of a window indicating urgency.
.Pp
.It Ic color ungroupborder Ar color .It Ic color ungroupborder Ar color
Set the color of the border while ungrouping a window. Set the color of the border while ungrouping a window.
.Pp .Pp

View File

@ -72,7 +72,7 @@ typedef struct {
%token AUTOGROUP BIND COMMAND IGNORE %token AUTOGROUP BIND COMMAND IGNORE
%token YES NO BORDERWIDTH MOVEAMOUNT %token YES NO BORDERWIDTH MOVEAMOUNT
%token COLOR SNAPDIST %token COLOR SNAPDIST
%token ACTIVEBORDER INACTIVEBORDER %token ACTIVEBORDER INACTIVEBORDER URGENCYBORDER
%token GROUPBORDER UNGROUPBORDER %token GROUPBORDER UNGROUPBORDER
%token MENUBG MENUFG %token MENUBG MENUFG
%token FONTCOLOR FONTSELCOLOR %token FONTCOLOR FONTSELCOLOR
@ -195,6 +195,10 @@ colors : ACTIVEBORDER STRING {
free(conf->color[CWM_COLOR_BORDER_INACTIVE]); free(conf->color[CWM_COLOR_BORDER_INACTIVE]);
conf->color[CWM_COLOR_BORDER_INACTIVE] = $2; conf->color[CWM_COLOR_BORDER_INACTIVE] = $2;
} }
| URGENCYBORDER STRING {
free(conf->color[CWM_COLOR_BORDER_URGENCY]);
conf->color[CWM_COLOR_BORDER_URGENCY] = $2;
}
| GROUPBORDER STRING { | GROUPBORDER STRING {
free(conf->color[CWM_COLOR_BORDER_GROUP]); free(conf->color[CWM_COLOR_BORDER_GROUP]);
conf->color[CWM_COLOR_BORDER_GROUP] = $2; conf->color[CWM_COLOR_BORDER_GROUP] = $2;
@ -273,6 +277,7 @@ lookup(char *s)
{ "snapdist", SNAPDIST}, { "snapdist", SNAPDIST},
{ "sticky", STICKY}, { "sticky", STICKY},
{ "ungroupborder", UNGROUPBORDER}, { "ungroupborder", UNGROUPBORDER},
{ "urgencyborder", URGENCYBORDER},
{ "yes", YES} { "yes", YES}
}; };
const struct keywords *p; const struct keywords *p;

View File

@ -47,15 +47,15 @@ static void xev_handle_buttonpress(XEvent *);
static void xev_handle_buttonrelease(XEvent *); static void xev_handle_buttonrelease(XEvent *);
static void xev_handle_keypress(XEvent *); static void xev_handle_keypress(XEvent *);
static void xev_handle_keyrelease(XEvent *); static void xev_handle_keyrelease(XEvent *);
static void xev_handle_expose(XEvent *);
static void xev_handle_clientmessage(XEvent *); static void xev_handle_clientmessage(XEvent *);
static void xev_handle_randr(XEvent *); static void xev_handle_randr(XEvent *);
static void xev_handle_mappingnotify(XEvent *); static void xev_handle_mappingnotify(XEvent *);
static void xev_handle_expose(XEvent *);
void (*xev_handlers[LASTEvent])(XEvent *) = { void (*xev_handlers[LASTEvent])(XEvent *) = {
[MapRequest] = xev_handle_maprequest, [MapRequest] = xev_handle_maprequest,
[UnmapNotify] = xev_handle_unmapnotify, [UnmapNotify] = xev_handle_unmapnotify,
[DestroyNotify] = xev_handle_destroynotify,
[ConfigureRequest] = xev_handle_configurerequest, [ConfigureRequest] = xev_handle_configurerequest,
[PropertyNotify] = xev_handle_propertynotify, [PropertyNotify] = xev_handle_propertynotify,
[EnterNotify] = xev_handle_enternotify, [EnterNotify] = xev_handle_enternotify,
@ -63,10 +63,9 @@ void (*xev_handlers[LASTEvent])(XEvent *) = {
[ButtonRelease] = xev_handle_buttonrelease, [ButtonRelease] = xev_handle_buttonrelease,
[KeyPress] = xev_handle_keypress, [KeyPress] = xev_handle_keypress,
[KeyRelease] = xev_handle_keyrelease, [KeyRelease] = xev_handle_keyrelease,
[Expose] = xev_handle_expose,
[DestroyNotify] = xev_handle_destroynotify,
[ClientMessage] = xev_handle_clientmessage, [ClientMessage] = xev_handle_clientmessage,
[MappingNotify] = xev_handle_mappingnotify, [MappingNotify] = xev_handle_mappingnotify,
[Expose] = xev_handle_expose,
}; };
static KeySym modkeys[] = { XK_Alt_L, XK_Alt_R, XK_Super_L, XK_Super_R, static KeySym modkeys[] = { XK_Alt_L, XK_Alt_R, XK_Super_L, XK_Super_R,
@ -188,6 +187,7 @@ xev_handle_propertynotify(XEvent *ee)
break; break;
case XA_WM_HINTS: case XA_WM_HINTS:
client_wm_hints(cc); client_wm_hints(cc);
client_draw_border(cc);
break; break;
case XA_WM_TRANSIENT_FOR: case XA_WM_TRANSIENT_FOR:
client_transient(cc); client_transient(cc);

10
xutil.c
View File

@ -333,6 +333,9 @@ xu_ewmh_handle_net_wm_state_msg(struct client_ctx *cc, int action,
{ _NET_WM_STATE_MAXIMIZED_HORZ, { _NET_WM_STATE_MAXIMIZED_HORZ,
CLIENT_HMAXIMIZED, CLIENT_HMAXIMIZED,
client_hmaximize }, client_hmaximize },
{ _NET_WM_STATE_DEMANDS_ATTENTION,
CLIENT_URGENCY,
client_urgency },
}; };
for (i = 0; i < nitems(handlers); i++) { for (i = 0; i < nitems(handlers); i++) {
@ -366,6 +369,8 @@ xu_ewmh_restore_net_wm_state(struct client_ctx *cc)
client_hmaximize(cc); client_hmaximize(cc);
if (atoms[i] == ewmh[_NET_WM_STATE_MAXIMIZED_VERT]) if (atoms[i] == ewmh[_NET_WM_STATE_MAXIMIZED_VERT])
client_vmaximize(cc); client_vmaximize(cc);
if (atoms[i] == ewmh[_NET_WM_STATE_DEMANDS_ATTENTION])
client_urgency(cc);
} }
free(atoms); free(atoms);
} }
@ -380,7 +385,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
atoms = xcalloc((n + _NET_WM_STATES_NITEMS), sizeof(Atom)); atoms = xcalloc((n + _NET_WM_STATES_NITEMS), sizeof(Atom));
for (i = j = 0; i < n; i++) { for (i = j = 0; i < n; i++) {
if (oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ] && if (oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_HORZ] &&
oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT]) oatoms[i] != ewmh[_NET_WM_STATE_MAXIMIZED_VERT] &&
oatoms[i] != ewmh[_NET_WM_STATE_DEMANDS_ATTENTION])
atoms[j++] = oatoms[i]; atoms[j++] = oatoms[i];
} }
free(oatoms); free(oatoms);
@ -388,6 +394,8 @@ xu_ewmh_set_net_wm_state(struct client_ctx *cc)
atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_HORZ]; atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_HORZ];
if (cc->flags & CLIENT_VMAXIMIZED) if (cc->flags & CLIENT_VMAXIMIZED)
atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_VERT]; atoms[j++] = ewmh[_NET_WM_STATE_MAXIMIZED_VERT];
if (cc->flags & CLIENT_URGENCY)
atoms[j++] = ewmh[_NET_WM_STATE_DEMANDS_ATTENTION];
if (j > 0) if (j > 0)
XChangeProperty(X_Dpy, cc->win, ewmh[_NET_WM_STATE], XChangeProperty(X_Dpy, cc->win, ewmh[_NET_WM_STATE],
XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, j); XA_ATOM, 32, PropModeReplace, (unsigned char *)atoms, j);