From 0fd531df43c8ffd10ae1fee176bf6f451c8f0b1b Mon Sep 17 00:00:00 2001 From: kojima Date: Sun, 9 Apr 2000 02:36:48 +0000 Subject: [PATCH] fixed restart crash bug updated kwm hint made kwm&gnome hints mutually exclusive (for read) --- src/Makefile.am | 2 +- src/Makefile.in | 3 +-- src/gnome.c | 15 ++++++++++++--- src/gnome.h | 4 ++-- src/kwm.c | 38 ++++++++++++++++++++++++++++---------- src/plugin.c | 8 ++++++++ src/screen.c | 2 +- src/window.c | 24 +++++++++++++++++------- 8 files changed, 70 insertions(+), 26 deletions(-) diff --git a/src/Makefile.am b/src/Makefile.am index cbeaded0..56aad9db 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -106,7 +106,7 @@ wmaker_SOURCES = \ text.h -CPPFLAGS = @CPPFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\" +CPPFLAGS = @CPPFLAGS@ $(DFLAGS) -DLOCALEDIR=\"$(NLSDIR)\" INCLUDES = \ diff --git a/src/Makefile.in b/src/Makefile.in index e48b396b..db68ac30 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -62,7 +62,6 @@ host_triplet = @host@ AS = @AS@ CC = @CC@ CPP_PATH = @CPP_PATH@ -DFLAGS = @DFLAGS@ DLLIBS = @DLLIBS@ DLLTOOL = @DLLTOOL@ GFXLIBS = @GFXLIBS@ @@ -106,7 +105,7 @@ EXTRA_DIST = wmnotify.c wmnotdef.h wmnotify.h DI.h DL.h I.h L.h Q.h GDB.h nana. wmaker_SOURCES = GNUstep.h WindowMaker.h actions.c actions.h appicon.c appicon.h application.c application.h appmenu.c appmenu.h balloon.c balloon.h client.c client.h colormap.c cycling.c def_pixmaps.h defaults.c defaults.h dialog.c dialog.h dock.c dockedapp.c dock.h event.c extend_pixmaps.h framewin.c framewin.h geomview.c geomview.h gnome.c gnome.h funcs.h icon.c icon.h keybind.h kwm.h kwm.c main.c menu.c menu.h misc.c motif.c motif.h moveres.c openlook.c openlook.h pixmap.c pixmap.h placement.c plugin.c plugin.h properties.c properties.h proplist.c resources.c resources.h rootmenu.c screen.c screen.h session.h session.c shutdown.c stacking.c stacking.h startup.c superfluous.c superfluous.h switchmenu.c texture.c texture.h usermenu.c usermenu.h xdnd.h xdnd.c xmodifier.h xmodifier.c xutil.c xutil.h wconfig.h wcore.c wcore.h wdefaults.c wdefaults.h window.c window.h winmenu.c winspector.h winspector.c workspace.c workspace.h wmsound.c wmsound.h text.c text.h -CPPFLAGS = @CPPFLAGS@ @DFLAGS@ -DLOCALEDIR=\"$(NLSDIR)\" +CPPFLAGS = @CPPFLAGS@ $(DFLAGS) -DLOCALEDIR=\"$(NLSDIR)\" INCLUDES = -I$(top_srcdir)/wrlib -I$(top_srcdir)/WINGs @HEADER_SEARCH_PATH@ diff --git a/src/gnome.c b/src/gnome.c index 042bdd0b..fcd01680 100644 --- a/src/gnome.c +++ b/src/gnome.c @@ -288,7 +288,7 @@ getWindowLevel(int layer) } -void +Bool wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) { Atom type_ret; @@ -296,6 +296,7 @@ wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) unsigned long nitems_ret; unsigned long bytes_after_ret; long flags, val, *data = 0; + Bool hasHints = False; /* hints */ @@ -311,6 +312,7 @@ wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) if (flags & (WIN_HINTS_SKIP_FOCUS|WIN_HINTS_SKIP_WINLIST)) { wwin->client_flags.skip_window_list = 1; } + hasHints = True; } /* layer */ @@ -323,6 +325,7 @@ wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) XFree(data); *layer = getWindowLevel(val); + hasHints = True; } /* workspace */ @@ -336,6 +339,7 @@ wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) if (val > 0) *workspace = val; + hasHints = True; } /* reserved area */ @@ -362,11 +366,14 @@ wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace) wwin->screen_ptr->reservedAreas = area; wScreenUpdateUsableArea(wwin->screen_ptr); + hasHints = True; } + + return hasHints; } -void +Bool wGNOMECheckInitialClientState(WWindow *wwin) { Atom type_ret; @@ -379,7 +386,7 @@ wGNOMECheckInitialClientState(WWindow *wwin) XA_CARDINAL, &type_ret, &fmt_ret, &nitems_ret, &bytes_after_ret, (unsigned char**)&data)!=Success || !data) - return; + return False; flags = *data; @@ -399,6 +406,8 @@ wGNOMECheckInitialClientState(WWindow *wwin) if (flags & WIN_STATE_SHADED) wwin->flags.shaded = 1; + + return True; } diff --git a/src/gnome.h b/src/gnome.h index a7c6d0f2..2bd0f8af 100644 --- a/src/gnome.h +++ b/src/gnome.h @@ -35,7 +35,7 @@ void wGNOMEUpdateCurrentWorkspaceHint(WScreen *scr); void wGNOMEUpdateWorkspaceNamesHint(WScreen *scr); -void wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace); +Bool wGNOMECheckClientHints(WWindow *wwin, int *layer, int *workspace); void wGNOMEUpdateClientStateHint(WWindow *wwin, Bool changedWorkspace); @@ -43,7 +43,7 @@ Bool wGNOMEProcessClientMessage(XClientMessageEvent *event); void wGNOMERemoveClient(WWindow *wwin); -void wGNOMECheckInitialClientState(WWindow *wwin); +Bool wGNOMECheckInitialClientState(WWindow *wwin); Bool wGNOMEProxyizeButtonEvent(WScreen *scr, XEvent *event); diff --git a/src/kwm.c b/src/kwm.c index 037b876b..4057c49d 100644 --- a/src/kwm.c +++ b/src/kwm.c @@ -789,9 +789,13 @@ wKWMCheckClientInitialState(WWindow *wwin) wwin->flags.miniaturized = 1; } - if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, &val) && val) { - - wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL; + if (getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, &val)) { + if (val == 2) + wwin->flags.maximized = MAX_VERTICAL; + else if (val == 1) + wwin->flags.maximized = MAX_HORIZONTAL; + else if (val == 3) + wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL; } if (getAreaHint(wwin->client_win, _XA_KWM_WIN_GEOMETRY_RESTORE, &area) && (wwin->old_geometry.x != area.x1 @@ -848,17 +852,25 @@ wKWMCheckClientHintChange(WWindow *wwin, XPropertyEvent *event) } } else if (event->atom == _XA_KWM_WIN_MAXIMIZED) { + int bla = 0; #ifdef DEBUG1 printf("got KDE maximize change\n"); #endif - flag = !getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, - &value) || value; + flag = getSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, &value); - if (flag != (wwin->flags.maximized!=0)) { + if (flag) { + if (value == 3) + bla = MAX_VERTICAL|MAX_HORIZONTAL; + else if (value == 2) + bla = MAX_VERTICAL; + else if (value == 1) + bla = MAX_HORIZONTAL; + } - if (flag) - wMaximizeWindow(wwin, flag*(MAX_VERTICAL|MAX_HORIZONTAL)); + if (bla != wwin->flags.maximized) { + if (bla != 0) + wMaximizeWindow(wwin, bla); else wUnmaximizeWindow(wwin); } @@ -1553,8 +1565,14 @@ wKWMUpdateClientStateHint(WWindow *wwin, WKWMStateFlag flags) IS_OMNIPRESENT(wwin)); } if (flags & KWMMaximizedFlag) { - setSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, - wwin->flags.maximized!=0); + int value = 0; + + if (wwin->flags.maximized & MAX_VERTICAL) + value |= 2; + if (wwin->flags.maximized & MAX_HORIZONTAL) + value |= 1; + + setSimpleHint(wwin->client_win, _XA_KWM_WIN_MAXIMIZED, value); } } diff --git a/src/plugin.c b/src/plugin.c index ebd40dcd..32615bbc 100644 --- a/src/plugin.c +++ b/src/plugin.c @@ -24,8 +24,14 @@ * Do you think I should move this code into another file? -- ]d */ + + #include "plugin.h" +/* GAH! */ +#ifdef DRAWSTRING_PLUGIN + + #include #include #include @@ -130,3 +136,5 @@ wPluginDestroyFunction(WFunction *function) return; } + +#endif diff --git a/src/screen.c b/src/screen.c index c2f1d265..cf16b063 100644 --- a/src/screen.c +++ b/src/screen.c @@ -724,7 +724,7 @@ wScreenInit(int screen_number) /* will only be accounted for in PseudoColor */ - if (wPreferences.flags.create_stdcmap) { + if (wPreferences.flags.createstdcmap) { rattr.standard_colormap_mode = RCreateStdColormap; } else { rattr.standard_colormap_mode = RUseStdColormap; diff --git a/src/window.c b/src/window.c index c347dbcb..2d7b696a 100644 --- a/src/window.c +++ b/src/window.c @@ -423,18 +423,22 @@ wWindowSetupInitialAttributes(WWindow *wwin, int *level, int *workspace) } else { int tmp_workspace = -1; int tmp_level = -1; + Bool check; + + check = False; #ifdef MWM_HINTS wMWMCheckClientHints(wwin); #endif /* MWM_HINTS */ -#ifdef KWM_HINTS - wKWMCheckClientHints(wwin, &tmp_level, &tmp_workspace); -#endif /* KWM_HINTS */ - #ifdef GNOME_STUFF - wGNOMECheckClientHints(wwin, &tmp_level, &tmp_workspace); + check = wGNOMECheckClientHints(wwin, &tmp_level, &tmp_workspace); #endif /* GNOME_STUFF */ + +#ifdef KWM_HINTS + if (!check) + wKWMCheckClientHints(wwin, &tmp_level, &tmp_workspace); +#endif /* KWM_HINTS */ #ifdef OLWM_HINTS wOLWMCheckClientHints(wwin); @@ -769,12 +773,18 @@ wManageWindow(WScreen *scr, Window window) wwin->flags.maximized = MAX_VERTICAL|MAX_HORIZONTAL; } + { + Bool bla; + + bla = False; #ifdef GNOME_STUFF - wGNOMECheckInitialClientState(wwin); + bla = wGNOMECheckInitialClientState(wwin); #endif #ifdef KWM_HINTS - wKWMCheckClientInitialState(wwin); + if (!bla) + wKWMCheckClientInitialState(wwin); #endif + } /* apply previous state if it exists and we're in startup */ if (scr->flags.startup && wm_state >= 0) {