[Pkg-wmaker-commits] [wmaker] 21/40: Alternative way for traversing half-maximized windows.

Doug Torrance dtorrance-guest at moszumanska.debian.org
Sat Mar 11 13:08:18 UTC 2017


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch upstream
in repository wmaker.

commit eadb7f3ab29e471a361a1a3b655487d074fb810b
Author: Roman Dobosz <gryf73 at gmail.com>
Date:   Tue Feb 21 18:56:13 2017 +0100

    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.
---
 NEWS          | 105 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 src/actions.c |  64 ++++++++++++++++++++++++++++++++---
 2 files changed, 165 insertions(+), 4 deletions(-)

diff --git a/NEWS b/NEWS
index cdb41d5..f2b1b30 100644
--- a/NEWS
+++ b/NEWS
@@ -4,6 +4,111 @@ NEWS for veteran Window Maker users
 -- 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
 -----------------------------------------------
 
diff --git a/src/actions.c b/src/actions.c
index 119f5ec..cf0699e 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -505,7 +505,10 @@ void handleMaximize(WWindow *wwin, int directions)
 		if ((wwin->flags.old_maximized & MAX_MAXIMUS) &&
 				!(requested & MAX_MAXIMUS))
 			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) {
 			/* Select windows, which are only horizontally or vertically
 			 * maximized. Quarters cannot be handled here, since there is not
@@ -552,11 +555,11 @@ void handleMaximize(WWindow *wwin, int directions)
 					 * not from mouse pointer */
 					wMaximizeWindow(wwin, (effective | flags | MAX_KEYBOARD),
 							dest_head);
-				else
+				else if (!wPreferences.alt_half_maximize)
 					wUnmaximizeWindow(wwin);
-			} else
+			} else if (!wPreferences.alt_half_maximize)
 				wUnmaximizeWindow(wwin);
-		} else
+		} else if (!wPreferences.alt_half_maximize)
 			wUnmaximizeWindow(wwin);
 	/* these alone mean vertical|horizontal toggle */
 	} else if ((effective == MAX_LEFTHALF) ||
@@ -564,6 +567,59 @@ void handleMaximize(WWindow *wwin, int directions)
 			(effective == MAX_TOPHALF) ||
 			(effective == MAX_BOTTOMHALF))
 		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 {
 		if ((requested == (MAX_HORIZONTAL | MAX_VERTICAL)) ||
 				(requested == MAX_MAXIMUS))

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmaker.git



More information about the Pkg-wmaker-commits mailing list