mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-19 04:20:27 +01:00
Alternative way for traversing half-maximized windows.
Now it is possible for change a bit pattern for changing state between half-maximized windows. Half maximized windows will become maximized if there is issued half-maximizing shortcut in opposite direction. Issue half-maximizing command on same direction on already maximized window, will have no effect.
This commit is contained in:
105
NEWS
105
NEWS
@@ -4,6 +4,111 @@ NEWS for veteran Window Maker users
|
|||||||
-- 0.95.8
|
-- 0.95.8
|
||||||
|
|
||||||
|
|
||||||
|
Alternative way for traverse half-maximized windows
|
||||||
|
---------------------------------------------------
|
||||||
|
|
||||||
|
For now, there could be three possible state of the window while using
|
||||||
|
half-maximized feature. Unmaximized window have its state saved during that
|
||||||
|
process, which was use to unmaximize it. For example, if there is a window,
|
||||||
|
which is maximized on the half left side of the screen, and while requesting
|
||||||
|
left-half-maximized, it become unmaximized with size and dimension restored to
|
||||||
|
original state.
|
||||||
|
|
||||||
|
By setting "AlternativeHalfMaximized" option to "Yes"
|
||||||
|
~/GNUstep/Defaults/WindowMaker config file (or by using WPrefs.app and option
|
||||||
|
"Alternative transitions between states for half maximized windows."), there
|
||||||
|
would be slightly different change in window "traverse". Given layout depicted
|
||||||
|
below:
|
||||||
|
|
||||||
|
┌┬────────────────────┬┐
|
||||||
|
├┘ ┌───────┐ ├┤
|
||||||
|
│ ├───────┤ ├┤
|
||||||
|
│ │ │ ├┤
|
||||||
|
│ │ │ ├┤
|
||||||
|
│ └───────┘ └┤
|
||||||
|
├┬┐ │
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Window can be moved using keyboard shortcut right-half-maximize:
|
||||||
|
|
||||||
|
┌┬─────────┬──────────┬┐
|
||||||
|
├┘ ├──────────┼┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
├┬┐ └──────────┘│
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Further invoking right-half-maximize will do nothing. Note, that window always
|
||||||
|
can be unmaximzied using appropriate keyboard shortcut or by selecting
|
||||||
|
"Unmaximize" from window menu.
|
||||||
|
|
||||||
|
Going to opposite direction by invoking left-half-maximize, will make the window
|
||||||
|
maximized in both, vertical and horizontal directions:
|
||||||
|
|
||||||
|
┌─────────────────────┬┐
|
||||||
|
├─────────────────────┼┤
|
||||||
|
│ ├┤
|
||||||
|
│ ├┤
|
||||||
|
│ ├┤
|
||||||
|
│ ├┤
|
||||||
|
├┬┬───────────────────┘│
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Further invoking left-half-maximize, will make the window maximized in half left
|
||||||
|
side od the screen:
|
||||||
|
|
||||||
|
┌──────────┬──────────┬┐
|
||||||
|
├──────────┤ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ ├┤
|
||||||
|
│ │ └┤
|
||||||
|
├┬┬────────┘ │
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
And again, further invoking left-half-maximize, will do nothing in this mode.
|
||||||
|
|
||||||
|
This change affects all possible half-maximized window state also quarters.
|
||||||
|
Issuing bottom-left-corner will take lower left quarter of the screen (nothing
|
||||||
|
is new so far):
|
||||||
|
|
||||||
|
┌┬────────────────────┬┐
|
||||||
|
├┘ ├┤
|
||||||
|
│ ├┤
|
||||||
|
├──────────┐ ├┤
|
||||||
|
├──────────┤ ├┤
|
||||||
|
│ │ └┤
|
||||||
|
├┬┬────────┘ │
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Issuing bottom-right-corner again will change window state to bottom half
|
||||||
|
maximized:
|
||||||
|
|
||||||
|
┌┬────────────────────┬┐
|
||||||
|
├┘ ├┤
|
||||||
|
│ ├┤
|
||||||
|
├─────────────────────┼┤
|
||||||
|
├─────────────────────┼┤
|
||||||
|
│ ├┤
|
||||||
|
├┬┬───────────────────┘│
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Invoking bottom-right-corner again:
|
||||||
|
|
||||||
|
┌┬────────────────────┬┐
|
||||||
|
├┘ ├┤
|
||||||
|
│ ├┤
|
||||||
|
│ ┌──────────┼┤
|
||||||
|
│ ├──────────┼┤
|
||||||
|
│ │ ├┤
|
||||||
|
├┬┐ └──────────┘│
|
||||||
|
└┴┴────────────────────┘
|
||||||
|
|
||||||
|
Issuing bottom-right-corner again will have no effect.
|
||||||
|
|
||||||
|
|
||||||
Move half-maximized windows between the screens
|
Move half-maximized windows between the screens
|
||||||
-----------------------------------------------
|
-----------------------------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -505,7 +505,10 @@ void handleMaximize(WWindow *wwin, int directions)
|
|||||||
if ((wwin->flags.old_maximized & MAX_MAXIMUS) &&
|
if ((wwin->flags.old_maximized & MAX_MAXIMUS) &&
|
||||||
!(requested & MAX_MAXIMUS))
|
!(requested & MAX_MAXIMUS))
|
||||||
wMaximizeWindow(wwin, MAX_MAXIMUS | flags, head);
|
wMaximizeWindow(wwin, MAX_MAXIMUS | flags, head);
|
||||||
|
else if (wPreferences.alt_half_maximize &&
|
||||||
|
current & MAX_HORIZONTAL && current & MAX_VERTICAL &&
|
||||||
|
requested & MAX_HORIZONTAL && requested & MAX_VERTICAL)
|
||||||
|
wUnmaximizeWindow(wwin);
|
||||||
else if (wPreferences.move_half_max_between_heads) {
|
else if (wPreferences.move_half_max_between_heads) {
|
||||||
/* Select windows, which are only horizontally or vertically
|
/* Select windows, which are only horizontally or vertically
|
||||||
* maximized. Quarters cannot be handled here, since there is not
|
* maximized. Quarters cannot be handled here, since there is not
|
||||||
@@ -552,11 +555,11 @@ void handleMaximize(WWindow *wwin, int directions)
|
|||||||
* not from mouse pointer */
|
* not from mouse pointer */
|
||||||
wMaximizeWindow(wwin, (effective | flags | MAX_KEYBOARD),
|
wMaximizeWindow(wwin, (effective | flags | MAX_KEYBOARD),
|
||||||
dest_head);
|
dest_head);
|
||||||
else
|
else if (!wPreferences.alt_half_maximize)
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
} else
|
} else if (!wPreferences.alt_half_maximize)
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
} else
|
} else if (!wPreferences.alt_half_maximize)
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
/* these alone mean vertical|horizontal toggle */
|
/* these alone mean vertical|horizontal toggle */
|
||||||
} else if ((effective == MAX_LEFTHALF) ||
|
} else if ((effective == MAX_LEFTHALF) ||
|
||||||
@@ -564,6 +567,59 @@ void handleMaximize(WWindow *wwin, int directions)
|
|||||||
(effective == MAX_TOPHALF) ||
|
(effective == MAX_TOPHALF) ||
|
||||||
(effective == MAX_BOTTOMHALF))
|
(effective == MAX_BOTTOMHALF))
|
||||||
wUnmaximizeWindow(wwin);
|
wUnmaximizeWindow(wwin);
|
||||||
|
|
||||||
|
/* Following conditions might look complicated, but they are really simple:
|
||||||
|
* allow fullscreen transition only for half maximized state (and not
|
||||||
|
* corners) and only when requested state is also half maximized, but on
|
||||||
|
* opposite side of the screen. As for corners, it is similar, but
|
||||||
|
* expected is that only quarter maximized windows on corner can change
|
||||||
|
* it's state to half maximized window, depending on direction. Note, that
|
||||||
|
* MAX_KEYBOARD is passed to the wMaximizeWindow function, to preserve the
|
||||||
|
* head, even if mouse was used for triggering the action. */
|
||||||
|
|
||||||
|
/* Quarters alternative transition. */
|
||||||
|
else if (wPreferences.alt_half_maximize &&
|
||||||
|
((requested & MAX_LEFTHALF && requested & MAX_TOPHALF &&
|
||||||
|
current & MAX_RIGHTHALF && current & MAX_TOPHALF) ||
|
||||||
|
(requested & MAX_RIGHTHALF && requested & MAX_TOPHALF &&
|
||||||
|
current & MAX_LEFTHALF && current & MAX_TOPHALF)))
|
||||||
|
wMaximizeWindow(wwin, (MAX_TOPHALF | MAX_HORIZONTAL | MAX_KEYBOARD),
|
||||||
|
head);
|
||||||
|
else if (wPreferences.alt_half_maximize &&
|
||||||
|
((requested & MAX_LEFTHALF && requested & MAX_BOTTOMHALF &&
|
||||||
|
current & MAX_RIGHTHALF && current & MAX_BOTTOMHALF) ||
|
||||||
|
(requested & MAX_RIGHTHALF && requested & MAX_BOTTOMHALF &&
|
||||||
|
current & MAX_LEFTHALF && current & MAX_BOTTOMHALF)))
|
||||||
|
wMaximizeWindow(wwin, (MAX_BOTTOMHALF | MAX_HORIZONTAL | MAX_KEYBOARD),
|
||||||
|
head);
|
||||||
|
else if (wPreferences.alt_half_maximize &&
|
||||||
|
((requested & MAX_LEFTHALF && requested & MAX_BOTTOMHALF &&
|
||||||
|
current & MAX_LEFTHALF && current & MAX_TOPHALF) ||
|
||||||
|
(requested & MAX_LEFTHALF && requested & MAX_TOPHALF &&
|
||||||
|
current & MAX_LEFTHALF && current & MAX_BOTTOMHALF)))
|
||||||
|
wMaximizeWindow(wwin, (MAX_LEFTHALF | MAX_VERTICAL| MAX_KEYBOARD),
|
||||||
|
head);
|
||||||
|
else if (wPreferences.alt_half_maximize &&
|
||||||
|
((requested & MAX_RIGHTHALF && requested & MAX_BOTTOMHALF &&
|
||||||
|
current & MAX_RIGHTHALF && current & MAX_TOPHALF) ||
|
||||||
|
(requested & MAX_RIGHTHALF && requested & MAX_TOPHALF &&
|
||||||
|
current & MAX_RIGHTHALF && current & MAX_BOTTOMHALF)))
|
||||||
|
wMaximizeWindow(wwin, (MAX_RIGHTHALF | MAX_VERTICAL| MAX_KEYBOARD),
|
||||||
|
head);
|
||||||
|
|
||||||
|
/* Half-maximized alternative transition */
|
||||||
|
else if (wPreferences.alt_half_maximize && (
|
||||||
|
(requested & MAX_LEFTHALF && requested & MAX_VERTICAL &&
|
||||||
|
current & MAX_RIGHTHALF && current & MAX_VERTICAL) ||
|
||||||
|
(requested & MAX_RIGHTHALF && requested & MAX_VERTICAL &&
|
||||||
|
current & MAX_LEFTHALF && current & MAX_VERTICAL) ||
|
||||||
|
(requested & MAX_TOPHALF && requested & MAX_HORIZONTAL &&
|
||||||
|
current & MAX_BOTTOMHALF && current & MAX_HORIZONTAL) ||
|
||||||
|
(requested & MAX_BOTTOMHALF && requested & MAX_HORIZONTAL &&
|
||||||
|
current & MAX_TOPHALF && current & MAX_HORIZONTAL)))
|
||||||
|
wMaximizeWindow(wwin, (MAX_HORIZONTAL|MAX_VERTICAL|MAX_KEYBOARD),
|
||||||
|
head);
|
||||||
|
|
||||||
else {
|
else {
|
||||||
if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) ||
|
if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) ||
|
||||||
(requested == MAX_MAXIMUS))
|
(requested == MAX_MAXIMUS))
|
||||||
|
|||||||
Reference in New Issue
Block a user