From 88b26cfdb9bd8468c9b7f9131dea55ed35bbd751 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Mon, 19 Feb 2024 17:30:17 +0100 Subject: [PATCH] Undo gmainloop related changes Revert "Merge pull request #1943 from H3rnand3zzz/gmainloop This reverts commit 609fde099857d4d9b2bd8d421bdb0a5059a53dfc, reversing changes made to 2ec94064ed341f0ea5b197a283c6ebfb15716bd0. Revert "Merge pull request #1948 from H3rnand3zzz/fix/rl-less-refreshes" This reverts commit 11762fd2b0cc9a82c08a32bb58e25bb6def0e597, reversing changes made to 609fde099857d4d9b2bd8d421bdb0a5059a53dfc. We have got several issues, that we don't quite see how to solve, with the merge of the gmainloop PR. * Slashguard is broken (#1955) (though #1956 could fix that) * One person reported problems with copy paste selection via mouse * Some input buffer seems not to be cleared correctly It happened that I was debugging profanity used `/connect` and typed the password. I then debugged so long that a time out occurred, so profanity disconnected. Then it printed "unknown command: $password". There was something else that I forgot now. Bottomline is: so far we didn't get it right so we will undo these changes until someone proposes a working solution. We got a slight performance increase (apparently noticable when alt+mouse scrolling) but got too many issues with this change. --- Makefile.am | 1 - src/profanity.c | 60 +++++++++++++++--------------- src/profanity.h | 1 - src/ui/inputwin.c | 35 ----------------- src/ui/inputwin.h | 1 - tests/unittests/ui/stub_inputwin.c | 4 -- tests/unittests/ui/stub_inputwin.h | 1 - 7 files changed, 29 insertions(+), 74 deletions(-) delete mode 100644 tests/unittests/ui/stub_inputwin.c delete mode 100644 tests/unittests/ui/stub_inputwin.h diff --git a/Makefile.am b/Makefile.am index eef812aa..f9c89d64 100644 --- a/Makefile.am +++ b/Makefile.am @@ -130,7 +130,6 @@ unittest_sources = \ tests/unittests/xmpp/stub_xmpp.c \ tests/unittests/xmpp/stub_message.c \ tests/unittests/ui/stub_ui.c tests/unittests/ui/stub_ui.h \ - tests/unittests/ui/stub_inputwin.c tests/unittests/ui/stub_inputwin.h \ tests/unittests/ui/stub_vcardwin.c \ tests/unittests/log/stub_log.c \ tests/unittests/chatlog/stub_chatlog.c \ diff --git a/src/profanity.c b/src/profanity.c index c4049b4f..94c27191 100644 --- a/src/profanity.c +++ b/src/profanity.c @@ -43,7 +43,6 @@ #include #include #include -#include #include @@ -61,7 +60,6 @@ #include "command/cmd_defs.h" #include "plugins/plugins.h" #include "event/client_events.h" -#include "ui/inputwin.h" #include "ui/ui.h" #include "ui/window_list.h" #include "xmpp/resource.h" @@ -88,15 +86,15 @@ static void _init(char* log_level, char* config_file, char* log_file, char* theme_name); static void _shutdown(void); static void _connect_default(const char* const account); -static gboolean _main_update(gpointer data); pthread_mutex_t lock; static gboolean force_quit = FALSE; -GMainLoop* mainloop = NULL; void prof_run(char* log_level, char* account_name, char* config_file, char* log_file, char* theme_name) { + gboolean cont = TRUE; + _init(log_level, config_file, log_file, theme_name); plugins_on_start(); _connect_default(account_name); @@ -107,10 +105,33 @@ prof_run(char* log_level, char* account_name, char* config_file, char* log_file, session_init_activity(); - mainloop = g_main_loop_new(NULL, TRUE); - g_timeout_add(1000 / 60, _main_update, NULL); - inp_add_watch(); - g_main_loop_run(mainloop); + char* line = NULL; + while (cont && !force_quit) { + log_stderr_handler(); + session_check_autoaway(); + + line = inp_readline(); + if (line) { + ProfWin* window = wins_get_current(); + cont = cmd_process_input(window, line); + free(line); + line = NULL; + } else { + cont = TRUE; + } + +#ifdef HAVE_LIBOTR + otr_poll(); +#endif + plugins_run_timed(); + notify_remind(); + session_process_events(); + iq_autoping_check(); + ui_update(); +#ifdef HAVE_GTK + tray_update(); +#endif + } } void @@ -119,29 +140,6 @@ prof_set_quit(void) force_quit = TRUE; } -static gboolean -_main_update(gpointer data) -{ - log_stderr_handler(); - session_check_autoaway(); - -#ifdef HAVE_LIBOTR - otr_poll(); -#endif - plugins_run_timed(); - notify_remind(); - session_process_events(); - iq_autoping_check(); - ui_update(); - chat_state_idle(); -#ifdef HAVE_GTK - tray_update(); -#endif - - // Always repeat - return TRUE; -} - static void _connect_default(const char* const account) { diff --git a/src/profanity.h b/src/profanity.h index 781ffc86..ada02984 100644 --- a/src/profanity.h +++ b/src/profanity.h @@ -44,6 +44,5 @@ void prof_run(char* log_level, char* account_name, char* config_file, char* log_ void prof_set_quit(void); extern pthread_mutex_t lock; -extern GMainLoop* mainloop; #endif diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c index 1b09c448..d1d27807 100644 --- a/src/ui/inputwin.c +++ b/src/ui/inputwin.c @@ -171,41 +171,6 @@ create_input_window(void) _inp_win_update_virtual(); } -static gboolean -_inp_callback(GIOChannel* source, GIOCondition condition, gpointer data) -{ - rl_callback_read_char(); - - if (rl_line_buffer && rl_line_buffer[0] != '/' && rl_line_buffer[0] != '\0' && rl_line_buffer[0] != '\n') { - chat_state_activity(); - } - - ui_reset_idle_time(); - - if (inp_line) { - ProfWin* window = wins_get_current(); - - if (!cmd_process_input(window, inp_line)) - g_main_loop_quit(mainloop); - - free(inp_line); - inp_line = NULL; - } - - return TRUE; -} - -void -inp_add_watch(void) -{ - GIOChannel* channel = g_io_channel_unix_new(fileno(rl_instream)); - if (g_io_channel_set_encoding(channel, NULL, NULL) != G_IO_STATUS_NORMAL) { - log_error("cannot set NULL encoding"); - } - - g_io_add_watch(channel, G_IO_IN, _inp_callback, NULL); -} - char* inp_readline(void) { diff --git a/src/ui/inputwin.h b/src/ui/inputwin.h index ec428e43..3aefcc0a 100644 --- a/src/ui/inputwin.h +++ b/src/ui/inputwin.h @@ -46,6 +46,5 @@ void inp_win_resize(void); void inp_put_back(void); char* inp_get_password(void); char* inp_get_line(void); -void inp_add_watch(void); #endif diff --git a/tests/unittests/ui/stub_inputwin.c b/tests/unittests/ui/stub_inputwin.c deleted file mode 100644 index f4005bae..00000000 --- a/tests/unittests/ui/stub_inputwin.c +++ /dev/null @@ -1,4 +0,0 @@ -void -inp_add_watch(void) -{ -} \ No newline at end of file diff --git a/tests/unittests/ui/stub_inputwin.h b/tests/unittests/ui/stub_inputwin.h deleted file mode 100644 index a7535da4..00000000 --- a/tests/unittests/ui/stub_inputwin.h +++ /dev/null @@ -1 +0,0 @@ -void inp_add_watch(void); \ No newline at end of file