grab some window function from client.c and move them in window.c

This commit is contained in:
Julien Danjou 2007-10-26 18:23:15 +02:00
parent 40e7654925
commit ddf64e9db2
7 changed files with 138 additions and 86 deletions

View File

@ -3,7 +3,7 @@
include config.mk include config.mk
SRC = client.c draw.c event.c layout.c awesome.c tag.c util.c config.c screen.c statusbar.c uicb.c tab.c SRC = client.c draw.c event.c layout.c awesome.c tag.c util.c config.c screen.c statusbar.c uicb.c tab.c window.c
OBJ = ${SRC:.c=.o} ${LAYOUTS:.c=.o} OBJ = ${SRC:.c=.o} ${LAYOUTS:.c=.o}
all: options awesome all: options awesome

View File

@ -45,6 +45,7 @@
#include "util.h" #include "util.h"
#include "statusbar.h" #include "statusbar.h"
#include "uicb.h" #include "uicb.h"
#include "window.h"
#define CONTROL_FIFO_PATH ".awesome_ctl" #define CONTROL_FIFO_PATH ".awesome_ctl"
#define CONTROL_UNIX_SOCKET_PATH ".awesome_so_ctl" #define CONTROL_UNIX_SOCKET_PATH ".awesome_so_ctl"

View File

@ -21,7 +21,6 @@
#include <stdio.h> #include <stdio.h>
#include <X11/Xatom.h> #include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/extensions/shape.h> #include <X11/extensions/shape.h>
#include "screen.h" #include "screen.h"
@ -31,6 +30,7 @@
#include "tag.h" #include "tag.h"
#include "util.h" #include "util.h"
#include "statusbar.h" #include "statusbar.h"
#include "window.h"
#include "layouts/floating.h" #include "layouts/floating.h"
/** Get a Client by its window /** Get a Client by its window
@ -159,42 +159,6 @@ isprotodel(Display *disp, Window win)
return ret; return ret;
} }
/** Set client WM_STATE property
* \param c the client
* \param state no idea
*/
static void
window_setstate(Display *disp, Window win, long state)
{
long data[] = { state, None };
XChangeProperty(disp, win, XInternAtom(disp, "WM_STATE", False),
XInternAtom(disp, "WM_STATE", False), 32,
PropModeReplace, (unsigned char *) data, 2);
}
/** Set client transparency using composite
* \param c client
* \param opacity opacity percentage
*/
static void
window_settrans(Display *disp, Window win, double opacity)
{
unsigned int real_opacity = 0xffffffff;
if(opacity >= 0 && opacity <= 100)
{
real_opacity = ((opacity / 100.0) * 0xffffffff);
XChangeProperty(disp, win,
XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &real_opacity, 1L);
}
else
XDeleteProperty(disp, win, XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False));
XSync(disp, False);
}
/** Swap two client in the linked list clients /** Swap two client in the linked list clients
* \param c1 first client * \param c1 first client
* \param c2 second client * \param c2 second client
@ -245,52 +209,6 @@ ban(Client * c)
window_setstate(c->display, c->win, IconicState); window_setstate(c->display, c->win, IconicState);
} }
/** Configure client
* \param c the client
*/
void
window_configure(Display *disp, Window win, int x, int y, int w, int h, int border)
{
XConfigureEvent ce;
ce.type = ConfigureNotify;
ce.display = disp;
ce.event = win;
ce.window = win;
ce.x = x;
ce.y = y;
ce.width = w;
ce.height = h;
ce.border_width = border;
ce.above = None;
ce.override_redirect = False;
XSendEvent(disp, win, False, StructureNotifyMask, (XEvent *) & ce);
}
/** Get a window state (WM_STATE)
* \param disp Display ref
* \param w Client window
* \return state
*/
long
window_getstate(Display *disp, Window w)
{
int format, status;
long result = -1;
unsigned char *p = NULL;
unsigned long n, extra;
Atom real;
status = XGetWindowProperty(disp, w, XInternAtom(disp, "WM_STATE", False),
0L, 2L, False, XInternAtom(disp, "WM_STATE", False),
&real, &format, &n, &extra, (unsigned char **) &p);
if(status != Success)
return -1;
if(n != 0)
result = *p;
p_delete(&p);
return result;
}
/** Attach client after another one /** Attach client after another one
* \param client to attach to * \param client to attach to
* \param c the client * \param c the client

View File

@ -33,8 +33,6 @@ inline void client_attach(Client **, Client *);
inline void client_detach(Client **, Client *); inline void client_detach(Client **, Client *);
void client_reattach_after(Client *, Client *); void client_reattach_after(Client *, Client *);
void ban(Client *); void ban(Client *);
void window_configure(Display *, Window, int, int, int, int, int);
long window_getstate(Display *, Window);
void focus(Client *, Bool, awesome_config *); void focus(Client *, Bool, awesome_config *);
void manage(Window, XWindowAttributes *, awesome_config *); void manage(Window, XWindowAttributes *, awesome_config *);
void resize(Client *, int, int, int, int, awesome_config *, Bool); void resize(Client *, int, int, int, int, awesome_config *, Bool);

View File

@ -32,6 +32,7 @@
#include "draw.h" #include "draw.h"
#include "statusbar.h" #include "statusbar.h"
#include "util.h" #include "util.h"
#include "window.h"
#include "layouts/tile.h" #include "layouts/tile.h"
#include "layouts/floating.h" #include "layouts/floating.h"

101
window.c Normal file
View File

@ -0,0 +1,101 @@
/*
* window.c - window handling 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 "window.h"
#include "util.h"
/** Set client WM_STATE property
* \param disp Display ref
* \param win Window
* \param state state
*/
int
window_setstate(Display *disp, Window win, long state)
{
long data[] = { state, None };
return XChangeProperty(disp, win, XInternAtom(disp, "WM_STATE", False),
XInternAtom(disp, "WM_STATE", False), 32,
PropModeReplace, (unsigned char *) data, 2);
}
/** Get a window state (WM_STATE)
* \param disp Display ref
* \param w Client window
* \return state
*/
long
window_getstate(Display *disp, Window w)
{
int format;
long result = -1;
unsigned char *p = NULL;
unsigned long n, extra;
Atom real;
if(XGetWindowProperty(disp, w, XInternAtom(disp, "WM_STATE", False),
0L, 2L, False, XInternAtom(disp, "WM_STATE", False),
&real, &format, &n, &extra, (unsigned char **) &p) != Success)
return -1;
if(n != 0)
result = *p;
p_delete(&p);
return result;
}
Status
window_configure(Display *disp, Window win, int x, int y, int w, int h, int border)
{
XConfigureEvent ce;
ce.type = ConfigureNotify;
ce.display = disp;
ce.event = win;
ce.window = win;
ce.x = x;
ce.y = y;
ce.width = w;
ce.height = h;
ce.border_width = border;
ce.above = None;
ce.override_redirect = False;
return XSendEvent(disp, win, False, StructureNotifyMask, (XEvent *) & ce);
}
void
window_settrans(Display *disp, Window win, double opacity)
{
unsigned int real_opacity = 0xffffffff;
if(opacity >= 0 && opacity <= 100)
{
real_opacity = ((opacity / 100.0) * 0xffffffff);
XChangeProperty(disp, win, XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False),
XA_CARDINAL, 32, PropModeReplace, (unsigned char *) &real_opacity, 1L);
}
else
XDeleteProperty(disp, win, XInternAtom(disp, "_NET_WM_WINDOW_OPACITY", False));
XSync(disp, False);
}
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99

33
window.h Normal file
View File

@ -0,0 +1,33 @@
/*
* window.h - window handling functions 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_WINDOW_H
#define AWESOME_WINDOW_H
#include <X11/Xlib.h>
int window_setstate(Display *, Window, long);
long window_getstate(Display *, Window);
Status window_configure(Display *, Window, int, int, int, int, int);
void window_settrans(Display *, Window, double);
#endif
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=99