about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2014-12-21 18:15:29 +0000
committerJames Booth <boothj5@gmail.com>2014-12-21 18:15:29 +0000
commit13f73a30e73f0349968f827e4003b3b4c84ebbf3 (patch)
tree9e764dba0765c15a814855bf52f69147d3405ecd
parent79d4cbe967a4e27b291695778a928a5cdd59388c (diff)
downloadprofani-tty-13f73a30e73f0349968f827e4003b3b4c84ebbf3.tar.gz
Added /inpblock command
-rw-r--r--src/command/command.c11
-rw-r--r--src/command/commands.c13
-rw-r--r--src/command/commands.h1
-rw-r--r--src/config/preferences.c18
-rw-r--r--src/config/preferences.h2
-rw-r--r--src/ui/console.c8
-rw-r--r--src/ui/inputwin.c2
-rw-r--r--src/ui/ui.h1
8 files changed, 55 insertions, 1 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 776dd533..d00b1896 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -617,6 +617,17 @@ static struct cmd_t command_defs[] =
           "Configure time precision for the main window.",
           NULL } } },
 
+    { "/inpblock",
+        cmd_inpblock, parse_args, 1, 1, &cons_inpblock_setting,
+        { "/inpblock millis", "Input blocking delay.",
+        { "/inpblock millis",
+          "----------------",
+          "Time to wait in milliseconds before reading input from the terminal buffer, defaults to 20.",
+          "Valid values are 1-1000.",
+          "A higher value will result in less CPU usage, but a noticable delay for response to input.",
+          "A lower value will result in higher CPU usage, but faster response to input.",
+          NULL } } },
+
     { "/notify",
         cmd_notify, parse_args, 2, 3, &cons_notify_setting,
         { "/notify [type value]|[type setting value]", "Control various desktop noficiations.",
diff --git a/src/command/commands.c b/src/command/commands.c
index 39bcf287..cc914c1f 100644
--- a/src/command/commands.c
+++ b/src/command/commands.c
@@ -3396,6 +3396,19 @@ cmd_notify(gchar **args, struct cmd_help_t help)
 }
 
 gboolean
+cmd_inpblock(gchar **args, struct cmd_help_t help)
+{
+    char *value = args[0];
+    int intval;
+    if (_strtoi(value, &intval, 1, 1000) == 0) {
+        cons_show("Input blocking set to %d milliseconds.", intval);
+        prefs_set_inpblock(intval);
+        ui_input_nonblocking();
+    }
+    return TRUE;
+}
+
+gboolean
 cmd_log(gchar **args, struct cmd_help_t help)
 {
     char *subcmd = args[0];
diff --git a/src/command/commands.h b/src/command/commands.h
index 5245b2c7..48a11e24 100644
--- a/src/command/commands.h
+++ b/src/command/commands.h
@@ -136,6 +136,7 @@ gboolean cmd_presence(gchar **args, struct cmd_help_t help);
 gboolean cmd_wrap(gchar **args, struct cmd_help_t help);
 gboolean cmd_time(gchar **args, struct cmd_help_t help);
 gboolean cmd_resource(gchar **args, struct cmd_help_t help);
+gboolean cmd_inpblock(gchar **args, struct cmd_help_t help);
 
 gboolean cmd_form_field(char *tag, gchar **args);
 
diff --git a/src/config/preferences.c b/src/config/preferences.c
index baf3e853..7bc56999 100644
--- a/src/config/preferences.c
+++ b/src/config/preferences.c
@@ -61,6 +61,8 @@
 #define PREF_GROUP_ALIAS "alias"
 #define PREF_GROUP_OTR "otr"
 
+#define INPBLOCK_DEFAULT 20
+
 static gchar *prefs_loc;
 static GKeyFile *prefs;
 gint log_maxsize = 0;
@@ -261,6 +263,22 @@ prefs_set_max_log_size(gint value)
     _save_prefs();
 }
 
+gint prefs_get_inpblock(void)
+{
+    int val = g_key_file_get_integer(prefs, PREF_GROUP_UI, "inpblock", NULL);
+    if (val == 0) {
+        return INPBLOCK_DEFAULT;
+    } else {
+        return val;
+    }
+}
+
+void prefs_set_inpblock(gint value)
+{
+    g_key_file_set_integer(prefs, PREF_GROUP_UI, "inpblock", value);
+    _save_prefs();
+}
+
 gint
 prefs_get_priority(void)
 {
diff --git a/src/config/preferences.h b/src/config/preferences.h
index d2a3fafd..cc95c6e9 100644
--- a/src/config/preferences.h
+++ b/src/config/preferences.h
@@ -123,6 +123,8 @@ void prefs_set_reconnect(gint value);
 gint prefs_get_reconnect(void);
 void prefs_set_autoping(gint value);
 gint prefs_get_autoping(void);
+gint prefs_get_inpblock(void);
+void prefs_set_inpblock(gint value);
 
 void prefs_set_occupants_size(gint value);
 gint prefs_get_occupants_size(void);
diff --git a/src/ui/console.c b/src/ui/console.c
index 3a280eb5..2bfc12ef 100644
--- a/src/ui/console.c
+++ b/src/ui/console.c
@@ -999,6 +999,7 @@ _cons_show_ui_prefs(void)
     cons_privileges_setting();
     cons_titlebar_setting();
     cons_presence_setting();
+    cons_inpblock_setting();
 
     cons_alert();
 }
@@ -1160,6 +1161,12 @@ _cons_show_chat_prefs(void)
 }
 
 static void
+_cons_inpblock_setting(void)
+{
+    cons_show("Input block (/inpblock)       : %d milliseconds", prefs_get_inpblock());
+}
+
+static void
 _cons_log_setting(void)
 {
     cons_show("Log file location           : %s", get_log_file_location());
@@ -1677,6 +1684,7 @@ console_init_module(void)
     cons_reconnect_setting = _cons_reconnect_setting;
     cons_autoping_setting = _cons_autoping_setting;
     cons_priority_setting = _cons_priority_setting;
+    cons_inpblock_setting = _cons_inpblock_setting;
     cons_show_connection_prefs = _cons_show_connection_prefs;
     cons_show_themes = _cons_show_themes;
     cons_prefs = _cons_prefs;
diff --git a/src/ui/inputwin.c b/src/ui/inputwin.c
index 4c9845a4..4ed47601 100644
--- a/src/ui/inputwin.c
+++ b/src/ui/inputwin.c
@@ -112,7 +112,7 @@ inp_win_resize(void)
 void
 inp_non_block(void)
 {
-    wtimeout(inp_win, 20);
+    wtimeout(inp_win, prefs_get_inpblock());
 }
 
 void
diff --git a/src/ui/ui.h b/src/ui/ui.h
index 159f7f18..3271d25b 100644
--- a/src/ui/ui.h
+++ b/src/ui/ui.h
@@ -322,6 +322,7 @@ void (*cons_reconnect_setting)(void);
 void (*cons_autoping_setting)(void);
 void (*cons_priority_setting)(void);
 void (*cons_autoconnect_setting)(void);
+void (*cons_inpblock_setting)(void);
 void (*cons_show_contact_online)(PContact contact, Resource *resource, GDateTime *last_activity);
 void (*cons_show_contact_offline)(PContact contact, char *resource, char *status);
 void (*cons_theme_colours)(void);