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.
Этот коммит содержится в:
Коммит
fab985b1ec
53
src/info.c
53
src/info.c
@ -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.
|
||||
|
Загрузка…
x
Ссылка в новой задаче
Block a user