hi Johann I applied your patch and maximizing windows vertically and horizontally, seems to work ok.
I found a quirk when trying to maximize vetically then horizontally then unmaximize vertically and cycling so on. This doesn't work all time not all combinations at least. I obtain sometimes a different window size when going back to the original size, pretty complicated to explain. regards Jan 27, 2009 at 9:56 AM, Samir SAADA <[email protected]> wrote: > Thank you Johann I was thinking about a patch like this one, then > having possibility to "tile" windows under wmaker like you mentionned > for side-by-side reading or even horizontal split of windows :) > I'll try as soon as possible. > > Regards. > > On Mon, Jan 26, 2009 at 10:38 PM, Johann Haarhoff > <[email protected]> wrote: >> Hi >> >> I wrote a patch that allows you to maximize a window to the left or right >> half of your display. This is useful on widescreen displays where you want >> to bring up two windows side-by-side. The shortcut keys are configurable in >> WPrefs. >> >> This is my first windowmaker patch and my first using Mercurial, so let me >> know if the patch came out wrong. >> >> Regards, >> >> Johann >> >> # HG changeset patch >> # User [email protected] >> # Date 1233004546 -7200 >> # Node ID 257ea74be08466e47ba74cb3cb5a11fe37aa09e7 >> # Parent 5a2507602c48324fba0f07754a442a8cc6ab967c >> Added an action that allows you to maximize a window so that it covers the >> left or right half of the display. This is useful on widescreen displays >> where you want to have two windows opened side by side. >> >> diff -r 5a2507602c48 -r 257ea74be084 WPrefs.app/KeyboardShortcuts.c >> --- a/WPrefs.app/KeyboardShortcuts.c Sun Dec 14 19:59:05 2008 -0800 >> +++ b/WPrefs.app/KeyboardShortcuts.c Mon Jan 26 23:15:46 2009 +0200 >> @@ -79,6 +79,8 @@ >> "MaximizeKey", >> "VMaximizeKey", >> "HMaximizeKey", >> + "LHMaximizeKey", >> + "RHMaximizeKey", >> "RaiseKey", >> "LowerKey", >> "RaiseLowerKey", >> @@ -507,6 +509,8 @@ >> WMAddListItem(panel->actLs, _("Maximize active window")); >> WMAddListItem(panel->actLs, _("Maximize active window vertically")); >> WMAddListItem(panel->actLs, _("Maximize active window horizontally")); >> + WMAddListItem(panel->actLs, _("Maximize active window left half")); >> + WMAddListItem(panel->actLs, _("Maximize active window right half")); >> WMAddListItem(panel->actLs, _("Raise active window")); >> WMAddListItem(panel->actLs, _("Lower active window")); >> WMAddListItem(panel->actLs, _("Raise/Lower window under mouse >> pointer")); >> diff -r 5a2507602c48 -r 257ea74be084 src/actions.c >> --- a/src/actions.c Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/actions.c Mon Jan 26 23:15:46 2009 +0200 >> @@ -400,11 +400,11 @@ >> wUnshadeWindow(wwin); >> } >> /* Only save directions, not kbd or xinerama hints */ >> - directions &= (MAX_HORIZONTAL|MAX_VERTICAL); >> + directions &= (MAX_HORIZONTAL|MAX_VERTICAL|MAX_LEFTHALF|MAX_RIGHTHALF); >> >> - changed_h = ((wwin->flags.maximized ^ directions) & MAX_HORIZONTAL); >> + changed_h = ((wwin->flags.maximized ^ directions) & >> (MAX_HORIZONTAL|MAX_LEFTHALF|MAX_RIGHTHALF)); >> changed_v = ((wwin->flags.maximized ^ directions) & MAX_VERTICAL); >> - shrink_h = (changed_h && (directions & MAX_HORIZONTAL)==0); >> + shrink_h = (changed_h && (directions & >> (MAX_HORIZONTAL|MAX_LEFTHALF|MAX_RIGHTHALF))==0); >> shrink_v = (changed_v && (directions & MAX_VERTICAL)==0); >> >> if (wwin->flags.maximized) { >> @@ -457,6 +457,23 @@ >> new_height = wwin->frame->core->height; >> } >> >> + if (directions & MAX_LEFTHALF) { >> + new_width = (usableArea.x2 - usableArea.x1)/2; >> + if (HAS_BORDER(wwin)) >> + new_width -= FRAME_BORDER_WIDTH * 2; >> + new_x = usableArea.x1; >> + } else if (shrink_h) { >> + new_x = wwin->old_geometry.x; >> + new_width = wwin->old_geometry.width; >> + } >> + >> + if (directions & MAX_RIGHTHALF) { >> + new_width = (usableArea.x2 - usableArea.x1)/2; >> + if (HAS_BORDER(wwin)) >> + new_width -= FRAME_BORDER_WIDTH * 2; >> + new_x = usableArea.x1+((usableArea.x2 - usableArea.x1)/2); >> + } >> + >> if (!WFLAGP(wwin, full_maximize)) { >> new_height -= wwin->frame->top_width+wwin->frame->bottom_width; >> } >> @@ -488,7 +505,7 @@ >> wwin->flags.skip_next_animation = 1; >> wUnshadeWindow(wwin); >> } >> - x = ((wwin->flags.maximized & MAX_HORIZONTAL) && wwin->old_geometry.x) >> ? >> + x = ((wwin->flags.maximized & >> (MAX_HORIZONTAL|MAX_LEFTHALF|MAX_RIGHTHALF)) && wwin->old_geometry.x) ? >> wwin->old_geometry.x : wwin->frame_x; >> y = ((wwin->flags.maximized & MAX_VERTICAL) && wwin->old_geometry.y) ? >> wwin->old_geometry.y : wwin->frame_y; >> diff -r 5a2507602c48 -r 257ea74be084 src/actions.h >> --- a/src/actions.h Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/actions.h Mon Jan 26 23:15:46 2009 +0200 >> @@ -26,8 +26,10 @@ >> >> #define MAX_HORIZONTAL 1 >> #define MAX_VERTICAL 2 >> -#define MAX_IGNORE_XINERAMA 4 >> -#define MAX_KEYBOARD 8 >> +#define MAX_LEFTHALF 4 >> +#define MAX_RIGHTHALF 8 >> +#define MAX_IGNORE_XINERAMA 16 >> +#define MAX_KEYBOARD 32 >> >> void wSetFocusTo(WScreen *scr, WWindow *wwin); >> >> diff -r 5a2507602c48 -r 257ea74be084 src/defaults.c >> --- a/src/defaults.c Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/defaults.c Mon Jan 26 23:15:46 2009 +0200 >> @@ -711,6 +711,12 @@ >> {"HMaximizeKey", "None", (void*)WKBD_HMAXIMIZE, >> NULL, getKeybind, setKeyGrab >> }, >> + {"LHMaximizeKey", "None", (void*)WKBD_LHMAXIMIZE, >> + NULL, getKeybind, setKeyGrab >> + }, >> + {"RHMaximizeKey", "None", (void*)WKBD_RHMAXIMIZE, >> + NULL, getKeybind, setKeyGrab >> + }, >> {"RaiseKey", "\"Meta+Up\"", (void*)WKBD_RAISE, >> NULL, getKeybind, setKeyGrab >> }, >> diff -r 5a2507602c48 -r 257ea74be084 src/event.c >> --- a/src/event.c Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/event.c Mon Jan 26 23:15:46 2009 +0200 >> @@ -1483,6 +1483,32 @@ >> } >> } >> break; >> + case WKBD_LHMAXIMIZE: >> + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { >> + int newdir = (MAX_VERTICAL|MAX_LEFTHALF); >> + >> + CloseWindowMenu(scr); >> + >> + if (wwin->flags.maximized == newdir) { >> + wUnmaximizeWindow(wwin); >> + } else { >> + wMaximizeWindow(wwin, newdir|MAX_KEYBOARD); >> + } >> + } >> + break; >> + case WKBD_RHMAXIMIZE: >> + if (ISMAPPED(wwin) && ISFOCUSED(wwin) && IS_RESIZABLE(wwin)) { >> + int newdir = (MAX_VERTICAL|MAX_RIGHTHALF); >> + >> + CloseWindowMenu(scr); >> + >> + if (wwin->flags.maximized == newdir) { >> + wUnmaximizeWindow(wwin); >> + } else { >> + wMaximizeWindow(wwin, newdir|MAX_KEYBOARD); >> + } >> + } >> + break; >> case WKBD_RAISE: >> if (ISMAPPED(wwin) && ISFOCUSED(wwin)) { >> CloseWindowMenu(scr); >> diff -r 5a2507602c48 -r 257ea74be084 src/keybind.h >> --- a/src/keybind.h Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/keybind.h Mon Jan 26 23:15:46 2009 +0200 >> @@ -32,57 +32,59 @@ >> #define WKBD_MAXIMIZE 6 >> #define WKBD_VMAXIMIZE 7 >> #define WKBD_HMAXIMIZE 8 >> -#define WKBD_SELECT 9 >> +#define WKBD_LHMAXIMIZE 9 >> +#define WKBD_RHMAXIMIZE 10 >> +#define WKBD_SELECT 11 >> /* Clip */ >> -#define WKBD_CLIPLOWER 10 >> -#define WKBD_CLIPRAISE 11 >> -#define WKBD_CLIPRAISELOWER 12 >> +#define WKBD_CLIPLOWER 12 >> +#define WKBD_CLIPRAISE 13 >> +#define WKBD_CLIPRAISELOWER 14 >> /* window */ >> -#define WKBD_RAISE 13 >> -#define WKBD_LOWER 14 >> -#define WKBD_RAISELOWER 15 >> -#define WKBD_MOVERESIZE 16 >> -#define WKBD_SHADE 17 >> +#define WKBD_RAISE 15 >> +#define WKBD_LOWER 16 >> +#define WKBD_RAISELOWER 17 >> +#define WKBD_MOVERESIZE 18 >> +#define WKBD_SHADE 19 >> /* window, menu */ >> -#define WKBD_CLOSE 18 >> +#define WKBD_CLOSE 20 >> /* window */ >> -#define WKBD_FOCUSNEXT 19 >> -#define WKBD_FOCUSPREV 20 >> +#define WKBD_FOCUSNEXT 21 >> +#define WKBD_FOCUSPREV 22 >> >> -#define WKBD_WORKSPACE1 21 >> -#define WKBD_WORKSPACE2 22 >> -#define WKBD_WORKSPACE3 23 >> -#define WKBD_WORKSPACE4 24 >> -#define WKBD_WORKSPACE5 25 >> -#define WKBD_WORKSPACE6 26 >> -#define WKBD_WORKSPACE7 27 >> -#define WKBD_WORKSPACE8 28 >> -#define WKBD_WORKSPACE9 29 >> -#define WKBD_WORKSPACE10 30 >> -#define WKBD_NEXTWORKSPACE 31 >> -#define WKBD_PREVWORKSPACE 32 >> -#define WKBD_NEXTWSLAYER 33 >> -#define WKBD_PREVWSLAYER 34 >> +#define WKBD_WORKSPACE1 23 >> +#define WKBD_WORKSPACE2 24 >> +#define WKBD_WORKSPACE3 25 >> +#define WKBD_WORKSPACE4 26 >> +#define WKBD_WORKSPACE5 27 >> +#define WKBD_WORKSPACE6 28 >> +#define WKBD_WORKSPACE7 29 >> +#define WKBD_WORKSPACE8 30 >> +#define WKBD_WORKSPACE9 31 >> +#define WKBD_WORKSPACE10 32 >> +#define WKBD_NEXTWORKSPACE 33 >> +#define WKBD_PREVWORKSPACE 34 >> +#define WKBD_NEXTWSLAYER 35 >> +#define WKBD_PREVWSLAYER 36 >> >> /* window shortcuts */ >> -#define WKBD_WINDOW1 35 >> -#define WKBD_WINDOW2 36 >> -#define WKBD_WINDOW3 37 >> -#define WKBD_WINDOW4 38 >> -#define WKBD_WINDOW5 39 >> -#define WKBD_WINDOW6 40 >> -#define WKBD_WINDOW7 41 >> -#define WKBD_WINDOW8 42 >> -#define WKBD_WINDOW9 43 >> -#define WKBD_WINDOW10 44 >> +#define WKBD_WINDOW1 37 >> +#define WKBD_WINDOW2 38 >> +#define WKBD_WINDOW3 39 >> +#define WKBD_WINDOW4 40 >> +#define WKBD_WINDOW5 41 >> +#define WKBD_WINDOW6 42 >> +#define WKBD_WINDOW7 43 >> +#define WKBD_WINDOW8 44 >> +#define WKBD_WINDOW9 45 >> +#define WKBD_WINDOW10 46 >> >> -#define WKBD_SWITCH_SCREEN 45 >> +#define WKBD_SWITCH_SCREEN 47 >> >> #ifdef KEEP_XKB_LOCK_STATUS >> -# define WKBD_TOGGLE 46 >> -# define WKBD_TMP 47 >> +# define WKBD_TOGGLE 48 >> +# define WKBD_TMP 49 >> #else >> -# define WKBD_TMP 46 >> +# define WKBD_TMP 48 >> #endif >> >> #ifdef VIRTUAL_DESKTOP >> diff -r 5a2507602c48 -r 257ea74be084 src/window.h >> --- a/src/window.h Sun Dec 14 19:59:05 2008 -0800 >> +++ b/src/window.h Mon Jan 26 23:15:46 2009 +0200 >> @@ -256,7 +256,7 @@ >> unsigned int miniaturized:1; >> unsigned int hidden:1; >> unsigned int shaded:1; >> - unsigned int maximized:2; >> + unsigned int maximized:4; >> unsigned int fullscreen:1; >> unsigned int omnipresent:1; >> >> >> > -- To unsubscribe, send mail to [email protected].
