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);
}
{
ViewDir *vd = static_cast<ViewDir *>(data);
- DirViewType new_type = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(widget), "menu_item_radio_data"));
+ DirViewType new_type = static_cast<DirViewType>(GPOINTER_TO_INT((g_object_get_data(G_OBJECT(widget), "menu_item_radio_data"))));
layout_views_set(vd->layout, new_type, vd->layout->options.file_view_type);
}
*/
static GtkTargetEntry vd_dnd_drop_types[] = {
- { "text/uri-list", 0, TARGET_URI_LIST }
+ { const_cast<gchar *>("text/uri-list"), 0, TARGET_URI_LIST }
};
static gint vd_dnd_drop_types_count = 1;
if (enable)
{
gtk_drag_dest_set(vd->view,
- GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP,
+ static_cast<GtkDestDefaults>(GTK_DEST_DEFAULT_MOTION | GTK_DEST_DEFAULT_DROP),
vd_dnd_drop_types, vd_dnd_drop_types_count,
- GDK_ACTION_MOVE | GDK_ACTION_COPY);
+ static_cast<GdkDragAction>(GDK_ACTION_MOVE | GDK_ACTION_COPY));
}
else
{
}
vd->drop_scroll_id = 0;
- return FALSE;
+ return G_SOURCE_REMOVE;
}
static gboolean vd_auto_scroll_notify_cb(GtkWidget *UNUSED(widget), gint UNUSED(x), gint UNUSED(y), gpointer data)
if (gtk_drag_get_source_widget(context) == vd->view)
{
/* from same window */
- gdk_drag_status(context, 0, time);
+ gdk_drag_status(context, GDK_ACTION_DEFAULT, time);
return TRUE;
}
else
void vd_dnd_init(ViewDir *vd)
{
- gtk_drag_source_set(vd->view, GDK_BUTTON1_MASK | GDK_BUTTON2_MASK,
+ gtk_drag_source_set(vd->view, static_cast<GdkModifierType>(GDK_BUTTON1_MASK | GDK_BUTTON2_MASK),
dnd_file_drag_types, dnd_file_drag_types_count,
- GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK);
+ static_cast<GdkDragAction>(GDK_ACTION_COPY | GDK_ACTION_MOVE | GDK_ACTION_ASK));
g_signal_connect(G_OBJECT(vd->view), "drag_data_get",
G_CALLBACK(vd_dnd_get), vd);
g_signal_connect(G_OBJECT(vd->view), "drag_begin",