+AUX xfdesktop-4.3.99.2-icons.patch 11399 RMD160 e068cc82944aaccd130268c1145ff139a3f49f46 SHA1 1eae46ace7483b66d47526ba22615f349aa29bfa SHA256 19b4bdae29015df79a03152b442a7eeb41f3deb167c8e9c8286d40b5d33ce84a
+MD5 4b45cdb4faa7ccfd6672eada83913032 files/xfdesktop-4.3.99.2-icons.patch 11399
+RMD160 e068cc82944aaccd130268c1145ff139a3f49f46 files/xfdesktop-4.3.99.2-icons.patch 11399
+SHA256 19b4bdae29015df79a03152b442a7eeb41f3deb167c8e9c8286d40b5d33ce84a files/xfdesktop-4.3.99.2-icons.patch 11399
DIST xfdesktop-4.2.3.tar.gz 3169283 RMD160 da0adb637503f85d38651953560916ebc141b3ec SHA1 d4b1285947e6f42e6aa1b95a9e7bed645a1f596d SHA256 5e0ede22e6c9441ba3642580c1768995069e8de1536013b65f9394b32152d1e6
DIST xfdesktop-4.3.99.2.tar.bz2 3087043 RMD160 b9b7ffbad30df8b6d7dcda1a87930798bfa62167 SHA1 0b8bd2b3fcc861b7c589060ced8a1aae6f5bad17 SHA256 427df09a88f9b4a38fbed68d8154090bf0c11fbdc132c26247dc5568ee5ae910
EBUILD xfdesktop-4.2.3.ebuild 536 RMD160 3cbc0bde908999faf2cd23462272d6e3679167f4 SHA1 0ca116d5d520da6bf0f83dce4996d25408f53024 SHA256 59737fecf5b51541b24e2df491b9bed5c4fa262bc883884e81f5bd7993bc6f92
MD5 562a292f1add2002fb6e90aa725bb577 xfdesktop-4.2.3.ebuild 536
RMD160 3cbc0bde908999faf2cd23462272d6e3679167f4 xfdesktop-4.2.3.ebuild 536
SHA256 59737fecf5b51541b24e2df491b9bed5c4fa262bc883884e81f5bd7993bc6f92 xfdesktop-4.2.3.ebuild 536
+EBUILD xfdesktop-4.3.99.2-r1.ebuild 1277 RMD160 661858a1507d5be339f84a40484feac415f8a932 SHA1 27eb021b2ac83231ab3e188b1feb217356211b81 SHA256 1f029c8b232aa3d3dcb205c1749c80fd865a2d5cfdeed45ca89799bf9f2e5fd6
+MD5 ab90762eff1854d05ea5d173458b09af xfdesktop-4.3.99.2-r1.ebuild 1277
+RMD160 661858a1507d5be339f84a40484feac415f8a932 xfdesktop-4.3.99.2-r1.ebuild 1277
+SHA256 1f029c8b232aa3d3dcb205c1749c80fd865a2d5cfdeed45ca89799bf9f2e5fd6 xfdesktop-4.3.99.2-r1.ebuild 1277
EBUILD xfdesktop-4.3.99.2.ebuild 1102 RMD160 661a07f9e426570e944035c1ee30c026ecd55f50 SHA1 57908ae54cf24c66c5eafd8284690d5a5ac2c533 SHA256 d3584b322f2851b1dbae914c00691c7201f9e8d1c58e22e47c0eaae9352bd62f
MD5 cda6feb19068a28b67254d0b853f6967 xfdesktop-4.3.99.2.ebuild 1102
RMD160 661a07f9e426570e944035c1ee30c026ecd55f50 xfdesktop-4.3.99.2.ebuild 1102
SHA256 d3584b322f2851b1dbae914c00691c7201f9e8d1c58e22e47c0eaae9352bd62f xfdesktop-4.3.99.2.ebuild 1102
-MISC ChangeLog 8680 RMD160 dad51385a99f81a84113ee4d4ba099aff3a3d870 SHA1 adb087f23fbb76772dd4f3660fe91d718304fa84 SHA256 680ebbb7c09d31feb40e6b28d6abcdd0e9cd1092e17446aef5dc9fd7c576ad58
-MD5 5db0980c0eac18bce4e0c90b8ef571e0 ChangeLog 8680
-RMD160 dad51385a99f81a84113ee4d4ba099aff3a3d870 ChangeLog 8680
-SHA256 680ebbb7c09d31feb40e6b28d6abcdd0e9cd1092e17446aef5dc9fd7c576ad58 ChangeLog 8680
+MISC ChangeLog 8952 RMD160 7320f2cec268713578bcf8a6f3382bb3a1aa0daf SHA1 2c13a234613f2dd9083352e4aa4cb3c173b21fec SHA256 0fceee99377494667bf69365b9c0c659c3cc2eddd02e59a8134bd9aeae909145
+MD5 313018bbf904b256a485a41b94f034ec ChangeLog 8952
+RMD160 7320f2cec268713578bcf8a6f3382bb3a1aa0daf ChangeLog 8952
+SHA256 0fceee99377494667bf69365b9c0c659c3cc2eddd02e59a8134bd9aeae909145 ChangeLog 8952
MISC metadata.xml 157 RMD160 d7470fe88d1b96f3a7f1ef26fb7dc646b4a1b907 SHA1 7eae91f2588bdae8667d37a98fb3090d539eeca1 SHA256 44350daa7594842894d676413708d8ea77ccb0017bed24711af5b256281f5e61
MD5 c390804e060ffd11a5bbb143434b2b2d metadata.xml 157
RMD160 d7470fe88d1b96f3a7f1ef26fb7dc646b4a1b907 metadata.xml 157
MD5 cf06f9d264489fc7e114855b084d4fec files/digest-xfdesktop-4.3.99.2 262
RMD160 9cec74462c0752b9c034df2de2f766938a34d7c1 files/digest-xfdesktop-4.3.99.2 262
SHA256 8d2d565dc1a1f3671e8b80b6bedbff692d823b9bf9f16ec9d4db283c9ecc229e files/digest-xfdesktop-4.3.99.2 262
+MD5 cf06f9d264489fc7e114855b084d4fec files/digest-xfdesktop-4.3.99.2-r1 262
+RMD160 9cec74462c0752b9c034df2de2f766938a34d7c1 files/digest-xfdesktop-4.3.99.2-r1 262
+SHA256 8d2d565dc1a1f3671e8b80b6bedbff692d823b9bf9f16ec9d4db283c9ecc229e files/digest-xfdesktop-4.3.99.2-r1 262
--- /dev/null
+Index: src/xfdesktop-icon-view.c
+===================================================================
+--- src/xfdesktop-icon-view.c (revision 23748)
++++ src/xfdesktop-icon-view.c (working copy)
+@@ -45,8 +45,8 @@
+ #define DEFAULT_ICON_SIZE 32
+
+ #define ICON_SIZE (icon_view->priv->icon_size)
+-#define TEXT_WIDTH (icon_view->priv->font_size * 9)
+-#define CELL_PADDING 4
++#define TEXT_WIDTH ((ICON_SIZE << 1) + (ICON_SIZE >> 1)) /* aka 2.5x */
++#define CELL_PADDING 6
+ #define CELL_SIZE (TEXT_WIDTH + CELL_PADDING * 2)
+ #define SPACING 6
+ #define SCREEN_MARGIN 8
+@@ -277,7 +277,12 @@
+ static void xfdesktop_icon_view_modify_font_size(XfdesktopIconView *icon_view,
+ gint size);
+ static void xfdesktop_ird_free(XfdesktopIdleRepaintData *ird);
++static void xfdesktop_icon_view_add_item_internal(XfdesktopIconView *icon_view,
++ XfdesktopIcon *icon);
++static gboolean xfdesktop_icon_view_icon_find_position(XfdesktopIconView *icon_view,
++ XfdesktopIcon *icon);
+
++
+ enum
+ {
+ TARGET_XFDESKTOP_ICON = 9999,
+@@ -1323,7 +1328,7 @@
+ PangoContext *pctx;
+ GdkScreen *gscreen;
+ GdkWindow *groot;
+- GList *l;
++ GList *l, *leftovers = NULL;
+
+ icon_view->priv->parent_window = gtk_widget_get_toplevel(widget);
+ g_return_if_fail(icon_view->priv->parent_window);
+@@ -1399,12 +1404,14 @@
+ icon_view);
+
+ for(l = icon_view->priv->pending_icons; l; l = l->next) {
+- g_object_set_data(G_OBJECT(l->data), "--xfdesktop-icon-view", NULL);
+- xfdesktop_icon_view_add_item(icon_view, XFDESKTOP_ICON(l->data));
+- g_object_unref(G_OBJECT(l->data));
++ XfdesktopIcon *icon = XFDESKTOP_ICON(l->data);
++ if(xfdesktop_icon_view_icon_find_position(icon_view, icon))
++ xfdesktop_icon_view_add_item_internal(icon_view, icon);
++ else
++ leftovers = g_list_prepend(leftovers, icon);
+ }
+ g_list_free(icon_view->priv->pending_icons);
+- icon_view->priv->pending_icons = NULL;
++ icon_view->priv->pending_icons = g_list_reverse(leftovers);
+ }
+
+ static void
+@@ -1458,10 +1465,9 @@
+ g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+ icon_view);
+- icon_view->priv->pending_icons = g_list_prepend(icon_view->priv->pending_icons,
+- l->data);
+ }
+- g_list_free(icon_view->priv->icons);
++ icon_view->priv->pending_icons = g_list_concat(icon_view->priv->icons,
++ icon_view->priv->pending_icons);
+ icon_view->priv->icons = NULL;
+
+ g_free(icon_view->priv->grid_layout);
+@@ -2046,17 +2052,16 @@
+ static void
+ xfdesktop_grid_do_resize(XfdesktopIconView *icon_view)
+ {
+- GList *l;
++ GList *l, *leftovers = NULL;
+
+ /* move all icons into the pending_icons list */
+ for(l = icon_view->priv->icons; l; l = l->next) {
+ g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+ icon_view);
+- icon_view->priv->pending_icons = g_list_prepend(icon_view->priv->pending_icons,
+- l->data);
+ }
+- g_list_free(icon_view->priv->icons);
++ icon_view->priv->pending_icons = g_list_concat(icon_view->priv->icons,
++ icon_view->priv->pending_icons);
+ icon_view->priv->icons = NULL;
+
+ DUMP_GRID_LAYOUT(icon_view);
+@@ -2071,12 +2076,14 @@
+
+ /* add all icons back */
+ for(l = icon_view->priv->pending_icons; l; l = l->next) {
+- g_object_set_data(G_OBJECT(l->data), "--xfdesktop-icon-view", NULL);
+- xfdesktop_icon_view_add_item(icon_view, XFDESKTOP_ICON(l->data));
+- g_object_unref(G_OBJECT(l->data));
++ XfdesktopIcon *icon = XFDESKTOP_ICON(l->data);
++ if(xfdesktop_icon_view_icon_find_position(icon_view, icon))
++ xfdesktop_icon_view_add_item_internal(icon_view, icon);
++ else
++ leftovers = g_list_prepend(leftovers, icon);
+ }
+ g_list_free(icon_view->priv->pending_icons);
+- icon_view->priv->pending_icons = NULL;
++ icon_view->priv->pending_icons = g_list_reverse(leftovers);
+
+ gtk_widget_queue_draw(GTK_WIDGET(icon_view));
+ }
+@@ -2168,8 +2175,11 @@
+ guint16 row,
+ guint16 col)
+ {
+- g_return_val_if_fail(row < icon_view->priv->nrows
+- && col < icon_view->priv->ncols, FALSE);
++ if(row >= icon_view->priv->nrows
++ || col >= icon_view->priv->ncols)
++ {
++ return FALSE;
++ }
+
+ return !icon_view->priv->grid_layout[col * icon_view->priv->nrows + row];
+ }
+@@ -2484,63 +2494,89 @@
+ return GTK_WIDGET(icon_view);
+ }
+
++static void
++xfdesktop_icon_view_add_item_internal(XfdesktopIconView *icon_view,
++ XfdesktopIcon *icon)
++{
++ guint16 row, col;
++ GdkRectangle fake_area;
++
++ /* sanity check: at this point this should be taken care of */
++ g_return_if_fail(xfdesktop_icon_get_position(icon, &row, &col));
++
++ xfdesktop_grid_unset_position_free(icon_view, icon);
++
++ icon_view->priv->icons = g_list_prepend(icon_view->priv->icons, icon);
++
++ g_signal_connect_swapped(G_OBJECT(icon), "pixbuf-changed",
++ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
++ icon_view);
++ g_signal_connect_swapped(G_OBJECT(icon), "label-changed",
++ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
++ icon_view);
++
++ fake_area.x = SCREEN_MARGIN + icon_view->priv->xorigin + col * CELL_SIZE;
++ fake_area.y = SCREEN_MARGIN + icon_view->priv->yorigin + row * CELL_SIZE;
++ fake_area.width = fake_area.height = CELL_SIZE;
++ xfdesktop_icon_view_paint_icon(icon_view, icon, &fake_area);
++}
++
++static gboolean
++xfdesktop_icon_view_icon_find_position(XfdesktopIconView *icon_view,
++ XfdesktopIcon *icon)
++{
++ guint16 row, col;
++
++ if(!xfdesktop_icon_get_position(icon, &row, &col)
++ || !xfdesktop_grid_is_free_position(icon_view, row, col))
++ {
++ if(xfdesktop_grid_get_next_free_position(icon_view, &row, &col)) {
++ DBG("old position didn't exist or isn't free, got (%d,%d) instead",
++ row, col);
++ xfdesktop_icon_set_position(icon, row, col);
++ } else {
++ DBG("can't fit icon on screen");
++ return FALSE;
++ }
++ }
++
++ return TRUE;
++}
++
+ void
+ xfdesktop_icon_view_add_item(XfdesktopIconView *icon_view,
+ XfdesktopIcon *icon)
+ {
+- gboolean icon_has_pos;
+ guint16 row, col;
+- GdkRectangle fake_area;
+
+ g_return_if_fail(XFDESKTOP_IS_ICON_VIEW(icon_view)
+ && XFDESKTOP_IS_ICON(icon));
+
+- icon_has_pos = xfdesktop_icon_get_position(icon, &row, &col);
+-
+ /* ensure the icon isn't already in an icon view */
+ g_return_if_fail(!g_object_get_data(G_OBJECT(icon),
+ "--xfdesktop-icon-view"));
+
+ g_object_set_data(G_OBJECT(icon), "--xfdesktop-icon-view", icon_view);
++ g_object_ref(G_OBJECT(icon));
+
+ if(!GTK_WIDGET_REALIZED(GTK_WIDGET(icon_view))) {
+- if(icon_has_pos) {
++ /* if we aren't realized, we don't know what our grid looks like, so
++ * just hang onto the icon for later */
++ if(xfdesktop_icon_get_position(icon, &row, &col)) {
+ icon_view->priv->pending_icons = g_list_prepend(icon_view->priv->pending_icons,
+- g_object_ref(G_OBJECT(icon)));
++ icon);
+ } else {
+ icon_view->priv->pending_icons = g_list_append(icon_view->priv->pending_icons,
+- g_object_ref(G_OBJECT(icon)));
++ icon);
+ }
+- return;
++ } else {
++ if(xfdesktop_icon_view_icon_find_position(icon_view, icon))
++ xfdesktop_icon_view_add_item_internal(icon_view, icon);
++ else {
++ icon_view->priv->pending_icons = g_list_append(icon_view->priv->pending_icons,
++ icon);
++ }
+ }
+-
+- if(!icon_has_pos || !xfdesktop_grid_is_free_position(icon_view, row, col)) {
+- if(xfdesktop_grid_get_next_free_position(icon_view, &row, &col)) {
+- DBG("old position didn't exist or isn't free, got (%d,%d) instead",
+- row, col);
+- xfdesktop_icon_set_position(icon, row, col);
+- } else {
+- DBG("can't fit icon on screen");
+- return;
+- }
+- }
+-
+- xfdesktop_grid_unset_position_free(icon_view, icon);
+-
+- icon_view->priv->icons = g_list_prepend(icon_view->priv->icons,
+- g_object_ref(G_OBJECT(icon)));
+-
+- g_signal_connect_swapped(G_OBJECT(icon), "pixbuf-changed",
+- G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+- icon_view);
+- g_signal_connect_swapped(G_OBJECT(icon), "label-changed",
+- G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+- icon_view);
+-
+- fake_area.x = SCREEN_MARGIN + icon_view->priv->xorigin + col * CELL_SIZE;
+- fake_area.y = SCREEN_MARGIN + icon_view->priv->yorigin + row * CELL_SIZE;
+- fake_area.width = fake_area.height = CELL_SIZE;
+- xfdesktop_icon_view_paint_icon(icon_view, icon, &fake_area);
+ }
+
+ void
+@@ -2592,7 +2628,6 @@
+ xfdesktop_icon_view_remove_all(XfdesktopIconView *icon_view)
+ {
+ GList *l;
+- gboolean realized;
+ guint16 row, col;
+
+ g_return_if_fail(XFDESKTOP_IS_ICON_VIEW(icon_view));
+@@ -2607,12 +2642,9 @@
+ icon_view->priv->pending_icons = NULL;
+ }
+
+- realized = GTK_WIDGET_REALIZED(GTK_WIDGET(icon_view));
+ for(l = icon_view->priv->icons; l; l = l->next) {
+- if(realized) {
+- if(xfdesktop_icon_get_position(XFDESKTOP_ICON(l->data), &row, &col))
+- xfdesktop_grid_set_position_free(icon_view, row, col);
+- }
++ if(xfdesktop_icon_get_position(XFDESKTOP_ICON(l->data), &row, &col))
++ xfdesktop_grid_set_position_free(icon_view, row, col);
+
+ g_signal_handlers_disconnect_by_func(G_OBJECT(l->data),
+ G_CALLBACK(xfdesktop_icon_view_clear_icon_extents),
+@@ -2635,7 +2667,7 @@
+ icon_view->priv->last_clicked_item = NULL;
+ icon_view->priv->first_clicked_item = NULL;
+
+- if(realized)
++ if(GTK_WIDGET_REALIZED(icon_view))
+ gtk_widget_queue_draw(GTK_WIDGET(icon_view));
+ }
+