> From: "Rodolfo García Peñas (kix)" <[email protected]> > > The functions that works with the Clip WAppIcon should call the right > icon, not always the clip_icon variable in the screen.h file.
The commit message looks wrong, suggesting that "the functions that work with the Clip WAppIcon [are not calling] the right icon." I believe they are calling the right appicon. There are n clips (one per workspace), but they all share the same appicon as their first appicon (in icon_array[0]). And that appicon is scr->clip_icon (unfortunate name, clip_aicon might have been better). So I believe your patch will have strictly no consequences at runtime, because scr->workspaces[workspace]->clip->icon_array[0]) is always equal to scr->clip_icon, for all workspaces, and only makes the code less readable :-P -- Daniel > Every Clip has a different WAppIcon (pointed to the same clip_icon), > stored in icon_array[0], but the functions working with the clip > should > use the icon for the current Clip, not the common Clip icon image. > > This patch replaces the calls to the clip_icon variables with the > image > for the current workspace Clip image. > > Signed-off-by: Rodolfo García Peñas (kix) <[email protected]> > --- > src/balloon.c | 3 ++- > src/defaults.c | 2 +- > src/dock.c | 42 +++++++++++++++++++++++++----------------- > src/dockedapp.c | 4 +++- > src/workspace.c | 14 ++++++++------ > 5 files changed, 39 insertions(+), 26 deletions(-) > > diff --git a/src/balloon.c b/src/balloon.c > index c00375a..d845291 100644 > --- a/src/balloon.c > +++ b/src/balloon.c > @@ -39,6 +39,7 @@ > #include "framewin.h" > #include "icon.h" > #include "appicon.h" > +#include "dock.h" > #include "funcs.h" > #include "workspace.h" > #include "balloon.h" > @@ -440,7 +441,7 @@ static void appiconBalloon(WObjDescriptor * > object) > char *tmp; > > /* Show balloon if it is the Clip and the workspace name is > 5 > chars */ > - if (object->parent == scr->clip_icon) { > + if (object->parent == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > if (strlen(scr->workspaces[scr->current_workspace]->name) > 5) { > scr->balloon->text = > wstrdup(scr->workspaces[scr->current_workspace]->name); > } else { > diff --git a/src/defaults.c b/src/defaults.c > index 6c23064..fdd76c2 100644 > --- a/src/defaults.c > +++ b/src/defaults.c > @@ -1190,7 +1190,7 @@ void wDefaultUpdateIcons(WScreen *scr) > } > > if (!wPreferences.flags.noclip) > - wClipIconPaint(scr->clip_icon); > + > > wClipIconPaint(scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > > while (wwin) { > if (wwin->icon && wwin->flags.miniaturized) > diff --git a/src/dock.c b/src/dock.c > index 09d2804..cb6af0b 100644 > --- a/src/dock.c > +++ b/src/dock.c > @@ -506,7 +506,7 @@ static void keepIconsCallback(WMenu *menu, > WMenuEntry *entry) > selectedIcons = getSelected(dock); > > if (!WMGetArrayItemCount(selectedIcons) > - && clickedIcon != dock->screen_ptr->clip_icon) { > + && clickedIcon != > dock->screen_ptr->workspaces[dock->screen_ptr->current_workspace]->clip->icon_array[0]) > { > char *command = NULL; > > if (!clickedIcon->command && !clickedIcon->editing) { > @@ -777,7 +777,7 @@ static void switchWSCommand(WMenu *menu, > WMenuEntry *entry) > XUnmapWindow(dpy, btn->icon->core->window); > } > } > - } else if (icon != scr->clip_icon) { > + } else if (icon != > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > if (wDockFindFreeSlot(dest, &x, &y)) { > moveIconBetweenDocks(src, dest, icon, x, y); > XUnmapWindow(dpy, icon->icon->core->window); > @@ -1206,7 +1206,9 @@ static void clipIconExpose(WObjDescriptor > *desc, XEvent *event) > > static void dockIconPaint(WAppIcon *btn) > { > - if (btn == btn->icon->core->screen_ptr->clip_icon) { > + WScreen *scr = btn->icon->core->screen_ptr; > + > + if (btn == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > wClipIconPaint(btn); > } else { > wAppIconPaint(btn); > @@ -1216,6 +1218,7 @@ static void dockIconPaint(WAppIcon *btn) > > static WMPropList *make_icon_state(WAppIcon *btn) > { > + WScreen *scr = btn->icon->core->screen_ptr; > WMPropList *node = NULL; > WMPropList *command, *autolaunch, *lock, *name, *forced; > WMPropList *position, *buggy, *omnipresent; > @@ -1239,13 +1242,13 @@ static WMPropList *make_icon_state(WAppIcon > *btn) > wfree(tmp); > > forced = btn->forced_dock ? dYes : dNo; > - > buggy = btn->buggy_app ? dYes : dNo; > > - if (btn == btn->icon->core->screen_ptr->clip_icon) > + if (btn == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) > snprintf(buffer, sizeof(buffer), "%i,%i", btn->x_pos, > btn->y_pos); > else > snprintf(buffer, sizeof(buffer), "%hi,%hi", btn->xindex, > btn->yindex); > + > position = WMCreatePLString(buffer); > > node = WMCreatePLDictionary(dCommand, command, > @@ -1372,7 +1375,7 @@ void wClipSaveState(WScreen *scr) > { > WMPropList *clip_state; > > - clip_state = make_icon_state(scr->clip_icon); > + clip_state = > make_icon_state(scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > > WMPutInPLDictionary(scr->session_state, dClip, clip_state); > > @@ -3143,7 +3146,7 @@ static void openDockMenu(WDock *dock, WAppIcon > *aicon, XEvent *event) > > /* Rename Workspace */ > entry = dock->menu->entries[++index]; > - if (aicon == scr->clip_icon) { > + if (aicon == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > entry->callback = renameCallback; > entry->clientdata = dock; > entry->flags.indicator = 0; > @@ -3166,7 +3169,7 @@ static void openDockMenu(WDock *dock, WAppIcon > *aicon, XEvent *event) > entry = dock->menu->entries[++index]; > entry->clientdata = aicon; > entry->flags.indicator_on = aicon->icon->selected; > - wMenuSetEnabled(dock->menu, index, aicon != scr->clip_icon); > + wMenuSetEnabled(dock->menu, index, aicon != > scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > > /* select/unselect all icons */ > entry = dock->menu->entries[++index]; > @@ -3309,7 +3312,7 @@ static void iconDblClick(WObjDescriptor *desc, > XEvent *event) > if (event->xbutton.state & MOD_MASK) { > /* raise/lower dock */ > toggleLowered(dock); > - } else if (btn == dock->screen_ptr->clip_icon) { > + } else if (btn == > dock->screen_ptr->workspaces[dock->screen_ptr->current_workspace]->clip->icon_array[0]) > { > if (getClipButton(event->xbutton.x, > event->xbutton.y) == > CLIP_IDLE) > toggleCollapsed(dock); > else > @@ -3694,14 +3697,14 @@ static void handleClipChangeWorkspace(WScreen > *scr, XEvent *event) > XEvent ev; > int done, direction, new_ws; > int new_dir; > - WDock *clip = scr->clip_icon->dock; > + WDock *clip = > scr->workspaces[scr->current_workspace]->clip->icon_array[0]->dock; > > direction = getClipButton(event->xbutton.x, event->xbutton.y); > > clip->lclip_button_pushed = direction == CLIP_REWIND; > clip->rclip_button_pushed = direction == CLIP_FORWARD; > > - wClipIconPaint(scr->clip_icon); > + > > wClipIconPaint(scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > done = 0; > while (!done) { > WMMaskEvent(dpy, ExposureMask | ButtonMotionMask | > ButtonReleaseMask | ButtonPressMask, &ev); > @@ -3716,7 +3719,7 @@ static void handleClipChangeWorkspace(WScreen > *scr, XEvent *event) > direction = new_dir; > clip->lclip_button_pushed = direction == > CLIP_REWIND; > clip->rclip_button_pushed = direction == > CLIP_FORWARD; > - wClipIconPaint(scr->clip_icon); > + > > wClipIconPaint(scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > } > break; > > @@ -3748,7 +3751,7 @@ static void handleClipChangeWorkspace(WScreen > *scr, XEvent *event) > wWorkspaceChange(scr, scr->workspace_count - 1); > } > > - wClipIconPaint(scr->clip_icon); > + > > wClipIconPaint(scr->workspaces[scr->current_workspace]->clip->icon_array[0]); > } > > static void iconMouseDown(WObjDescriptor *desc, XEvent *event) > @@ -3780,7 +3783,9 @@ static void iconMouseDown(WObjDescriptor *desc, > XEvent *event) > else > wDockRaise(dock); > > - if ((event->xbutton.state & ShiftMask) && aicon != > scr->clip_icon > && dock->type != WM_DOCK) { > + if ((event->xbutton.state & ShiftMask) && > + aicon != > scr->workspaces[scr->current_workspace]->clip->icon_array[0] && > + dock->type != WM_DOCK) { > wIconSelect(aicon->icon); > return; > } > @@ -3796,7 +3801,8 @@ static void iconMouseDown(WObjDescriptor *desc, > XEvent *event) > if (wPreferences.single_click && !hasMoved) > iconDblClick(desc, event); > } > - } else if (event->xbutton.button == Button2 && dock->type == > WM_CLIP && aicon == scr->clip_icon) { > + } else if (event->xbutton.button == Button2 && dock->type == > WM_CLIP && > + aicon == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > if (scr->clip_ws_menu) { > WMenu *wsMenu = scr->clip_ws_menu; > int xpos; > @@ -3816,7 +3822,8 @@ static void iconMouseDown(WObjDescriptor *desc, > XEvent *event) > (*desc->handle_mousedown) (desc, event); > } > } else if (event->xbutton.button == Button2 && dock->type == > WM_CLIP && > - (event->xbutton.state & ShiftMask) && aicon != > scr->clip_icon) > { > + (event->xbutton.state & ShiftMask) && > + aicon != > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) { > wClipMakeIconOmnipresent(aicon, !aicon->omnipresent); > } else if (event->xbutton.button == Button3) { > if (event->xbutton.send_event && > @@ -4010,7 +4017,8 @@ int wClipMakeIconOmnipresent(WAppIcon *aicon, > int omnipresent) > WAppIconChain *new_entry, *tmp, *tmp1; > int status = WO_SUCCESS; > > - if ((scr->dock && aicon->dock == scr->dock) || aicon == > scr->clip_icon) > + if ((scr->dock && aicon->dock == scr->dock) || > + aicon == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) > return WO_NOT_APPLICABLE; > > if (aicon->omnipresent == omnipresent) > diff --git a/src/dockedapp.c b/src/dockedapp.c > index 6c6d1f0..13dad2b 100644 > --- a/src/dockedapp.c > +++ b/src/dockedapp.c > @@ -36,6 +36,7 @@ > #include "funcs.h" > #include "defaults.h" > #include "framewin.h" > +#include "workspace.h" > #include "xinerama.h" > > /**** Global variables ****/ > @@ -176,8 +177,9 @@ static void panelBtnCallback(WMWidget * self, > void *data) > wfree(buf); > } else { > WAppIcon *aicon = panel->editedIcon; > + WScreen *scr = aicon->icon->core->screen_ptr; > > - if (aicon == aicon->icon->core->screen_ptr->clip_icon) > + if (aicon == > scr->workspaces[scr->current_workspace]->clip->icon_array[0]) > wClipIconPaint(aicon); > else > wAppIconPaint(aicon); > diff --git a/src/workspace.c b/src/workspace.c > index 2f94427..f333e10 100644 > --- a/src/workspace.c > +++ b/src/workspace.c > @@ -603,17 +603,19 @@ void wWorkspaceForceChange(WScreen * scr, int > workspace) > if (!wPreferences.sticky_icons) > wArrangeIcons(scr, False); > > + /* The Dock */ > if (scr->dock) > wAppIconPaint(scr->dock->icon_array[0]); > > - if (scr->clip_icon) { > + /* The Clip in the current workspace */ > + if (scr->workspaces[workspace]->clip->icon_array[0]) { > if (scr->workspaces[workspace]->clip->auto_collapse || > scr->workspaces[workspace]->clip->auto_raise_lower) { > /* to handle enter notify. This will also */ > - XUnmapWindow(dpy, scr->clip_icon->icon->core->window); > - XMapWindow(dpy, scr->clip_icon->icon->core->window); > + XUnmapWindow(dpy, > scr->workspaces[workspace]->clip->icon_array[0]->icon->core->window); > + XMapWindow(dpy, > scr->workspaces[workspace]->clip->icon_array[0]->icon->core->window); > } else { > - wClipIconPaint(scr->clip_icon); > + > wClipIconPaint(scr->workspaces[workspace]->clip->icon_array[0]); > } > } > wScreenUpdateUsableArea(scr); > @@ -689,8 +691,8 @@ void wWorkspaceRename(WScreen * scr, int > workspace, char *name) > } > } > > - if (scr->clip_icon) > - wClipIconPaint(scr->clip_icon); > + if (scr->workspaces[workspace]->clip->icon_array[0]) > + wClipIconPaint(scr->workspaces[workspace]->clip->icon_array[0]); > > WMPostNotificationName(WMNWorkspaceNameChanged, scr, (void > *)(uintptr_t) workspace); > } > -- > 1.7.10.4 > > > -- > To unsubscribe, send mail to > [email protected]. > -- To unsubscribe, send mail to [email protected].
