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:
@@ -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)
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user