{ PIXBUF_INLINE_ARCHIVE, "gq-archive-file.png" },
{ PIXBUF_INLINE_BROKEN, "gq-sheet-broken.png" },
{ PIXBUF_INLINE_COLLECTION, "gq-collection.png" },
- { PIXBUF_INLINE_FOLDER_CLOSED, "gq-folder-closed.png" },
- { PIXBUF_INLINE_FOLDER_LOCKED, "gq-folder-locked.png" },
- { PIXBUF_INLINE_FOLDER_OPEN, "gq-folder-open.png" },
- { PIXBUF_INLINE_FOLDER_UP, "gq-folder-up.png" },
{ PIXBUF_INLINE_ICON, "gqview-icon.png" },
{ PIXBUF_INLINE_ICON_180, "gq-icon-rotate-180.png" },
{ PIXBUF_INLINE_ICON_BOOK, "gq-icon-book.png" },
static gchar *bookmark_string(const gchar *name, const gchar *path, const gchar *icon)
{
if (!name) name = _("New Bookmark");
- if (icon && strncmp(icon, G_DIR_SEPARATOR_S, 1) != 0) icon = NULL;
if (icon)
{
if (b->icon)
{
- GdkPixbuf *pixbuf;
+ GdkPixbuf *pixbuf = NULL;
gchar *iconl;
iconl = path_from_utf8(b->icon);
pixbuf = gdk_pixbuf_new_from_file(iconl, NULL);
+
+ if (isfile(b->icon))
+ {
+ pixbuf = gdk_pixbuf_new_from_file(iconl, NULL);
+ }
+ else
+ {
+ gint w, h;
+
+ w = h = 16;
+ gtk_icon_size_lookup(GTK_ICON_SIZE_BUTTON, &w, &h);
+
+ pixbuf = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), b->icon, w, GTK_ICON_LOOKUP_NO_SVG, NULL);
+ }
+
g_free(iconl);
if (pixbuf)
{
}
else
{
- b->image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE,
+ b->image = gtk_image_new_from_stock(GTK_STOCK_DIRECTORY,
GTK_ICON_SIZE_BUTTON);
}
}
else
{
- b->image = gtk_image_new_from_stock(GTK_STOCK_JUMP_TO, GTK_ICON_SIZE_BUTTON);
+ b->image = gtk_image_new_from_stock(GTK_STOCK_DIRECTORY, GTK_ICON_SIZE_BUTTON);
}
gtk_box_pack_start(GTK_BOX(box), b->image, FALSE, FALSE, 0);
gtk_widget_show(b->image);
GList *list = NULL;
GList *errors = NULL;
GList *work;
+ gchar *real_path;
gchar **uris;
if (!bm->editable) return;
work = work->next;
if (bm->only_directories && !isdir(path)) continue;
- buf = bookmark_string(filename_from_path(path), path, NULL);
+
+ real_path = realpath(path, NULL);
+
+ if (strstr(real_path, get_collections_dir()) && isfile(path))
+ {
+ buf = bookmark_string(filename_from_path(path), path, "gq-collection");
+ }
+ else if (isfile(path))
+ {
+ buf = bookmark_string(filename_from_path(path), path, GTK_STOCK_FILE);
+ }
+ else
+ {
+ buf = bookmark_string(filename_from_path(path), path, NULL);
+ }
history_list_add_to_key(bm->key, buf, 0);
g_free(buf);
+ g_free(real_path);
}
string_list_free(list);
{
BookMarkData *bm;
gchar *buf;
+ gchar *real_path;
bm = static_cast<BookMarkData *>(g_object_get_data(G_OBJECT(list), BOOKMARK_DATA_KEY));
if (!bm) return;
buf = bookmark_string(name, path, NULL);
+ real_path = realpath(path, NULL);
+
+ if (strstr(real_path, get_collections_dir()) && isfile(path))
+ {
+ buf = bookmark_string(name, path, "gq-collection");
+ }
+ else
+ {
+ if (isfile(path))
+ {
+ buf = bookmark_string(name, path, "gtk-file");
+ }
+ else
+ {
+ buf = bookmark_string(name, path, NULL);
+ }
+ }
+
history_list_add_to_key(bm->key, buf, 0);
g_free(buf);
+ g_free(real_path);
bookmark_populate_all(bm->key);
}
static PixmapFolders *folder_icons_new(GtkWidget *widget)
{
PixmapFolders *pf = g_new0(PixmapFolders, 1);
+ GError *error = NULL;
+ GdkPixbuf *icon;
+ gint scale;
-#if 1
GtkIconSize size = GTK_ICON_SIZE_MENU;
+/** @FIXME Emblems should be attached to icons via e.g.: \n
+ * GIcon *.... \n
+ * icon = g_themed_icon_new("folder"); \n
+ * emblem_icon = g_themed_icon_new("emblem_symbolic_link"); \n
+ * emblem = g_emblem_new(emblem_icon); \n
+ * emblemed = g_emblemed_icon_new(icon, emblem); \n
+ * gtk_icon_info_load_icon(icon_info, NULL) \n
+ * But there does not seem to be a way to get GtkIconInfo from a GIcon
+ */
+
/* Attempt to use stock gtk icons */
pf->close = gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL);
pf->open = gtk_widget_render_icon(widget, GTK_STOCK_OPEN, size, NULL);
- pf->deny = gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL);
pf->parent = gtk_widget_render_icon(widget, GTK_STOCK_GO_UP, size, NULL);
- pf->link = gtk_widget_render_icon(widget, GTK_STOCK_REDO, size, NULL); /** @FIXME this is not a suitable icon */
-#else
- /* GQView legacy icons */
- pf->close = pixbuf_inline(PIXBUF_INLINE_FOLDER_CLOSED);
- pf->open = pixbuf_inline(PIXBUF_INLINE_FOLDER_OPEN);
- pf->deny = pixbuf_inline(PIXBUF_INLINE_FOLDER_LOCKED);
- pf->parent = pixbuf_inline(PIXBUF_INLINE_FOLDER_UP);
-#endif
+
+ if (gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), "emblem-unreadable"))
+ {
+ icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "emblem-unreadable", size, GTK_ICON_LOOKUP_USE_BUILTIN, &error);
+ if (error)
+ {
+ log_printf("Error: %s\n", error->message);
+ g_error_free(error);
+
+ pf->deny = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL));
+ }
+ else
+ {
+ pf->deny = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL));
+ scale = gdk_pixbuf_get_width(icon) / 2;
+ gdk_pixbuf_composite(icon, pf->deny, scale, scale, scale, scale, scale, scale, 0.5, 0.5, GDK_INTERP_HYPER, 255);
+
+ }
+ g_object_unref(icon);
+ }
+ else
+ {
+ pf->deny = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_STOP, size, NULL));
+ }
+
+ if (gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), "emblem-symbolic-link"))
+ {
+ icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "emblem-symbolic-link", size, GTK_ICON_LOOKUP_USE_BUILTIN, &error);
+ if (error)
+ {
+ log_printf("Error: %s\n", error->message);
+ g_error_free(error);
+
+ pf->link = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_REDO, size, NULL));
+ }
+ else
+ {
+ pf->link = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL));
+ scale = gdk_pixbuf_get_width(icon) / 2;
+ gdk_pixbuf_composite(icon, pf->link, scale, scale, scale, scale, scale, scale, 0.5, 0.5, GDK_INTERP_HYPER, 255);
+ }
+ g_object_unref(icon);
+ }
+ else
+ {
+ pf->link = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_REDO, size, NULL));
+ }
+
+ pf->read_only = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL));
+
+ if (gtk_icon_theme_has_icon(gtk_icon_theme_get_default(), "emblem-readonly"))
+ {
+ icon = gtk_icon_theme_load_icon(gtk_icon_theme_get_default(), "emblem-readonly", size, GTK_ICON_LOOKUP_USE_BUILTIN, &error);
+ if (error)
+ {
+ log_printf("Error: %s\n", error->message);
+ g_error_free(error);
+
+ pf->read_only = gdk_pixbuf_copy(gtk_widget_render_icon(widget, GTK_STOCK_DIRECTORY, size, NULL));
+ }
+ else
+ {
+ gint scale = gdk_pixbuf_get_width(icon) / 2;
+ gdk_pixbuf_composite(icon, pf->read_only, scale, scale, scale, scale, scale, scale, 0.5, 0.5, GDK_INTERP_HYPER, 255);
+
+ }
+ g_object_unref(icon);
+ }
+
return pf;
}
g_object_unref(pf->deny);
g_object_unref(pf->parent);
g_object_unref(pf->link);
+ g_object_unref(pf->read_only);
g_free(pf);
}