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);
}
static void vd_destroy_cb(GtkWidget *widget, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
file_data_unregister_notify_func(vd_notify_cb, vd);
static void vd_rename_finished_cb(gboolean success, const gchar *new_path, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (success)
{
FileData *fd = file_data_new_dir(new_path);
static gboolean vd_rename_cb(TreeEditData *td, const gchar *UNUSED(old_name), const gchar *new_name, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
FileData *fd;
gchar *new_path;
gchar *base;
void vd_popup_destroy_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_color_set(vd, vd->click_fd, FALSE);
vd->click_fd = NULL;
static void vd_drop_menu_copy_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
const gchar *path;
GList *list;
static void vd_drop_menu_move_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
const gchar *path;
GList *list;
static void vd_drop_menu_filter_cb(GtkWidget *widget, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
const gchar *path;
GList *list;
const gchar *key;
if (!vd->drop_fd) return;
- key = g_object_get_data(G_OBJECT(widget), "filter_key");
+ key = static_cast<const gchar *>(g_object_get_data(G_OBJECT(widget), "filter_key"));
path = vd->drop_fd->path;
list = vd->drop_list;
while (work)
{
GtkWidget *item;
- const EditorDescription *editor = (const EditorDescription *)work->data;
+ const EditorDescription *editor = static_cast<const EditorDescription *>(work->data);
gchar *key;
work = work->next;
static void vd_pop_menu_up_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gchar *path;
if (!vd->dir_fd || strcmp(vd->dir_fd->path, G_DIR_SEPARATOR_S) == 0) return;
static void vd_pop_menu_slide_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (!vd->layout) return;
if (!vd->click_fd) return;
static void vd_pop_menu_slide_rec_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
GList *list;
if (!vd->layout) return;
static void vd_pop_menu_dupe_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_pop_menu_dupe(vd, FALSE);
}
static void vd_pop_menu_dupe_rec_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_pop_menu_dupe(vd, TRUE);
}
static void vd_pop_menu_delete_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (!vd->click_fd) return;
file_util_delete_dir(vd->click_fd, vd->widget);
static void vd_pop_menu_copy_path_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (!vd->click_fd) return;
static void vd_pop_menu_copy_path_unquoted_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (!vd->click_fd) return;
static void vd_pop_submenu_dir_view_as_cb(GtkWidget *widget, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ 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 void vd_pop_menu_refresh_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (vd->layout) layout_refresh(vd->layout);
}
static void vd_toggle_show_hidden_files_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
options->file_filter.show_hidden_files = !options->file_filter.show_hidden_files;
if (vd->layout) layout_refresh(vd->layout);
static void vd_pop_menu_new_folder_cb(gboolean success, const gchar *new_path, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
FileData *fd = NULL;
GtkTreeIter iter;
GtkTreePath *tpath;
static void vd_pop_menu_new_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
FileData *dir_fd = NULL;
switch (vd->type)
static void vd_pop_menu_rename_cb(GtkWidget *UNUSED(widget), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_rename_by_data(vd, vd->click_fd);
}
static void vd_pop_menu_sort_ascend_cb(GtkWidget *widget, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gboolean ascend;
if (!vd) return;
ViewDir *vd;
SortType type;
- vd = submenu_item_get_data(widget);
+ vd = static_cast<ViewDir *>(submenu_item_get_data(widget));
if (!vd) return;
if (!vd->layout) return;
*/
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
{
GtkSelectionData *selection_data, guint info,
guint UNUSED(time), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
GList *list;
if (!vd->click_fd) return;
static void vd_dnd_begin(GtkWidget *UNUSED(widget), GdkDragContext *UNUSED(context), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_color_set(vd, vd->click_fd, TRUE);
vd_dest_set(vd, FALSE);
static void vd_dnd_end(GtkWidget *UNUSED(widget), GdkDragContext *context, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd_color_set(vd, vd->click_fd, FALSE);
GtkSelectionData *selection_data, guint info,
guint UNUSED(time), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
GtkTreePath *tpath;
FileData *fd = NULL;
GdkDragAction action = GDK_ACTION_ASK;
static gboolean vd_auto_scroll_idle_cb(gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
GdkSeat *seat;
GdkDevice *device;
}
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)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (!vd->drop_fd || vd->drop_list) return FALSE;
static gboolean vd_dnd_drop_motion(GtkWidget *UNUSED(widget), GdkDragContext *context,
gint x, gint y, guint time, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
vd->click_fd = NULL;
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
static void vd_dnd_drop_leave(GtkWidget *UNUSED(widget), GdkDragContext *UNUSED(context), guint UNUSED(time), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
if (vd->drop_fd != vd->click_fd) vd_color_set(vd, vd->drop_fd, FALSE);
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",
//void vd_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
//{
- //ViewDir *vd = (//ViewDir *)data;
+ //ViewDir *vd = static_cast<//ViewDir *>(data);
//GtkTreeModel *store;
//GtkTreeIter iter;
//GtkTreePath *tpath;
void vd_activate_cb(GtkTreeView *tview, GtkTreePath *tpath, GtkTreeViewColumn *UNUSED(column), gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
FileData *fd = vd_get_fd_from_tree_path(vd, tview, tpath);
vd_select_row(vd, fd);
void vd_color_cb(GtkTreeViewColumn *UNUSED(tree_column), GtkCellRenderer *cell,
GtkTreeModel *tree_model, GtkTreeIter *iter, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gboolean set;
gtk_tree_model_get(tree_model, iter, DIR_COLUMN_COLOR, &set, -1);
gboolean vd_release_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
GtkTreePath *tpath;
FileData *fd = NULL;
gboolean vd_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gboolean ret = FALSE;
switch (vd->type)
gboolean vd_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gboolean ret = FALSE;
FileData *fd;
GtkTreePath *tpath;
static void vd_notify_cb(FileData *fd, NotifyType type, gpointer data)
{
- ViewDir *vd = (ViewDir *)data;
+ ViewDir *vd = static_cast<ViewDir *>(data);
gboolean refresh;
gchar *base;