Changeset fa792e8 in mainline for uspace/app/nav/panel.c


Ignore:
Timestamp:
2021-10-25T00:32:45Z (2 years ago)
Author:
jxsvoboda <5887334+jxsvoboda@…>
Branches:
master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
4fcc2de
Parents:
1eb0fafe
git-author:
Jiri Svoboda <jiri@…> (2021-10-15 16:58:28)
git-committer:
jxsvoboda <5887334+jxsvoboda@…> (2021-10-25 00:32:45)
Message:

Highlight directories and sort them first

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/nav/panel.c

    r1eb0fafe rfa792e8  
    4444#include <ui/paint.h>
    4545#include <ui/resource.h>
     46#include <vfs/vfs.h>
    4647#include <qsort.h>
    4748#include "panel.h"
     
    9394
    9495        rc = gfx_color_new_ega(0x0f, &panel->act_border_color);
     96        if (rc != EOK)
     97                goto error;
     98
     99        rc = gfx_color_new_ega(0x0f, &panel->dir_color);
    95100        if (rc != EOK)
    96101                goto error;
     
    107112        if (panel->curs_color != NULL)
    108113                gfx_color_delete(panel->curs_color);
     114        if (panel->act_border_color != NULL)
     115                gfx_color_delete(panel->act_border_color);
     116        if (panel->dir_color != NULL)
     117                gfx_color_delete(panel->dir_color);
    109118        ui_control_delete(panel->control);
    110119        free(panel);
     
    121130        gfx_color_delete(panel->curs_color);
    122131        gfx_color_delete(panel->act_border_color);
     132        gfx_color_delete(panel->dir_color);
    123133        panel_clear_entries(panel);
    124134        ui_control_delete(panel->control);
     
    157167        if (entry == panel->cursor && panel->active)
    158168                fmt.color = panel->curs_color;
     169        else if (entry->isdir)
     170                fmt.color = panel->dir_color;
    159171        else
    160172                fmt.color = panel->color;
     
    402414 * @param panel Panel
    403415 * @param name File name
    404  * @param size File size;
     416 * @param size File size
     417 * @param isdir @c true iff the entry is a directory
    405418 * @return EOK on success or an error code
    406419 */
    407 errno_t panel_entry_append(panel_t *panel, const char *name, uint64_t size)
     420errno_t panel_entry_append(panel_t *panel, const char *name, uint64_t size,
     421    bool isdir)
    408422{
    409423        panel_entry_t *entry;
     
    421435
    422436        entry->size = size;
     437        entry->isdir = isdir;
    423438        link_initialize(&entry->lentries);
    424439        list_append(&entry->lentries, &panel->entries);
     
    469484        DIR *dir;
    470485        struct dirent *dirent;
     486        vfs_stat_t finfo;
    471487        errno_t rc;
    472488
     
    477493        dirent = readdir(dir);
    478494        while (dirent != NULL) {
    479                 rc = panel_entry_append(panel, dirent->d_name, 1);
     495                rc = vfs_stat_path(dirent->d_name, &finfo);
    480496                if (rc != EOK)
    481497                        goto error;
     498
     499                rc = panel_entry_append(panel, dirent->d_name, 1,
     500                    finfo.is_directory);
     501                if (rc != EOK)
     502                        goto error;
     503
    482504                dirent = readdir(dir);
    483505        }
     
    553575        panel_entry_t *a = *(panel_entry_t **)pa;
    554576        panel_entry_t *b = *(panel_entry_t **)pb;
     577        int dcmp;
     578
     579        /* Sort directories first */
     580        dcmp = b->isdir - a->isdir;
     581        if (dcmp != 0)
     582                return dcmp;
    555583
    556584        return str_cmp(a->name, b->name);
Note: See TracChangeset for help on using the changeset viewer.