1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 15:26:37 +02:00

core: save and restore layout for buffers and windows on /upgrade

This commit is contained in:
Sebastien Helleu
2011-08-05 23:15:23 +02:00
parent 4919a943fd
commit 8d2c23209f
19 changed files with 304 additions and 134 deletions
+1
View File
@@ -7,6 +7,7 @@ v0.3.6-dev, 2011-08-05
Version 0.3.6 (under dev!)
--------------------------
* core: save and restore layout for buffers and windows on /upgrade
* core: fix bugs with automatic layout (bug #26110), add support of merged
buffers in layout (task #10893)
* core: add option -all for command /buffer unmerge
+5 -5
View File
@@ -531,7 +531,7 @@ COMMAND_CALLBACK(buffer)
ptr_buffer->number,
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
plugin_get_name (ptr_buffer->plugin),
gui_buffer_get_plugin_name (ptr_buffer),
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
ptr_buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
@@ -819,7 +819,7 @@ COMMAND_CALLBACK(buffer)
{
gui_chat_printf (NULL, "%s%s.%s%s: (int) %s = %d",
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
argv[2],
@@ -830,7 +830,7 @@ COMMAND_CALLBACK(buffer)
{
gui_chat_printf (NULL, "%s%s.%s%s: (str) %s = %s",
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
argv[2],
@@ -841,7 +841,7 @@ COMMAND_CALLBACK(buffer)
{
gui_chat_printf (NULL, "%s%s.%s%s: (ptr) %s = 0x%lx",
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
argv[2],
@@ -4693,7 +4693,7 @@ COMMAND_CALLBACK(wait)
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
return WEECHAT_RC_OK;
}
timer_args[0] = strdup (plugin_get_name (buffer->plugin));
timer_args[0] = strdup (gui_buffer_get_plugin_name (buffer));
timer_args[1] = strdup (buffer->name);
timer_args[2] = strdup (argv_eol[2]);
+1 -1
View File
@@ -185,7 +185,7 @@ completion_list_add_buffers_plugins_names_cb (void *data,
ptr_buffer = ptr_buffer->next_buffer)
{
snprintf (name, sizeof (name), "%s.%s",
plugin_get_name (ptr_buffer->plugin),
gui_buffer_get_plugin_name (ptr_buffer),
ptr_buffer->name);
gui_completion_list_add (completion, name,
0, WEECHAT_LIST_POS_SORT);
+1 -1
View File
@@ -1340,7 +1340,7 @@ config_weechat_notify_set (struct t_gui_buffer *buffer, const char *notify)
if ((value < 0) && (strcmp (notify, "reset") != 0))
return 0;
plugin_name = plugin_get_name (buffer->plugin);
plugin_name = gui_buffer_get_plugin_name (buffer);
length = strlen (plugin_name) + 1 + strlen (buffer->name) + 1;
option_name = malloc (length);
if (option_name)
+119 -21
View File
@@ -42,6 +42,7 @@
#include "../gui/gui-color.h"
#include "../gui/gui-history.h"
#include "../gui/gui-hotlist.h"
#include "../gui/gui-layout.h"
#include "../gui/gui-line.h"
#include "../gui/gui-nicklist.h"
#include "../gui/gui-window.h"
@@ -50,8 +51,11 @@
struct t_gui_buffer *upgrade_current_buffer = NULL;
struct t_gui_buffer *upgrade_set_current_buffer = NULL;
int upgrade_last_buffer_number = 1;
int upgrade_set_current_window = 0;
int hotlist_reset = 0;
struct t_gui_layout_buffer *upgrade_layout_buffers = NULL;
struct t_gui_layout_buffer *last_upgrade_layout_buffer = NULL;
struct t_gui_layout_window *upgrade_layout_windows = NULL;
/*
@@ -190,11 +194,11 @@ upgrade_weechat_save_buffers (struct t_upgrade_file *upgrade_file)
}
/*
* upgrade_weechat_save_uptime: save uptime info to upgrade file
* upgrade_weechat_save_misc: save miscellaneous info to upgrade file
*/
int
upgrade_weechat_save_uptime (struct t_upgrade_file *upgrade_file)
upgrade_weechat_save_misc (struct t_upgrade_file *upgrade_file)
{
struct t_infolist *ptr_infolist;
struct t_infolist_item *ptr_item;
@@ -220,9 +224,14 @@ upgrade_weechat_save_uptime (struct t_upgrade_file *upgrade_file)
infolist_free (ptr_infolist);
return 0;
}
if (!infolist_new_var_integer (ptr_item, "current_window_number", gui_current_window->number))
{
infolist_free (ptr_infolist);
return 0;
}
rc = upgrade_file_write_object (upgrade_file,
UPGRADE_WEECHAT_TYPE_UPTIME,
UPGRADE_WEECHAT_TYPE_MISC,
ptr_infolist);
infolist_free (ptr_infolist);
@@ -262,6 +271,75 @@ upgrade_weechat_save_hotlist (struct t_upgrade_file *upgrade_file)
return 1;
}
/*
* upgrade_weechat_save_layout_window_tree: save tree with layout for windows
* to upgrade file
*/
int
upgrade_weechat_save_layout_window_tree (struct t_upgrade_file *upgrade_file,
struct t_gui_layout_window *layout_window)
{
struct t_infolist *ptr_infolist;
int rc;
ptr_infolist = infolist_new ();
if (!ptr_infolist)
return 0;
if (!gui_layout_window_add_to_infolist (ptr_infolist, layout_window))
{
infolist_free (ptr_infolist);
return 0;
}
rc = upgrade_file_write_object (upgrade_file,
UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW,
ptr_infolist);
infolist_free (ptr_infolist);
if (!rc)
return 0;
if (layout_window->child1)
{
if (!upgrade_weechat_save_layout_window_tree (upgrade_file,
layout_window->child1))
return 0;
}
if (layout_window->child2)
{
if (!upgrade_weechat_save_layout_window_tree (upgrade_file,
layout_window->child2))
return 0;
}
return 1;
}
/*
* upgrade_weechat_save_layout_window: save layout for windows to upgrade file
*/
int
upgrade_weechat_save_layout_window (struct t_upgrade_file *upgrade_file)
{
struct t_gui_layout_window *layout_windows;
int rc;
/* get current layout for windows */
layout_windows = NULL;
gui_layout_window_save (&layout_windows);
/* save tree with layout of windows */
rc = upgrade_weechat_save_layout_window_tree (upgrade_file, layout_windows);
gui_layout_window_remove_all (&layout_windows);
return rc;
}
/*
* upgrade_weechat_save: save upgrade file
* return 1 if ok, 0 if error
@@ -280,8 +358,9 @@ upgrade_weechat_save ()
rc = 1;
rc &= upgrade_weechat_save_history (upgrade_file, last_history_global);
rc &= upgrade_weechat_save_buffers (upgrade_file);
rc &= upgrade_weechat_save_uptime (upgrade_file);
rc &= upgrade_weechat_save_misc (upgrade_file);
rc &= upgrade_weechat_save_hotlist (upgrade_file);
rc &= upgrade_weechat_save_layout_window (upgrade_file);
upgrade_file_close (upgrade_file);
@@ -302,7 +381,7 @@ upgrade_weechat_read_cb (void *data,
const char *buffer_name;
char option_name[64], *option_key, *option_var;
struct t_gui_nick_group *ptr_group;
struct t_gui_buffer *ptr_buffer, *ptr_buffer_for_merge;
struct t_gui_buffer *ptr_buffer;
struct t_gui_line *new_line;
struct t_gui_hotlist *new_hotlist;
struct timeval creation_time;
@@ -332,6 +411,10 @@ upgrade_weechat_read_cb (void *data,
case UPGRADE_WEECHAT_TYPE_BUFFER:
plugin_name = infolist_string (infolist, "plugin_name");
name = infolist_string (infolist, "name");
gui_layout_buffer_add (&upgrade_layout_buffers,
&last_upgrade_layout_buffer,
plugin_name, name,
infolist_integer (infolist, "number"));
if (gui_buffer_is_main (plugin_name, name))
{
/* use WeeChat main buffer */
@@ -343,7 +426,6 @@ upgrade_weechat_read_cb (void *data,
* create buffer if it was created by a plugin (ie not
* WeeChat main buffer)
*/
ptr_buffer_for_merge = last_gui_buffer;
upgrade_current_buffer = gui_buffer_new (
NULL,
infolist_string (infolist, "name"),
@@ -355,10 +437,6 @@ upgrade_weechat_read_cb (void *data,
upgrade_set_current_buffer = upgrade_current_buffer;
upgrade_current_buffer->plugin_name_for_upgrade =
strdup (infolist_string (infolist, "plugin_name"));
upgrade_current_buffer->merge_for_upgrade = NULL;
if (infolist_integer (infolist, "number") == upgrade_last_buffer_number)
upgrade_current_buffer->merge_for_upgrade = ptr_buffer_for_merge;
upgrade_last_buffer_number = infolist_integer (infolist, "number");
upgrade_current_buffer->short_name =
(infolist_string (infolist, "short_name")) ?
strdup (infolist_string (infolist, "short_name")) :
@@ -544,9 +622,10 @@ upgrade_weechat_read_cb (void *data,
}
}
break;
case UPGRADE_WEECHAT_TYPE_UPTIME:
case UPGRADE_WEECHAT_TYPE_MISC:
weechat_first_start_time = infolist_time (infolist, "start_time");
weechat_upgrade_count = infolist_integer (infolist, "upgrade_count");
upgrade_set_current_window = infolist_integer (infolist, "current_window_number");
break;
case UPGRADE_WEECHAT_TYPE_HOTLIST:
if (!hotlist_reset)
@@ -583,6 +662,16 @@ upgrade_weechat_read_cb (void *data,
}
}
break;
case UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW:
gui_layout_window_add (&upgrade_layout_windows,
infolist_integer (infolist, "internal_id"),
gui_layout_window_search_by_id (upgrade_layout_windows,
infolist_integer (infolist, "parent_id")),
infolist_integer (infolist, "split_pct"),
infolist_integer (infolist, "split_horiz"),
infolist_string (infolist, "plugin_name"),
infolist_string (infolist, "buffer_name"));
break;
}
}
@@ -599,30 +688,39 @@ upgrade_weechat_load ()
{
int rc;
struct t_upgrade_file *upgrade_file;
struct t_gui_buffer *ptr_buffer;
upgrade_file = upgrade_file_new (WEECHAT_UPGRADE_FILENAME, 0);
rc = upgrade_file_read (upgrade_file, &upgrade_weechat_read_cb, NULL);
if (!hotlist_reset)
gui_hotlist_clear ();
/* merge buffers */
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
gui_color_buffer_assign ();
gui_color_buffer_display ();
if (upgrade_layout_buffers)
{
if (ptr_buffer->merge_for_upgrade)
gui_buffer_merge (ptr_buffer, ptr_buffer->merge_for_upgrade);
gui_layout_buffer_apply (upgrade_layout_buffers);
gui_layout_buffer_remove_all (&upgrade_layout_buffers,
&last_upgrade_layout_buffer);
}
if (upgrade_layout_windows)
{
gui_layout_window_apply (upgrade_layout_windows, -1);
gui_layout_window_remove_all (&upgrade_layout_windows);
}
if (upgrade_set_current_window > 0)
gui_window_switch_by_number (upgrade_set_current_window);
if (upgrade_set_current_buffer)
{
gui_window_switch_to_buffer (gui_current_window,
upgrade_set_current_buffer, 0);
}
gui_color_buffer_assign ();
gui_color_buffer_display ();
gui_layout_buffer_get_number_all (gui_layout_buffers);
return rc;
}
+2 -1
View File
@@ -32,8 +32,9 @@ enum t_upgrade_weechat_type
UPGRADE_WEECHAT_TYPE_BUFFER,
UPGRADE_WEECHAT_TYPE_NICKLIST,
UPGRADE_WEECHAT_TYPE_BUFFER_LINE,
UPGRADE_WEECHAT_TYPE_UPTIME,
UPGRADE_WEECHAT_TYPE_MISC,
UPGRADE_WEECHAT_TYPE_HOTLIST,
UPGRADE_WEECHAT_TYPE_LAYOUT_WINDOW,
};
int upgrade_weechat_save ();
+2 -1
View File
@@ -444,7 +444,8 @@ main (int argc, char *argv[])
plugin_init (weechat_auto_load_plugins, /* init plugin interface(s) */
argc, argv);
command_startup (1); /* command executed after plugins */
gui_layout_window_apply (gui_layout_windows, -1); /* apply saved layout */
if (!weechat_upgrading)
gui_layout_window_apply (gui_layout_windows, -1); /* apply win layout */
if (weechat_upgrading)
upgrade_weechat_end (); /* remove .upgrade files + signal */
-1
View File
@@ -971,7 +971,6 @@ gui_window_draw_separator (struct t_gui_window *window)
mvwvline (GUI_WINDOW_OBJECTS(window)->win_separator, 0, 0,
separator_vertical, window->win_height);
wnoutrefresh (GUI_WINDOW_OBJECTS(window)->win_separator);
refresh ();
}
}
+1 -1
View File
@@ -867,7 +867,7 @@ gui_bar_item_default_buffer_plugin (void *data, struct t_gui_bar_item *item,
if (!window)
window = gui_current_window;
plugin_name = plugin_get_name (window->buffer->plugin);
plugin_name = gui_buffer_get_plugin_name (window->buffer);
return (plugin_name) ? strdup (plugin_name) : strdup ("");
}
+40 -48
View File
@@ -106,6 +106,22 @@ char *gui_buffer_properties_set[] =
};
/*
* gui_buffer_get_plugin_name: get plugin name of buffer
* Note: during upgrade process (at startup after
* /upgrade), the name of plugin is retrieved
* in temporary variable "plugin_name_for_upgrade"
*/
const char *
gui_buffer_get_plugin_name (struct t_gui_buffer *buffer)
{
if (buffer->plugin_name_for_upgrade)
return buffer->plugin_name_for_upgrade;
return plugin_get_name (buffer->plugin);
}
/*
* gui_buffer_local_var_add: add a new local variable to a buffer
*/
@@ -176,7 +192,7 @@ gui_buffer_notify_get (struct t_gui_buffer *buffer)
int length;
struct t_config_option *ptr_option;
plugin_name = plugin_get_name (buffer->plugin);
plugin_name = gui_buffer_get_plugin_name (buffer);
length = strlen (plugin_name) + 1 + strlen (buffer->name) + 1;
option_name = malloc (length);
if (option_name)
@@ -234,7 +250,7 @@ gui_buffer_notify_set (struct t_gui_buffer *buffer)
gui_chat_printf (NULL,
_("Notify changed for \"%s%s.%s%s\": \"%s%s%s\" to \"%s%s%s\""),
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
GUI_COLOR(GUI_COLOR_CHAT_VALUE),
@@ -283,7 +299,12 @@ gui_buffer_find_pos (struct t_gui_buffer *buffer)
|| ((buffer->layout_number == ptr_buffer->layout_number)
&& (buffer->layout_number_merge_order <= ptr_buffer->layout_number_merge_order)))
{
return ptr_buffer;
/* not possible to insert a buffer between 2 merged buffers */
if (!ptr_buffer->prev_buffer
|| ((ptr_buffer->prev_buffer)->number != ptr_buffer->number))
{
return ptr_buffer;
}
}
}
@@ -330,7 +351,7 @@ gui_buffer_insert (struct t_gui_buffer *buffer, int automatic_merge)
gui_buffers = buffer;
last_gui_buffer = buffer;
}
/* merge buffer with previous or next, if they have layout number */
if (automatic_merge && (buffer->layout_number >= 1))
{
@@ -403,7 +424,6 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
/* init buffer */
new_buffer->plugin = plugin;
new_buffer->plugin_name_for_upgrade = NULL;
new_buffer->merge_for_upgrade = NULL;
/* number will be set later (when inserting buffer in list) */
gui_layout_buffer_get_number (gui_layout_buffers,
@@ -703,8 +723,7 @@ gui_buffer_match_list (struct t_gui_buffer *buffer, const char *string)
if (buffers)
{
snprintf (buffer_full_name, sizeof (buffer_full_name), "%s.%s",
(!buffer->plugin && buffer->plugin_name_for_upgrade) ?
buffer->plugin_name_for_upgrade : plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name);
match = gui_buffer_full_name_match_list (buffer_full_name,
num_buffers, buffers);
@@ -839,7 +858,7 @@ gui_buffer_get_string (struct t_gui_buffer *buffer, const char *property)
if (buffer && property)
{
if (string_strcasecmp (property, "plugin") == 0)
return plugin_get_name (buffer->plugin);
return gui_buffer_get_plugin_name (buffer);
else if (string_strcasecmp (property, "name") == 0)
return buffer->name;
else if (string_strcasecmp (property, "short_name") == 0)
@@ -1735,24 +1754,8 @@ gui_buffer_search_by_name (const char *plugin, const char *name)
plugin_match = 1;
if (plugin && plugin[0])
{
if (ptr_buffer->plugin_name_for_upgrade)
{
if (strcmp (plugin, ptr_buffer->plugin_name_for_upgrade) != 0)
plugin_match = 0;
}
else
{
if (ptr_buffer->plugin)
{
if (strcmp (plugin, ptr_buffer->plugin->name) != 0)
plugin_match = 0;
}
else
{
if (strcmp (plugin, PLUGIN_CORE) != 0)
plugin_match = 0;
}
}
if (strcmp (plugin, gui_buffer_get_plugin_name (ptr_buffer)) != 0)
plugin_match = 0;
}
if (plugin_match && (strcmp (ptr_buffer->name, name) == 0))
{
@@ -1826,16 +1829,8 @@ gui_buffer_search_by_partial_name (const char *plugin, const char *name)
plugin_match = 1;
if (plugin && plugin[0])
{
if (ptr_buffer->plugin)
{
if (strcmp (plugin, ptr_buffer->plugin->name) != 0)
plugin_match = 0;
}
else
{
if (strcmp (plugin, PLUGIN_CORE) != 0)
plugin_match = 0;
}
if (strcmp (plugin, gui_buffer_get_plugin_name (ptr_buffer)) != 0)
plugin_match = 0;
}
if (plugin_match)
{
@@ -2634,21 +2629,19 @@ gui_buffer_unmerge (struct t_gui_buffer *buffer, int number)
void
gui_buffer_unmerge_all ()
{
int number, count_merged, i;
int number;
struct t_gui_buffer *ptr_buffer;
number = 1;
while (number <= last_gui_buffer->number)
{
count_merged = gui_buffer_count_merged_buffers (number);
if (count_merged > 1)
while (gui_buffer_count_merged_buffers (number) > 1)
{
for (i = 0; i < count_merged - 1; i++)
{
ptr_buffer = gui_buffer_search_by_number (number);
if (ptr_buffer)
gui_buffer_unmerge (ptr_buffer, -1);
}
ptr_buffer = gui_buffer_search_by_number (number);
if (ptr_buffer)
gui_buffer_unmerge (ptr_buffer, -1);
else
break;
}
number++;
}
@@ -3051,7 +3044,6 @@ gui_buffer_hdata_buffer_cb (void *data, const char *hdata_name)
{
HDATA_VAR(struct t_gui_buffer, plugin, POINTER, "plugin");
HDATA_VAR(struct t_gui_buffer, plugin_name_for_upgrade, STRING, NULL);
HDATA_VAR(struct t_gui_buffer, merge_for_upgrade, POINTER, NULL);
HDATA_VAR(struct t_gui_buffer, number, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, layout_number, INTEGER, NULL);
HDATA_VAR(struct t_gui_buffer, layout_number_merge_order, INTEGER, NULL);
@@ -3195,7 +3187,7 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
if (!infolist_new_var_pointer (ptr_item, "plugin", buffer->plugin))
return 0;
if (!infolist_new_var_string (ptr_item, "plugin_name",
plugin_get_name (buffer->plugin)))
gui_buffer_get_plugin_name (buffer)))
return 0;
if (!infolist_new_var_integer (ptr_item, "number", buffer->number))
return 0;
@@ -3381,7 +3373,7 @@ gui_buffer_print_log ()
log_printf ("");
log_printf ("[buffer (addr:0x%lx)]", ptr_buffer);
log_printf (" plugin. . . . . . . . . : 0x%lx ('%s')",
ptr_buffer->plugin, plugin_get_name (ptr_buffer->plugin));
ptr_buffer->plugin, gui_buffer_get_plugin_name (ptr_buffer));
log_printf (" plugin_name_for_upgrade : '%s'", ptr_buffer->plugin_name_for_upgrade);
log_printf (" number. . . . . . . . . : %d", ptr_buffer->number);
log_printf (" layout_number . . . . . : %d", ptr_buffer->layout_number);
+1 -6
View File
@@ -72,12 +72,6 @@ struct t_gui_buffer
* loaded
*/
char *plugin_name_for_upgrade; /* plugin name when upgrading */
/*
* when upgrading, we use this pointer to remember that this buffer
* must merge with another buffer (it's done when all buffers are
* restored)
*/
struct t_gui_buffer *merge_for_upgrade;
int number; /* buffer number (first is 1) */
int layout_number; /* number of buffer saved in layout */
@@ -208,6 +202,7 @@ extern char *gui_buffer_properties_set[];
/* buffer functions */
extern const char *gui_buffer_get_plugin_name (struct t_gui_buffer *buffer);
extern void gui_buffer_notify_set_all ();
extern void gui_buffer_input_buffer_init (struct t_gui_buffer *buffer);
extern struct t_gui_buffer *gui_buffer_new (struct t_weechat_plugin *plugin,
+2 -2
View File
@@ -589,13 +589,13 @@ gui_chat_printf_date_tags (struct t_gui_buffer *buffer, time_t date,
new_msg = NULL;
if (buffer)
{
length = strlen (plugin_get_name (buffer->plugin)) + 1 +
length = strlen (gui_buffer_get_plugin_name (buffer)) + 1 +
strlen (buffer->name) + 1 + ((tags) ? strlen (tags) : 0) + 1;
modifier_data = malloc (length);
if (modifier_data)
{
snprintf (modifier_data, length, "%s;%s;%s",
plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name,
(tags) ? tags : "");
new_msg = hook_modifier_exec (NULL,
+1 -2
View File
@@ -141,8 +141,7 @@ gui_filter_buffer (struct t_gui_buffer *buffer)
buffer->lines->prefix_max_length = CONFIG_INTEGER(config_look_prefix_align_min);
snprintf (buffer_full_name, sizeof (buffer_full_name), "%s.%s",
(!buffer->plugin && buffer->plugin_name_for_upgrade) ?
buffer->plugin_name_for_upgrade : plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name);
for (ptr_line = buffer->lines->first_line; ptr_line;
+1 -1
View File
@@ -515,7 +515,7 @@ gui_hotlist_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "buffer_number", hotlist->buffer->number))
return 0;
if (!infolist_new_var_string (ptr_item, "plugin_name", plugin_get_name (hotlist->buffer->plugin)))
if (!infolist_new_var_string (ptr_item, "plugin_name", gui_buffer_get_plugin_name (hotlist->buffer)))
return 0;
if (!infolist_new_var_string (ptr_item, "buffer_name", hotlist->buffer->name))
return 0;
+116 -36
View File
@@ -31,6 +31,7 @@
#include "../core/weechat.h"
#include "../core/wee-log.h"
#include "../core/wee-config.h"
#include "../core/wee-infolist.h"
#include "../core/wee-string.h"
#include "../plugins/plugin.h"
#include "gui-layout.h"
@@ -167,15 +168,14 @@ gui_layout_buffer_save (struct t_gui_layout_buffer **layout_buffers,
ptr_buffer = ptr_buffer->next_buffer)
{
gui_layout_buffer_add (layout_buffers, last_layout_buffer,
plugin_get_name (ptr_buffer->plugin),
gui_buffer_get_plugin_name (ptr_buffer),
ptr_buffer->name,
ptr_buffer->number);
}
}
/*
* gui_layout_buffer_get_number: get number for a plugin/buffer
* return 0 if not found
* gui_layout_buffer_get_number: get layout number for a plugin/buffer
*/
void
@@ -214,6 +214,29 @@ gui_layout_buffer_get_number (struct t_gui_layout_buffer *layout_buffers,
}
}
/*
* gui_layout_buffer_get_number_all: get layout numbers for all buffers
*/
void
gui_layout_buffer_get_number_all (struct t_gui_layout_buffer *layout_buffers)
{
struct t_gui_buffer *ptr_buffer;
if (!layout_buffers)
return;
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
gui_layout_buffer_get_number (layout_buffers,
gui_buffer_get_plugin_name (ptr_buffer),
ptr_buffer->name,
&(ptr_buffer->layout_number),
&(ptr_buffer->layout_number_merge_order));
}
}
/*
* gui_layout_buffer_apply: apply a layout for buffers
*/
@@ -222,20 +245,10 @@ void
gui_layout_buffer_apply (struct t_gui_layout_buffer *layout_buffers)
{
struct t_gui_buffer *ptr_buffer, *ptr_next_buffer;
const char *plugin_name;
int number, count_merged;
/* compute layout number for all buffers */
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
plugin_name = plugin_get_name (ptr_buffer->plugin);
gui_layout_buffer_get_number (layout_buffers,
plugin_name,
ptr_buffer->name,
&(ptr_buffer->layout_number),
&(ptr_buffer->layout_number_merge_order));
}
/* get layout number for all buffers */
gui_layout_buffer_get_number_all (layout_buffers);
/* unmerge all buffers */
gui_buffer_unmerge_all ();
@@ -432,7 +445,7 @@ gui_layout_window_save_tree (struct t_gui_layout_window **layout_windows,
gui_layout_internal_id,
parent_layout,
0, 0,
plugin_get_name (tree->window->buffer->plugin),
gui_buffer_get_plugin_name (tree->window->buffer),
tree->window->buffer->name);
}
else
@@ -485,7 +498,7 @@ gui_layout_window_check_buffer (struct t_gui_buffer *buffer)
struct t_gui_window *ptr_win;
const char *plugin_name;
plugin_name = plugin_get_name (buffer->plugin);
plugin_name = gui_buffer_get_plugin_name (buffer);
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
@@ -511,7 +524,6 @@ gui_layout_window_check_all_buffers ()
{
struct t_gui_window *ptr_win;
struct t_gui_buffer *ptr_buffer;
const char *plugin_name;
for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
{
@@ -520,9 +532,7 @@ gui_layout_window_check_all_buffers ()
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
plugin_name = plugin_get_name (ptr_buffer->plugin);
if ((strcmp (ptr_win->layout_plugin_name, plugin_name) == 0)
if ((strcmp (ptr_win->layout_plugin_name, gui_buffer_get_plugin_name (ptr_buffer)) == 0)
&& (strcmp (ptr_win->layout_buffer_name, ptr_buffer->name) == 0))
{
gui_window_switch_to_buffer (ptr_win, ptr_buffer, 0);
@@ -594,21 +604,21 @@ gui_layout_window_apply (struct t_gui_layout_window *layout_windows,
{
struct t_gui_window *old_window;
if (layout_windows)
{
gui_window_merge_all (gui_current_window);
old_window = gui_current_window;
gui_layout_ptr_current_window = NULL;
gui_layout_window_apply_tree (layout_windows,
internal_id_current_window);
gui_layout_window_check_all_buffers ();
gui_window_switch ((gui_layout_ptr_current_window) ?
gui_layout_ptr_current_window : old_window);
}
if (!layout_windows)
return;
gui_window_merge_all (gui_current_window);
old_window = gui_current_window;
gui_layout_ptr_current_window = NULL;
gui_layout_window_apply_tree (layout_windows,
internal_id_current_window);
gui_layout_window_check_all_buffers ();
gui_window_switch ((gui_layout_ptr_current_window) ?
gui_layout_ptr_current_window : old_window);
}
/*
@@ -637,6 +647,76 @@ gui_layout_save_on_exit ()
}
}
/*
* gui_layout_buffer_add_to_infolist: add a buffer layout in an infolist
* return 1 if ok, 0 if error
*/
int
gui_layout_buffer_add_to_infolist (struct t_infolist *infolist,
struct t_gui_layout_buffer *layout_buffer)
{
struct t_infolist_item *ptr_item;
if (!infolist || !layout_buffer)
return 0;
ptr_item = infolist_new_item (infolist);
if (!ptr_item)
return 0;
if (!infolist_new_var_string (ptr_item, "plugin_name", layout_buffer->plugin_name))
return 0;
if (!infolist_new_var_string (ptr_item, "buffer_name", layout_buffer->buffer_name))
return 0;
if (!infolist_new_var_integer (ptr_item, "number", layout_buffer->number))
return 0;
return 1;
}
/*
* gui_layout_window_add_to_infolist: add a window layout in an infolist
* return 1 if ok, 0 if error
*/
int
gui_layout_window_add_to_infolist (struct t_infolist *infolist,
struct t_gui_layout_window *layout_window)
{
struct t_infolist_item *ptr_item;
if (!infolist || !layout_window)
return 0;
ptr_item = infolist_new_item (infolist);
if (!ptr_item)
return 0;
if (!infolist_new_var_integer (ptr_item, "internal_id", layout_window->internal_id))
return 0;
if (!infolist_new_var_integer (ptr_item, "parent_id",
(layout_window->parent_node) ?
(layout_window->parent_node)->internal_id : 0))
return 0;
if (!infolist_new_var_pointer (ptr_item, "parent_node", layout_window->parent_node))
return 0;
if (!infolist_new_var_integer (ptr_item, "split_pct", layout_window->split_pct))
return 0;
if (!infolist_new_var_integer (ptr_item, "split_horiz", layout_window->split_horiz))
return 0;
if (!infolist_new_var_pointer (ptr_item, "child1", layout_window->child1))
return 0;
if (!infolist_new_var_pointer (ptr_item, "child2", layout_window->child2))
return 0;
if (!infolist_new_var_string (ptr_item, "plugin_name", layout_window->plugin_name))
return 0;
if (!infolist_new_var_string (ptr_item, "buffer_name", layout_window->buffer_name))
return 0;
return 1;
}
/*
* gui_layout_print_log_window: print windows layout infos in log (usually for
* crash dump)
+5 -2
View File
@@ -72,6 +72,7 @@ extern void gui_layout_buffer_get_number (struct t_gui_layout_buffer *layout_buf
const char *buffer_name,
int *layout_number,
int *layout_number_merge_order);
extern void gui_layout_buffer_get_number_all (struct t_gui_layout_buffer *layout_buffers);
extern void gui_layout_buffer_apply (struct t_gui_layout_buffer *layout_buffers);
extern void gui_layout_window_remove_all (struct t_gui_layout_window **layout_windows);
@@ -89,9 +90,11 @@ extern int gui_layout_window_save (struct t_gui_layout_window **layout_windows);
extern void gui_layout_window_apply (struct t_gui_layout_window *layout_windows,
int internal_id_current_window);
extern void gui_layout_window_check_buffer (struct t_gui_buffer *buffer);
extern void gui_layout_save_on_exit ();
extern int gui_layout_buffer_add_to_infolist (struct t_infolist *infolist,
struct t_gui_layout_buffer *layout_buffer);
extern int gui_layout_window_add_to_infolist (struct t_infolist *infolist,
struct t_gui_layout_window *layout_window);
extern void gui_layout_print_log ();
#endif /* __WEECHAT_GUI_LAYOUT_H */
+2 -4
View File
@@ -847,8 +847,7 @@ gui_line_add (struct t_gui_buffer *buffer, time_t date,
/* check if line is filtered or not */
snprintf (buffer_full_name, sizeof (buffer_full_name), "%s.%s",
(!buffer->plugin && buffer->plugin_name_for_upgrade) ?
buffer->plugin_name_for_upgrade : plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name);
new_line->data->displayed = gui_filter_check_line (new_line,
buffer_full_name);
@@ -1009,8 +1008,7 @@ gui_line_add_y (struct t_gui_buffer *buffer, int y, const char *message)
/* check if line is filtered or not */
snprintf (buffer_full_name, sizeof (buffer_full_name), "%s.%s",
(!buffer->plugin && buffer->plugin_name_for_upgrade) ?
buffer->plugin_name_for_upgrade : plugin_get_name (buffer->plugin),
gui_buffer_get_plugin_name (buffer),
buffer->name);
ptr_line->data->displayed = gui_filter_check_line (ptr_line,
buffer_full_name);
+3
View File
@@ -1469,6 +1469,9 @@ gui_window_add_to_infolist (struct t_infolist *infolist,
if (!infolist_new_var_pointer (ptr_item, "pointer", window))
return 0;
if (!infolist_new_var_integer (ptr_item, "current_window",
(gui_current_window == window) ? 1 : 0))
return 0;
if (!infolist_new_var_integer (ptr_item, "number", window->number))
return 0;
if (!infolist_new_var_integer (ptr_item, "x", window->win_x))
+1 -1
View File
@@ -563,7 +563,7 @@ plugin_api_infolist_get_internal (void *data, const char *infolist_name,
{
snprintf (buffer_full_name, sizeof (buffer_full_name),
"%s.%s",
plugin_get_name (ptr_buffer->plugin),
gui_buffer_get_plugin_name (ptr_buffer),
ptr_buffer->name);
if (!arguments || !arguments[0]
|| string_match (buffer_full_name, arguments, 0))