X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=64366e9834eb2b2701ea123a6fa501ea070f7425;hb=3356f1ccd4f323baa9accda99795d5377f9a24ba;hp=da457258877fc1abf38bfaa3f7da3f8cac75b1ef;hpb=762accdc0274dbd63c05d1163b5856b2d7226654;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index da45725..64366e9 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -50,7 +50,7 @@ static const char *cvstag = "$scrotwm$"; -#define SWM_VERSION "0.9" +#define SWM_VERSION "0.9.1" #include #include @@ -173,13 +173,14 @@ int bar_extra = 1; int bar_extra_running = 0; int bar_verbose = 1; int bar_height = 0; +int clock_enabled = 1; pid_t bar_pid; GC bar_gc; XGCValues bar_gcv; int bar_fidx = 0; XFontStruct *bar_fs; char *bar_fonts[] = { - "-*-terminus-*-*-*-*-*-*-*-*-*-*-*-*", + "-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*", "-*-times-medium-r-*-*-*-*-*-*-*-*-*-*", NULL }; @@ -250,6 +251,7 @@ void max_stack(struct workspace *, struct swm_geometry *); void grabbuttons(struct ws_win *, int); void new_region(struct swm_screen *, int, int, int, int); +void update_modkey(unsigned int); struct layout { void (*l_stack)(struct workspace *, struct swm_geometry *); @@ -354,6 +356,7 @@ struct quirk { { "OpenOffice.org 2.4", "VCLSalFrame", SWM_Q_FLOAT }, { "OpenOffice.org 3.0", "VCLSalFrame", SWM_Q_FLOAT }, { "Firefox-bin", "firefox-bin", SWM_Q_TRANSSZ }, + { "Firefox", "Dialog", SWM_Q_FLOAT }, { "Gimp", "gimp", SWM_Q_FLOAT | SWM_Q_ANYWHERE }, { "XTerm", "xterm", SWM_Q_XTERM_FONTADJ }, { "xine", "Xine Window", SWM_Q_FLOAT | SWM_Q_ANYWHERE }, @@ -501,6 +504,7 @@ conf_load(char *filename) char *line, *cp, *var, *val; size_t len, lineno = 0; int i, sc; + unsigned int modkey; DNPRINTF(SWM_D_MISC, "conf_load: filename %s\n", filename); @@ -549,7 +553,9 @@ conf_load(char *filename) break; case 'c': - if (!varmatch(var, "color_focus", &i)) + if (!strncmp(var, "clock_enabled", strlen("clock_enabled"))) + clock_enabled = atoi(val); + else if (!varmatch(var, "color_focus", &i)) setscreencolor(val, i, SWM_S_COLOR_FOCUS); else if (!varmatch(var, "color_unfocus", &i)) setscreencolor(val, i, SWM_S_COLOR_UNFOCUS); @@ -571,6 +577,22 @@ conf_load(char *filename) goto bad; break; + case 'm': + if (!strncmp(var, "modkey", strlen("modkey"))) { + modkey = MODKEY; + if (!strncmp(val, "Mod2", strlen("Mod2"))) + modkey = Mod2Mask; + else if (!strncmp(val, "Mod3", strlen("Mod3"))) + modkey = Mod3Mask; + else if (!strncmp(val, "Mod4", strlen("Mod4"))) + modkey = Mod4Mask; + else + modkey = Mod1Mask; + update_modkey(modkey); + } else + goto bad; + break; + case 'r': if (!strncmp(var, "region", strlen("region"))) custom_region(val); @@ -676,14 +698,18 @@ bar_update(void) } else strlcpy(bar_ext, "", sizeof bar_ext); - time(&tmt); - localtime_r(&tmt, &tm); - strftime(s, sizeof s, "%a %b %d %R %Z %Y", &tm); + if (clock_enabled == 0) + strlcpy(s, "", sizeof s); + else { + time(&tmt); + localtime_r(&tmt, &tm); + strftime(s, sizeof s, "%a %b %d %R %Z %Y ", &tm); + } for (i = 0; i < ScreenCount(display); i++) { x = 1; TAILQ_FOREACH(r, &screens[i].rl, entry) { - snprintf(loc, sizeof loc, "%s %d:%d %s %s", - s, x++, r->ws->idx + 1, bar_ext, bar_vertext); + snprintf(loc, sizeof loc, "%d:%d %s%s %s", + x++, r->ws->idx + 1, s, bar_ext, bar_vertext); bar_print(r, loc); } } @@ -1288,6 +1314,10 @@ focus(struct swm_region *r, union arg *args) case SWM_ARG_ID_FOCUSMAIN: winfocus = TAILQ_FIRST(wl); + if (winfocus == cur_focus) + winfocus = cur_focus->ws->focus_prev; + if (winfocus == NULL) + return; break; default: @@ -2075,6 +2105,24 @@ struct button { }; void +update_modkey(unsigned int mod) +{ + int i; + + for (i = 0; i < LENGTH(keys); i++) + if (keys[i].mod & ShiftMask) + keys[i].mod = mod | ShiftMask; + else + keys[i].mod = mod; + + for (i = 0; i < LENGTH(buttons); i++) + if (buttons[i].mask & ShiftMask) + buttons[i].mask = mod | ShiftMask; + else + buttons[i].mask = mod; +} + +void updatenumlockmask(void) { unsigned int i, j; @@ -2445,13 +2493,15 @@ configurenotify(XEvent *e) DNPRINTF(SWM_D_EVENT, "configurenotify: window: %lu\n", e->xconfigure.window); + XMapWindow(display, e->xconfigure.window); win = find_window(e->xconfigure.window); - XMapWindow(display, win->id); - XGetWMNormalHints(display, win->id, &win->sh, &mask); - adjust_font(win); - XMapWindow(display, win->id); - if (font_adjusted) - stack(); + if (win) { + XGetWMNormalHints(display, win->id, &win->sh, &mask); + adjust_font(win); + XMapWindow(display, win->id); + if (font_adjusted) + stack(); + } } void @@ -2893,6 +2943,26 @@ setup_screens(void) } } +void +workaround(void) +{ + int i; + Atom netwmcheck, netwmname, utf8_string; + Window root; + + /* work around sun jdk bugs, code from wmname */ + netwmcheck = XInternAtom(display, "_NET_SUPPORTING_WM_CHECK", False); + netwmname = XInternAtom(display, "_NET_WM_NAME", False); + utf8_string = XInternAtom(display, "UTF8_STRING", False); + for (i = 0; i < ScreenCount(display); i++) { + root = screens[i].root; + XChangeProperty(display, root, netwmcheck, XA_WINDOW, 32, + PropModeReplace, (unsigned char *)&root, 1); + XChangeProperty(display, root, netwmname, utf8_string, 8, + PropModeReplace, "LG3D", strlen("LG3D")); + } +} + int main(int argc, char *argv[]) { @@ -2946,7 +3016,8 @@ main(int argc, char *argv[]) TAILQ_FOREACH(r, &screens[i].rl, entry) bar_setup(r); - /* ws[0].focus = TAILQ_FIRST(&ws[0].winlist); */ + /* set some values to work around bad programs */ + workaround(); grabkeys(); stack();