1
0
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:
id
1999-04-22 15:21:29 +00:00
parent a997825148
commit 0bebc5a792
5 changed files with 41 additions and 1 deletions

View File

@@ -1744,7 +1744,8 @@ handleMotionNotify(XEvent *event)
WScreen *scr = wScreenForRootWindow(event->xmotion.root); WScreen *scr = wScreenForRootWindow(event->xmotion.root);
if (wPreferences.scrollable_menus) { 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.x_root >= (scr->scr_width - 2) ||
event->xmotion.y_root <= 1 || event->xmotion.y_root <= 1 ||
event->xmotion.y_root >= (scr->scr_height - 2)) { event->xmotion.y_root >= (scr->scr_height - 2)) {

View File

@@ -1740,6 +1740,23 @@ isPointNearBoder(WMenu *menu, int x, int y)
return flag; 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 void
wMenuScroll(WMenu *menu, XEvent *event) wMenuScroll(WMenu *menu, XEvent *event)
@@ -1756,6 +1773,10 @@ wMenuScroll(WMenu *menu, XEvent *event)
#ifdef DEBUG #ifdef DEBUG
puts("Entering menu Scroll"); puts("Entering menu Scroll");
#endif #endif
if (omenu->jump_back)
WMDeleteTimerWithClientData(omenu->jump_back);
if ((/*omenu->flags.buttoned &&*/ !wPreferences.wrap_menus) if ((/*omenu->flags.buttoned &&*/ !wPreferences.wrap_menus)
|| omenu->flags.app_menu) { || omenu->flags.app_menu) {
@@ -1842,6 +1863,20 @@ wMenuScroll(WMenu *menu, XEvent *event)
if (jump_back) if (jump_back)
wMenuMove(omenu, old_frame_x, old_frame_y, True); 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 #ifdef DEBUG
puts("Leaving menu Scroll"); puts("Leaving menu Scroll");

View File

@@ -78,6 +78,8 @@ typedef struct WMenu {
WMHandlerID timer; /* timer for the autoscroll */ WMHandlerID timer; /* timer for the autoscroll */
void *jump_back; /* jump back data */
/* to be called when some entry is edited */ /* to be called when some entry is edited */
void (*on_edit)(struct WMenu *menu, struct WMenuEntry *entry); void (*on_edit)(struct WMenu *menu, struct WMenuEntry *entry);
/* to be called when destroyed */ /* to be called when destroyed */

View File

@@ -315,6 +315,7 @@ typedef struct _WScreen {
/* some client has issued a WM_COLORMAP_NOTIFY */ /* some client has issued a WM_COLORMAP_NOTIFY */
unsigned int colormap_stuff_blocked:1; unsigned int colormap_stuff_blocked:1;
unsigned int doing_alt_tab:1; unsigned int doing_alt_tab:1;
unsigned int jump_back_pending:1;
#ifdef KWM_HINTS #ifdef KWM_HINTS
unsigned int kwm_syncing_name:1; unsigned int kwm_syncing_name:1;
unsigned int kwm_syncing_count:1; unsigned int kwm_syncing_count:1;

View File

@@ -400,6 +400,7 @@
#define MENU_SCROLL_STEPS_U 1 #define MENU_SCROLL_STEPS_U 1
#define MENU_SCROLL_DELAY_U 8 #define MENU_SCROLL_DELAY_U 8
#define MENU_JUMP_BACK_DELAY 0
/* shade animation */ /* shade animation */
#define SHADE_STEPS_UF 5 #define SHADE_STEPS_UF 5