void on_sel_changed(GObject* obj, FmFolderView* fv) { /* FIXME: this is inefficient, but currently there is no better way */ FmFileInfo* files = fm_folder_view_get_selected_files(fv); g_signal_emit(fv, signals[SEL_CHANGED], 0, files); if(files) fm_list_unref(files); }
void on_dnd_src_data_get(FmDndSrc* ds, FmFolderView* fv) { FmFileInfoList* files = fm_folder_view_get_selected_files(fv); if(files) { fm_dnd_src_set_files(ds, files); fm_list_unref(files); } }
static void on_file_clicked(FmFolderView* fv, FmFolderViewClickType type, FmFileInfo* fi, FmMainWin* win) { char* fpath, *uri; GAppLaunchContext* ctx; switch(type) { case FM_FV_ACTIVATED: /* file activated */ if(fm_file_info_is_dir(fi)) { fm_main_win_chdir( win, fi->path); } else if(fi->target) /* FIXME: use accessor functions. */ { /* FIXME: use FmPath here. */ fm_main_win_chdir_by_name( win, fi->target); } else { fm_launch_file_simple(GTK_WINDOW(win), NULL, fi, open_folder_func, win); } break; case FM_FV_CONTEXT_MENU: if(fi) { FmFileMenu* menu; GtkMenu* popup; FmFileInfoList* files = fm_folder_view_get_selected_files(fv); menu = fm_file_menu_new_for_files(files, TRUE); fm_file_menu_set_folder_func(menu, open_folder_func, win); fm_list_unref(files); /* merge some specific menu items for folders */ if(fm_file_menu_is_single_file_type(menu) && fm_file_info_is_dir(fi)) { GtkUIManager* ui = fm_file_menu_get_ui(menu); GtkActionGroup* act_grp = fm_file_menu_get_action_group(menu); gtk_action_group_add_actions(act_grp, folder_menu_actions, G_N_ELEMENTS(folder_menu_actions), win); gtk_ui_manager_add_ui_from_string(ui, folder_menu_xml, -1, NULL); } popup = fm_file_menu_get_menu(menu); gtk_menu_popup(popup, NULL, NULL, NULL, fi, 3, gtk_get_current_event_time()); } else /* no files are selected. Show context menu of current folder. */ { gtk_menu_popup(GTK_MENU(win->popup), NULL, NULL, NULL, NULL, 3, gtk_get_current_event_time()); } break; case FM_FV_MIDDLE_CLICK: g_debug("middle click!"); break; } }
FmPathList* fm_folder_view_get_selected_file_paths(FmFolderView* fv) { FmFileInfoList* files = fm_folder_view_get_selected_files(fv); FmPathList* list; if(files) { list = fm_path_list_new_from_file_info_list(files); fm_list_unref(files); } else list = NULL; return list; }