Xrandr: Add Xrandr support in event/screen.

This commit is contained in:
martin 2009-07-05 00:50:58 +02:00
parent 8f618c01df
commit 2c8d67ff27
5 changed files with 44 additions and 8 deletions

View File

@ -80,7 +80,8 @@ set(LIBRARIES_TO_LINK
${X11_LIBRARIES} ${X11_LIBRARIES}
confuse confuse
Xft Xft
Xinerama) Xinerama
Xrandr)
target_link_libraries(wmfs ${LIBRARIES_TO_LINK}) target_link_libraries(wmfs ${LIBRARIES_TO_LINK})

View File

@ -497,6 +497,22 @@ unmapnotify(XUnmapEvent *ev)
return; return;
} }
/** Xrandr screen change notify handle event
*\ param ev XEvent pointer
*/
void
xrandrnotify(XEvent *ev)
{
XRRUpdateConfiguration(ev);
/* Reload WMFS to update the screen(s) geometry changement */
quit();
for(; argv_global[0] && argv_global[0] == ' '; ++argv_global);
execlp(argv_global, argv_global, NULL);
return;
}
/** Send a client event /** Send a client event
*\param data Event data *\param data Event data
*\param atom_name Event atom name *\param atom_name Event atom name
@ -548,6 +564,10 @@ getevent(XEvent ev)
case UnmapNotify: unmapnotify(&ev.xunmap); break; case UnmapNotify: unmapnotify(&ev.xunmap); break;
} }
/* Check Xrandr event */
if(ev.type == xrandr_event)
xrandrnotify(&ev);
wait(&st); wait(&st);
return; return;

View File

@ -60,11 +60,14 @@ void
init_font(void) init_font(void)
{ {
font = XftFontOpenName(dpy, SCREEN, conf.font); font = XftFontOpenName(dpy, SCREEN, conf.font);
if(!font) if(!font)
{ {
fprintf(stderr, "WMFS Error: Cannot initialize font\n"); fprintf(stderr, "WMFS Error: Cannot initialize font\n");
font = XftFontOpenName(dpy, SCREEN, "sans-10"); font = XftFontOpenName(dpy, SCREEN, "sans-10");
} }
return;
} }
/** Init the graphic context /** Init the graphic context
@ -99,11 +102,11 @@ init_gc(void)
void void
init_cursor(void) init_cursor(void)
{ {
cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr); cursor[CurNormal] = XCreateFontCursor(dpy, XC_left_ptr);
cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing); cursor[CurResize] = XCreateFontCursor(dpy, XC_sizing);
cursor[CurRightResize] = XCreateFontCursor(dpy, XC_lr_angle); cursor[CurRightResize] = XCreateFontCursor(dpy, XC_lr_angle);
cursor[CurLeftResize] = XCreateFontCursor(dpy, XC_ll_angle); cursor[CurLeftResize] = XCreateFontCursor(dpy, XC_ll_angle);
cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur); cursor[CurMove] = XCreateFontCursor(dpy, XC_fleur);
return; return;
} }
@ -159,6 +162,7 @@ init_layout(void)
const func_name_list_t layout_list_tmp[] = const func_name_list_t layout_list_tmp[] =
{ {
{"tile", tile },
{"tile_right", tile }, {"tile_right", tile },
{"tile_left", tile_left }, {"tile_left", tile_left },
{"tile_top", tile_top }, {"tile_top", tile_top },

View File

@ -63,7 +63,6 @@ screen_get_geo(int s)
int barpos = tags[selscreen][seltag[selscreen]].barpos; int barpos = tags[selscreen][seltag[selscreen]].barpos;
XRectangle geo; XRectangle geo;
if(XineramaIsActive(dpy)) if(XineramaIsActive(dpy))
{ {
XineramaScreenInfo *xsi; XineramaScreenInfo *xsi;
@ -159,7 +158,7 @@ screen_get_sel(void)
void void
screen_init_geo(void) screen_init_geo(void)
{ {
int i, n; int i, n, randr_e, d;
XineramaScreenInfo *xsi; XineramaScreenInfo *xsi;
sgeo = emalloc(screen_count(), sizeof(XRectangle)); sgeo = emalloc(screen_count(), sizeof(XRectangle));
@ -188,6 +187,12 @@ screen_init_geo(void)
spgeo[0].height = MAXH; spgeo[0].height = MAXH;
} }
/* Init Xrandr stuff for event */
if(XRRQueryExtension(dpy, &randr_e, &d))
xrandr_event = randr_e + RRScreenChangeNotify;
else
xrandr_event = -1;
ewmh_set_desktop_geometry(); ewmh_set_desktop_geometry();
ewmh_set_workarea(); ewmh_set_workarea();

View File

@ -51,6 +51,7 @@
#include <X11/cursorfont.h> #include <X11/cursorfont.h>
#include <X11/Xft/Xft.h> #include <X11/Xft/Xft.h>
#include <X11/extensions/Xinerama.h> #include <X11/extensions/Xinerama.h>
#include <X11/extensions/Xrandr.h>
/* Local headers */ /* Local headers */
#include "config.h" #include "config.h"
@ -201,6 +202,8 @@ void keypress(XKeyPressedEvent *ev);
void mappingnotify(XMappingEvent *ev); void mappingnotify(XMappingEvent *ev);
void maprequest(XMapRequestEvent *ev); void maprequest(XMapRequestEvent *ev);
void propertynotify(XPropertyEvent *ev); void propertynotify(XPropertyEvent *ev);
void unmapnotify(XUnmapEvent *ev);
void xrandrnotify(XEvent *ev);
void send_client_event(long data[5], char *atom_name); void send_client_event(long data[5], char *atom_name);
void getevent(XEvent ev); void getevent(XEvent ev);
@ -334,12 +337,15 @@ XRectangle *sgeo;
XRectangle *spgeo; XRectangle *spgeo;
Cursor cursor[CurLast]; Cursor cursor[CurLast];
char *argv_global; char *argv_global;
int xrandr_event;
/* Fonts */ /* Fonts */
XftFont *font; XftFont *font;
/* Atoms list */
Atom net_atom[net_last]; Atom net_atom[net_last];
/* InfoBar */ /* InfoBar/Tags */
InfoBar *infobar; InfoBar *infobar;
Tag **tags; Tag **tags;
int *seltag; int *seltag;