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].

Reply via email to