From: "Rodolfo García Peñas (kix)" <[email protected]>
The function wAppIconPaint has a new argument. This argument is used
to force an icon create if needed.
---
src/actions.c | 12 ++++++------
src/appicon.c | 27 +++++++++++++++------------
src/appicon.h | 2 +-
src/application.c | 4 ++--
src/client.c | 4 +++-
src/defaults.c | 9 +++++----
src/dock.c | 26 ++++++++++++++------------
src/dockedapp.c | 8 +++++---
src/winspector.c | 8 ++++++--
src/wmspec.c | 3 ++-
src/workspace.c | 2 +-
11 files changed, 60 insertions(+), 45 deletions(-)
diff --git a/src/actions.c b/src/actions.c
index 13ed426..e168c56 100644
--- a/src/actions.c
+++ b/src/actions.c
@@ -1540,12 +1540,12 @@ void wHideApplication(WApplication *wapp)
wapp->flags.hidden = 1;
- if (wPreferences.auto_arrange_icons) {
+ if (wPreferences.auto_arrange_icons)
wArrangeIcons(scr, True);
- }
+
#ifdef HIDDENDOT
if (wapp->app_icon)
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, False);
#endif
}
@@ -1669,11 +1669,11 @@ void wUnhideApplication(WApplication *wapp, Bool
miniwindows, Bool bringToCurren
wSetFocusTo(scr, focused);
}
wapp->last_focused = NULL;
- if (wPreferences.auto_arrange_icons) {
+ if (wPreferences.auto_arrange_icons)
wArrangeIcons(scr, True);
- }
+
#ifdef HIDDENDOT
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, False);
#endif
}
diff --git a/src/appicon.c b/src/appicon.c
index 8a6841d..4426e7c 100644
--- a/src/appicon.c
+++ b/src/appicon.c
@@ -238,7 +238,7 @@ void paint_app_icon(WApplication *wapp)
wArrangeIcons(scr, True);
}
-void removeAppIconFor(WApplication * wapp)
+void removeAppIconFor(WApplication *wapp)
{
if (!wapp->app_icon)
return;
@@ -252,8 +252,7 @@ void removeAppIconFor(WApplication * wapp)
wapp->app_icon->pid = 0;
wapp->app_icon->icon->owner = NULL;
wapp->app_icon->icon->icon_win = None;
- wapp->app_icon->icon->force_paint = 1;
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, True);
} else if (wapp->app_icon->docked) {
wapp->app_icon->running = 0;
wDockDetach(wapp->app_icon->dock, wapp->app_icon);
@@ -371,7 +370,7 @@ static void updateDockNumbers(WScreen * scr)
}
#endif /* WS_INDICATOR */
-void wAppIconPaint(WAppIcon * aicon)
+void wAppIconPaint(WAppIcon *aicon, Bool update_icon)
{
WApplication *wapp;
WScreen *scr = aicon->icon->core->screen_ptr;
@@ -381,6 +380,9 @@ void wAppIconPaint(WAppIcon * aicon)
else
wapp = NULL;
+ if (update_icon)
+ aicon->icon->force_paint = 1;
+
wIconPaint(aicon->icon);
# ifdef WS_INDICATOR
@@ -484,7 +486,7 @@ static void unhideHereCallback(WMenu * menu, WMenuEntry *
entry)
wUnhideApplication(wapp, False, True);
}
-static void setIconCallback(WMenu * menu, WMenuEntry * entry)
+static void setIconCallback(WMenu *menu, WMenuEntry *entry)
{
WAppIcon *icon = ((WApplication *) entry->clientdata)->app_icon;
char *file = NULL;
@@ -513,7 +515,9 @@ static void setIconCallback(WMenu * menu, WMenuEntry *
entry)
_("Could not open specified icon file"),
_("OK"), NULL, NULL);
} else {
wDefaultChangeIcon(scr, icon->wm_instance,
icon->wm_class, file);
- wAppIconPaint(icon);
+ /* The image was updated previously at
wIconChangeImageFile,
+ * so we don't need update it here again */
+ wAppIconPaint(icon, False);
}
if (file)
wfree(file);
@@ -568,7 +572,7 @@ static void killCallback(WMenu * menu, WMenuEntry * entry)
WCHANGE_STATE(WSTATE_NORMAL);
}
-static WMenu *createApplicationMenu(WScreen * scr)
+static WMenu *createApplicationMenu(WScreen *scr)
{
WMenu *menu;
@@ -619,12 +623,12 @@ static void openApplicationMenu(WApplication * wapp, int
x, int y)
/******************************************************************/
-static void iconExpose(WObjDescriptor * desc, XEvent * event)
+static void iconExpose(WObjDescriptor *desc, XEvent *event)
{
- wAppIconPaint(desc->parent);
+ wAppIconPaint(desc->parent, False);
}
-static void iconDblClick(WObjDescriptor * desc, XEvent * event)
+static void iconDblClick(WObjDescriptor *desc, XEvent *event)
{
WAppIcon *aicon = desc->parent;
WApplication *wapp;
@@ -980,12 +984,11 @@ void create_appicon_from_dock(WWindow *wwin, WApplication
*wapp, Window main_win
WWindow *mainw = wapp->main_window_desc;
wapp->app_icon->running = 1;
- wapp->app_icon->icon->force_paint = 1;
wapp->app_icon->icon->owner = mainw;
if (mainw->wm_hints && (mainw->wm_hints->flags &
IconWindowHint))
wapp->app_icon->icon->icon_win =
mainw->wm_hints->icon_window;
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, True);
save_appicon(wapp->app_icon, True);
}
}
diff --git a/src/appicon.h b/src/appicon.h
index 6f72c8e..f6eabd6 100644
--- a/src/appicon.h
+++ b/src/appicon.h
@@ -74,7 +74,7 @@ WAppIcon *wAppIconCreateForDock(WScreen *scr, char *command,
char *wm_instance,
void create_appicon_from_dock(WWindow *wwin, WApplication *wapp, Window
main_window);
void wAppIconDestroy(WAppIcon *aicon);
-void wAppIconPaint(WAppIcon *aicon);
+void wAppIconPaint(WAppIcon *aicon, Bool update_icon);
void wAppIconMove(WAppIcon *aicon, int x, int y);
void makeAppIconFor(WApplication * wapp);
void removeAppIconFor(WApplication * wapp);
diff --git a/src/application.c b/src/application.c
index 7c52fa0..274cff6 100644
--- a/src/application.c
+++ b/src/application.c
@@ -215,7 +215,7 @@ void wApplicationActivate(WApplication *wapp)
#ifdef NEWAPPICON
if (wapp->app_icon) {
wIconSetHighlited(wapp->app_icon->icon, True);
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, False);
}
#endif
}
@@ -225,7 +225,7 @@ void wApplicationDeactivate(WApplication *wapp)
#ifdef NEWAPPICON
if (wapp->app_icon) {
wIconSetHighlited(wapp->app_icon->icon, False);
- wAppIconPaint(wapp->app_icon);
+ wAppIconPaint(wapp->app_icon, False);
}
#endif
}
diff --git a/src/client.c b/src/client.c
index 3287306..f21b90c 100644
--- a/src/client.c
+++ b/src/client.c
@@ -478,7 +478,9 @@ void wClientCheckProperty(WWindow * wwin, XPropertyEvent *
event)
wapp = wApplicationOf(wwin->main_window);
if (wapp && wapp->app_icon) {
wIconUpdate(wapp->app_icon->icon);
- wAppIconPaint(wapp->app_icon);
+ /* The icon was updated in wIconUpdate,
so we don't
+ * need update it again here */
+ wAppIconPaint(wapp->app_icon, False);
}
}
diff --git a/src/defaults.c b/src/defaults.c
index 458093c..3c7d6b5 100644
--- a/src/defaults.c
+++ b/src/defaults.c
@@ -1118,7 +1118,7 @@ void wReadDefaults(WScreen * scr, WMPropList * new_dict)
}
}
-void wDefaultUpdateIcons(WScreen * scr)
+void wDefaultUpdateIcons(WScreen *scr)
{
WAppIcon *aicon = scr->app_icon_list;
WWindow *wwin = scr->focused_window;
@@ -1130,7 +1130,9 @@ void wDefaultUpdateIcons(WScreen * scr)
if ((file && aicon->icon->file && strcmp(file,
aicon->icon->file) != 0)
|| (file && !aicon->icon->file)) {
wIconChangeImageFile(aicon->icon, file);
- wAppIconPaint(aicon);
+ /* The image was updated previously at
wIconChangeImageFile,
+ * so we don't need update it here again */
+ wAppIconPaint(aicon, False);
}
aicon = aicon->next;
}
@@ -1143,9 +1145,8 @@ void wDefaultUpdateIcons(WScreen * scr)
/* Get the application icon, default included */
file = wDefaultGetIconFile(wwin->wm_instance,
wwin->wm_class, True);
if ((file && wwin->icon->file && strcmp(file,
wwin->icon->file) != 0)
- || (file && !wwin->icon->file)) {
+ || (file && !wwin->icon->file))
wIconChangeImageFile(wwin->icon, file);
- }
}
wwin = wwin->prev;
}
diff --git a/src/dock.c b/src/dock.c
index e6a575b..295f717 100644
--- a/src/dock.c
+++ b/src/dock.c
@@ -538,8 +538,7 @@ static void keepIconsCallback(WMenu *menu, WMenuEntry
*entry)
aicon->attracted = 0;
if (aicon->icon->shadowed) {
aicon->icon->shadowed = 0;
- aicon->icon->force_paint = 1;
- wAppIconPaint(aicon);
+ wAppIconPaint(aicon, True);
}
}
save_appicon(aicon, True);
@@ -1149,7 +1148,7 @@ static void dockIconPaint(WAppIcon *btn)
if (btn == btn->icon->core->screen_ptr->clip_icon) {
wClipIconPaint(btn);
} else {
- wAppIconPaint(btn);
+ wAppIconPaint(btn, False);
save_appicon(btn, True);
}
}
@@ -1849,13 +1848,14 @@ int wDockReceiveDNDDrop(WScreen *scr, XEvent *event)
Bool wDockAttachIcon(WDock *dock, WAppIcon *icon, int x, int y, Bool
update_icon)
{
WWindow *wwin;
+ Bool lupdate_icon = False;
int index;
wwin = icon->icon->owner;
icon->editing = 0;
if (update_icon)
- icon->icon->force_paint = 1;
+ lupdate_icon = True;
if (icon->command == NULL) {
char *command;
@@ -1886,7 +1886,7 @@ Bool wDockAttachIcon(WDock *dock, WAppIcon *icon, int x,
int y, Bool update_icon
icon->attracted = 1;
if (!icon->icon->shadowed) {
icon->icon->shadowed =
1;
- icon->icon->force_paint
= 1;
+ lupdate_icon = True;
}
} else {
return False;
@@ -1929,7 +1929,7 @@ Bool wDockAttachIcon(WDock *dock, WAppIcon *icon, int x,
int y, Bool update_icon
MoveInStackListUnder(dock->icon_array[index - 1]->icon->core,
icon->icon->core);
wAppIconMove(icon, icon->x_pos, icon->y_pos);
- wAppIconPaint(icon);
+ wAppIconPaint(icon, lupdate_icon);
save_appicon(icon, True);
if (wPreferences.auto_arrange_icons)
@@ -1974,6 +1974,7 @@ static Bool moveIconBetweenDocks(WDock *src, WDock *dest,
WAppIcon *icon, int x,
WWindow *wwin;
char *command;
int index;
+ Bool update_icon = False;
if (src == dest)
return True; /* No move needed, we're already there */
@@ -2054,7 +2055,7 @@ static Bool moveIconBetweenDocks(WDock *src, WDock *dest,
WAppIcon *icon, int x,
icon->attracted = 0;
if (icon->icon->shadowed) {
icon->icon->shadowed = 0;
- icon->icon->force_paint = 1;
+ update_icon = True;
}
save_appicon(icon, True);
}
@@ -2071,7 +2072,7 @@ static Bool moveIconBetweenDocks(WDock *src, WDock *dest,
WAppIcon *icon, int x,
dest->icon_count++;
MoveInStackListUnder(dest->icon_array[index - 1]->icon->core,
icon->icon->core);
- wAppIconPaint(icon);
+ wAppIconPaint(icon, update_icon);
return True;
}
@@ -2079,6 +2080,7 @@ static Bool moveIconBetweenDocks(WDock *src, WDock *dest,
WAppIcon *icon, int x,
void wDockDetach(WDock *dock, WAppIcon *icon)
{
int index;
+ Bool update_icon = False;
/* make the settings panel be closed */
if (icon->panel)
@@ -2095,7 +2097,7 @@ void wDockDetach(WDock *dock, WAppIcon *icon)
icon->auto_launch = 0;
if (icon->icon->shadowed) {
icon->icon->shadowed = 0;
- icon->icon->force_paint = 1;
+ update_icon = True;
}
/* deselect the icon */
@@ -2142,7 +2144,7 @@ void wDockDetach(WDock *dock, WAppIcon *icon)
ChangeStackingLevel(icon->icon->core, NORMAL_ICON_LEVEL);
- wAppIconPaint(icon);
+ wAppIconPaint(icon, update_icon);
if (wPreferences.auto_arrange_icons)
wArrangeIcons(dock->screen_ptr, True);
}
@@ -2888,7 +2890,7 @@ void wDockTrackWindowLaunch(WDock *dock, Window window)
wLowerFrame(aicon->icon->core);
XMapWindow(dpy, aicon->icon->core->window);
aicon->launching = 1;
- wAppIconPaint(aicon);
+ wAppIconPaint(aicon, False);
SlideWindow(aicon->icon->core->window, x0, y0,
icon->x_pos, icon->y_pos);
XUnmapWindow(dpy, aicon->icon->core->window);
wAppIconDestroy(aicon);
@@ -3964,7 +3966,7 @@ int wClipMakeIconOmnipresent(WAppIcon *aicon, int
omnipresent)
}
}
- wAppIconPaint(aicon);
+ wAppIconPaint(aicon, False);
return status;
}
diff --git a/src/dockedapp.c b/src/dockedapp.c
index 6bfc216..d14bd3b 100644
--- a/src/dockedapp.c
+++ b/src/dockedapp.c
@@ -151,15 +151,15 @@ static void panelBtnCallback(WMWidget * self, void *data)
WMButton *btn = self;
AppSettingsPanel *panel = (AppSettingsPanel *) data;
char *text;
- int done;
+ int done = 1;
- done = 1;
if (panel->okBtn == btn) {
text = WMGetTextFieldText(panel->iconField);
if (text[0] == 0) {
wfree(text);
text = NULL;
}
+
if (!wIconChangeImageFile(panel->editedIcon->icon, text)) {
char *buf;
int len = strlen(text) + 64;
@@ -177,10 +177,12 @@ static void panelBtnCallback(WMWidget * self, void *data)
} else {
WAppIcon *aicon = panel->editedIcon;
+ /* The image was updated in wIconChangeImageFile,
+ * so we don't need udpate it at wAppIconPaint */
if (aicon == aicon->icon->core->screen_ptr->clip_icon)
wClipIconPaint(aicon);
else
- wAppIconPaint(aicon);
+ wAppIconPaint(aicon, False);
wDefaultChangeIcon(panel->wwin->screen_ptr,
aicon->wm_instance, aicon->wm_class, text);
}
diff --git a/src/winspector.c b/src/winspector.c
index 30b88f2..808a76f 100644
--- a/src/winspector.c
+++ b/src/winspector.c
@@ -785,14 +785,18 @@ static void applySettings(WMButton *button,
InspectorPanel *panel)
wfree(file);
file = NULL;
}
+
wIconChangeImageFile(wapp->app_icon->icon, file);
if (file)
wfree(file);
- wAppIconPaint(wapp->app_icon);
+
+ /* The image was updated in wIconChangeImageFile,
+ * so we don't need udpate it at wAppIconPaint */
+ wAppIconPaint(wapp->app_icon, False);
}
}
- wNETFrameExtents(wwin);
+ wNETFrameExtents(wwin);
}
static void revertSettings(WMButton *button, InspectorPanel *panel)
diff --git a/src/wmspec.c b/src/wmspec.c
index b3dfb8b..43eb12e 100644
--- a/src/wmspec.c
+++ b/src/wmspec.c
@@ -474,7 +474,8 @@ static void updateIconImage(WWindow *wwin)
WApplication *app = wApplicationOf(wwin->main_window);
if (app && app->app_icon) {
wIconUpdate(app->app_icon->icon);
- wAppIconPaint(app->app_icon);
+ /* Icon was updated in wIconUpdate, so we don't need update it
again */
+ wAppIconPaint(app->app_icon, False);
}
}
diff --git a/src/workspace.c b/src/workspace.c
index 7b62798..6a386c1 100644
--- a/src/workspace.c
+++ b/src/workspace.c
@@ -594,7 +594,7 @@ void wWorkspaceForceChange(WScreen * scr, int workspace)
wArrangeIcons(scr, False);
if (scr->dock)
- wAppIconPaint(scr->dock->icon_array[0]);
+ wAppIconPaint(scr->dock->icon_array[0], False);
if (scr->clip_icon) {
if (scr->workspaces[workspace]->clip->auto_collapse ||
--
1.7.10.4
--
To unsubscribe, send mail to [email protected].