summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
97f28c4)
Do not resize dialogs unless retarded.
Add unmanager_window so that windows that are unmapped and are transient
are no longer managed; xpdf needs this and other apps dont seem to care.
int floating;
int transient;
int manual;
int floating;
int transient;
int manual;
struct workspace *ws; /* always valid */
struct swm_screen *s; /* always valid, never changes */
XWindowAttributes wa;
struct workspace *ws; /* always valid */
struct swm_screen *s; /* always valid, never changes */
XWindowAttributes wa;
char *name;
unsigned long quirk;
#define SWM_Q_FLOAT (1<<0)
char *name;
unsigned long quirk;
#define SWM_Q_FLOAT (1<<0)
+#define SWM_Q_TRANSSZ (1<<1)
} quirks[] = {
{ "MPlayer", "xv", SWM_Q_FLOAT },
{ "OpenOffice.org 2.4", "VCLSalFrame", SWM_Q_FLOAT },
} quirks[] = {
{ "MPlayer", "xv", SWM_Q_FLOAT },
{ "OpenOffice.org 2.4", "VCLSalFrame", SWM_Q_FLOAT },
+ { "OpenOffice.org 3.0", "VCLSalFrame", SWM_Q_FLOAT },
+ { "Firefox-bin", "firefox-bin", SWM_Q_TRANSSZ},
bzero(&wc, sizeof wc);
mask = CWX | CWY | CWBorderWidth | CWWidth | CWHeight;
wc.border_width = 1;
bzero(&wc, sizeof wc);
mask = CWX | CWY | CWBorderWidth | CWWidth | CWHeight;
wc.border_width = 1;
+ if (win->transient && (win->quirks & SWM_Q_TRANSSZ)) {
win->g.w = (double)WIDTH(r) * dialog_ratio;
win->g.h = (double)HEIGHT(r) * dialog_ratio;
}
win->g.w = (double)WIDTH(r) * dialog_ratio;
win->g.h = (double)HEIGHT(r) * dialog_ratio;
}
mask = CWX | CWY | CWWidth | CWHeight | CWBorderWidth;
XConfigureWindow(display, win->id, mask, &wc);
XMapRaised(display, win->id);
mask = CWX | CWY | CWWidth | CWHeight | CWBorderWidth;
XConfigureWindow(display, win->id, mask, &wc);
XMapRaised(display, win->id);
- /*
- fprintf(stderr, "vertical_stack: win %d x %d y %d w %d h %d bw %d\n", win->id, win->g.x, win->g.y, win->g.w , win->g.h, wc.border_width);
- */
- /*
- fprintf(stderr, "manage window: %d x %d y %d w %d h %d\n", win->id, win->g.x, win->g.y, win->g.w, win->g.h);
- */
-
if (XGetClassHint(display, win->id, &win->ch)) {
DNPRINTF(SWM_D_CLASS, "class: %s name: %s\n",
win->ch.res_class, win->ch.res_name);
if (XGetClassHint(display, win->id, &win->ch)) {
DNPRINTF(SWM_D_CLASS, "class: %s name: %s\n",
win->ch.res_class, win->ch.res_name);
win->ch.res_class, win->ch.res_name);
if (quirks[i].quirk & SWM_Q_FLOAT)
win->floating = 1;
win->ch.res_class, win->ch.res_name);
if (quirks[i].quirk & SWM_Q_FLOAT)
win->floating = 1;
+ win->quirks = quirks[i].quirk;
+unmanage_window(struct ws_win *win)
+{
+ if (win == NULL)
+ return;
+
+ DNPRINTF(SWM_D_MISC, "unmanage_window: %lu\n", win->id);
+
+ TAILQ_REMOVE(&win->ws->winlist, win, entry);
+ set_win_state(win, WithdrawnState);
+ if (win->ch.res_class)
+ XFree(win->ch.res_class);
+ if (win->ch.res_name)
+ XFree(win->ch.res_name);
+ free(win);
+}
+
+void
configurerequest(XEvent *e)
{
XConfigureRequestEvent *ev = &e->xconfigurerequest;
configurerequest(XEvent *e)
{
XConfigureRequestEvent *ev = &e->xconfigurerequest;
if (new) {
DNPRINTF(SWM_D_EVENT, "configurerequest: new window: %lu\n",
ev->window);
if (new) {
DNPRINTF(SWM_D_EVENT, "configurerequest: new window: %lu\n",
ev->window);
- /*
- fprintf(stderr, "configurerequest: new window: %lu x %d y %d w %d h %d bw %d s %d sm %d\n",
- ev->window, ev->x, ev->y, ev->width, ev->height, ev->border_width, ev->above, ev->detail);
- */
bzero(&wc, sizeof wc);
wc.x = ev->x;
wc.y = ev->y;
bzero(&wc, sizeof wc);
wc.x = ev->x;
wc.y = ev->y;
wc.stack_mode = ev->detail;
XConfigureWindow(display, ev->window, ev->value_mask, &wc);
} else {
wc.stack_mode = ev->detail;
XConfigureWindow(display, ev->window, ev->value_mask, &wc);
} else {
- /*
- fprintf(stderr, "configurerequest: change window: %lu\n",
- ev->window);
- */
DNPRINTF(SWM_D_EVENT, "configurerequest: change window: %lu\n",
ev->window);
if (win->floating) {
DNPRINTF(SWM_D_EVENT, "configurerequest: change window: %lu\n",
ev->window);
if (win->floating) {
unfocus_all();
} else
focus_win(ws->focus);
unfocus_all();
} else
focus_win(ws->focus);
- TAILQ_REMOVE(&ws->winlist, win, entry);
- set_win_state(win, WithdrawnState);
- if (win->ch.res_class)
- XFree(win->ch.res_class);
- if (win->ch.res_name)
- XFree(win->ch.res_name);
- free(win);
void
unmapnotify(XEvent *e)
{
void
unmapnotify(XEvent *e)
{
+ XDestroyWindowEvent *ev = &e->xdestroywindow;
+ struct ws_win *win;
+
DNPRINTF(SWM_D_EVENT, "unmapnotify: window: %lu\n", e->xunmap.window);
DNPRINTF(SWM_D_EVENT, "unmapnotify: window: %lu\n", e->xunmap.window);
+
+ if ((win = find_window(ev->window)) != NULL)
+ if (win->transient)
+ unmanage_window(win);