>> Yes, there is still some ironing out to do. I also discovered
that >> my patch breaks the "Run" dialog, it comes up but does not
accept >> any keyboard input.
After Dan's email and having another look at things, I realised that
my fix for the "Run" dialog just does not make sense. I reverted
window.c and could not replicate my original problem (Run dialog does
not take kbd input).
This morning I tried it on another computer and could also not
replicate it. So, herewith a patch that doesn't fiddle with the
flags.is_gnustep stuff. If anyone can replicate the "Run" dialog not
accepting input bug, I would please like to know.
Patch is against current tip and not on top of my previous patch
Regards,
Johann
-----------------------------------------------------
This message was sent using Obsidian SWiTCH web-mail.
Obsidian SWiTCH - an Obsidian Systems company.
(0860) 055-911 - http://www.switch-it.co.za/
diff -r 5a2507602c48 -r 647a234dc2c9 WPrefs.app/KeyboardShortcuts.c
--- a/WPrefs.app/KeyboardShortcuts.c Sun Dec 14 19:59:05 2008 -0800
+++ b/WPrefs.app/KeyboardShortcuts.c Tue Feb 03 00:41:17 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 647a234dc2c9 src/actions.c
--- a/src/actions.c Sun Dec 14 19:59:05 2008 -0800
+++ b/src/actions.c Tue Feb 03 00:41:17 2009 +0200
@@ -367,7 +367,6 @@
{
int new_x, new_y;
unsigned int new_width, new_height;
- int changed_h, changed_v, shrink_h, shrink_v;
WArea usableArea, totalArea;
if (!IS_RESIZABLE(wwin))
@@ -400,12 +399,7 @@
wUnshadeWindow(wwin);
}
/* Only save directions, not kbd or xinerama hints */
- directions &= (MAX_HORIZONTAL|MAX_VERTICAL);
-
- changed_h = ((wwin->flags.maximized ^ directions) & MAX_HORIZONTAL);
- changed_v = ((wwin->flags.maximized ^ directions) & MAX_VERTICAL);
- shrink_h = (changed_h && (directions & MAX_HORIZONTAL)==0);
- shrink_v = (changed_v && (directions & MAX_VERTICAL)==0);
+ directions &= (MAX_HORIZONTAL|MAX_VERTICAL|MAX_LEFTHALF|MAX_RIGHTHALF);
if (wwin->flags.maximized) {
/* if already maximized in some direction, we only update the
@@ -413,7 +407,7 @@
* allow succesive maximizations in different directions without
* the need to first do an un-maximize (to avoid flicker).
*/
- if (!(wwin->flags.maximized & MAX_HORIZONTAL)) {
+ if (!(wwin->flags.maximized & (MAX_HORIZONTAL|MAX_LEFTHALF|MAX_RIGHTHALF))) {
wwin->old_geometry.x = wwin->frame_x;
}
if (!(wwin->flags.maximized & MAX_VERTICAL)) {
@@ -432,12 +426,19 @@
if (HAS_BORDER(wwin))
new_width -= FRAME_BORDER_WIDTH * 2;
new_x = usableArea.x1;
- } else if (shrink_h) {
+ } else 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 (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);
+ } else {
new_x = wwin->old_geometry.x;
new_width = wwin->old_geometry.width;
- } else {
- new_x = wwin->frame_x;
- new_width = wwin->frame->core->width;
}
if (directions & MAX_VERTICAL) {
@@ -449,12 +450,9 @@
new_y -= wwin->frame->top_width;
new_height += wwin->frame->bottom_width - 1;
}
- } else if (shrink_v) {
+ } else {
new_y = wwin->old_geometry.y;
new_height = wwin->old_geometry.height;
- } else {
- new_y = wwin->frame_y;
- new_height = wwin->frame->core->height;
}
if (!WFLAGP(wwin, full_maximize)) {
@@ -488,7 +486,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 647a234dc2c9 src/actions.h
--- a/src/actions.h Sun Dec 14 19:59:05 2008 -0800
+++ b/src/actions.h Tue Feb 03 00:41:17 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 647a234dc2c9 src/defaults.c
--- a/src/defaults.c Sun Dec 14 19:59:05 2008 -0800
+++ b/src/defaults.c Tue Feb 03 00:41:17 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 647a234dc2c9 src/event.c
--- a/src/event.c Sun Dec 14 19:59:05 2008 -0800
+++ b/src/event.c Tue Feb 03 00:41:17 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 647a234dc2c9 src/keybind.h
--- a/src/keybind.h Sun Dec 14 19:59:05 2008 -0800
+++ b/src/keybind.h Tue Feb 03 00:41:17 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 647a234dc2c9 src/window.h
--- a/src/window.h Sun Dec 14 19:59:05 2008 -0800
+++ b/src/window.h Tue Feb 03 00:41:17 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;