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/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 "GNUstep.h"
#include "screen.h"
@@ -125,16 +121,17 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
}
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 */
modifiers = ev.xkey.state & ValidModMask;
if (ev.type == KeyPress) {
switch (ev.type) {
case KeyPress:
#ifdef DEBUG
printf("Got key press\n");
#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 {
#ifdef DEBUG
printf("Got something else\n");
@@ -200,9 +187,8 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
somethingElse = True;
done = True;
}
} else if (ev.type == KeyRelease) {
int i;
break;
case KeyRelease:
#ifdef DEBUG
printf("Got key release\n");
#endif
@@ -214,6 +200,35 @@ StartWindozeCycle(WWindow *wwin, XEvent *event, Bool next)
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)

View File

@@ -466,11 +466,26 @@ WWindow *wSwitchPanelHandleEvent(WSwitchPanel *panel, XEvent *event)
WMLabel *label;
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) {
if (WMWidgetXID(label) == event->xmotion.subwindow)
puts("HOORAY");
if (WMWidgetXID(label) == event->xcrossing.window) {
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;