Hide WDock fields in favor of accessors.
This commit is contained in:
@@ -2073,7 +2073,7 @@ void wArrangeIcons(WScreen *scr, Bool arrangeAll)
|
||||
if (scr->dock) {
|
||||
int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
|
||||
|
||||
if (scr->dock->on_right_side)
|
||||
if (wDockIsOnRightSide(scr->dock))
|
||||
area.x2 -= offset;
|
||||
else
|
||||
area.x1 += offset;
|
||||
|
||||
@@ -186,7 +186,7 @@ void unpaint_app_icon(WApplication *wapp)
|
||||
scr = wApplicationGetMainWindowDesc(wapp)->screen_ptr;
|
||||
clip = scr->workspaces[scr->current_workspace]->clip;
|
||||
|
||||
if (!clip || !aicon->attracted || !clip->collapsed)
|
||||
if (!clip || !aicon->attracted || !wDockIsCollapsed(clip))
|
||||
XUnmapWindow(dpy, aicon->icon->core->window);
|
||||
|
||||
/* We want to avoid having it on the list because otherwise
|
||||
@@ -220,7 +220,7 @@ void paint_app_icon(WApplication *wapp)
|
||||
attracting_dock = scr->attracting_drawer != NULL ?
|
||||
scr->attracting_drawer :
|
||||
scr->workspaces[scr->current_workspace]->clip;
|
||||
if (attracting_dock && attracting_dock->attract_icons &&
|
||||
if (attracting_dock && wDockGetAttractIcons(attracting_dock) &&
|
||||
wDockFindFreeSlot(attracting_dock, &x, &y)) {
|
||||
wApplicationGetAppIcon(wapp)->attracted = 1;
|
||||
if (!icon->shadowed) {
|
||||
@@ -246,7 +246,7 @@ void paint_app_icon(WApplication *wapp)
|
||||
wApplicationGetAppIcon(wapp)->next == NULL && wApplicationGetAppIcon(wapp)->prev == NULL)
|
||||
add_to_appicon_list(scr, wApplicationGetAppIcon(wapp));
|
||||
|
||||
if (!attracting_dock || !wApplicationGetAppIcon(wapp)->attracted || !attracting_dock->collapsed)
|
||||
if (!attracting_dock || !wApplicationGetAppIcon(wapp)->attracted || !wDockIsCollapsed(attracting_dock))
|
||||
XMapWindow(dpy, icon->core->window);
|
||||
|
||||
if (wPreferences.auto_arrange_icons && !wApplicationGetAppIcon(wapp)->attracted)
|
||||
@@ -281,7 +281,7 @@ void removeAppIconFor(WApplication *wapp)
|
||||
wAppIconPaint(wApplicationGetAppIcon(wapp));
|
||||
} else if (wApplicationGetAppIcon(wapp)->docked) {
|
||||
wApplicationGetAppIcon(wapp)->running = 0;
|
||||
if (wApplicationGetAppIcon(wapp)->dock->type == WM_DRAWER) {
|
||||
if (wDockGetType(wApplicationGetAppIcon(wapp)->dock) == WM_DRAWER) {
|
||||
wDrawerFillTheGap(wApplicationGetAppIcon(wapp)->dock, wApplicationGetAppIcon(wapp), True);
|
||||
}
|
||||
wDockDetach(wApplicationGetAppIcon(wapp)->dock, wApplicationGetAppIcon(wapp));
|
||||
@@ -381,7 +381,7 @@ static void updateDockNumbers(WScreen *scr)
|
||||
{
|
||||
int length;
|
||||
char ws_numbers[20];
|
||||
WAppIcon *dicon = scr->dock->icon_array[0];
|
||||
WAppIcon *dicon = wDockGetIcon(scr->dock, 0);
|
||||
|
||||
snprintf(ws_numbers, sizeof(ws_numbers), "%i [ %i ]", scr->current_workspace + 1, ((scr->current_workspace / 10) + 1));
|
||||
length = strlen(ws_numbers);
|
||||
@@ -905,26 +905,26 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
}
|
||||
if (lastDock != NULL && lastDock != theNewDock) {
|
||||
/* Leave lastDock in the state we found it */
|
||||
if (lastDock->type == WM_DRAWER) {
|
||||
if (wDockGetType(lastDock) == WM_DRAWER) {
|
||||
wDrawerFillTheGap(lastDock, aicon, (lastDock == originalDock));
|
||||
}
|
||||
if (collapsed) {
|
||||
lastDock->collapsed = 1;
|
||||
wDockSetCollapsed(lastDock, 1);
|
||||
wDockHideIcons(lastDock);
|
||||
collapsed = False;
|
||||
}
|
||||
if (lastDock->auto_raise_lower) {
|
||||
if (wDockIsAutoRaiseLower(lastDock)) {
|
||||
wDockLower(lastDock);
|
||||
}
|
||||
}
|
||||
if (theNewDock != NULL) {
|
||||
if (lastDock != theNewDock) {
|
||||
collapsed = theNewDock->collapsed;
|
||||
collapsed = wDockIsCollapsed(theNewDock);
|
||||
if (collapsed) {
|
||||
theNewDock->collapsed = 0;
|
||||
wDockSetCollapsed(theNewDock, 0);
|
||||
wDockShowIcons(theNewDock);
|
||||
}
|
||||
if (theNewDock->auto_raise_lower) {
|
||||
if (wDockIsAutoRaiseLower(theNewDock)) {
|
||||
wDockRaise(theNewDock);
|
||||
/* And raise the moving tile above it */
|
||||
wRaiseFrame(aicon->icon->core);
|
||||
@@ -932,8 +932,8 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
lastDock = theNewDock;
|
||||
}
|
||||
|
||||
shad_x = lastDock->x_pos + ix*wPreferences.icon_size;
|
||||
shad_y = lastDock->y_pos + iy*wPreferences.icon_size;
|
||||
shad_x = wDockGetXPos(lastDock) + ix*wPreferences.icon_size;
|
||||
shad_y = wDockGetYPos(lastDock) + iy*wPreferences.icon_size;
|
||||
|
||||
XMoveWindow(dpy, scr->dock_shadow, shad_x, shad_y);
|
||||
|
||||
@@ -977,7 +977,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
command for that appicon, and the user cancels the
|
||||
wInputDialog asking for one). Make the rejection obvious by
|
||||
sliding the icon to its old position */
|
||||
if (lastDock->type == WM_DRAWER) {
|
||||
if (wDockGetType(lastDock) == WM_DRAWER) {
|
||||
// Also fill the gap left in the drawer
|
||||
wDrawerFillTheGap(lastDock, aicon, False);
|
||||
}
|
||||
@@ -995,25 +995,25 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
/* Possible scenario: user moved an auto-attracted appicon
|
||||
from the clip to the dock, and cancelled the wInputDialog
|
||||
asking for a command */
|
||||
if (lastDock->type == WM_DRAWER) {
|
||||
if (wDockGetType(lastDock) == WM_DRAWER) {
|
||||
wDrawerFillTheGap(lastDock, aicon, False);
|
||||
}
|
||||
/* If aicon comes from a drawer, make some room to reattach it */
|
||||
if (originalDock->type == WM_DRAWER) {
|
||||
WAppIcon *aiconsToShift[ originalDock->icon_count ];
|
||||
if (wDockGetType(originalDock) == WM_DRAWER) {
|
||||
WAppIcon *aiconsToShift[ wDockGetIconCount(originalDock) ];
|
||||
int j = 0;
|
||||
|
||||
for (i = 0; i < originalDock->max_icons; i++) {
|
||||
WAppIcon *ai = originalDock->icon_array[ i ];
|
||||
for (i = 0; i < wDockGetMaxIcons(originalDock); i++) {
|
||||
WAppIcon *ai = wDockGetIcon(originalDock, i);
|
||||
if (ai && ai != aicon &&
|
||||
abs(ai->xindex) >= abs(aicon->xindex))
|
||||
aiconsToShift[j++] = ai;
|
||||
}
|
||||
if (j != originalDock->icon_count - abs(aicon->xindex) - 1)
|
||||
if (j != wDockGetIconCount(originalDock) - abs(aicon->xindex) - 1)
|
||||
// Trust this never happens?
|
||||
wwarning("Shifting j=%d appicons (instead of %d!) to reinsert aicon at index %d.",
|
||||
j, originalDock->icon_count - abs(aicon->xindex) - 1, aicon->xindex);
|
||||
wSlideAppicons(aiconsToShift, j, originalDock->on_right_side);
|
||||
j, wDockGetIconCount(originalDock) - abs(aicon->xindex) - 1, aicon->xindex);
|
||||
wSlideAppicons(aiconsToShift, j, wDockIsOnRightSide(originalDock));
|
||||
// Trust the appicon is inserted at exactly the same place, so its oldX/oldY are consistent with its "new" location?
|
||||
}
|
||||
|
||||
@@ -1021,11 +1021,11 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
wDockReattachIcon(originalDock, aicon, aicon->xindex, aicon->yindex);
|
||||
}
|
||||
else {
|
||||
if (originalDock->auto_collapse && !originalDock->collapsed) {
|
||||
originalDock->collapsed = 1;
|
||||
if (wDockIsAutoCollapse(originalDock) && !wDockIsCollapsed(originalDock)) {
|
||||
wDockSetCollapsed(originalDock, 1);
|
||||
wDockHideIcons(originalDock);
|
||||
}
|
||||
if (originalDock->auto_raise_lower)
|
||||
if (wDockIsAutoRaiseLower(originalDock))
|
||||
wDockLower(originalDock);
|
||||
}
|
||||
}
|
||||
@@ -1037,7 +1037,7 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
/* If docked (or tried to dock) to a auto_collapsing dock, unset
|
||||
* collapsed, so that wHandleAppIconMove doesn't collapse it
|
||||
* right away (the timer will take care of it) */
|
||||
if (lastDock->auto_collapse)
|
||||
if (wDockIsAutoCollapse(lastDock))
|
||||
collapsed = 0;
|
||||
}
|
||||
else {
|
||||
@@ -1053,11 +1053,11 @@ Bool wHandleAppIconMove(WAppIcon *aicon, XEvent *event)
|
||||
}
|
||||
}
|
||||
wDockDetach(originalDock, aicon);
|
||||
if (originalDock->auto_collapse && !originalDock->collapsed) {
|
||||
originalDock->collapsed = 1;
|
||||
if (wDockIsAutoCollapse(originalDock) && !wDockIsCollapsed(originalDock)) {
|
||||
wDockSetCollapsed(originalDock, 1);
|
||||
wDockHideIcons(originalDock);
|
||||
}
|
||||
if (originalDock->auto_raise_lower)
|
||||
if (wDockIsAutoRaiseLower(originalDock))
|
||||
wDockLower(originalDock);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1318,7 +1318,7 @@ void wDefaultUpdateIcons(WScreen *scr)
|
||||
wClipIconPaint(scr->clip_icon);
|
||||
|
||||
for (dc = scr->drawers; dc != NULL; dc = dc->next)
|
||||
wDrawerIconPaint(dc->adrawer->icon_array[0]);
|
||||
wDrawerIconPaint(wDockGetIcon(dc->adrawer, 0));
|
||||
|
||||
while (wwin) {
|
||||
if (wwin->icon && wwin->flags.miniaturized)
|
||||
|
||||
110
src/dock.c
110
src/dock.c
@@ -69,6 +69,96 @@
|
||||
#define MOD_MASK wPreferences.modifier_mask
|
||||
#define ICON_SIZE wPreferences.icon_size
|
||||
|
||||
struct WDock {
|
||||
WScreen *screen_ptr;
|
||||
int x_pos, y_pos; /* position of the first icon */
|
||||
|
||||
WAppIcon **icon_array; /* array of docked icons */
|
||||
int max_icons;
|
||||
|
||||
int icon_count;
|
||||
|
||||
int type;
|
||||
|
||||
WMagicNumber auto_expand_magic;
|
||||
WMagicNumber auto_collapse_magic;
|
||||
WMagicNumber auto_raise_magic;
|
||||
WMagicNumber auto_lower_magic;
|
||||
unsigned int auto_collapse:1; /* if clip auto-collapse itself */
|
||||
unsigned int auto_raise_lower:1; /* if clip should raise/lower when
|
||||
* entered/leaved */
|
||||
unsigned int on_right_side:1;
|
||||
unsigned int collapsed:1;
|
||||
unsigned int mapped:1;
|
||||
unsigned int lowered:1;
|
||||
unsigned int attract_icons:1; /* If clip should attract app-icons */
|
||||
|
||||
unsigned int lclip_button_pushed:1;
|
||||
unsigned int rclip_button_pushed:1;
|
||||
|
||||
struct WMenu *menu;
|
||||
|
||||
struct WDDomain *defaults;
|
||||
};
|
||||
|
||||
/******** Accessors/mutators ********/
|
||||
int wDockGetXPos(WDock *dock) {
|
||||
return dock->x_pos;
|
||||
}
|
||||
int wDockGetYPos(WDock *dock) {
|
||||
return dock->y_pos;
|
||||
}
|
||||
|
||||
int wDockGetMaxIcons(WDock *dock) {
|
||||
return dock->max_icons;
|
||||
}
|
||||
int wDockGetIconCount(WDock *dock) {
|
||||
return dock->icon_count;
|
||||
}
|
||||
void wDockAddIconCount(WDock *dock, int count) {
|
||||
dock->icon_count += count;
|
||||
}
|
||||
WAppIcon *wDockGetIcon(WDock *dock, int index) {
|
||||
return dock->icon_array[index];
|
||||
}
|
||||
void wDockSetIcon(WDock *dock, int index, WAppIcon *icon) {
|
||||
dock->icon_array[index] = icon;
|
||||
}
|
||||
void wDockClearIcon(WDock *dock, int index) {
|
||||
dock->icon_array[index] = NULL;
|
||||
--dock->icon_count;
|
||||
}
|
||||
|
||||
int wDockGetType(WDock *dock) {
|
||||
return dock->type;
|
||||
}
|
||||
|
||||
int wDockIsAutoCollapse(WDock *dock) {
|
||||
return dock->auto_collapse;
|
||||
}
|
||||
|
||||
int wDockIsAutoRaiseLower(WDock *dock) {
|
||||
return dock->auto_raise_lower;
|
||||
}
|
||||
|
||||
int wDockIsOnRightSide(WDock *dock) {
|
||||
return dock->on_right_side;
|
||||
}
|
||||
|
||||
int wDockIsCollapsed(WDock *dock) {
|
||||
return dock->collapsed;
|
||||
}
|
||||
void wDockSetCollapsed(WDock *dock, int collapsed) {
|
||||
dock->collapsed = !!collapsed;
|
||||
}
|
||||
|
||||
int wDockGetAttractIcons(WDock *dock) {
|
||||
return dock->attract_icons;
|
||||
}
|
||||
void wDockSetAttractIcons(WDock *dock, int attract_icons) {
|
||||
dock->attract_icons = !!attract_icons;
|
||||
}
|
||||
|
||||
/***** Local variables ****/
|
||||
|
||||
static WMPropList *dCommand = NULL;
|
||||
@@ -475,7 +565,7 @@ static void removeIcons(WMArray *icons, WDock *dock)
|
||||
PlaceIcon(dock->screen_ptr, &aicon->x_pos, &aicon->y_pos,
|
||||
wGetHeadForWindow(aicon->icon->owner));
|
||||
XMoveWindow(dpy, aicon->icon->core->window, aicon->x_pos, aicon->y_pos);
|
||||
if (!dock->mapped || dock->collapsed)
|
||||
if (!dock->mapped || wDockIsCollapsed(dock))
|
||||
XMapWindow(dpy, aicon->icon->core->window);
|
||||
}
|
||||
}
|
||||
@@ -669,7 +759,7 @@ static void attractIconsCallback(WMenu *menu, WMenuEntry *entry)
|
||||
update_icon = True;
|
||||
}
|
||||
wDockAttachIcon(clip, aicon, x, y, update_icon);
|
||||
if (clip->collapsed || !clip->mapped)
|
||||
if (wDockIsCollapsed(clip) || !clip->mapped)
|
||||
XUnmapWindow(dpy, aicon->icon->core->window);
|
||||
}
|
||||
aicon = aicon->next;
|
||||
@@ -712,7 +802,7 @@ static void toggleCollapsedCallback(WMenu *menu, WMenuEntry *entry)
|
||||
|
||||
toggleCollapsed(entry->clientdata);
|
||||
|
||||
entry->flags.indicator_on = ((WDock *) entry->clientdata)->collapsed;
|
||||
entry->flags.indicator_on = wDockIsCollapsed((WDock *) entry->clientdata);
|
||||
|
||||
wMenuPaint(menu);
|
||||
}
|
||||
@@ -1033,7 +1123,7 @@ static void updateClipOptionsMenu(WMenu *menu, WDock *dock)
|
||||
|
||||
/* collapsed */
|
||||
entry = menu->entries[++index];
|
||||
entry->flags.indicator_on = dock->collapsed;
|
||||
entry->flags.indicator_on = wDockIsCollapsed(dock);
|
||||
entry->clientdata = dock;
|
||||
|
||||
/* auto-collapse */
|
||||
@@ -1356,7 +1446,7 @@ WDock *wDockCreate(WScreen *scr, int type, const char *name)
|
||||
dock->on_right_side = scr->dock->on_right_side;
|
||||
else
|
||||
dock->on_right_side = 1;
|
||||
dock->collapsed = 0;
|
||||
wDockSetCollapsed(dock, 0);
|
||||
dock->auto_collapse = 0;
|
||||
dock->auto_collapse_magic = NULL;
|
||||
dock->auto_raise_lower = 0;
|
||||
@@ -1394,7 +1484,7 @@ void wDockDestroy(WDock *dock)
|
||||
PlaceIcon(dock->screen_ptr, &aicon->x_pos, &aicon->y_pos,
|
||||
wGetHeadForWindow(aicon->icon->owner));
|
||||
XMoveWindow(dpy, aicon->icon->core->window, aicon->x_pos, aicon->y_pos);
|
||||
if (!dock->mapped || dock->collapsed)
|
||||
if (!dock->mapped || wDockIsCollapsed(dock))
|
||||
XMapWindow(dpy, aicon->icon->core->window);
|
||||
}
|
||||
}
|
||||
@@ -1427,7 +1517,7 @@ void wClipIconPaint(WAppIcon *aicon)
|
||||
snprintf(ws_number, sizeof ws_number, "%u", scr->current_workspace + 1);
|
||||
nlength = strlen(ws_number);
|
||||
|
||||
if (wPreferences.flags.noclip || !workspace->clip->collapsed)
|
||||
if (wPreferences.flags.noclip || !wDockIsCollapsed(workspace->clip))
|
||||
color = scr->clip_title_color[CLIP_NORMAL];
|
||||
else
|
||||
color = scr->clip_title_color[CLIP_COLLAPSED];
|
||||
@@ -1577,7 +1667,7 @@ static WMPropList *dockSaveState(WDock *dock)
|
||||
WMReleasePropList(list);
|
||||
|
||||
if (dock->type == WM_CLIP || dock->type == WM_DRAWER) {
|
||||
value = (dock->collapsed ? dYes : dNo);
|
||||
value = (wDockIsCollapsed(dock) ? dYes : dNo);
|
||||
WMPutInPLDictionary(dock_state, dCollapsed, value);
|
||||
|
||||
value = (dock->auto_collapse ? dYes : dNo);
|
||||
@@ -1886,7 +1976,7 @@ WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type)
|
||||
COMPLAIN("Collapsed");
|
||||
} else {
|
||||
if (strcasecmp(WMGetFromPLString(value), "YES") == 0)
|
||||
dock->collapsed = 1;
|
||||
wDockSetCollapsed(dock, 1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1898,7 +1988,7 @@ WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type)
|
||||
} else {
|
||||
if (strcasecmp(WMGetFromPLString(value), "YES") == 0) {
|
||||
dock->auto_collapse = 1;
|
||||
dock->collapsed = 1;
|
||||
wDockSetCollapsed(dock, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
47
src/dock.h
47
src/dock.h
@@ -25,45 +25,38 @@
|
||||
|
||||
#include "appicon.h"
|
||||
|
||||
typedef struct WDock {
|
||||
WScreen *screen_ptr;
|
||||
int x_pos, y_pos; /* position of the first icon */
|
||||
|
||||
WAppIcon **icon_array; /* array of docked icons */
|
||||
int max_icons;
|
||||
|
||||
int icon_count;
|
||||
|
||||
#define WM_DOCK 0
|
||||
#define WM_CLIP 1
|
||||
#define WM_DRAWER 2
|
||||
int type;
|
||||
|
||||
WMagicNumber auto_expand_magic;
|
||||
WMagicNumber auto_collapse_magic;
|
||||
WMagicNumber auto_raise_magic;
|
||||
WMagicNumber auto_lower_magic;
|
||||
unsigned int auto_collapse:1; /* if clip auto-collapse itself */
|
||||
unsigned int auto_raise_lower:1; /* if clip should raise/lower when
|
||||
* entered/leaved */
|
||||
unsigned int on_right_side:1;
|
||||
unsigned int collapsed:1;
|
||||
unsigned int mapped:1;
|
||||
unsigned int lowered:1;
|
||||
unsigned int attract_icons:1; /* If clip should attract app-icons */
|
||||
typedef struct WDock WDock;
|
||||
|
||||
unsigned int lclip_button_pushed:1;
|
||||
unsigned int rclip_button_pushed:1;
|
||||
/******** Accessors/mutators ********/
|
||||
int wDockGetXPos(WDock *dock);
|
||||
int wDockGetYPos(WDock *dock);
|
||||
|
||||
struct WMenu *menu;
|
||||
int wDockGetMaxIcons(WDock *dock);
|
||||
int wDockGetIconCount(WDock *dock);
|
||||
void wDockAddIconCount(WDock *dock, int count);
|
||||
WAppIcon *wDockGetIcon(WDock *dock, int index);
|
||||
void wDockSetIcon(WDock *doc, int index, WAppIcon *icon);
|
||||
void wDockClearIcon(WDock *dock, int index);
|
||||
|
||||
struct WDDomain *defaults;
|
||||
} WDock;
|
||||
int wDockGetType(WDock *dock);
|
||||
|
||||
int wDockIsAutoCollapse(WDock *dock);
|
||||
|
||||
int wDockIsAutoRaiseLower(WDock *dock);
|
||||
|
||||
int wDockIsOnRightSide(WDock *dock);
|
||||
|
||||
int wDockIsCollapsed(WDock *dock);
|
||||
void wDockSetCollapsed(WDock *dock, int collapsed);
|
||||
|
||||
int wDockGetAttractIcons(WDock *dock);
|
||||
void wDockSetAttractIcons(WDock *dock, int attract_icons);
|
||||
|
||||
/******** Lifecycle/resource management ********/
|
||||
WDock *wDockCreate(WScreen *scr, int type, const char *name);
|
||||
WDock *wDockRestoreState(WScreen *scr, WMPropList *dock_state, int type);
|
||||
|
||||
|
||||
@@ -398,8 +398,8 @@ void ShowDockAppSettingsPanel(WAppIcon * aicon)
|
||||
else if (y + pheight > rect.pos.y + rect.size.height)
|
||||
y = rect.pos.y + rect.size.height - pheight - 3 * WMScaleY(10);
|
||||
|
||||
if (aicon->dock && aicon->dock->type == WM_DOCK) {
|
||||
if (aicon->dock->on_right_side)
|
||||
if (aicon->dock && wDockGetType(aicon->dock) == WM_DOCK) {
|
||||
if (wDockIsOnRightSide(aicon->dock))
|
||||
x = rect.pos.x + rect.size.width / 2;
|
||||
else
|
||||
x = rect.pos.x + rect.size.width / 2 - pwidth - WMScaleX(2);
|
||||
|
||||
@@ -121,7 +121,7 @@ void PlaceIcon(WScreen *scr, int *x_ret, int *y_ret, int head)
|
||||
if (scr->dock) {
|
||||
int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
|
||||
|
||||
if (scr->dock->on_right_side)
|
||||
if (wDockIsOnRightSide(scr->dock))
|
||||
area.x2 -= offset;
|
||||
else
|
||||
area.x1 += offset;
|
||||
|
||||
@@ -927,7 +927,7 @@ void wScreenRestoreState(WScreen * scr)
|
||||
}
|
||||
|
||||
if (!wPreferences.flags.nodrawer) {
|
||||
if (!scr->dock->on_right_side) {
|
||||
if (!wDockIsOnRightSide(scr->dock)) {
|
||||
/* Drawer tile was created early in wScreenInit() -> wReadDefaults(). At
|
||||
* that time, scr->dock was NULL and the tile was created as if we were on
|
||||
* the right side. If we aren't, redo it now. */
|
||||
|
||||
@@ -278,7 +278,7 @@ static WMPropList *makeWindowState(WWindow * wwin, WApplication * wapp)
|
||||
break;
|
||||
}
|
||||
assert(dc != NULL);
|
||||
name = dc->adrawer->icon_array[0]->wm_instance;
|
||||
name = wDockGetIcon(dc->adrawer, 0)->wm_instance;
|
||||
}
|
||||
dock = WMCreatePLString(name);
|
||||
WMPutInPLDictionary(win_state, sDock, dock);
|
||||
@@ -536,7 +536,7 @@ void wSessionRestoreState(WScreen *scr)
|
||||
WDrawerChain *dc;
|
||||
for (dc = scr->drawers; dc != NULL; dc = dc->next)
|
||||
{
|
||||
if (strcmp(dc->adrawer->icon_array[0]->wm_instance, tmp) == 0)
|
||||
if (strcmp(wDockGetIcon(dc->adrawer, 0)->wm_instance, tmp) == 0)
|
||||
{
|
||||
dock = dc->adrawer;
|
||||
break;
|
||||
@@ -554,8 +554,8 @@ void wSessionRestoreState(WScreen *scr)
|
||||
|
||||
found = 0;
|
||||
if (dock != NULL) {
|
||||
for (j = 0; j < dock->max_icons; j++) {
|
||||
btn = dock->icon_array[j];
|
||||
for (j = 0; j < wDockGetMaxIcons(dock); j++) {
|
||||
btn = wDockGetIcon(dock, j);
|
||||
if (btn && is_same(instance, btn->wm_instance) &&
|
||||
is_same(class, btn->wm_class) &&
|
||||
is_same(command, btn->command) &&
|
||||
|
||||
@@ -650,10 +650,10 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
|
||||
wArrangeIcons(scr, False);
|
||||
|
||||
if (scr->dock)
|
||||
wAppIconPaint(scr->dock->icon_array[0]);
|
||||
wAppIconPaint(wDockGetIcon(scr->dock, 0));
|
||||
|
||||
if (!wPreferences.flags.noclip && (scr->workspaces[workspace]->clip->auto_collapse ||
|
||||
scr->workspaces[workspace]->clip->auto_raise_lower)) {
|
||||
if (!wPreferences.flags.noclip && (wDockIsAutoCollapse(scr->workspaces[workspace]->clip) ||
|
||||
wDockIsAutoRaiseLower(scr->workspaces[workspace]->clip))) {
|
||||
/* to handle enter notify. This will also */
|
||||
XUnmapWindow(dpy, scr->clip_icon->icon->core->window);
|
||||
XMapWindow(dpy, scr->clip_icon->icon->core->window);
|
||||
@@ -925,8 +925,8 @@ void wWorkspaceRestoreState(WScreen *scr)
|
||||
* There we only set icon->omnipresent to know which icons we
|
||||
* need to set here.
|
||||
*/
|
||||
for (j = 0; j < scr->workspaces[i]->clip->max_icons; j++) {
|
||||
WAppIcon *aicon = scr->workspaces[i]->clip->icon_array[j];
|
||||
for (j = 0; j < wDockGetMaxIcons(scr->workspaces[i]->clip); j++) {
|
||||
WAppIcon *aicon = wDockGetIcon(scr->workspaces[i]->clip, j);
|
||||
int k;
|
||||
|
||||
if (!aicon || !aicon->omnipresent)
|
||||
@@ -938,21 +938,20 @@ void wWorkspaceRestoreState(WScreen *scr)
|
||||
continue;
|
||||
|
||||
/* Move this appicon from workspace i to workspace 0 */
|
||||
scr->workspaces[i]->clip->icon_array[j] = NULL;
|
||||
scr->workspaces[i]->clip->icon_count--;
|
||||
wDockClearIcon(scr->workspaces[i]->clip, j);
|
||||
|
||||
added_omnipresent_icons++;
|
||||
/* If there are too many omnipresent appicons, we are in trouble */
|
||||
assert(scr->workspaces[0]->clip->icon_count + added_omnipresent_icons
|
||||
<= scr->workspaces[0]->clip->max_icons);
|
||||
assert(wDockGetIconCount(scr->workspaces[0]->clip) + added_omnipresent_icons
|
||||
<= wDockGetMaxIcons(scr->workspaces[0]->clip));
|
||||
/* Find first free spot on workspace 0 */
|
||||
for (k = 0; k < scr->workspaces[0]->clip->max_icons; k++)
|
||||
if (scr->workspaces[0]->clip->icon_array[k] == NULL)
|
||||
for (k = 0; k < wDockGetMaxIcons(scr->workspaces[0]->clip); k++)
|
||||
if (wDockGetIcon(scr->workspaces[0]->clip, k) == NULL)
|
||||
break;
|
||||
scr->workspaces[0]->clip->icon_array[k] = aicon;
|
||||
wDockSetIcon(scr->workspaces[0]->clip, k, aicon);
|
||||
aicon->dock = scr->workspaces[0]->clip;
|
||||
}
|
||||
scr->workspaces[0]->clip->icon_count += added_omnipresent_icons;
|
||||
wDockAddIconCount(scr->workspaces[0]->clip, added_omnipresent_icons);
|
||||
}
|
||||
|
||||
WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void *)(uintptr_t) i);
|
||||
|
||||
16
src/xdnd.c
16
src/xdnd.c
@@ -205,9 +205,9 @@ static Bool acceptXDND(Window window)
|
||||
icon_pos = -1;
|
||||
dock = scr->dock;
|
||||
if (dock) {
|
||||
for (i = 0; i < dock->max_icons; i++) {
|
||||
if (dock->icon_array[i]
|
||||
&& dock->icon_array[i]->icon->core->window == window) {
|
||||
for (i = 0; i < wDockGetMaxIcons(dock); i++) {
|
||||
if (wDockGetIcon(dock, i)
|
||||
&& wDockGetIcon(dock, i)->icon->core->window == window) {
|
||||
icon_pos = i;
|
||||
break;
|
||||
}
|
||||
@@ -216,9 +216,9 @@ static Bool acceptXDND(Window window)
|
||||
if (icon_pos < 0) {
|
||||
dock = scr->workspaces[scr->current_workspace]->clip;
|
||||
if (dock) {
|
||||
for (i = 0; i < dock->max_icons; i++) {
|
||||
if (dock->icon_array[i]
|
||||
&& dock->icon_array[i]->icon->core->window == window) {
|
||||
for (i = 0; i < wDockGetMaxIcons(dock); i++) {
|
||||
if (wDockGetIcon(dock, i)
|
||||
&& wDockGetIcon(dock, i)->icon->core->window == window) {
|
||||
icon_pos = i;
|
||||
break;
|
||||
}
|
||||
@@ -228,10 +228,10 @@ static Bool acceptXDND(Window window)
|
||||
if (icon_pos < 0)
|
||||
return False;
|
||||
|
||||
if (isAwareXDND(dock->icon_array[icon_pos]->icon->icon_win))
|
||||
if (isAwareXDND(wDockGetIcon(dock, icon_pos)->icon->icon_win))
|
||||
return False;
|
||||
|
||||
if (dock->icon_array[icon_pos]->dnd_command != NULL)
|
||||
if (wDockGetIcon(dock, icon_pos)->dnd_command != NULL)
|
||||
return True;
|
||||
|
||||
return False;
|
||||
|
||||
@@ -376,10 +376,10 @@ WArea wGetUsableAreaForHead(WScreen * scr, int head, WArea * totalAreaPtr, Bool
|
||||
|
||||
if (noicons) {
|
||||
/* check if user wants dock covered */
|
||||
if (scr->dock && wPreferences.no_window_over_dock && wAppIconTouchesHead(scr->dock->icon_array[0], head)) {
|
||||
if (scr->dock && wPreferences.no_window_over_dock && wAppIconTouchesHead(wDockGetIcon(scr->dock, 0), head)) {
|
||||
int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
|
||||
|
||||
if (scr->dock->on_right_side)
|
||||
if (wDockIsOnRightSide(scr->dock))
|
||||
usableArea.x2 -= offset;
|
||||
else
|
||||
usableArea.x1 += offset;
|
||||
@@ -389,10 +389,10 @@ WArea wGetUsableAreaForHead(WScreen * scr, int head, WArea * totalAreaPtr, Bool
|
||||
if (scr->dock && wPreferences.no_window_over_icons && !wPreferences.no_window_over_dock && (wPreferences.icon_yard & IY_VERT)) {
|
||||
int offset = wPreferences.icon_size + DOCK_EXTRA_SPACE;
|
||||
|
||||
if (scr->dock->on_right_side && (wPreferences.icon_yard & IY_RIGHT))
|
||||
if (wDockIsOnRightSide(scr->dock) && (wPreferences.icon_yard & IY_RIGHT))
|
||||
usableArea.x2 -= offset;
|
||||
/* can't use IY_LEFT in if, it's 0 ... */
|
||||
if (!scr->dock->on_right_side && !(wPreferences.icon_yard & IY_RIGHT))
|
||||
if (!wDockIsOnRightSide(scr->dock) && !(wPreferences.icon_yard & IY_RIGHT))
|
||||
usableArea.x1 += offset;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user