mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 04:48:06 +01:00
menu jump back delay
This commit is contained in:
@@ -1744,7 +1744,8 @@ handleMotionNotify(XEvent *event)
|
||||
WScreen *scr = wScreenForRootWindow(event->xmotion.root);
|
||||
|
||||
if (wPreferences.scrollable_menus) {
|
||||
if (event->xmotion.x_root <= 1 ||
|
||||
if (scr->flags.jump_back_pending ||
|
||||
event->xmotion.x_root <= 1 ||
|
||||
event->xmotion.x_root >= (scr->scr_width - 2) ||
|
||||
event->xmotion.y_root <= 1 ||
|
||||
event->xmotion.y_root >= (scr->scr_height - 2)) {
|
||||
|
||||
35
src/menu.c
35
src/menu.c
@@ -1740,6 +1740,23 @@ isPointNearBoder(WMenu *menu, int x, int y)
|
||||
return flag;
|
||||
}
|
||||
|
||||
|
||||
typedef struct _delay {
|
||||
WWindow *wwin;
|
||||
WMenu *menu;
|
||||
int ox,oy;
|
||||
} _delay;
|
||||
|
||||
|
||||
static void
|
||||
_leaving(_delay *dl)
|
||||
{
|
||||
wMenuMove(dl->menu, dl->ox, dl->oy, True);
|
||||
dl->menu->jump_back=NULL;
|
||||
dl->menu->menu->screen_ptr->flags.jump_back_pending = 0;
|
||||
free(dl);
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
wMenuScroll(WMenu *menu, XEvent *event)
|
||||
@@ -1756,6 +1773,10 @@ wMenuScroll(WMenu *menu, XEvent *event)
|
||||
#ifdef DEBUG
|
||||
puts("Entering menu Scroll");
|
||||
#endif
|
||||
|
||||
if (omenu->jump_back)
|
||||
WMDeleteTimerWithClientData(omenu->jump_back);
|
||||
|
||||
|
||||
if ((/*omenu->flags.buttoned &&*/ !wPreferences.wrap_menus)
|
||||
|| omenu->flags.app_menu) {
|
||||
@@ -1842,6 +1863,20 @@ wMenuScroll(WMenu *menu, XEvent *event)
|
||||
|
||||
if (jump_back)
|
||||
wMenuMove(omenu, old_frame_x, old_frame_y, True);
|
||||
if (jump_back) {
|
||||
_delay *delayer;
|
||||
if (!omenu->jump_back) {
|
||||
delayer=wmalloc(sizeof(_delay));
|
||||
delayer->menu=omenu;
|
||||
delayer->ox=old_frame_x;
|
||||
delayer->oy=old_frame_y;
|
||||
omenu->jump_back=delayer;
|
||||
scr->flags.jump_back_pending = 1;
|
||||
}
|
||||
else delayer = omenu->jump_back;
|
||||
WMAddTimerHandler(MENU_JUMP_BACK_DELAY,(WMCallback*)_leaving, delayer);
|
||||
}
|
||||
|
||||
|
||||
#ifdef DEBUG
|
||||
puts("Leaving menu Scroll");
|
||||
|
||||
@@ -78,6 +78,8 @@ typedef struct WMenu {
|
||||
|
||||
WMHandlerID timer; /* timer for the autoscroll */
|
||||
|
||||
void *jump_back; /* jump back data */
|
||||
|
||||
/* to be called when some entry is edited */
|
||||
void (*on_edit)(struct WMenu *menu, struct WMenuEntry *entry);
|
||||
/* to be called when destroyed */
|
||||
|
||||
@@ -315,6 +315,7 @@ typedef struct _WScreen {
|
||||
/* some client has issued a WM_COLORMAP_NOTIFY */
|
||||
unsigned int colormap_stuff_blocked:1;
|
||||
unsigned int doing_alt_tab:1;
|
||||
unsigned int jump_back_pending:1;
|
||||
#ifdef KWM_HINTS
|
||||
unsigned int kwm_syncing_name:1;
|
||||
unsigned int kwm_syncing_count:1;
|
||||
|
||||
@@ -400,6 +400,7 @@
|
||||
|
||||
#define MENU_SCROLL_STEPS_U 1
|
||||
#define MENU_SCROLL_DELAY_U 8
|
||||
#define MENU_JUMP_BACK_DELAY 0
|
||||
|
||||
/* shade animation */
|
||||
#define SHADE_STEPS_UF 5
|
||||
|
||||
Reference in New Issue
Block a user