diff --git a/src/session.c b/src/session.c index 0bcec147..2c55fa2a 100644 --- a/src/session.c +++ b/src/session.c @@ -93,6 +93,7 @@ static WMPropList *sHost; static WMPropList *sWorkspace; static WMPropList *sShaded; static WMPropList *sMiniaturized; +static WMPropList *sMaximized; static WMPropList *sHidden; static WMPropList *sGeometry; static WMPropList *sShortcutMask; @@ -112,6 +113,7 @@ static void make_keys(void) sWorkspace = WMCreatePLString("Workspace"); sShaded = WMCreatePLString("Shaded"); sMiniaturized = WMCreatePLString("Miniaturized"); + sMaximized = WMCreatePLString("Maximized"); sHidden = WMCreatePLString("Hidden"); sGeometry = WMCreatePLString("Geometry"); sDock = WMCreatePLString("Dock"); @@ -174,7 +176,7 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp) unsigned mask; char *class, *instance, *command = NULL, buffer[512]; WMPropList *win_state, *cmd, *name, *workspace; - WMPropList *shaded, *miniaturized, *hidden, *geometry; + WMPropList *shaded, *miniaturized, *maximized, *hidden, *geometry; WMPropList *dock, *shortcut; if (wwin->orig_main_window != None && wwin->orig_main_window != wwin->client_win) @@ -207,6 +209,8 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp) shaded = wwin->flags.shaded ? sYes : sNo; miniaturized = wwin->flags.miniaturized ? sYes : sNo; + snprintf(buffer, sizeof(buffer), "%i", wwin->flags.maximized); + maximized = WMCreatePLString(buffer); hidden = wwin->flags.hidden ? sYes : sNo; snprintf(buffer, sizeof(buffer), "%ix%i+%i+%i", wwin->client.width, wwin->client.height, wwin->frame_x, wwin->frame_y); @@ -226,6 +230,7 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp) sWorkspace, workspace, sShaded, shaded, sMiniaturized, miniaturized, + sMaximized, maximized, sHidden, hidden, sShortcutMask, shortcut, sGeometry, geometry, NULL); @@ -380,7 +385,7 @@ static WSavedState *getWindowState(WScreen * scr, WMPropList * win_state) WSavedState *state = wmalloc(sizeof(WSavedState)); WMPropList *value; char *tmp; - unsigned mask; + unsigned mask, maxf; int i; state->workspace = -1; @@ -408,6 +413,12 @@ static WSavedState *getWindowState(WScreen * scr, WMPropList * win_state) if (value != NULL) state->miniaturized = getBool(value); + value = WMGetFromPLDictionary(win_state, sMaximized); + if (value != NULL) { + maxf = getInt(value); + state->maximized = maxf; + } + value = WMGetFromPLDictionary(win_state, sHidden); if (value != NULL) state->hidden = getBool(value); diff --git a/src/window.c b/src/window.c index ef85f3d4..0d12cd5b 100644 --- a/src/window.c +++ b/src/window.c @@ -919,6 +919,9 @@ WWindow *wManageWindow(WScreen *scr, Window window) if (win_state->state->miniaturized > 0 && !WFLAGP(wwin, no_miniaturizable)) wwin->flags.miniaturized = win_state->state->miniaturized; + if (win_state->state->maximized > 0) + wwin->flags.maximized = win_state->state->maximized; + if (!IS_OMNIPRESENT(wwin)) { int w = wDefaultGetStartWorkspace(scr, wwin->wm_instance, wwin->wm_class); @@ -2694,7 +2697,7 @@ void wWindowUpdateGNUstepAttr(WWindow * wwin, GNUstepWMAttributes * attr) } WMagicNumber wWindowAddSavedState(const char *instance, const char *class, - const char *command, pid_t pid, WSavedState * state) + const char *command, pid_t pid, WSavedState *state) { WWindowState *wstate; diff --git a/src/window.h b/src/window.h index a19101fb..7a916497 100644 --- a/src/window.h +++ b/src/window.h @@ -309,9 +309,9 @@ typedef struct WWindow { typedef struct WSavedState { int workspace; int miniaturized; + int maximized; int shaded; int hidden; - int maximized; int x; /* original geometry of the */ int y; /* window if it's maximized */ unsigned int w;