[Xfce4-commits] [xfce/xfdesktop] 01/01: Fix for images not appearing in settings app (Bug 10685)

noreply at xfce.org noreply at xfce.org
Wed Mar 26 17:14:04 CET 2014


This is an automated email from the git hooks/post-receive script.

eric pushed a commit to branch master
in repository xfce/xfdesktop.

commit 565ccdfd80f0b4c6e6c67314224bb5c8128177c2
Author: Eric Koegel <eric.koegel at gmail.com>
Date:   Wed Mar 26 08:10:21 2014 +0300

    Fix for images not appearing in settings app (Bug 10685)
    
    We need to add images to the list in the main thread and not our
    worker thread. Otherwise images won't always display right away,
    espeically when the system is under a high load.
---
 settings/main.c |   65 ++++++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 47 insertions(+), 18 deletions(-)

diff --git a/settings/main.c b/settings/main.c
index 3f6f8b7..bd82249 100644
--- a/settings/main.c
+++ b/settings/main.c
@@ -87,6 +87,7 @@ typedef struct
 {
     GtkTreeModel *model;
     GtkTreeIter *iter;
+    GdkPixbuf *pix;
 } PreviewData;
 
 typedef struct
@@ -169,13 +170,50 @@ static gchar *xfdesktop_settings_generate_per_workspace_binding_string(Appearanc
                                                                        const gchar* property);
 static gchar *xfdesktop_settings_get_backdrop_image(AppearancePanel *panel);
 
+
+
 static void
-xfdesktop_settings_do_single_preview(GtkTreeModel *model,
-                                     GtkTreeIter *iter)
+xfdesktop_settings_free_pdata(gpointer data)
 {
+    PreviewData *pdata = data;
+
+    g_object_unref(pdata->model);
+
+    gtk_tree_iter_free(pdata->iter);
+
+    if(pdata->pix)
+        g_object_unref(pdata->pix);
+
+    g_free(pdata);
+}
+
+static gboolean
+list_store_set(PreviewData *pdata)
+{
+    g_return_val_if_fail(pdata, FALSE);
+
+    gtk_list_store_set(GTK_LIST_STORE(pdata->model), pdata->iter,
+                       COL_PIX, pdata->pix,
+                       -1);
+
+    xfdesktop_settings_free_pdata(pdata);
+
+    return FALSE;
+}
+
+static void
+xfdesktop_settings_do_single_preview(PreviewData *pdata)
+{
+    GtkTreeModel *model;
+    GtkTreeIter *iter;
     gchar *filename = NULL, *thumbnail = NULL;
     GdkPixbuf *pix;
 
+    g_return_if_fail(pdata);
+
+    model = pdata->model;
+    iter = pdata->iter;
+
     gtk_tree_model_get(model, iter,
                        COL_FILENAME, &filename,
                        COL_THUMBNAIL, &thumbnail,
@@ -197,23 +235,15 @@ xfdesktop_settings_do_single_preview(GtkTreeModel *model,
     g_free(filename);
 
     if(pix) {
-        gtk_list_store_set(GTK_LIST_STORE(model), iter,
-                           COL_PIX, pix,
-                           -1);
+        pdata->pix = pix;
 
-        g_object_unref(G_OBJECT(pix));
+        /* We must add the images to the list in the main thread */
+        g_main_context_invoke(NULL, (GSourceFunc)list_store_set, pdata);
+    } else {
+        xfdesktop_settings_free_pdata(pdata);
     }
 }
 
-static void
-xfdesktop_settings_free_pdata(gpointer data)
-{
-    PreviewData *pdata = data;
-    g_object_unref(G_OBJECT(pdata->model));
-    gtk_tree_iter_free(pdata->iter);
-    g_free(pdata);
-}
-
 static gpointer
 xfdesktop_settings_create_previews(gpointer data)
 {
@@ -225,9 +255,7 @@ xfdesktop_settings_create_previews(gpointer data)
         /* Block and wait for another preview to create */
         pdata = g_async_queue_pop(panel->preview_queue);
 
-        xfdesktop_settings_do_single_preview(pdata->model, pdata->iter);
-
-        xfdesktop_settings_free_pdata(pdata);
+        xfdesktop_settings_do_single_preview(pdata);
     }
 
     return NULL;
@@ -293,6 +321,7 @@ cb_thumbnail_ready(XfdesktopThumbnailer *thumbnailer,
                 pdata = g_new0(PreviewData, 1);
                 pdata->model = g_object_ref(G_OBJECT(model));
                 pdata->iter = gtk_tree_iter_copy(&iter);
+                pdata->pix = NULL;
 
                 /* Create the preview image */
                 xfdesktop_settings_add_file_to_queue(panel, pdata);

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Xfce4-commits mailing list