Author: kelnos
Date: 2006-07-29 07:20:13 +0000 (Sat, 29 Jul 2006)
New Revision: 22556

Modified:
   xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
   xfdesktop/trunk/src/xfdesktop-file-icon.c
Log:
* use g_markup_printf_escaped() when dealing with filenames passed to
  xfce_message_dialog(), as the labels are markup-enabled (bug 2082)
* fix fallback icon handling


Modified: xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2006-07-29 07:10:09 UTC 
(rev 22555)
+++ xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2006-07-29 07:20:13 UTC 
(rev 22556)
@@ -231,8 +231,8 @@
                     /* would prefer to use thunar_vfs_make_directory() here,
                      * but i don't want to use an async operation */
                     if(mkdir(pathname, 0700)) {
-                        gchar *primary = g_strdup_printf(_("Xfdesktop was 
unable to create the folder \"%s\" to store desktop items:"),
-                                                         pathname);
+                        gchar *primary = g_markup_printf_excaped(_("Xfdesktop 
was unable to create the folder \"%s\" to store desktop items:"),
+                                                                 pathname);
                         xfce_message_dialog(NULL, _("Create Folder Failed"),
                                             GTK_STOCK_DIALOG_WARNING, primary,
                                             strerror(errno), GTK_STOCK_CLOSE,
@@ -240,8 +240,8 @@
                         g_free(primary);
                     }
                 } else if(!g_file_test(pathname, G_FILE_TEST_IS_DIR)) {
-                    gchar *primary = g_strdup_printf(_("Xfdesktop is unable to 
use \"%s\" to hold desktop items because it is not a folder."),
-                                                     pathname);
+                    gchar *primary = g_markup_printf_escaped(_("Xfdesktop is 
unable to use \"%s\" to hold desktop items because it is not a folder."),
+                                                             pathname);
                     xfce_message_dialog(NULL, _("Create Folder Failed"),
                                         GTK_STOCK_DIALOG_WARNING, primary,
                                         _("Please delete or rename the file."),
@@ -369,8 +369,8 @@
         if(!thunar_vfs_volume_is_mounted(volume)) {
             GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
             if(!thunar_vfs_volume_mount(volume, toplevel, &error)) {
-                gchar *primary = g_strdup_printf(_("Unable to mount \"%s\":"),
-                                                 
thunar_vfs_volume_get_name(volume));
+                gchar *primary = g_markup_printf_escaped(_("Unable to mount 
\"%s\":"),
+                                                         
thunar_vfs_volume_get_name(volume));
                 xfce_message_dialog(GTK_WINDOW(toplevel), _("Mount Failed"),
                                     GTK_STOCK_DIALOG_ERROR, primary,
                                     error ? error->message : _("Unknown 
error."),
@@ -434,8 +434,8 @@
     
     if(!succeeded) {
         GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
-        gchar *primary = g_strdup_printf(_("Unable to launch \"%s\":"),
-                                         info->display_name);
+        gchar *primary = g_markup_printf_escaped(_("Unable to launch \"%s\":"),
+                                                 info->display_name);
         xfce_message_dialog(GTK_WINDOW(toplevel), _("Launch Error"),
                             GTK_STOCK_DIALOG_ERROR, primary,
                             _("The associated application could not be found 
or executed."),
@@ -640,8 +640,8 @@
     if(g_list_length(selected) == 1) {
         icon = XFDESKTOP_ICON(selected->data);
         
-        primary = g_strdup_printf(_("Are you sure that you want to delete 
\"%s\"?"),
-                                  xfdesktop_icon_peek_label(icon));
+        primary = g_markup_printf_escaped(_("Are you sure that you want to 
delete \"%s\"?"),
+                                          xfdesktop_icon_peek_label(icon));
         ret = xfce_message_dialog(GTK_WINDOW(toplevel),
                                   _("Question"), GTK_STOCK_DIALOG_QUESTION,
                                   primary,
@@ -765,8 +765,8 @@
                                      path_list,
                                      &error))
     {
-        gchar *primary = g_strdup_printf(_("Unable to launch \"%s\":"),
-                                         
thunar_vfs_mime_application_get_name(mime_app));
+        gchar *primary = g_markup_printf_escaped(_("Unable to launch \"%s\":"),
+                                                 
thunar_vfs_mime_application_get_name(mime_app));
         xfce_message_dialog(GTK_WINDOW(toplevel), _("Launch Error"),
                             GTK_STOCK_DIALOG_ERROR, primary, error->message,
                             GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
@@ -799,8 +799,8 @@
     gscreen = gtk_widget_get_screen(widget);
     
     if(!xfdesktop_file_icon_launch_external(icon, gscreen)) {
-        gchar *primary = g_strdup_printf(_("Unable to launch \"%s\":"),
-                                         info->display_name);
+        gchar *primary = g_markup_printf_escaped(_("Unable to launch \"%s\":"),
+                                                 info->display_name);
         xfce_message_dialog(GTK_WINDOW(toplevel),
                             _("Launch Error"), GTK_STOCK_DIALOG_ERROR,
                             primary,
@@ -882,9 +882,9 @@
     }
     
     if(error) {
-        gchar *primary = g_strdup_printf(is_mount ? _("Unable to mount 
\"%s\":")
-                                                  : _("Unable to unmount 
\"%s\":"),
-                                         thunar_vfs_volume_get_name(volume));
+        gchar *primary = g_markup_printf_escaped(is_mount ? _("Unable to mount 
\"%s\":")
+                                                          : _("Unable to 
unmount \"%s\":"),
+                                                 
thunar_vfs_volume_get_name(volume));
         xfce_message_dialog(GTK_WINDOW(toplevel),
                             is_mount ? _("Mount Failed") : _("Unmount Failed"),
                             GTK_STOCK_DIALOG_ERROR, primary, error->message,
@@ -915,8 +915,8 @@
     g_return_if_fail(volume);
     
     if(!thunar_vfs_volume_eject(volume, toplevel, &error)) {
-        gchar *primary = g_strdup_printf(_("Unable to eject \"%s\":"),
-                                         thunar_vfs_volume_get_name(volume));
+        gchar *primary = g_markup_printf_escaped(_("Unable to eject \"%s\":"),
+                                                 
thunar_vfs_volume_get_name(volume));
         xfce_message_dialog(GTK_WINDOW(toplevel), _("Eject Failed"),
                             GTK_STOCK_DIALOG_ERROR, primary, error->message,
                             GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
@@ -986,8 +986,8 @@
                                                              &error))
         {
             GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
-            gchar *primary = g_strdup_printf(_("Unable to set default 
application for \"%s\" to \"%s\":"),
-                                             
xfdesktop_icon_peek_label(XFDESKTOP_ICON(icon)),
+            gchar *primary = g_markup_printf_escaped(_("Unable to set default 
application for \"%s\" to \"%s\":"),
+                                                     
xfdesktop_icon_peek_label(XFDESKTOP_ICON(icon)),
                                              
thunar_vfs_mime_application_get_name(mime_app));
             xfce_message_dialog(GTK_WINDOW(toplevel), _("Properties Error"),
                                 GTK_STOCK_DIALOG_ERROR, primary, 
error->message,
@@ -1565,8 +1565,8 @@
     GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
     const gchar *folder_name = g_object_get_data(G_OBJECT(job),
                                                  "xfdesktop-folder-name");
-    gchar *primary = g_strdup_printf(_("Unable to create folder named 
\"%s\":"),
-                                     folder_name);
+    gchar *primary = g_markup_printf_escaped(_("Unable to create folder named 
\"%s\":"),
+                                             folder_name);
     
     xfce_message_dialog(GTK_WINDOW(toplevel), _("Create Folder Failed"),
                         GTK_STOCK_DIALOG_ERROR, primary, error->message,
@@ -1678,8 +1678,8 @@
     GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
     const gchar *file_name = g_object_get_data(G_OBJECT(job),
                                                "xfdesktop-file-name");
-    gchar *primary = g_strdup_printf(_("Unable to create file named \"%s\":"),
-                                     file_name);
+    gchar *primary = g_markup_printf_escaped(_("Unable to create file named 
\"%s\":"),
+                                             file_name);
     
     xfce_message_dialog(GTK_WINDOW(toplevel), _("Create File Failed"),
                         GTK_STOCK_DIALOG_ERROR, primary, error->message,
@@ -1776,7 +1776,7 @@
             /* don't free |name|, GObject will do it */
         } else {
             if(error) {
-                gchar *primary = g_strdup_printf(_("Unable to create file 
\"%s\":"), name);
+                gchar *primary = g_markup_printf_escaped(_("Unable to create 
file \"%s\":"), name);
                 xfce_message_dialog(GTK_WINDOW(toplevel), _("Create Error"),
                                     GTK_STOCK_DIALOG_ERROR, primary,
                                     error->message, GTK_STOCK_CLOSE,
@@ -2001,6 +2001,7 @@
     
     if(!xfce_exec(buf, FALSE, TRUE, &error)) {
         GtkWidget *toplevel = 
gtk_widget_get_toplevel(GTK_WIDGET(fmanager->priv->icon_view));
+        /* printf is to be translator-friendly */
         gchar *primary = g_strdup_printf(_("Unable to launch \"%s\":"),
                                          "xfce-setting-show");
         xfce_message_dialog(GTK_WINDOW(toplevel), _("Launch Error"),
@@ -3450,8 +3451,8 @@
                                                     xfce_get_homedir(),
                                                     &error);
                 if(!succeeded) {
-                    gchar *primary = g_strdup_printf(_("Failed to run 
\"%s\":"),
-                                                     tinfo->display_name);
+                    gchar *primary = g_markup_printf_escaped(_("Failed to run 
\"%s\":"),
+                                                             
tinfo->display_name);
                     xfce_message_dialog(NULL, _("Run Error"),
                                         GTK_STOCK_DIALOG_ERROR,
                                         primary, error->message,

Modified: xfdesktop/trunk/src/xfdesktop-file-icon.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon.c   2006-07-29 07:10:09 UTC (rev 
22555)
+++ xfdesktop/trunk/src/xfdesktop-file-icon.c   2006-07-29 07:20:13 UTC (rev 
22556)
@@ -120,8 +120,8 @@
 
 static guint __signals[N_SIGS] = { 0, };
 static GdkPixbuf *xfdesktop_fallback_icon = NULL;
+static gint xfdesktop_fallback_icon_size = -1;
 
-
 #ifdef HAVE_THUNARX
 G_DEFINE_TYPE_EXTENDED(XfdesktopFileIcon, xfdesktop_file_icon,
                        G_TYPE_OBJECT, 0,
@@ -237,6 +237,42 @@
     }
 }
 
+static void
+xfdesktop_file_icon_ensure_fallback_icon(gint size)
+{
+    if(size != xfdesktop_fallback_icon_size && xfdesktop_fallback_icon) {
+        g_object_unref(G_OBJECT(xfdesktop_fallback_icon));
+        xfdesktop_fallback_icon = NULL;
+    }
+    
+    if(!xfdesktop_fallback_icon) {
+        xfdesktop_fallback_icon = gdk_pixbuf_new_from_file_at_size(DATADIR 
"/pixmaps/xfdesktop/xfdesktop-fallback-icon.png",
+                                                                   size,
+                                                                   size,
+                                                                   NULL);
+    }
+    
+    if(G_UNLIKELY(!xfdesktop_fallback_icon)) {
+        GtkWidget *dummy = gtk_invisible_new();
+        gtk_widget_realize(dummy);
+        
+        /* this is kinda crappy, but hopefully should never happen */
+        xfdesktop_fallback_icon = gtk_widget_render_icon(dummy,
+                                                         
GTK_STOCK_MISSING_IMAGE,
+                                                         (GtkIconSize)-1, 
NULL);
+        if(gdk_pixbuf_get_width(xfdesktop_fallback_icon) != size
+           || gdk_pixbuf_get_height(xfdesktop_fallback_icon) != size)
+        {
+            GdkPixbuf *tmp = gdk_pixbuf_scale_simple(xfdesktop_fallback_icon,
+                                                     size, size,
+                                                     GDK_INTERP_BILINEAR);
+            g_object_unref(G_OBJECT(xfdesktop_fallback_icon));
+            xfdesktop_fallback_icon = tmp;
+        }
+    }
+    
+    xfdesktop_fallback_icon_size = size;
+}
 
 
 static XfdesktopFileIcon *
@@ -293,11 +329,8 @@
         return;
     
     icon->priv->pix_opacity = opacity;
-    if(icon->priv->pix) {
-        g_object_unref(G_OBJECT(icon->priv->pix));
-        icon->priv->pix = NULL;
-    }
     
+    xfdesktop_file_icon_invalidate_pixbuf(icon);
     xfdesktop_icon_pixbuf_changed(XFDESKTOP_ICON(icon));
 }
 
@@ -360,20 +393,8 @@
     }
     
     /* fallback */
-    if(!file_icon->priv->pix) {
-        if(xfdesktop_fallback_icon) {
-            if(gdk_pixbuf_get_width(xfdesktop_fallback_icon) != size) {
-                g_object_unref(G_OBJECT(xfdesktop_fallback_icon));
-                xfdesktop_fallback_icon = NULL;
-            }
-        }
-        if(!xfdesktop_fallback_icon) {
-            xfdesktop_fallback_icon = gdk_pixbuf_new_from_file_at_size(DATADIR 
"/pixmaps/xfdesktop/xfdesktop-fallback-icon.png",
-                                                                       size,
-                                                                       size,
-                                                                       NULL);
-        }
-        
+    if(G_UNLIKELY(!file_icon->priv->pix)) {
+        xfdesktop_file_icon_ensure_fallback_icon(size);
         file_icon->priv->pix = g_object_ref(G_OBJECT(xfdesktop_fallback_icon));
         loaded_new = TRUE;
     }
@@ -387,13 +408,31 @@
         {
             GdkPixbuf *sym_pix;
             gint sym_pix_size = size * 2 / 3;
+            gint dest_size = size - sym_pix_size;
             
             sym_pix = xfce_themed_icon_load(EMBLEM_SYMLINK, sym_pix_size);
             if(sym_pix) {
+                if(gdk_pixbuf_get_width(sym_pix) != sym_pix_size
+                   || gdk_pixbuf_get_height(sym_pix) != sym_pix_size)
+                {
+                    GdkPixbuf *tmp = gdk_pixbuf_scale_simple(sym_pix,
+                                                             sym_pix_size,
+                                                             sym_pix_size,
+                                                             
GDK_INTERP_BILINEAR);
+                    g_object_unref(G_OBJECT(sym_pix));
+                    sym_pix = tmp;
+                }
+                
+                DBG("calling gdk_pixbuf_composite(%p, %p, %d, %d, %d, %d, 
%.1f, %.1f, %.1f, %.1f, %d, %d)",
+                                     sym_pix, file_icon->priv->pix,
+                                     dest_size, dest_size,
+                                     sym_pix_size, sym_pix_size,
+                                     (gdouble)dest_size, (gdouble)dest_size,
+                                     1.0, 1.0, GDK_INTERP_BILINEAR, 255);
                 gdk_pixbuf_composite(sym_pix, file_icon->priv->pix,
-                                     size - sym_pix_size, size - sym_pix_size,
+                                     dest_size, dest_size,
                                      sym_pix_size, sym_pix_size,
-                                     size - sym_pix_size, size - sym_pix_size,
+                                     dest_size, dest_size,
                                      1.0, 1.0, GDK_INTERP_BILINEAR, 255);
                 g_object_unref(G_OBJECT(sym_pix));
             }
@@ -566,8 +605,8 @@
         g_list_free(path_list);
         
         if(!succeeded) {
-            gchar *primary = g_strdup_printf(_("Failed to run \"%s\":"),
-                                             
file_icon->priv->info->display_name);
+            gchar *primary = g_markup_printf_escaped(_("Failed to run 
\"%s\":"),
+                                                     
file_icon->priv->info->display_name);
             xfce_message_dialog(NULL, _("Run Error"), GTK_STOCK_DIALOG_ERROR,
                                 primary, error->message,
                                 GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);
@@ -692,8 +731,8 @@
                             gpointer user_data)
 {
     XfdesktopFileIcon *icon = XFDESKTOP_FILE_ICON(user_data);
-    gchar *primary = g_strdup_printf("There was an error deleting \"%s\":",
-                                     icon->priv->info->display_name);
+    gchar *primary = g_markup_printf_escaped("There was an error deleting 
\"%s\":",
+                                             icon->priv->info->display_name);
                                      
     xfce_message_dialog(NULL, _("Error"), GTK_STOCK_DIALOG_ERROR, primary,
                         error->message, GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
@@ -750,9 +789,9 @@
                          FALSE);
     
     if(!thunar_vfs_info_rename(icon->priv->info, new_name, &error)) {
-        gchar *primary = g_strdup_printf(_("Failed to rename \"%s\" to 
\"%s\":"),
-                                         icon->priv->info->display_name,
-                                         new_name);
+        gchar *primary = g_markup_printf_escaped(_("Failed to rename \"%s\" to 
\"%s\":"),
+                                                 
icon->priv->info->display_name,
+                                                 new_name);
         xfce_message_dialog(NULL, _("Error"), GTK_STOCK_DIALOG_ERROR,
                             primary, error->message,
                             GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT, NULL);

_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits

Reply via email to