On Thu, 04 Apr 2013, Daniel Déchelotte escribió:

> > 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

Probably. I have a long history about wrong commit messages. Carlos should love 
me for 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

Is the same idea that the previous patch.

src->clip_icon and scr->workspaces[workspace]->clip->icon_array[0] are equal,
and the patch couldn't make sense, But is not the same if the function for dock 
and clip is common:

Without my patch, the code could be:

if (type == WM_DOCK)
        scr->workspaces[workspace]->clip->icon_array[0] = icon;
if (type == WM_CLIP)
        src->clip_icon = icon;

With my patch, the code is:

scr->workspaces[workspace]->clip->icon_array[0] = icon;

And we are sure that the right icon is there.

kix

> -- 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].
> > 

-- 
||// //\\// Rodolfo "kix" Garcia
||\\// //\\ http://www.kix.es/


-- 
To unsubscribe, send mail to [email protected].

Reply via email to