1
0
mirror of https://github.com/gryf/wmaker.git synced 2025-12-19 12:28:22 +01:00
Files
wmaker/contrib/workspace_flip.patch
2001-08-20 18:11:40 +00:00

127 lines
3.8 KiB
Diff

diff -Naur WindowMaker-0.65.0/src/WindowMaker.h wmaker-workspaceflip/src/WindowMaker.h
--- WindowMaker-0.65.0/src/WindowMaker.h Sat Apr 28 01:41:21 2001
+++ wmaker-workspaceflip/src/WindowMaker.h Sun Aug 12 12:51:14 2001
@@ -397,6 +397,8 @@
int raise_delay; /* delay for autoraise. 0 is disabled */
+ int workspace_flip_delay; /* delay for workspace flipping, 0 is disabled */
+
int cmap_size; /* size of dithering colormap in colors
* per channel */
diff -Naur WindowMaker-0.65.0/src/defaults.c wmaker-workspaceflip/src/defaults.c
--- WindowMaker-0.65.0/src/defaults.c Fri May 11 00:16:49 2001
+++ wmaker-workspaceflip/src/defaults.c Sun Aug 12 12:51:14 2001
@@ -420,6 +420,9 @@
{"RaiseDelay", "0", NULL,
&wPreferences.raise_delay, getInt, NULL
},
+ {"WorkspaceFlipDelay", "0", NULL,
+ &wPreferences.workspace_flip_delay, getInt, NULL
+ },
{"WindozeCycling", "YES", NULL,
&wPreferences.windows_cycling,getBool, NULL
},
diff -Naur WindowMaker-0.65.0/src/event.c wmaker-workspaceflip/src/event.c
--- WindowMaker-0.65.0/src/event.c Sat Apr 28 01:41:21 2001
+++ wmaker-workspaceflip/src/event.c Sun Aug 12 12:51:14 2001
@@ -1676,12 +1676,53 @@
}
}
+#define DEL_TIMER(timer) { \
+ WMDeleteTimerHandler(timer); \
+ timer = NULL; \
+}
+
+
+
+static void
+flipRightWorkspace(void* data)
+{
+ WScreen *scr = (WScreen*)data;
+ int x,y,tmp,last_workspace = scr->current_workspace;
+ Window tmpw;
+
+ DEL_TIMER(scr->workspace_flip_right_timer);
+
+ XQueryPointer(dpy,scr->root_win,&tmpw,&tmpw,&x,&y,&tmp,&tmp,&tmp);
+ if(x != scr->scr_width-1) return;
+
+ wWorkspaceRelativeChange(scr, 1);
+ if(last_workspace != scr->current_workspace)
+ XWarpPointer(dpy,None,scr->root_win,0,0,0,0,1,y);
+}
+
+static void
+flipLeftWorkspace(void* data)
+{
+ WScreen *scr = (WScreen*)data;
+ int x,y,tmp,last_workspace = scr->current_workspace;
+ Window tmpw;
+
+ DEL_TIMER(scr->workspace_flip_left_timer);
+
+ XQueryPointer(dpy,scr->root_win,&tmpw,&tmpw,&x,&y,&tmp,&tmp,&tmp);
+ if(x != 0) return;
+
+ wWorkspaceRelativeChange(scr, -1);
+ if(last_workspace != scr->current_workspace)
+ XWarpPointer(dpy,None,scr->root_win,0,0,0,0,scr->scr_width-2,y);
+}
static void
handleMotionNotify(XEvent *event)
{
WMenu *menu;
WScreen *scr = wScreenForRootWindow(event->xmotion.root);
+ int left,right;
if (wPreferences.scrollable_menus) {
if (scr->flags.jump_back_pending ||
@@ -1697,6 +1738,29 @@
wMenuScroll(menu, event);
}
}
+
+ /* workspace flipping */
+ if(!wPreferences.workspace_flip_delay) return;
+
+ left = (event->xmotion.x_root == 0);
+ right = (event->xmotion.x_root == scr->scr_width-1);
+
+ if(right && !scr->workspace_flip_right_timer)
+ scr->workspace_flip_right_timer =
+ WMAddTimerHandler(wPreferences.workspace_flip_delay,
+ flipRightWorkspace,scr);
+
+ if(left && !scr->workspace_flip_left_timer)
+ scr->workspace_flip_left_timer =
+ WMAddTimerHandler(wPreferences.workspace_flip_delay,
+ flipLeftWorkspace,scr);
+
+ if(!right && scr->workspace_flip_right_timer)
+ DEL_TIMER(scr->workspace_flip_right_timer);
+
+ if(!left && scr->workspace_flip_left_timer)
+ DEL_TIMER(scr->workspace_flip_left_timer);
+
#if 0
if (event->xmotion.subwindow == None)
return;
diff -Naur WindowMaker-0.65.0/src/screen.h wmaker-workspaceflip/src/screen.h
--- WindowMaker-0.65.0/src/screen.h Sun Apr 15 03:23:01 2001
+++ wmaker-workspaceflip/src/screen.h Sun Aug 12 12:51:14 2001
@@ -273,6 +273,10 @@
Window last_click_window;
int last_click_button;
+ /* for workspace flipping when mouse hits edge */
+ WMHandlerID *workspace_flip_left_timer;
+ WMHandlerID *workspace_flip_right_timer;
+
/* balloon help data */
struct _WBalloon *balloon;