externalize EWMH handling
This commit is contained in:
parent
6b448c1aeb
commit
73691143af
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@
|
|||
|
||||
include config.mk
|
||||
|
||||
SRC = focus.c client.c draw.c event.c layout.c awesome.c tag.c util.c xutil.c config.c screen.c statusbar.c uicb.c window.c rules.c mouse.c awesome-client-common.c widget.c
|
||||
SRC = focus.c client.c draw.c event.c layout.c awesome.c tag.c util.c xutil.c config.c screen.c statusbar.c uicb.c window.c rules.c mouse.c awesome-client-common.c widget.c ewmh.c
|
||||
OBJ = ${SRC:.c=.o} ${LAYOUTS:.c=.o} ${WIDGETS:.c=.o}
|
||||
DOCS = awesome.1.txt awesome-client.1.txt awesomerc.1.txt
|
||||
|
||||
|
|
11
awesome.c
11
awesome.c
|
@ -48,6 +48,7 @@
|
|||
#include "window.h"
|
||||
#include "client.h"
|
||||
#include "focus.h"
|
||||
#include "ewmh.h"
|
||||
#include "awesome-client.h"
|
||||
|
||||
static int (*xerrorxlib) (Display *, XErrorEvent *);
|
||||
|
@ -289,8 +290,6 @@ main(int argc, char *argv[])
|
|||
Display * dpy;
|
||||
int shape_event, randr_event_base;
|
||||
int screen;
|
||||
enum { NetSupported, NetWMName, NetWMIcon, NetClientList, NetLast }; /* EWMH atoms */
|
||||
Atom netatom[NetLast];
|
||||
event_handler **handler;
|
||||
struct sockaddr_un *addr;
|
||||
|
||||
|
@ -345,17 +344,13 @@ main(int argc, char *argv[])
|
|||
statusbar_draw(screen);
|
||||
}
|
||||
|
||||
netatom[NetSupported] = XInternAtom(dpy, "_NET_SUPPORTED", False);
|
||||
netatom[NetWMName] = XInternAtom(dpy, "_NET_WM_NAME", False);
|
||||
netatom[NetWMIcon] = XInternAtom(dpy, "_NET_WM_ICON", False);
|
||||
netatom[NetClientList] = XInternAtom(dpy, "_NET_CLIENT_LIST", False);
|
||||
ewmh_init_atoms();
|
||||
|
||||
/* do this only for real screen */
|
||||
for(screen = 0; screen < ScreenCount(dpy); screen++)
|
||||
{
|
||||
loadawesomeprops(screen);
|
||||
XChangeProperty(dpy, RootWindow(dpy, screen), netatom[NetSupported],
|
||||
XA_ATOM, 32, PropModeReplace, (unsigned char *) netatom, NetLast);
|
||||
ewmh_set_supported_hints(screen);
|
||||
}
|
||||
|
||||
handler = p_new(event_handler *, LASTEvent);
|
||||
|
|
|
@ -0,0 +1,84 @@
|
|||
/*
|
||||
* ewmh.c - EWMH support functions
|
||||
*
|
||||
* Copyright © 2007 Julien Danjou <julien@danjou.info>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#include <X11/Xatom.h>
|
||||
|
||||
#include "ewmh.h"
|
||||
#include "config.h"
|
||||
|
||||
extern AwesomeConf globalconf;
|
||||
|
||||
static Atom net_supported;
|
||||
static Atom net_client_list;
|
||||
|
||||
static Atom net_wm_name;
|
||||
static Atom net_wm_icon;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
const char *name;
|
||||
Atom *atom;
|
||||
} AtomItem;
|
||||
|
||||
static AtomItem AtomNames[] =
|
||||
{
|
||||
{ "_NET_SUPPORTED", &net_supported },
|
||||
{ "_NET_CLIENT_LIST", &net_client_list },
|
||||
|
||||
{ "_NET_WM_NAME", &net_wm_name },
|
||||
{ "_NET_WM_ICON", &net_wm_icon },
|
||||
};
|
||||
|
||||
#define ATOM_NUMBER (sizeof(AtomNames)/sizeof(AtomItem))
|
||||
|
||||
void
|
||||
ewmh_init_atoms(void)
|
||||
{
|
||||
unsigned int i;
|
||||
char *names[ATOM_NUMBER];
|
||||
Atom atoms[ATOM_NUMBER];
|
||||
|
||||
for(i = 0; i < ATOM_NUMBER; i++)
|
||||
names[i] = (char *) AtomNames[i].name;
|
||||
XInternAtoms(globalconf.display, names, ATOM_NUMBER, False, atoms);
|
||||
for(i = 0; i < ATOM_NUMBER; i++)
|
||||
*AtomNames[i].atom = atoms[i];
|
||||
}
|
||||
|
||||
void
|
||||
ewmh_set_supported_hints(int phys_screen)
|
||||
{
|
||||
Atom atom[ATOM_NUMBER];
|
||||
int i = 0;
|
||||
|
||||
atom[i++] = net_supported;
|
||||
atom[i++] = net_client_list;
|
||||
|
||||
atom[i++] = net_wm_name;
|
||||
atom[i++] = net_wm_icon;
|
||||
|
||||
XChangeProperty(globalconf.display, RootWindow(globalconf.display, phys_screen),
|
||||
net_supported, XA_ATOM, 32,
|
||||
PropModeReplace, (unsigned char *) atom, i);
|
||||
}
|
||||
|
||||
|
||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
|
@ -0,0 +1,29 @@
|
|||
/*
|
||||
* ewmh.h - EWMH header
|
||||
*
|
||||
* Copyright © 2007 Julien Danjou <julien@danjou.info>
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef AWESOME_EWMH_H
|
||||
#define AWESOME_EWMH_H
|
||||
|
||||
void ewmh_init_atoms(void);
|
||||
void ewmh_set_supported_hints(int);
|
||||
|
||||
#endif
|
||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
Loading…
Reference in New Issue