Author: kelnos
Date: 2006-07-11 23:39:26 +0000 (Tue, 11 Jul 2006)
New Revision: 22413

Modified:
   xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
   xfdesktop/trunk/src/xfdesktop-file-icon.c
   xfdesktop/trunk/src/xfdesktop-file-utils.c
   xfdesktop/trunk/src/xfdesktop-file-utils.h
   xfdesktop/trunk/src/xfdesktop-icon.c
   xfdesktop/trunk/src/xfdesktop-icon.h
Log:
implement the backend portion to be able to show icon tooltips.  haven't done
the XfdesktopIconView part yet (bug 1526)


Modified: xfdesktop/trunk/src/xfdesktop-file-icon-manager.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2006-07-11 22:57:09 UTC 
(rev 22412)
+++ xfdesktop/trunk/src/xfdesktop-file-icon-manager.c   2006-07-11 23:39:26 UTC 
(rev 22413)
@@ -1103,17 +1103,7 @@
     gtk_table_attach(GTK_TABLE(table), lbl, 0, 1, row, row + 1,
                      GTK_FILL, GTK_FILL, 0, 0);
     
-    if(!strcmp(thunar_vfs_mime_info_get_name(info->mime_info),
-               "inode/symlink"))
-    {
-        str = g_strdup(_("broken link"));
-        is_link = TRUE;
-    } else if(info->flags & THUNAR_VFS_FILE_FLAGS_SYMLINK) {
-        str = g_strdup_printf(_("link to %s"),
-                              
thunar_vfs_mime_info_get_comment(info->mime_info));
-        is_link = TRUE;
-    } else
-        str = g_strdup(thunar_vfs_mime_info_get_comment(info->mime_info));
+    str = xfdesktop_file_utils_get_file_kind(info, &is_link);
     lbl = gtk_label_new(str);
     g_free(str);
     gtk_misc_set_alignment(GTK_MISC(lbl), 0.0, 0.5);

Modified: xfdesktop/trunk/src/xfdesktop-file-icon.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-icon.c   2006-07-11 22:57:09 UTC (rev 
22412)
+++ xfdesktop/trunk/src/xfdesktop-file-icon.c   2006-07-11 23:39:26 UTC (rev 
22413)
@@ -31,6 +31,10 @@
 #include <unistd.h>
 #endif
 
+#ifdef HAVE_TIME_H
+#include <time.h>
+#endif
+
 #ifdef HAVE_LIBEXO
 #define EXO_API_SUBJECT_TO_CHANGE
 #include <exo/exo.h>
@@ -63,6 +67,7 @@
     gint16 row;
     gint16 col;
     GdkPixbuf *pix;
+    gchar *tooltip;
     guint pix_opacity;
     gint cur_pix_size;
     GdkRectangle extents;
@@ -78,6 +83,7 @@
 static GdkPixbuf *xfdesktop_file_icon_peek_pixbuf(XfdesktopIcon *icon,
                                                   gint size);
 static G_CONST_RETURN gchar *xfdesktop_file_icon_peek_label(XfdesktopIcon 
*icon);
+static G_CONST_RETURN gchar *xfdesktop_file_icon_peek_tooltip(XfdesktopIcon 
*icon);
 static void xfdesktop_file_icon_set_position(XfdesktopIcon *icon,
                                              gint16 row,
                                              gint16 col);
@@ -93,7 +99,6 @@
                                                                 XfdesktopIcon 
*src_icon,
                                                                 GdkDragAction 
action);
 
-
 #ifdef HAVE_THUNARX
 static void xfdesktop_file_icon_tfi_init(ThunarxFileInfoIface *iface);
 static gchar *xfdesktop_file_icon_tfi_get_name(ThunarxFileInfo *file_info);
@@ -211,6 +216,7 @@
 {
     iface->peek_pixbuf = xfdesktop_file_icon_peek_pixbuf;
     iface->peek_label = xfdesktop_file_icon_peek_label;
+    iface->peek_tooltip = xfdesktop_file_icon_peek_tooltip;
     iface->set_position = xfdesktop_file_icon_set_position;
     iface->get_position = xfdesktop_file_icon_get_position;
     iface->set_extents = xfdesktop_file_icon_set_extents;
@@ -638,6 +644,34 @@
     return XFDESKTOP_ICON_DRAG_FAILED;
 }
 
+static G_CONST_RETURN gchar *
+xfdesktop_file_icon_peek_tooltip(XfdesktopIcon *icon)
+{
+    XfdesktopFileIcon *file_icon = XFDESKTOP_FILE_ICON(icon);
+    
+    if(!file_icon->priv->info)
+       return NULL;  /* FIXME: implement something here */
+    
+    if(!file_icon->priv->tooltip) {
+        gchar mod[64], *kind, sizebuf[64], *size;
+        struct tm *tm = localtime(&file_icon->priv->info->mtime);
+
+        strftime(mod, 64, "%Y-%m-%d %H:%M:%S", tm);
+        kind = xfdesktop_file_utils_get_file_kind(file_icon->priv->info, NULL);
+        thunar_vfs_humanize_size(file_icon->priv->info->size, sizebuf, 64);
+        size = g_strdup_printf(_("%s (%" G_GINT64_FORMAT " Bytes)"), sizebuf,
+                              (gint64)file_icon->priv->info->size);
+        
+        file_icon->priv->tooltip = g_strdup_printf(_("Kind: 
%s\nModified:%s\nSize: %s"),
+                                                   kind, mod, size);
+        
+        g_free(kind);
+        g_free(size);
+    }
+    
+    return file_icon->priv->tooltip;
+}
+
 static void
 xfdesktop_delete_file_error(ThunarVfsJob *job,
                             GError *error,

Modified: xfdesktop/trunk/src/xfdesktop-file-utils.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-utils.c  2006-07-11 22:57:09 UTC (rev 
22412)
+++ xfdesktop/trunk/src/xfdesktop-file-utils.c  2006-07-11 23:39:26 UTC (rev 
22413)
@@ -22,6 +22,10 @@
 #include <config.h>
 #endif
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
 #include <gtk/gtk.h>
 
 #include <libxfcegui4/libxfcegui4.h>
@@ -108,3 +112,29 @@
         g_free(primary);
     }
 }
+
+gchar *
+xfdesktop_file_utils_get_file_kind(const ThunarVfsInfo *info,
+                                   gboolean *is_link)
+{
+    gchar *str = NULL;
+
+    if(!strcmp(thunar_vfs_mime_info_get_name(info->mime_info),
+               "inode/symlink"))
+    {
+        str = g_strdup(_("broken link"));
+        if(is_link)
+            *is_link = TRUE;
+    } else if(info->flags & THUNAR_VFS_FILE_FLAGS_SYMLINK) {
+        str = g_strdup_printf(_("link to %s"),
+                              
thunar_vfs_mime_info_get_comment(info->mime_info));
+        if(is_link)
+            *is_link = TRUE;
+    } else {
+        str = g_strdup(thunar_vfs_mime_info_get_comment(info->mime_info));
+        if(is_link)
+            *is_link = FALSE;
+    }
+    
+    return str;
+}

Modified: xfdesktop/trunk/src/xfdesktop-file-utils.h
===================================================================
--- xfdesktop/trunk/src/xfdesktop-file-utils.h  2006-07-11 22:57:09 UTC (rev 
22412)
+++ xfdesktop/trunk/src/xfdesktop-file-utils.h  2006-07-11 23:39:26 UTC (rev 
22413)
@@ -41,4 +41,7 @@
                                               XfdesktopFileUtilsFileop fileop,
                                               GError *error);
 
+gchar *xfdesktop_file_utils_get_file_kind(const ThunarVfsInfo *info,
+                                          gboolean *is_link);
+
 #endif

Modified: xfdesktop/trunk/src/xfdesktop-icon.c
===================================================================
--- xfdesktop/trunk/src/xfdesktop-icon.c        2006-07-11 22:57:09 UTC (rev 
22412)
+++ xfdesktop/trunk/src/xfdesktop-icon.c        2006-07-11 23:39:26 UTC (rev 
22413)
@@ -260,7 +260,21 @@
     return iface->do_drop_dest(icon, src_icon, action);
 }
 
+G_CONST_RETURN gchar *
+xfdesktop_icon_peek_tooltip(XfdesktopIcon *icon)
+{
+    XfdesktopIconIface *iface;
+    
+    g_return_val_if_fail(XFDESKTOP_IS_ICON(icon), NULL);
+    
+    iface = XFDESKTOP_ICON_GET_IFACE(icon);
+    if(!iface->peek_tooltip)
+        return NULL;
+    
+    return iface->peek_tooltip(icon);
+}
 
+
 /*< signal triggers >*/
 
 void

Modified: xfdesktop/trunk/src/xfdesktop-icon.h
===================================================================
--- xfdesktop/trunk/src/xfdesktop-icon.h        2006-07-11 22:57:09 UTC (rev 
22412)
+++ xfdesktop/trunk/src/xfdesktop-icon.h        2006-07-11 23:39:26 UTC (rev 
22413)
@@ -65,6 +65,8 @@
     
     gboolean (*is_drop_dest)(XfdesktopIcon *icon);
     XfdesktopIconDragResult (*do_drop_dest)(XfdesktopIcon *icon, XfdesktopIcon 
*src_icon, GdkDragAction action);
+    
+    G_CONST_RETURN gchar *(*peek_tooltip)(XfdesktopIcon *icon);
 };
 
 GType xfdesktop_icon_get_type() G_GNUC_CONST;
@@ -74,6 +76,7 @@
 GdkPixbuf *xfdesktop_icon_peek_pixbuf(XfdesktopIcon *icon,
                                      gint size);
 G_CONST_RETURN gchar *xfdesktop_icon_peek_label(XfdesktopIcon *icon);
+G_CONST_RETURN gchar *xfdesktop_icon_peek_tooltip(XfdesktopIcon *icon);
 
 void xfdesktop_icon_set_position(XfdesktopIcon *icon,
                                  gint16 row,
@@ -92,6 +95,7 @@
                                                     XfdesktopIcon *src_icon,
                                                     GdkDragAction action);
 
+
 /*< signal triggers >*/
 
 void xfdesktop_icon_pixbuf_changed(XfdesktopIcon *icon);

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

Reply via email to