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