1
1

Merge branch '2226_info_filesystem_info'

* 2226_info_filesystem_info:
  Fixed int overflow in free modes calculation.
  set_display_type(): fixed memory leak.
  Minor changes of info panel look'n'feel.
  Ticket #2226: info panel inprovements.
Этот коммит содержится в:
Andrew Borodin 2010-06-07 13:04:14 +04:00
родитель 97b8d4f57a bef2bcebda
Коммит fab985b1ec
2 изменённых файлов: 33 добавлений и 22 удалений

Просмотреть файл

@ -23,14 +23,14 @@
#include <config.h>
#include <stdio.h>
#include <sys/stat.h>
#include "lib/global.h"
#include "lib/unixcompat.h"
#include "lib/tty/tty.h"
#include "lib/tty/key.h" /* is_idle() */
#include "lib/tty/mouse.h" /* Gpm_Event */
#include "lib/skin.h"
#include "lib/unixcompat.h"
#include "lib/strutil.h"
#include "dialog.h"
@ -53,17 +53,28 @@ struct WInfo
int ready;
};
/* Have we called the init_my_statfs routine? */
static gboolean initialized = FALSE;
static struct my_statfs myfs_stats;
static void
info_box (Dlg_head * h, struct WInfo *info)
info_box (struct WInfo *info)
{
const char *title = _("Information");
const int len = str_term_width1 (title);
tty_set_normal_attrs ();
tty_setcolor (NORMAL_COLOR);
widget_erase (&info->widget);
draw_box (h, info->widget.y, info->widget.x, info->widget.lines, info->widget.cols, FALSE);
draw_box (info->widget.parent, info->widget.y, info->widget.x,
info->widget.lines, info->widget.cols, FALSE);
widget_move (&info->widget, 0, (info->widget.cols - len - 2)/2);
tty_printf (" %s ", title);
widget_move (&info->widget, 2, 0);
tty_print_alt_char (ACS_LTEE, FALSE);
widget_move (&info->widget, 2, info->widget.cols - 1);
tty_print_alt_char (ACS_RTEE, FALSE);
tty_draw_hline (info->widget.y + 2, info->widget.x + 1, ACS_HLINE, info->widget.cols - 2);
}
static void
@ -77,18 +88,18 @@ info_show_info (struct WInfo *info)
if (!is_idle ())
return;
info_box (info->widget.parent, info);
info_box (info);
tty_setcolor (MARKED_COLOR);
widget_move (&info->widget, 1, 3);
tty_printf (_("Midnight Commander %s"), VERSION);
tty_setcolor (NORMAL_COLOR);
tty_draw_hline (info->widget.y + 2, info->widget.x + 1, ACS_HLINE, info->widget.cols - 2);
if (get_current_type () != view_listing)
return;
if (!info->ready)
return;
if (get_current_type () != view_listing)
return;
my_statfs (&myfs_stats, current_panel->cwd);
st = current_panel->dir.list[current_panel->selected].st;
@ -101,6 +112,8 @@ info_show_info (struct WInfo *info)
i18n_adjust = str_term_width1 (file_label) + 2;
}
tty_setcolor (NORMAL_COLOR);
buff = g_string_new ("");
switch (info->widget.lines - 2)
@ -112,10 +125,11 @@ info_show_info (struct WInfo *info)
case 16:
widget_move (&info->widget, 16, 3);
if (myfs_stats.nfree > 0 || myfs_stats.nodes > 0)
tty_printf (_("Free nodes: %d (%d%%) of %d"),
myfs_stats.nfree,
myfs_stats.total
? 100 * myfs_stats.nfree / myfs_stats.nodes : 0, myfs_stats.nodes);
tty_printf (_("Free nodes: %ld (%ld%%) of %ld"),
(size_t) myfs_stats.nfree,
myfs_stats.total != 0
? 100 * (size_t) myfs_stats.nfree / (size_t) myfs_stats.nodes : 0,
(size_t) myfs_stats.nodes);
else
tty_print_string (_("No node information"));
@ -248,13 +262,13 @@ info_callback (Widget * w, widget_msg_t msg, int parm)
{
case WIDGET_INIT:
init_my_statfs ();
add_hook (&select_file_hook, info_hook, info);
info->ready = 0;
return MSG_HANDLED;
case WIDGET_DRAW:
info_hook (info);
info_show_info (info);
return MSG_HANDLED;
case WIDGET_FOCUS:
@ -262,6 +276,7 @@ info_callback (Widget * w, widget_msg_t msg, int parm)
case WIDGET_DESTROY:
delete_hook (&select_file_hook, info_hook);
free_my_statfs ();
return MSG_HANDLED;
default:
@ -294,11 +309,5 @@ info_new (int y, int x, int lines, int cols)
/* We do not want the cursor */
widget_want_cursor (info->widget, 0);
if (!initialized)
{
initialized = TRUE;
init_my_statfs ();
}
return info;
}

Просмотреть файл

@ -1004,6 +1004,8 @@ set_display_type (int num, panel_view_mode_t type)
if ((type != view_listing) && (current_panel == (WPanel *) old_widget))
current_panel = num == 0 ? right_panel : left_panel;
g_free (old_widget);
}
/* This routine is deeply sticked to the two panels idea.