factorize quit/exec elements, and reparent systray
That fixes FS#296. Signed-off-by: Julien Danjou <julien@danjou.info>
This commit is contained in:
parent
8e4873b3aa
commit
11dfa832a8
48
awesome.c
48
awesome.c
|
@ -29,6 +29,7 @@
|
||||||
|
|
||||||
#include <ev.h>
|
#include <ev.h>
|
||||||
|
|
||||||
|
#include "awesome.h"
|
||||||
#include "client.h"
|
#include "client.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
@ -48,6 +49,33 @@ typedef struct
|
||||||
xcb_query_tree_cookie_t tree_cookie;
|
xcb_query_tree_cookie_t tree_cookie;
|
||||||
} root_win_t;
|
} root_win_t;
|
||||||
|
|
||||||
|
/** Call before exiting.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
awesome_atexit(void)
|
||||||
|
{
|
||||||
|
client_t *c;
|
||||||
|
xembed_window_t *em;
|
||||||
|
|
||||||
|
a_dbus_cleanup();
|
||||||
|
luaA_cs_cleanup();
|
||||||
|
|
||||||
|
/* reparent systray windows, otherwise they may die with their master */
|
||||||
|
for(em = globalconf.embedded; em; em = em->next)
|
||||||
|
{
|
||||||
|
xcb_screen_t *s = xutil_screen_get(globalconf.connection, em->phys_screen);
|
||||||
|
xcb_reparent_window(globalconf.connection, em->win, s->root, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* remap all clients since some WM won't handle them otherwise */
|
||||||
|
for(c = globalconf.clients; c; c = c->next)
|
||||||
|
client_unban(c);
|
||||||
|
|
||||||
|
xcb_flush(globalconf.connection);
|
||||||
|
|
||||||
|
xcb_disconnect(globalconf.connection);
|
||||||
|
}
|
||||||
|
|
||||||
/** Scan X to find windows to manage.
|
/** Scan X to find windows to manage.
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
|
@ -199,13 +227,20 @@ exit_on_signal(EV_P_ ev_signal *w, int revents)
|
||||||
ev_unloop(EV_A_ 1);
|
ev_unloop(EV_A_ 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
awesome_restart(void)
|
||||||
|
{
|
||||||
|
awesome_atexit();
|
||||||
|
a_exec(globalconf.argv);
|
||||||
|
}
|
||||||
|
|
||||||
/** Function to restart aweome on some signals.
|
/** Function to restart aweome on some signals.
|
||||||
* \param sig the signam received, unused
|
* \param sig the signam received, unused
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
restart_on_signal(EV_P_ ev_signal *w, int revents)
|
restart_on_signal(EV_P_ ev_signal *w, int revents)
|
||||||
{
|
{
|
||||||
ewmh_restart();
|
awesome_restart();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \brief awesome xerror function.
|
/** \brief awesome xerror function.
|
||||||
|
@ -280,7 +315,6 @@ main(int argc, char **argv)
|
||||||
xcolor_init_request_t colors_reqs[2];
|
xcolor_init_request_t colors_reqs[2];
|
||||||
xcb_get_modifier_mapping_cookie_t xmapping_cookie;
|
xcb_get_modifier_mapping_cookie_t xmapping_cookie;
|
||||||
ssize_t cmdlen = 1;
|
ssize_t cmdlen = 1;
|
||||||
client_t *c;
|
|
||||||
static struct option long_options[] =
|
static struct option long_options[] =
|
||||||
{
|
{
|
||||||
{"help", 0, NULL, 'h'},
|
{"help", 0, NULL, 'h'},
|
||||||
|
@ -486,16 +520,8 @@ main(int argc, char **argv)
|
||||||
ev_check_stop(globalconf.loop, &xcheck);
|
ev_check_stop(globalconf.loop, &xcheck);
|
||||||
ev_ref(globalconf.loop);
|
ev_ref(globalconf.loop);
|
||||||
ev_io_stop(globalconf.loop, &xio);
|
ev_io_stop(globalconf.loop, &xio);
|
||||||
a_dbus_cleanup();
|
|
||||||
luaA_cs_cleanup();
|
|
||||||
|
|
||||||
/* remap all clients since some WM won't handle them otherwise */
|
awesome_atexit();
|
||||||
for(c = globalconf.clients; c; c = c->next)
|
|
||||||
client_unban(c);
|
|
||||||
|
|
||||||
xcb_flush(globalconf.connection);
|
|
||||||
|
|
||||||
xcb_disconnect(globalconf.connection);
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
/*
|
||||||
|
* awesome.h - awesome main header
|
||||||
|
*
|
||||||
|
* Copyright © 2008 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_AWESOME_H
|
||||||
|
#define AWESOME_AWESOME_H
|
||||||
|
|
||||||
|
void awesome_restart(void);
|
||||||
|
void awesome_atexit(void);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
5
event.c
5
event.c
|
@ -24,6 +24,7 @@
|
||||||
#include <xcb/randr.h>
|
#include <xcb/randr.h>
|
||||||
#include <xcb/xcb_icccm.h>
|
#include <xcb/xcb_icccm.h>
|
||||||
|
|
||||||
|
#include "awesome.h"
|
||||||
#include "event.h"
|
#include "event.h"
|
||||||
#include "tag.h"
|
#include "tag.h"
|
||||||
#include "window.h"
|
#include "window.h"
|
||||||
|
@ -285,7 +286,7 @@ event_handle_configurenotify(void *data __attribute__ ((unused)),
|
||||||
&& (ev->width != screen->width_in_pixels
|
&& (ev->width != screen->width_in_pixels
|
||||||
|| ev->height != screen->height_in_pixels))
|
|| ev->height != screen->height_in_pixels))
|
||||||
/* it's not that we panic, but restart */
|
/* it's not that we panic, but restart */
|
||||||
ewmh_restart();
|
awesome_restart();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -615,7 +616,7 @@ event_handle_randr_screen_change_notify(void *data __attribute__ ((unused)),
|
||||||
* XRenderSetSubpixelOrder(dpy, snum, scevent->subpixel_order);
|
* XRenderSetSubpixelOrder(dpy, snum, scevent->subpixel_order);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ewmh_restart();
|
awesome_restart();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
17
ewmh.c
17
ewmh.c
|
@ -572,21 +572,4 @@ ewmh_window_icon_get_reply(xcb_get_property_cookie_t cookie)
|
||||||
return icon;
|
return icon;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Restart awesome.
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
ewmh_restart(void)
|
|
||||||
{
|
|
||||||
client_t *c;
|
|
||||||
|
|
||||||
for(c = globalconf.clients; c; c = c->next)
|
|
||||||
client_unban(c);
|
|
||||||
|
|
||||||
xcb_flush(globalconf.connection);
|
|
||||||
xcb_disconnect(globalconf.connection);
|
|
||||||
|
|
||||||
a_exec(globalconf.argv);
|
|
||||||
}
|
|
||||||
|
|
||||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
||||||
|
|
1
ewmh.h
1
ewmh.h
|
@ -46,7 +46,6 @@ void ewmh_check_client_hints(client_t *);
|
||||||
void ewmh_update_workarea(int);
|
void ewmh_update_workarea(int);
|
||||||
xcb_get_property_cookie_t ewmh_window_icon_get_unchecked(xcb_window_t);
|
xcb_get_property_cookie_t ewmh_window_icon_get_unchecked(xcb_window_t);
|
||||||
netwm_icon_t *ewmh_window_icon_get_reply(xcb_get_property_cookie_t);
|
netwm_icon_t *ewmh_window_icon_get_reply(xcb_get_property_cookie_t);
|
||||||
void ewmh_restart(void);
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
// vim: filetype=c:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:encoding=utf-8:textwidth=80
|
||||||
|
|
10
lua.c
10
lua.c
|
@ -37,6 +37,7 @@
|
||||||
|
|
||||||
#include <xcb/xcb.h>
|
#include <xcb/xcb.h>
|
||||||
|
|
||||||
|
#include "awesome.h"
|
||||||
#include "awesome-version-internal.h"
|
#include "awesome-version-internal.h"
|
||||||
#include "ewmh.h"
|
#include "ewmh.h"
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
@ -108,14 +109,9 @@ luaA_quit(lua_State *L __attribute__ ((unused)))
|
||||||
static int
|
static int
|
||||||
luaA_exec(lua_State *L)
|
luaA_exec(lua_State *L)
|
||||||
{
|
{
|
||||||
client_t *c;
|
|
||||||
const char *cmd = luaL_checkstring(L, 1);
|
const char *cmd = luaL_checkstring(L, 1);
|
||||||
|
|
||||||
for(c = globalconf.clients; c; c = c->next)
|
awesome_atexit();
|
||||||
client_unban(c);
|
|
||||||
|
|
||||||
xcb_flush(globalconf.connection);
|
|
||||||
xcb_disconnect(globalconf.connection);
|
|
||||||
|
|
||||||
a_exec(cmd);
|
a_exec(cmd);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -126,7 +122,7 @@ luaA_exec(lua_State *L)
|
||||||
static int
|
static int
|
||||||
luaA_restart(lua_State *L __attribute__ ((unused)))
|
luaA_restart(lua_State *L __attribute__ ((unused)))
|
||||||
{
|
{
|
||||||
ewmh_restart();
|
awesome_restart();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue