diff options
author | Joshua Nichols <nichoj@gentoo.org> | 2006-12-30 19:04:27 +0000 |
---|---|---|
committer | Joshua Nichols <nichoj@gentoo.org> | 2006-12-30 19:04:27 +0000 |
commit | fb10edb71196490e3a01d16e11004ea6d583c2c3 (patch) | |
tree | 505ade3ffe8d1bf2d6325504d8710e7930e0eff4 /xfce-base/xfdesktop/files | |
parent | Dropped old version. (diff) | |
download | historical-fb10edb71196490e3a01d16e11004ea6d583c2c3.tar.gz historical-fb10edb71196490e3a01d16e11004ea6d583c2c3.tar.bz2 historical-fb10edb71196490e3a01d16e11004ea6d583c2c3.zip |
Added a patch to fix erratic icon behavior. See http://bugzilla.xfce.org/show_bug.cgi?id=1546 for details.
Package-Manager: portage-2.1.2_rc4-r1
Diffstat (limited to 'xfce-base/xfdesktop/files')
-rw-r--r-- | xfce-base/xfdesktop/files/digest-xfdesktop-4.3.99.2-r1 | 3 | ||||
-rw-r--r-- | xfce-base/xfdesktop/files/xfdesktop-4.3.99.2-icons.patch | 281 |
2 files changed, 284 insertions, 0 deletions
diff --git a/xfce-base/xfdesktop/files/digest-xfdesktop-4.3.99.2-r1 b/xfce-base/xfdesktop/files/digest-xfdesktop-4.3.99.2-r1 new file mode 100644 index 000000000000..f11fc4649003 --- /dev/null +++ b/xfce-base/xfdesktop/files/digest-xfdesktop-4.3.99.2-r1 @@ -0,0 +1,3 @@ +MD5 d44a81b9da9598425d9dd8dcd1cd5485 xfdesktop-4.3.99.2.tar.bz2 3087043 +RMD160 b9b7ffbad30df8b6d7dcda1a87930798bfa62167 xfdesktop-4.3.99.2.tar.bz2 3087043 +SHA256 427df09a88f9b4a38fbed68d8154090bf0c11fbdc132c26247dc5568ee5ae910 xfdesktop-4.3.99.2.tar.bz2 3087043 diff --git a/xfce-base/xfdesktop/files/xfdesktop-4.3.99.2-icons.patch b/xfce-base/xfdesktop/files/xfdesktop-4.3.99.2-icons.patch new file mode 100644 index 000000000000..89bcc1ce10eb --- /dev/null +++ b/xfce-base/xfdesktop/files/xfdesktop-4.3.99.2-icons.patch @@ -0,0 +1,281 @@ +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)); + } + |