summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/misc.c10
-rw-r--r--src/core/misc.h3
-rw-r--r--src/fe-common/core/fe-channels.c9
-rw-r--r--src/fe-common/core/fe-core-commands.c2
4 files changed, 18 insertions, 6 deletions
diff --git a/src/core/misc.c b/src/core/misc.c
index b9bc70c7..709fd98d 100644
--- a/src/core/misc.c
+++ b/src/core/misc.c
@@ -609,13 +609,14 @@ char *my_asctime(time_t t)
/* Returns number of columns needed to print items.
save_column_widths is filled with length of each column. */
int get_max_column_count(GSList *items, COLUMN_LEN_FUNC len_func,
- int max_width, int item_extra, int item_min_size,
+ int max_width, int max_columns,
+ int item_extra, int item_min_size,
int **save_column_widths, int *rows)
{
GSList *tmp;
int **columns, *columns_width, *columns_rows;
int item_pos, items_count;
- int ret, len, n, col, max_columns;
+ int ret, len, n, col;
items_count = g_slist_length(items);
if (items_count == 0) {
@@ -624,7 +625,10 @@ int get_max_column_count(GSList *items, COLUMN_LEN_FUNC len_func,
return 0;
}
- max_columns = max_width/(item_extra+item_min_size);
+ len = max_width/(item_extra+item_min_size);
+ if (max_columns <= 0 || len < max_columns)
+ max_columns = len;
+
columns = g_new0(int *, max_columns);
columns_width = g_new0(int, max_columns);
columns_rows = g_new0(int, max_columns);
diff --git a/src/core/misc.h b/src/core/misc.h
index 110aa14b..b56e8f97 100644
--- a/src/core/misc.h
+++ b/src/core/misc.h
@@ -78,7 +78,8 @@ char *my_asctime(time_t t);
/* Returns number of columns needed to print items.
save_column_widths is filled with length of each column. */
int get_max_column_count(GSList *items, COLUMN_LEN_FUNC len_func,
- int max_width, int item_extra, int item_min_size,
+ int max_width, int max_columns,
+ int item_extra, int item_min_size,
int **save_column_widths, int *rows);
/* Return a column sorted copy of a list. */
diff --git a/src/fe-common/core/fe-channels.c b/src/fe-common/core/fe-channels.c
index 77c7b7e4..2a9ba71f 100644
--- a/src/fe-common/core/fe-channels.c
+++ b/src/fe-common/core/fe-channels.c
@@ -329,8 +329,13 @@ static void display_sorted_nicks(CHANNEL_REC *channel, GSList *nicklist)
g_free(format);
}
- /* calculate columns */
+ /* calculate columns */
+ if (settings_get_int("names_max_width") > 0 &&
+ max_width > settings_get_int("names_max_width"))
+ max_width = settings_get_int("names_max_width");
+
cols = get_max_column_count(nicklist, get_nick_length, max_width,
+ settings_get_int("names_max_columns"),
item_extra, 3, &columns, &rows);
nicklist = columns_sort_list(nicklist, rows);
@@ -442,6 +447,8 @@ static void cmd_names(const char *data, SERVER_REC *server, WI_ITEM_REC *item)
void fe_channels_init(void)
{
settings_add_bool("lookandfeel", "autoclose_windows", TRUE);
+ settings_add_int("lookandfeel", "names_max_columns", 6);
+ settings_add_int("lookandfeel", "names_max_width", 0);
signal_add("channel created", (SIGNAL_FUNC) signal_channel_created);
signal_add("channel destroyed", (SIGNAL_FUNC) signal_channel_destroyed);
diff --git a/src/fe-common/core/fe-core-commands.c b/src/fe-common/core/fe-core-commands.c
index 87e26a9c..e374dbd6 100644
--- a/src/fe-common/core/fe-core-commands.c
+++ b/src/fe-common/core/fe-core-commands.c
@@ -96,7 +96,7 @@ static void help_category(GSList *cmdlist, int items)
/* calculate columns */
cols = get_max_column_count(cmdlist, get_cmd_length,
- max_width, 1, 3, &columns, &rows);
+ max_width, 6, 1, 3, &columns, &rows);
cmdlist = columns_sort_list(cmdlist, rows);
/* rows in last column */