]> git.sur5r.net Git - i3/i3/commitdiff
Port sighandler to tree-branch
authorAxel Wagner <mail@merovius.de>
Thu, 30 Dec 2010 20:09:32 +0000 (21:09 +0100)
committerMichael Stapelberg <michael@stapelberg.de>
Fri, 31 Dec 2010 18:36:29 +0000 (19:36 +0100)
Makefile
include/all.h
src/main.c
src/sighandler.c

index 4f2ab77fc44b77b8e03407e971cc29b242f163d3..89647f6c3a8519a5b52f69d77abc9a82a40302c3 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,7 +4,7 @@ include $(TOPDIR)/common.mk
 
 # Depend on the object files of all source-files in src/*.c and on all header files
 AUTOGENERATED:=src/cfgparse.tab.c src/cfgparse.yy.c src/cmdparse.tab.c src/cmdparse.yy.c
-FILES:=src/ipc.c src/main.c src/log.c src/util.c src/tree.c src/xcb.c src/manage.c src/workspace.c src/x.c src/floating.c src/click.c src/config.c src/handlers.c src/randr.c src/xinerama.c src/con.c src/load_layout.c src/render.c src/window.c src/match.c src/xcursor.c src/resize.c
+FILES:=src/ipc.c src/main.c src/log.c src/util.c src/tree.c src/xcb.c src/manage.c src/workspace.c src/x.c src/floating.c src/click.c src/config.c src/handlers.c src/randr.c src/xinerama.c src/con.c src/load_layout.c src/render.c src/window.c src/match.c src/xcursor.c src/resize.c src/sighandler.c
 FILES:=$(FILES:.c=.o)
 HEADERS:=$(filter-out include/loglevels.h,$(wildcard include/*.h))
 
index 23943b29f854db86e8bea70924f726ecc58517fd..3cc28940393cd4cf7886313567b82f7e9b427b23 100644 (file)
@@ -53,5 +53,6 @@
 #include "cmdparse.h"
 #include "xcursor.h"
 #include "resize.h"
+#include "sighandler.h"
 
 #endif
index b6923d6a15581791189a62fe45614a2d76167188..e30887c9560f27b090e8b781fd4d81ca38d66ff3 100644 (file)
@@ -385,6 +385,12 @@ int main(int argc, char *argv[]) {
 
     manage_existing_windows(root);
 
+    setup_signal_handler();
+
+    /* Ignore SIGPIPE to survive errors when an IPC client disconnects
+     * while we are sending him a message */
+    signal(SIGPIPE, SIG_IGN);
+
     /* Autostarting exec-lines */
     if (autostart) {
         struct Autostart *exec;
index 92cbc5cb3abb7e7bfdc5abba914d83ccb4276cbb..26ed1a68d0081ae4008320b2eb41cee009904e1d 100644 (file)
@@ -50,17 +50,17 @@ static int crash_text_longest = 1;
  * Draw the window containing the info text
  *
  */
-static int sig_draw_window(xcb_connection_t *conn, xcb_window_t win, int width, int height, int font_height) {
+static int sig_draw_window(xcb_window_t win, int width, int height, int font_height) {
         /* re-draw the background */
         xcb_rectangle_t border = { 0, 0, width, height},
                         inner = { 2, 2, width - 4, height - 4};
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FF0000"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FF0000"));
         xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &border);
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#000000"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#000000"));
         xcb_poly_fill_rectangle(conn, pixmap, pixmap_gc, 1, &inner);
 
         /* restore font color */
-        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel(conn, "#FFFFFF"));
+        xcb_change_gc_single(conn, pixmap_gc, XCB_GC_FOREGROUND, get_colorpixel("#FFFFFF"));
 
         for (int i = 0; i < sizeof(crash_text) / sizeof(char*); i++) {
                 int text_len = strlen(crash_text[i]);
@@ -156,8 +156,6 @@ void handle_signal(int sig, siginfo_t *info, void *data) {
         sigaction(sig, &action, NULL);
         raised_signal = sig;
 
-        xcb_connection_t *conn = global_conn;
-
         /* setup event handler for key presses */
         xcb_event_handlers_t sig_evenths;
         memset(&sig_evenths, 0, sizeof(xcb_event_handlers_t));
@@ -200,7 +198,7 @@ void handle_signal(int sig, siginfo_t *info, void *data) {
                 xcb_grab_pointer(conn, false, win, XCB_NONE, XCB_GRAB_MODE_ASYNC,
                                  XCB_GRAB_MODE_ASYNC, win, XCB_NONE, XCB_CURRENT_TIME);
 
-                sig_draw_window(conn, win, width, height, font->height);
+                sig_draw_window(win, width, height, font->height);
                 xcb_flush(conn);
         }