X-Git-Url: https://git.brokenzipper.com/gitweb?a=blobdiff_plain;f=src%2Fserver.c;h=1c7b4cda18e821d3ad9c4657d539567ffb10b253;hb=bdf5fa4daad88f6a65b6f4be3acae7b663906e86;hp=65d1099e3640a3d2e6e9223ce6565a0f13bee6bb;hpb=0357305cec0f78ba4d4717467025ead6be25ce0c;p=chaz%2Ftint2 diff --git a/src/server.c b/src/server.c index 65d1099..1c7b4cd 100644 --- a/src/server.c +++ b/src/server.c @@ -28,6 +28,8 @@ void server_catch_error (Display *d, XErrorEvent *ev){} +static char *name_trayer = 0; + void server_init_atoms () { @@ -41,6 +43,7 @@ void server_init_atoms () server.atom._NET_WM_STATE_SKIP_PAGER = XInternAtom (server.dsp, "_NET_WM_STATE_SKIP_PAGER", False); server.atom._NET_WM_STATE_SKIP_TASKBAR = XInternAtom (server.dsp, "_NET_WM_STATE_SKIP_TASKBAR", False); server.atom._NET_WM_STATE_STICKY = XInternAtom (server.dsp, "_NET_WM_STATE_STICKY", False); + server.atom._NET_WM_STATE_DEMANDS_ATTENTION = XInternAtom (server.dsp, "_NET_WM_STATE_DEMANDS_ATTENTION", False); server.atom._NET_WM_WINDOW_TYPE_DOCK = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_DOCK", False); server.atom._NET_WM_WINDOW_TYPE_DESKTOP = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_DESKTOP", False); server.atom._NET_WM_WINDOW_TYPE_TOOLBAR = XInternAtom (server.dsp, "_NET_WM_WINDOW_TYPE_TOOLBAR", False); @@ -51,6 +54,8 @@ void server_init_atoms () server.atom._NET_WM_DESKTOP = XInternAtom (server.dsp, "_NET_WM_DESKTOP", False); server.atom.WM_STATE = XInternAtom (server.dsp, "WM_STATE", False); server.atom._NET_WM_STATE = XInternAtom (server.dsp, "_NET_WM_STATE", False); + server.atom._NET_WM_STATE_MAXIMIZED_VERT = XInternAtom (server.dsp, "_NET_WM_STATE_MAXIMIZED_VERT", False); + server.atom._NET_WM_STATE_MAXIMIZED_HORZ = XInternAtom (server.dsp, "_NET_WM_STATE_MAXIMIZED_HORZ", False); server.atom._NET_WM_STATE_SHADED = XInternAtom (server.dsp, "_NET_WM_STATE_SHADED", False); server.atom._NET_WM_STATE_BELOW = XInternAtom (server.dsp, "_NET_WM_STATE_BELOW", False); server.atom._NET_WM_STATE_MODAL = XInternAtom (server.dsp, "_NET_WM_STATE_MODAL", False); @@ -68,10 +73,26 @@ void server_init_atoms () server.atom.WM_NAME = XInternAtom(server.dsp, "WM_NAME", False); server.atom.__SWM_VROOT = XInternAtom(server.dsp, "__SWM_VROOT", False); server.atom._MOTIF_WM_HINTS = XInternAtom(server.dsp, "_MOTIF_WM_HINTS", False); + + // systray protocol + name_trayer = g_strdup_printf("_NET_SYSTEM_TRAY_S%d", DefaultScreen(server.dsp)); + server.atom._NET_SYSTEM_TRAY_SCREEN = XInternAtom(server.dsp, name_trayer, False); + server.atom._NET_SYSTEM_TRAY_OPCODE = XInternAtom(server.dsp, "_NET_SYSTEM_TRAY_OPCODE", False); + server.atom.MANAGER = XInternAtom(server.dsp, "MANAGER", False); + server.atom._NET_SYSTEM_TRAY_MESSAGE_DATA = XInternAtom(server.dsp, "_NET_SYSTEM_TRAY_MESSAGE_DATA", False); + server.atom._NET_SYSTEM_TRAY_ORIENTATION = XInternAtom(server.dsp, "_NET_SYSTEM_TRAY_ORIENTATION", False); + server.atom._XEMBED = XInternAtom(server.dsp, "_XEMBED", False); + server.atom._XEMBED_INFO = XInternAtom(server.dsp, "_XEMBED_INFO", False); +} + + +void cleanup_server() +{ + if (name_trayer) free(name_trayer); } -void send_event32 (Window win, Atom at, long data1, long data2) +void send_event32 (Window win, Atom at, long data1, long data2, long data3) { XEvent event; @@ -85,7 +106,7 @@ void send_event32 (Window win, Atom at, long data1, long data2) event.xclient.format = 32; event.xclient.data.l[0] = data1; event.xclient.data.l[1] = data2; - event.xclient.data.l[2] = 0; + event.xclient.data.l[2] = data3; event.xclient.data.l[3] = 0; event.xclient.data.l[4] = 0; @@ -153,7 +174,7 @@ void get_root_pixmap() server.root_pmap = ret; if (server.root_pmap == None) - fprintf(stderr, "pixmap background detection failed\n"); + fprintf(stderr, "tint2 : pixmap background detection failed\n"); else { XGCValues gcv; gcv.ts_x_origin = 0; @@ -250,6 +271,7 @@ next: } // detect number of desktops + // wait 15s to leave some time for window manager startup for (i=0 ; i < 15 ; i++) { server.nb_desktop = server_get_number_of_desktop (); if (server.nb_desktop > 0) break; @@ -257,9 +279,9 @@ next: } if (server.nb_desktop == 0) { server.nb_desktop = 1; - fprintf(stderr, "tint2 warning : cannot found number of desktop.\n"); + fprintf(stderr, "warning : WM doesn't respect NETWM specs. tint2 default to 1 desktop.\n"); } - fprintf(stderr, "nb monitor %d, nb desktop %d\n", server.nb_monitor, server.nb_desktop); + fprintf(stderr, "tint2 : nb monitor %d, nb desktop %d\n", server.nb_monitor, server.nb_desktop); }