mirror of
https://github.com/gryf/wmaker.git
synced 2025-12-20 12:58:08 +01:00
Fixed Clip regarding auto raise/lower and autocollapse behavior.
Also rewrote that part of code to be much cleaner.
This commit is contained in:
87
src/dock.c
87
src/dock.c
@@ -139,6 +139,7 @@ Bool moveIconBetweenDocks(WDock *src, WDock *dest, WAppIcon *icon, int x, int y)
|
||||
static void clipEnterNotify(WObjDescriptor *desc, XEvent *event);
|
||||
static void clipLeaveNotify(WObjDescriptor *desc, XEvent *event);
|
||||
static void clipAutoCollapse(void *cdata);
|
||||
static void clipAutoExpand(void *cdata);
|
||||
static void launchDockedApplication(WAppIcon *btn);
|
||||
|
||||
static void clipAutoLower(void *cdata);
|
||||
@@ -682,10 +683,10 @@ toggleAutoCollapseCallback(WMenu *menu, WMenuEntry *entry)
|
||||
dock = (WDock*) entry->clientdata;
|
||||
|
||||
dock->auto_collapse = !dock->auto_collapse;
|
||||
if (dock->auto_collapse_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_collapse_magic);
|
||||
dock->auto_collapse_magic = NULL;
|
||||
}
|
||||
//if (dock->auto_collapse_magic) {
|
||||
// WMDeleteTimerHandler(dock->auto_collapse_magic);
|
||||
// dock->auto_collapse_magic = NULL;
|
||||
//}
|
||||
|
||||
entry->flags.indicator_on = ((WDock*)entry->clientdata)->auto_collapse;
|
||||
|
||||
@@ -3028,10 +3029,20 @@ wClipUpdateForWorkspaceChange(WScreen *scr, int workspace)
|
||||
WDock *old_clip = scr->workspaces[scr->current_workspace]->clip;
|
||||
|
||||
wDockHideIcons(old_clip);
|
||||
if (old_clip->auto_raise_lower)
|
||||
if (old_clip->auto_raise_lower) {
|
||||
if (old_clip->auto_raise_magic) {
|
||||
WMDeleteTimerHandler(old_clip->auto_raise_magic);
|
||||
old_clip->auto_raise_magic = NULL;
|
||||
}
|
||||
wDockLower(old_clip);
|
||||
if (old_clip->auto_collapse && !old_clip->collapsed)
|
||||
}
|
||||
if (old_clip->auto_collapse) {
|
||||
if (old_clip->auto_expand_magic) {
|
||||
WMDeleteTimerHandler(old_clip->auto_expand_magic);
|
||||
old_clip->auto_expand_magic = NULL;
|
||||
}
|
||||
old_clip->collapsed = 1;
|
||||
}
|
||||
wDockShowIcons(scr->workspaces[workspace]->clip);
|
||||
}
|
||||
if (scr->flags.clip_balloon_mapped)
|
||||
@@ -3901,16 +3912,28 @@ clipEnterNotify(WObjDescriptor *desc, XEvent *event)
|
||||
if (!dock || dock->type!=WM_CLIP)
|
||||
return;
|
||||
|
||||
/* The auto raise/lower code */
|
||||
if (dock->auto_lower_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_lower_magic);
|
||||
dock->auto_lower_magic = NULL;
|
||||
}
|
||||
if (dock->auto_raise_lower) {
|
||||
if (dock->auto_raise_lower && !dock->auto_raise_magic) {
|
||||
dock->auto_raise_magic = WMAddTimerHandler(AUTO_RAISE_DELAY,
|
||||
clipAutoRaise,
|
||||
(void *)dock);
|
||||
}
|
||||
|
||||
/* The auto expand/collapse code */
|
||||
if (dock->auto_collapse_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_collapse_magic);
|
||||
dock->auto_collapse_magic = NULL;
|
||||
}
|
||||
if (dock->auto_collapse && !dock->auto_expand_magic) {
|
||||
dock->auto_expand_magic = WMAddTimerHandler(AUTO_EXPAND_DELAY,
|
||||
clipAutoExpand,
|
||||
(void *)dock);
|
||||
}
|
||||
|
||||
if (btn->xindex == 0 && btn->yindex == 0)
|
||||
showClipBalloon(dock, dock->screen_ptr->current_workspace);
|
||||
else {
|
||||
@@ -3919,15 +3942,6 @@ clipEnterNotify(WObjDescriptor *desc, XEvent *event)
|
||||
dock->screen_ptr->flags.clip_balloon_mapped = 0;
|
||||
}
|
||||
}
|
||||
if (dock->auto_collapse) {
|
||||
if (dock->auto_collapse_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_collapse_magic);
|
||||
dock->auto_collapse_magic = NULL;
|
||||
}
|
||||
|
||||
if (dock->collapsed)
|
||||
toggleCollapsed(dock);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -3961,22 +3975,20 @@ clipLeave(WDock *dock)
|
||||
WMDeleteTimerHandler(dock->auto_raise_magic);
|
||||
dock->auto_raise_magic = NULL;
|
||||
}
|
||||
if (dock->auto_raise_lower) {
|
||||
if (dock->auto_raise_lower && !dock->auto_lower_magic) {
|
||||
dock->auto_lower_magic = WMAddTimerHandler(AUTO_LOWER_DELAY,
|
||||
clipAutoLower,
|
||||
(void *)dock);
|
||||
}
|
||||
|
||||
if (dock->auto_collapse) {
|
||||
if (dock->auto_collapse_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_collapse_magic);
|
||||
dock->auto_collapse_magic = NULL;
|
||||
}
|
||||
if (!dock->collapsed) {
|
||||
dock->auto_collapse_magic = WMAddTimerHandler(AUTO_COLLAPSE_DELAY,
|
||||
clipAutoCollapse,
|
||||
(void *)dock);
|
||||
}
|
||||
if (dock->auto_expand_magic) {
|
||||
WMDeleteTimerHandler(dock->auto_expand_magic);
|
||||
dock->auto_expand_magic = NULL;
|
||||
}
|
||||
if (dock->auto_collapse && !dock->auto_collapse_magic) {
|
||||
dock->auto_collapse_magic = WMAddTimerHandler(AUTO_COLLAPSE_DELAY,
|
||||
clipAutoCollapse,
|
||||
(void *)dock);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4003,13 +4015,30 @@ clipAutoCollapse(void *cdata)
|
||||
if (dock->type!=WM_CLIP || !dock->auto_collapse)
|
||||
return;
|
||||
|
||||
if (!dock->collapsed && dock->auto_collapse_magic!=NULL) {
|
||||
toggleCollapsed(dock);
|
||||
if (dock->auto_collapse_magic) {
|
||||
dock->collapsed = 1;
|
||||
wDockHideIcons(dock);
|
||||
}
|
||||
dock->auto_collapse_magic = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
clipAutoExpand(void *cdata)
|
||||
{
|
||||
WDock *dock = (WDock *)cdata;
|
||||
|
||||
if (dock->type!=WM_CLIP || !dock->auto_collapse)
|
||||
return;
|
||||
|
||||
if (dock->auto_expand_magic) {
|
||||
dock->collapsed = 0;
|
||||
wDockShowIcons(dock);
|
||||
}
|
||||
dock->auto_expand_magic = NULL;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
clipAutoLower(void *cdata)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user