core: fix refresh of item "completion" (bug #38214) (patch from Nils Görs)

The item is now cleared after any action that is changing content of command
line and after switch of buffer.
This commit is contained in:
Sebastien Helleu 2013-03-17 19:44:39 +01:00
parent a290589f7c
commit 3e1d811761
12 changed files with 90 additions and 52 deletions

View File

@ -14,6 +14,8 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
Version 0.4.1 (under dev!)
--------------------------
* core: fix refresh of item "completion": clear it after any action that is
changing content of command line and after switch of buffer (bug #38214)
* core: add support of multiple layouts (task #11274)
* core: add signals nicklist_{group|nick}_removing and hsignals
nicklist_{group|nick}_{added|removing|changed}

View File

@ -419,10 +419,9 @@ gui_key_flush (int paste)
gui_buffer_undo_snap (gui_current_window->buffer);
gui_input_insert_string (gui_current_window->buffer,
key_str, -1);
if (gui_current_window->buffer->completion)
gui_completion_stop (gui_current_window->buffer->completion, 0);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer,
(!paste || !undo_done) ? 1 : 0);
(!paste || !undo_done) ? 1 : 0,
1); /* stop completion */
undo_done = 1;
}

View File

@ -197,9 +197,9 @@ gui_mouse_grab_end (const char *mouse_key)
}
gui_input_insert_string (gui_current_window->buffer,
mouse_key_input, -1);
if (gui_current_window->buffer->completion)
gui_completion_stop (gui_current_window->buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer, 1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer,
1, /* save undo */
1); /* stop completion */
}
gui_mouse_grab = 0;

View File

@ -1645,7 +1645,9 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
{
gui_buffer_undo_snap (buffer);
gui_input_replace_input (buffer, value);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
else if (string_strcasecmp (property, "input_pos") == 0)
{

View File

@ -947,7 +947,9 @@ gui_chat_hsignal_quote_line_cb (void *data, const char *signal,
&& CONFIG_STRING(config_look_prefix_suffix)[0]) ? " " : "",
message);
gui_input_insert_string (gui_current_window->buffer, str, -1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer, 1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer,
1, /* save undo */
1); /* stop completion */
free (str);
}

View File

@ -195,12 +195,15 @@ gui_completion_free (struct t_gui_completion *completion)
*/
void
gui_completion_stop (struct t_gui_completion *completion,
int remove_partial_completion_list)
gui_completion_stop (struct t_gui_completion *completion)
{
if (!completion)
return;
completion->context = GUI_COMPLETION_NULL;
completion->position = -1;
if (remove_partial_completion_list)
if (completion->partial_completion_list)
{
gui_completion_partial_list_free_all (completion);
hook_signal_send ("partial_completion",
@ -424,7 +427,7 @@ gui_completion_build_list_template (struct t_gui_completion *completion,
switch (pos[0])
{
case '-': /* stop completion */
gui_completion_stop (completion, 1);
gui_completion_stop (completion);
free (word);
return;
break;
@ -582,7 +585,7 @@ gui_completion_build_list (struct t_gui_completion *completion)
if (strcmp (HOOK_COMMAND(ptr_hook, completion), "-") == 0)
{
gui_completion_stop (completion, 1);
gui_completion_stop (completion);
return;
}
@ -990,7 +993,7 @@ gui_completion_complete (struct t_gui_completion *completion)
if (item_is_nick
&& CONFIG_BOOLEAN(config_completion_nick_first_only))
{
gui_completion_stop (completion, 1);
gui_completion_stop (completion);
return;
}

View File

@ -68,8 +68,7 @@ struct t_gui_completion
extern void gui_completion_buffer_init (struct t_gui_completion *completion,
struct t_gui_buffer *buffer);
extern void gui_completion_free (struct t_gui_completion *completion);
extern void gui_completion_stop (struct t_gui_completion *completion,
int remove_partial_completion_list);
extern void gui_completion_stop (struct t_gui_completion *completion);
extern void gui_completion_list_add (struct t_gui_completion *completion,
const char *word,
int nick_completion, const char *where);

View File

@ -67,7 +67,9 @@ gui_cursor_mode_toggle ()
/* restore input (and move cursor in input) */
if (gui_cursor_debug)
gui_input_delete_line (gui_current_window->buffer);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer, 0);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer,
0, /* save undo */
1); /* stop completion */
gui_buffer_ask_chat_refresh (gui_current_window->buffer, 2);
}
}

View File

@ -82,7 +82,7 @@ gui_input_optimize_size (struct t_gui_buffer *buffer)
}
/*
* Replaces full input by another string, trying to keep cursor position is new
* Replaces full input by another string, trying to keep cursor position if new
* string is long enough.
*/
@ -132,7 +132,8 @@ gui_input_paste_pending_signal ()
void
gui_input_text_changed_modifier_and_signal (struct t_gui_buffer *buffer,
int save_undo)
int save_undo,
int stop_completion)
{
char str_buffer[128], *new_input;
@ -161,6 +162,9 @@ gui_input_text_changed_modifier_and_signal (struct t_gui_buffer *buffer,
}
}
if (stop_completion)
gui_completion_stop (buffer->completion);
/* send signal */
hook_signal_send ("input_text_changed", WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
@ -319,6 +323,8 @@ gui_input_move_to_buffer (struct t_gui_buffer *from_buffer,
from_buffer->last_input_undo = NULL;
from_buffer->ptr_input_undo = NULL;
from_buffer->input_undo_count = 0;
gui_completion_stop (from_buffer->completion);
}
/*
@ -355,9 +361,9 @@ gui_input_clipboard_paste (struct t_gui_buffer *buffer)
gui_buffer_undo_snap (buffer);
gui_input_insert_string (buffer,
gui_input_clipboard, -1);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -391,12 +397,13 @@ gui_input_return (struct t_gui_buffer *buffer)
window->buffer->input_buffer_length = 0;
window->buffer->input_buffer_pos = 0;
window->buffer->input_buffer_1st_display = 0;
gui_completion_stop (window->buffer->completion, 1);
gui_buffer_undo_free_all (window->buffer);
window->buffer->ptr_history = NULL;
gui_history_ptr = NULL;
gui_input_optimize_size (window->buffer);
gui_input_text_changed_modifier_and_signal (window->buffer, 0);
gui_input_text_changed_modifier_and_signal (window->buffer,
0, /* save undo */
1); /* stop completion */
input_data (window->buffer, command);
free (command);
}
@ -500,7 +507,9 @@ gui_input_complete_next (struct t_gui_buffer *buffer)
utf8_real_pos (buffer->input_buffer,
buffer->input_buffer_pos));
gui_input_complete (buffer);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
0); /* stop completion */
}
}
@ -522,7 +531,9 @@ gui_input_complete_previous (struct t_gui_buffer *buffer)
utf8_real_pos (buffer->input_buffer,
buffer->input_buffer_pos));
gui_input_complete (buffer);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
0); /* stop completion */
}
}
@ -641,8 +652,9 @@ gui_input_delete_previous_char (struct t_gui_buffer *buffer)
buffer->input_buffer_pos--;
buffer->input_buffer[buffer->input_buffer_size] = '\0';
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -670,8 +682,9 @@ gui_input_delete_next_char (struct t_gui_buffer *buffer)
buffer->input_buffer_length--;
buffer->input_buffer[buffer->input_buffer_size] = '\0';
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -727,8 +740,9 @@ gui_input_delete_previous_word (struct t_gui_buffer *buffer)
buffer->input_buffer[buffer->input_buffer_size] = '\0';
buffer->input_buffer_pos -= length_deleted;
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -766,8 +780,9 @@ gui_input_delete_next_word (struct t_gui_buffer *buffer)
buffer->input_buffer_length -= length_deleted;
buffer->input_buffer[buffer->input_buffer_size] = '\0';
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -799,8 +814,9 @@ gui_input_delete_beginning_of_line (struct t_gui_buffer *buffer)
buffer->input_buffer[buffer->input_buffer_size] = '\0';
buffer->input_buffer_pos = 0;
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -825,8 +841,9 @@ gui_input_delete_end_of_line (struct t_gui_buffer *buffer)
buffer->input_buffer_size = strlen (buffer->input_buffer);
buffer->input_buffer_length = utf8_strlen (buffer->input_buffer);
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -845,8 +862,9 @@ gui_input_delete_line (struct t_gui_buffer *buffer)
buffer->input_buffer_length = 0;
buffer->input_buffer_pos = 0;
gui_input_optimize_size (buffer);
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -880,9 +898,9 @@ gui_input_transpose_chars (struct t_gui_buffer *buffer)
buffer->input_buffer_pos++;
gui_completion_stop (buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
}
}
@ -1080,7 +1098,9 @@ gui_input_history_previous (struct t_gui_window *window,
window->buffer->input_buffer_pos = window->buffer->input_buffer_length;
window->buffer->input_buffer_1st_display = 0;
strcpy (window->buffer->input_buffer, (*ptr_history)->text);
gui_input_text_changed_modifier_and_signal (window->buffer, 0);
gui_input_text_changed_modifier_and_signal (window->buffer,
0, /* save undo */
1); /* stop completion */
gui_buffer_undo_free_all (window->buffer);
}
@ -1154,7 +1174,9 @@ gui_input_history_next (struct t_gui_window *window,
}
if (input_changed)
{
gui_input_text_changed_modifier_and_signal (window->buffer, 0);
gui_input_text_changed_modifier_and_signal (window->buffer,
0, /* save undo */
1); /* stop completion */
gui_buffer_undo_free_all (window->buffer);
}
}
@ -1535,7 +1557,9 @@ gui_input_insert (struct t_gui_buffer *buffer, const char *args)
gui_buffer_undo_snap (buffer);
args2 = string_convert_hex_chars (args);
gui_input_insert_string (buffer, (args2) ? args2 : args, -1);
gui_input_text_changed_modifier_and_signal (buffer, 1);
gui_input_text_changed_modifier_and_signal (buffer,
1, /* save undo */
1); /* stop completion */
if (args2)
free (args2);
}
@ -1552,7 +1576,9 @@ gui_input_undo_use (struct t_gui_buffer *buffer, struct t_gui_input_undo *undo)
{
gui_input_replace_input (buffer, undo->data);
gui_input_set_pos (buffer, undo->pos);
gui_input_text_changed_modifier_and_signal (buffer, 0);
gui_input_text_changed_modifier_and_signal (buffer,
0, /* save undo */
1); /* stop completion */
}
}

View File

@ -32,7 +32,8 @@ extern void gui_input_replace_input (struct t_gui_buffer *buffer,
const char *new_input);
extern void gui_input_paste_pending_signal ();
extern void gui_input_text_changed_modifier_and_signal (struct t_gui_buffer *buffer,
int save_undo);
int save_undo,
int stop_completion);
extern void gui_input_set_pos (struct t_gui_buffer *buffer, int pos);
extern int gui_input_insert_string (struct t_gui_buffer *buffer,
const char *string, int pos);

View File

@ -243,9 +243,9 @@ gui_key_grab_end_timer_cb (void *data, int remaining_calls)
gui_input_insert_string (gui_current_window->buffer, ptr_key->command, -1);
}
}
if (gui_current_window->buffer->completion)
gui_completion_stop (gui_current_window->buffer->completion, 1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer, 1);
gui_input_text_changed_modifier_and_signal (gui_current_window->buffer,
1, /* save undo */
1); /* stop completion */
}
free (expanded_key);
}

View File

@ -1561,7 +1561,9 @@ gui_window_search_stop (struct t_gui_window *window)
{
gui_input_insert_string (window->buffer,
window->buffer->text_search_input, -1);
gui_input_text_changed_modifier_and_signal (window->buffer, 0);
gui_input_text_changed_modifier_and_signal (window->buffer,
0, /* save undo */
1); /* stop completion */
free (window->buffer->text_search_input);
window->buffer->text_search_input = NULL;
}