X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=scrotwm.c;h=28f71b2c913f35a650c380b9fcc7703a0587445d;hb=4e54852f687637e770258759ac44dd611af1d1a1;hp=634e08b27d142c7589a71681197c5831cab6a4b2;hpb=0266c3c6c39b5f188424ee41d6df07a53b53a7da;p=spectrwm.git diff --git a/scrotwm.c b/scrotwm.c index 634e08b..28f71b2 100644 --- a/scrotwm.c +++ b/scrotwm.c @@ -179,7 +179,7 @@ XGCValues bar_gcv; int bar_fidx = 0; XFontStruct *bar_fs; char *bar_fonts[] = { - "-*-terminus-*-*-*-*-*-*-*-*-*-*-*-*", + "-*-terminus-medium-*-*-*-*-*-*-*-*-*-*-*", "-*-times-medium-r-*-*-*-*-*-*-*-*-*-*", NULL }; @@ -250,6 +250,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 +355,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 +503,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); @@ -571,6 +574,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); @@ -2079,6 +2098,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; @@ -2449,13 +2486,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 @@ -2897,6 +2936,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[]) { @@ -2950,7 +3009,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();