1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-21 05:18:06 +01:00

added mouse seelction of window to focus

This commit is contained in:
kojima
2004-10-22 22:57:14 +00:00
parent d08691d5a5
commit b034bb077f
2 changed files with 64 additions and 34 deletions

View File

@@ -26,10 +26,6 @@
#include <X11/Xutil.h> #include <X11/Xutil.h>
#include <X11/keysym.h> #include <X11/keysym.h>
// TODO: remove non-MOX_CYCLING junk
// fix the stacking/window raising during alt-tabbing
// allow selection of icons with mouse
#include "WindowMaker.h" #include "WindowMaker.h"
#include "GNUstep.h" #include "GNUstep.h"
#include "screen.h" #include "screen.h"
@@ -125,16 +121,17 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
} }
while (hasModifier && !done) { while (hasModifier && !done) {
WMMaskEvent(dpy, KeyPressMask|KeyReleaseMask|ExposureMask|PointerMotionMask, &ev); int i;
WMMaskEvent(dpy, KeyPressMask|KeyReleaseMask|ExposureMask
|PointerMotionMask|EnterWindowMask|LeaveWindowMask
|ButtonReleaseMask, &ev);
if (ev.type != KeyRelease && ev.type != KeyPress) {
WMHandleEvent(&ev);
continue;
}
/* ignore CapsLock */ /* ignore CapsLock */
modifiers = ev.xkey.state & ValidModMask; modifiers = ev.xkey.state & ValidModMask;
if (ev.type == KeyPress) { switch (ev.type) {
case KeyPress:
#ifdef DEBUG #ifdef DEBUG
printf("Got key press\n"); printf("Got key press\n");
#endif #endif
@@ -183,16 +180,6 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
} }
} }
} }
} else if (ev.type == MotionNotify) {
WWindow *tmp;
if (swpanel) {
tmp = wSwitchPanelHandleEvent(swpanel, &ev);
if (tmp) {
newFocused = tmp;
wWindowFocus(newFocused, oldFocused);
oldFocused = newFocused;
}
}
} else { } else {
#ifdef DEBUG #ifdef DEBUG
printf("Got something else\n"); printf("Got something else\n");
@@ -200,9 +187,8 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
somethingElse = True; somethingElse = True;
done = True; done = True;
} }
} else if (ev.type == KeyRelease) { break;
int i; case KeyRelease:
#ifdef DEBUG #ifdef DEBUG
printf("Got key release\n"); printf("Got key release\n");
#endif #endif
@@ -214,6 +200,35 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
break; break;
} }
} }
break;
case EnterNotify:
case LeaveNotify:
case ButtonRelease:
{
WWindow *tmp;
if (swpanel) {
tmp = wSwitchPanelHandleEvent(swpanel, &ev);
if (tmp) {
newFocused = tmp;
wWindowFocus(newFocused, oldFocused);
oldFocused = newFocused;
if (wPreferences.circ_raise) {
CommitStacking(scr);
raiseWindow(swpanel, newFocused);
}
if (ev.type == ButtonRelease)
done= True;
}
}
}
break;
default:
WMHandleEvent(&ev);
break;
} }
} }
if (keymap) if (keymap)

View File

@@ -466,11 +466,26 @@ WWindow *wSwitchPanelHandleEvent(WSwitchPanel *panel, XEvent *event)
WMLabel *label; WMLabel *label;
int i; int i;
printf("%i %i\n", event->xmotion.x, event->xmotion.y); if (!panel->win)
return NULL;
if (event->type == EnterNotify) {
int focus= -1;
WM_ITERATE_ARRAY(panel->icons, label, i) { WM_ITERATE_ARRAY(panel->icons, label, i) {
if (WMWidgetXID(label) == event->xmotion.subwindow) if (WMWidgetXID(label) == event->xcrossing.window) {
puts("HOORAY"); focus= i;
break;
}
}
if (focus >= 0) {
changeImage(panel, panel->current, 0);
changeImage(panel, focus, 1);
panel->current= focus;
return WMGetFromArray(panel->windows, focus);
}
} }
return NULL; return NULL;