X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=spectrwm.c;h=07c3d74057413ea64ffffded0df6d4661fa1054f;hb=cee196007501b8ef81b6713d284eef09fa929b6e;hp=4b98919424e118da93b5adec6c7b796dc67ada67;hpb=be6a1f8c47af33838987806e11c364f9bee70d94;p=spectrwm.git diff --git a/spectrwm.c b/spectrwm.c index 4b98919..07c3d74 100644 --- a/spectrwm.c +++ b/spectrwm.c @@ -89,20 +89,17 @@ #include #include #include -#include -#include -#include -#include -#include +#include #include #include -#include +#include #include #include #include #include #include #include +#include /* local includes */ #include "version.h" @@ -259,13 +256,11 @@ volatile sig_atomic_t running = 1; volatile sig_atomic_t restart_wm = 0; int outputs = 0; /*int last_focus_event = FocusOut;*/ -int (*xerrorxlib)(Display *, XErrorEvent *); int other_wm; int ss_enabled = 0; int xrandr_support; int xrandr_eventbase; unsigned int numlockmask = 0; -Display *display; xcb_connection_t *conn; xcb_key_symbols_t *syms; @@ -354,8 +349,10 @@ int border_width = 1; int verbose_layout = 0; time_t time_started; pid_t bar_pid; +#if 0 XFontSet bar_fs; XFontSetExtents *bar_fs_extents; +#endif char *bar_fonts; struct passwd *pwd; @@ -1333,6 +1330,8 @@ bar_print(struct swm_region *r, const char *s) XRectangle ibox, lbox; len = strlen(s); + /* FIXME fix bar font position calculations */ +#if 0 XmbTextExtents(bar_fs, s, len, &ibox, &lbox); switch (bar_justify) { @@ -1349,6 +1348,7 @@ bar_print(struct swm_region *r, const char *s) if (x < SWM_BAR_OFFSET) x = SWM_BAR_OFFSET; +#endif rect.x = 0; rect.y = 0; @@ -1366,9 +1366,14 @@ bar_print(struct swm_region *r, const char *s) xcb_change_gc(conn, r->s->bar_gc, XCB_GC_BACKGROUND, gcv); gcv[0] = r->s->c[SWM_S_COLOR_BAR_FONT].color; xcb_change_gc(conn, r->s->bar_gc, XCB_GC_FOREGROUND, gcv); +#if 0 xcb_image_text_8(conn, len, r->bar->buffer, r->s->bar_gc, x, (bar_fs_extents->max_logical_extent.height - lbox.height) / 2 - lbox.y, s); +#else + /* workaround */ + xcb_image_text_8(conn, len, r->bar->buffer, r->s->bar_gc, 4, 14, s); +#endif /* blt */ xcb_copy_area(conn, r->bar->buffer, r->bar->id, r->s->bar_gc, 0, 0, @@ -1837,18 +1842,20 @@ bar_setup(struct swm_region *r) xcb_screen_t *screen = get_screen(r->s->idx); uint32_t wa[3]; +#if 0 if (bar_fs) { XFreeFontSet(display, bar_fs); bar_fs = NULL; } +#endif if ((r->bar = calloc(1, sizeof(struct swm_bar))) == NULL) err(1, "bar_setup: calloc: failed to allocate memory."); - +#if 0 DNPRINTF(SWM_D_BAR, "bar_setup: loading bar_fonts: %s\n", bar_fonts); bar_fs = XCreateFontSet(display, bar_fonts, &missing_charsets, - &num_missing_charsets, &default_string); + &num_missing_charsets, &default_string);*/ if (num_missing_charsets > 0) { warnx("Unable to load charset(s):"); @@ -1875,7 +1882,10 @@ bar_setup(struct swm_region *r) if (bar_height < 1) bar_height = 1; - +#else + /* workaround */ + bar_height = 24; +#endif X(r->bar) = X(r); Y(r->bar) = bar_at_bottom ? (Y(r) + HEIGHT(r) - bar_height) : Y(r); WIDTH(r->bar) = WIDTH(r) - 2 * bar_border_width; @@ -1885,6 +1895,8 @@ bar_setup(struct swm_region *r) wa[0] = r->s->c[SWM_S_COLOR_BAR].color; wa[1] = r->s->c[SWM_S_COLOR_BAR_BORDER].color; wa[2] = XCB_EVENT_MASK_EXPOSURE; + DNPRINTF(SWM_D_BAR, "bar_setup: create_window: (x,y) w x h: (%d,%d) " + "%d x %d\n", X(r->bar), Y(r->bar), WIDTH(r->bar), HEIGHT(r->bar)); xcb_create_window(conn, XCB_COPY_FROM_PARENT, r->bar->id, r->s->root, X(r->bar), Y(r->bar), WIDTH(r->bar), HEIGHT(r->bar), bar_border_width, XCB_WINDOW_CLASS_INPUT_OUTPUT, @@ -2278,8 +2290,7 @@ spawn(int ws_idx, union arg *args, int close_fd) DNPRINTF(SWM_D_MISC, "spawn: %s\n", args->argv[0]); - if (display) - close(xcb_get_file_descriptor(conn)); + close(xcb_get_file_descriptor(conn)); setenv("LD_PRELOAD", SWM_LIB, 1); @@ -3815,6 +3826,7 @@ search_win(struct swm_region *r, union arg *args) FILE *lfile; size_t len; XRectangle ibox, lbox; + DNPRINTF(SWM_D_MISC, "search_win\n"); search_r = r; @@ -3845,15 +3857,26 @@ search_win(struct swm_region *r, union arg *args) snprintf(s, sizeof s, "%d", i); len = strlen(s); + /* FIXME fix calculations */ +#if 0 XmbTextExtents(bar_fs, s, len, &ibox, &lbox); +#endif w = xcb_generate_id(conn); wa[0] = r->s->c[SWM_S_COLOR_FOCUS].color; wa[1] = r->s->c[SWM_S_COLOR_UNFOCUS].color; +#if 0 xcb_create_window(conn, XCB_COPY_FROM_PARENT, w, win->id, 0, 0, lbox.width + 4, bar_fs_extents->max_logical_extent.height, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | XCB_CW_BORDER_PIXEL, wa); +#else + /* workaround */ + xcb_create_window(conn, XCB_COPY_FROM_PARENT, w, win->id, 0, 0, + 22, 20, 1, XCB_WINDOW_CLASS_INPUT_OUTPUT, + XCB_COPY_FROM_PARENT, XCB_CW_BACK_PIXEL | + XCB_CW_BORDER_PIXEL, wa); +#endif sw->indicator = w; TAILQ_INSERT_TAIL(&search_wl, sw, entry); @@ -3866,9 +3889,14 @@ search_win(struct swm_region *r, union arg *args) XCB_GC_BACKGROUND | XCB_GC_GRAPHICS_EXPOSURES, gcv); map_window_raised(w); +#if 0 xcb_image_text_8(conn, len, w, sw->gc, 2, (bar_fs_extents->max_logical_extent.height - lbox.height) / 2 - lbox.y, s); +#else + /* workaround */ + xcb_image_text_8(conn, len, w, sw->gc, 6, 14, s); +#endif DNPRINTF(SWM_D_MISC, "search_win: mapped window: 0x%x\n", w); @@ -7084,20 +7112,6 @@ clientmessage(xcb_client_message_event_t *e) xcb_flush(conn); } -int -xerror_start(Display *d, XErrorEvent *ee) -{ - other_wm = 1; - return (-1); -} - -int -xerror(Display *d, XErrorEvent *ee) -{ - /* warnx("error: %p %p", display, ee); */ - return (-1); -} - void active_wm(void) { @@ -7594,16 +7608,9 @@ main(int argc, char *argv[]) start_argv = argv; warnx("Welcome to spectrwm V%s Build: %s", SPECTRWM_VERSION, buildstr); - if (!setlocale(LC_CTYPE, "") || !setlocale(LC_TIME, "") || - !XSupportsLocale()) + if (!setlocale(LC_CTYPE, "") || !setlocale(LC_TIME, "")) warnx("no locale support"); - if (!X_HAVE_UTF8_STRING) - warnx("no UTF-8 support"); - - if (!(display = XOpenDisplay(0))) - errx(1, "can not open display"); - /* handle some signals */ bzero(&sact, sizeof(sact)); sigemptyset(&sact.sa_mask); @@ -7618,10 +7625,11 @@ main(int argc, char *argv[]) sact.sa_flags = SA_NOCLDSTOP; sigaction(SIGCHLD, &sact, NULL); - conn = XGetXCBConnection(display); + conn = xcb_connect(NULL, NULL); if (xcb_connection_has_error(conn)) errx(1, "can not get XCB connection"); + xcb_prefetch_extension_data(conn, &xcb_randr_id); xfd = xcb_get_file_descriptor(conn); /* look for local and global conf file */ @@ -7770,8 +7778,9 @@ done: for (i = 0; i < num_screens; ++i) if (screens[i].bar_gc != 0) xcb_free_gc(conn, screens[i].bar_gc); +#if 0 XFreeFontSet(display, bar_fs); - +#endif xcb_key_symbols_free(syms); xcb_disconnect(conn);