summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--doc/de/autogen/user/weechat_commands.txt2
-rw-r--r--doc/de/weechat_user.de.txt1
-rw-r--r--doc/en/autogen/user/weechat_commands.txt2
-rw-r--r--doc/en/weechat_user.en.txt1
-rw-r--r--doc/fr/autogen/user/weechat_commands.txt2
-rw-r--r--doc/fr/weechat_user.fr.txt1
-rw-r--r--doc/it/autogen/user/weechat_commands.txt2
-rw-r--r--doc/it/weechat_user.it.txt1
-rw-r--r--po/cs.po4
-rw-r--r--po/de.po4
-rw-r--r--po/es.po4
-rw-r--r--po/fr.po8
-rw-r--r--po/hu.po4
-rw-r--r--po/it.po4
-rw-r--r--po/pl.po4
-rw-r--r--po/pt_BR.po4
-rw-r--r--po/ru.po4
-rw-r--r--po/weechat.pot4
-rw-r--r--src/core/wee-command.c17
-rw-r--r--src/gui/curses/gui-curses-key.c4
-rw-r--r--src/gui/curses/gui-curses-mouse.c142
-rw-r--r--src/gui/gtk/gui-gtk-mouse.c24
-rw-r--r--src/gui/gui-input.c14
-rw-r--r--src/gui/gui-input.h5
-rw-r--r--src/gui/gui-key.c10
-rw-r--r--src/gui/gui-mouse.c9
-rw-r--r--src/gui/gui-mouse.h8
27 files changed, 227 insertions, 62 deletions
diff --git a/doc/de/autogen/user/weechat_commands.txt b/doc/de/autogen/user/weechat_commands.txt
index 2e3c45ea7..7bc8f8413 100644
--- a/doc/de/autogen/user/weechat_commands.txt
+++ b/doc/de/autogen/user/weechat_commands.txt
@@ -304,6 +304,8 @@ list of actions:
hotlist_clear: clear hotlist
grab_key: grab a key (optional argument: delay for end of grab, default is 500 milliseconds)
grab_key_command: grab a key with its associated command (optional argument: delay for end of grab, default is 500 milliseconds)
+ grab_mouse: grab mouse event code
+ grab_mouse_area: grab mouse event code with area
scroll_unread: scroll to unread marker
set_unread: set unread marker for all buffers
set_unread_current_buffer: set unread marker for current buffer
diff --git a/doc/de/weechat_user.de.txt b/doc/de/weechat_user.de.txt
index 09c4bacf6..b68daee36 100644
--- a/doc/de/weechat_user.de.txt
+++ b/doc/de/weechat_user.de.txt
@@ -586,6 +586,7 @@ These keys are used in context "mouse", namely when a mouse event occurs.
| ◾◽◽ | left | nicklist | Kick nick | /window ${_window_number};/kick ${nick}
| ◾◽◽ | left (long) | nicklist | Kick and ban nick | /window ${_window_number};/kickban ${nick}
| ◽◽◾ | left | nicklist | Ban nick | /window ${_window_number};/ban ${nick}
+| ◽◽◾ | - | input | Grab a mouse event and insert its code in command line | /input grab_mouse_area
| wheel ⇑ | - | any bar | Scroll bar by -10% | /bar scroll ${_bar_name} ${_window_number} -10%
| wheel ⇓ | - | any bar | Scroll bar by +10% | /bar scroll ${_bar_name} ${_window_number} +10%
| ◽◾◽ | - | anywhere | Start cursor mode at this point | /cursor go ${_x},${_y}
diff --git a/doc/en/autogen/user/weechat_commands.txt b/doc/en/autogen/user/weechat_commands.txt
index b6eea2fa0..29fd1b6cf 100644
--- a/doc/en/autogen/user/weechat_commands.txt
+++ b/doc/en/autogen/user/weechat_commands.txt
@@ -304,6 +304,8 @@ list of actions:
hotlist_clear: clear hotlist
grab_key: grab a key (optional argument: delay for end of grab, default is 500 milliseconds)
grab_key_command: grab a key with its associated command (optional argument: delay for end of grab, default is 500 milliseconds)
+ grab_mouse: grab mouse event code
+ grab_mouse_area: grab mouse event code with area
scroll_unread: scroll to unread marker
set_unread: set unread marker for all buffers
set_unread_current_buffer: set unread marker for current buffer
diff --git a/doc/en/weechat_user.en.txt b/doc/en/weechat_user.en.txt
index 7a91cae8e..92640ba49 100644
--- a/doc/en/weechat_user.en.txt
+++ b/doc/en/weechat_user.en.txt
@@ -584,6 +584,7 @@ These keys are used in context "mouse", namely when a mouse event occurs.
| ◾◽◽ | left | nicklist | Kick nick | /window ${_window_number};/kick ${nick}
| ◾◽◽ | left (long) | nicklist | Kick and ban nick | /window ${_window_number};/kickban ${nick}
| ◽◽◾ | left | nicklist | Ban nick | /window ${_window_number};/ban ${nick}
+| ◽◽◾ | - | input | Grab a mouse event and insert its code in command line | /input grab_mouse_area
| wheel ⇑ | - | any bar | Scroll bar by -10% | /bar scroll ${_bar_name} ${_window_number} -10%
| wheel ⇓ | - | any bar | Scroll bar by +10% | /bar scroll ${_bar_name} ${_window_number} +10%
| ◽◾◽ | - | anywhere | Start cursor mode at this point | /cursor go ${_x},${_y}
diff --git a/doc/fr/autogen/user/weechat_commands.txt b/doc/fr/autogen/user/weechat_commands.txt
index 728db4beb..b7fc0869e 100644
--- a/doc/fr/autogen/user/weechat_commands.txt
+++ b/doc/fr/autogen/user/weechat_commands.txt
@@ -304,6 +304,8 @@ list des actions:
hotlist_clear: effacer la hotlist
grab_key: capturer une touche (paramètre facultatif: délai pour la fin de la capture, par défaut 500 millisecondes)
grab_key_command: capturer une touche avec sa commande associée (paramètre facultatif: délai pour la fin de la capture, par défaut 500 millisecondes)
+ grab_mouse: capturer un évènement de la souris
+ grab_mouse_area: capturer un évènement de la souris avec la zone
scroll_unread: faire défiler jusqu'au marqueur de données non lues
set_unread: définir le marqueur de données non lues pour tous les tampons
set_unread_current_buffer: définir le marqueur de données non lues pour le tampon courant
diff --git a/doc/fr/weechat_user.fr.txt b/doc/fr/weechat_user.fr.txt
index 8d0eff75a..96e8c6b9d 100644
--- a/doc/fr/weechat_user.fr.txt
+++ b/doc/fr/weechat_user.fr.txt
@@ -594,6 +594,7 @@ Ces touches sont utilisées dans le contexte "mouse", c'est-à-dire lorsqu'un
| ◾◽◽ | left | liste des pseudos | Retirer par la force le pseudo | /window ${_window_number};/kick ${nick}
| ◾◽◽ | left (long) | liste des pseudos | Retirer par la force et bannir le pseudo | /window ${_window_number};/kickban ${nick}
| ◽◽◾ | left | liste des pseudos | Bannir le pseudo | /window ${_window_number};/ban ${nick}
+| ◽◽◾ | - | ligne de commande | Capturer un évènement de la souris et insérer son code sur la ligne de commande | /input grab_mouse_area
| roulette ⇑ | - | toute barre | Faire défiler la barre de -10% | /bar scroll ${_bar_name} ${_window_number} -10%
| roulette ⇓ | - | toute barre | Faire défiler la barre de +10% | /bar scroll ${_bar_name} ${_window_number} +10%
| ◽◾◽ | - | n'importe où | Démarrer le mode curseur ("cursor") à ce point | /cursor go ${_x},${_y}
diff --git a/doc/it/autogen/user/weechat_commands.txt b/doc/it/autogen/user/weechat_commands.txt
index 2af47a690..579ce833a 100644
--- a/doc/it/autogen/user/weechat_commands.txt
+++ b/doc/it/autogen/user/weechat_commands.txt
@@ -304,6 +304,8 @@ list of actions:
hotlist_clear: clear hotlist
grab_key: grab a key (optional argument: delay for end of grab, default is 500 milliseconds)
grab_key_command: grab a key with its associated command (optional argument: delay for end of grab, default is 500 milliseconds)
+ grab_mouse: grab mouse event code
+ grab_mouse_area: grab mouse event code with area
scroll_unread: scroll to unread marker
set_unread: set unread marker for all buffers
set_unread_current_buffer: set unread marker for current buffer
diff --git a/doc/it/weechat_user.it.txt b/doc/it/weechat_user.it.txt
index 53da149d0..bcbf4c44d 100644
--- a/doc/it/weechat_user.it.txt
+++ b/doc/it/weechat_user.it.txt
@@ -594,6 +594,7 @@ These keys are used in context "mouse", namely when a mouse event occurs.
| ◾◽◽ | left | nicklist | Kick nick | /window ${_window_number};/kick ${nick}
| ◾◽◽ | left (long) | nicklist | Kick and ban nick | /window ${_window_number};/kickban ${nick}
| ◽◽◾ | left | nicklist | Ban nick | /window ${_window_number};/ban ${nick}
+| ◽◽◾ | - | input | Grab a mouse event and insert its code in command line | /input grab_mouse_area
| wheel ⇑ | - | any bar | Scroll bar by -10% | /bar scroll ${_bar_name} ${_window_number} -10%
| wheel ⇓ | - | any bar | Scroll bar by +10% | /bar scroll ${_bar_name} ${_window_number} +10%
| ◽◾◽ | - | anywhere | Start cursor mode at this point | /cursor go ${_x},${_y}
diff --git a/po/cs.po b/po/cs.po
index 75bcb67bd..e5f31be34 100644
--- a/po/cs.po
+++ b/po/cs.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-07-05 15:37+0200\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1360,6 +1360,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/de.po b/po/de.po
index f5083f481..07e9c7261 100644
--- a/po/de.po
+++ b/po/de.po
@@ -22,7 +22,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-07-14 20:53+0100\n"
"Last-Translator: Nils Görs\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1395,6 +1395,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/es.po b/po/es.po
index 04a932820..709e2150a 100644
--- a/po/es.po
+++ b/po/es.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-07-05 15:37+0200\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1368,6 +1368,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/fr.po b/po/fr.po
index 21507d780..cd7b7091f 100644
--- a/po/fr.po
+++ b/po/fr.po
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
-"PO-Revision-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
+"PO-Revision-Date: 2011-07-30 14:38+0200\n"
"Last-Translator: Sebastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: French\n"
@@ -1390,6 +1390,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
@@ -1442,6 +1444,8 @@ msgstr ""
"la capture, par défaut 500 millisecondes)\n"
" grab_key_command: capturer une touche avec sa commande associée (paramètre "
"facultatif: délai pour la fin de la capture, par défaut 500 millisecondes)\n"
+" grab_mouse: capturer un évènement de la souris\n"
+" grab_mouse_area: capturer un évènement de la souris avec la zone\n"
" scroll_unread: faire défiler jusqu'au marqueur de données non lues\n"
" set_unread: définir le marqueur de données non lues pour tous les tampons\n"
" set_unread_current_buffer: définir le marqueur de données non lues pour le "
diff --git a/po/hu.po b/po/hu.po
index db8ab77d8..9fda8695f 100644
--- a/po/hu.po
+++ b/po/hu.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-05-15 10:51+0200\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1239,6 +1239,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/it.po b/po/it.po
index a13fa6015..493b92def 100644
--- a/po/it.po
+++ b/po/it.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-07-16 11:32+0200\n"
"Last-Translator: Marco Paolone <marcopaolone@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1367,6 +1367,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/pl.po b/po/pl.po
index d05122e9b..83887bf82 100644
--- a/po/pl.po
+++ b/po/pl.po
@@ -21,7 +21,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-07-05 15:38+0200\n"
"Last-Translator: Krzysztof Koroscik <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1371,6 +1371,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/pt_BR.po b/po/pt_BR.po
index 61857f3da..046fb0a4c 100644
--- a/po/pt_BR.po
+++ b/po/pt_BR.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Ivan Sichmann Freitas <ivansichfreitas@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1367,6 +1367,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/ru.po b/po/ru.po
index daf69cb21..92516f875 100644
--- a/po/ru.po
+++ b/po/ru.po
@@ -20,7 +20,7 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.3.6-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: 2011-05-15 10:52+0200\n"
"Last-Translator: Pavel Shevchuk <stlwrt@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -1247,6 +1247,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/po/weechat.pot b/po/weechat.pot
index f0e396436..ed12afbc5 100644
--- a/po/weechat.pot
+++ b/po/weechat.pot
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
-"POT-Creation-Date: 2011-07-30 08:54+0200\n"
+"POT-Creation-Date: 2011-07-30 14:37+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1095,6 +1095,8 @@ msgid ""
"500 milliseconds)\n"
" grab_key_command: grab a key with its associated command (optional "
"argument: delay for end of grab, default is 500 milliseconds)\n"
+" grab_mouse: grab mouse event code\n"
+" grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for current buffer\n"
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index a0d89d572..7fa4f0898 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -2287,9 +2287,13 @@ COMMAND_CALLBACK(input)
else if (string_strcasecmp (argv[1], "hotlist_clear") == 0)
gui_input_hotlist_clear (buffer);
else if (string_strcasecmp (argv[1], "grab_key") == 0)
- gui_input_grab_key (buffer, (argc > 2) ? argv[2] : NULL);
+ gui_input_grab_key (buffer, 0, (argc > 2) ? argv[2] : NULL);
else if (string_strcasecmp (argv[1], "grab_key_command") == 0)
- gui_input_grab_key_command (buffer, (argc > 2) ? argv[2] : NULL);
+ gui_input_grab_key (buffer, 1, (argc > 2) ? argv[2] : NULL);
+ else if (string_strcasecmp (argv[1], "grab_mouse") == 0)
+ gui_input_grab_mouse (buffer, 0);
+ else if (string_strcasecmp (argv[1], "grab_mouse_area") == 0)
+ gui_input_grab_mouse (buffer, 1);
else if (string_strcasecmp (argv[1], "scroll_unread") == 0)
gui_input_scroll_unread (buffer);
else if (string_strcasecmp (argv[1], "set_unread") == 0)
@@ -3093,6 +3097,7 @@ COMMAND_CALLBACK(mouse)
return WEECHAT_RC_OK;
}
+ /* enable mouse */
if (string_strcasecmp (argv[1], "enable") == 0)
{
gui_mouse_enable ();
@@ -3101,6 +3106,7 @@ COMMAND_CALLBACK(mouse)
return WEECHAT_RC_OK;
}
+ /* disable mouse */
if (string_strcasecmp (argv[1], "disable") == 0)
{
gui_mouse_disable ();
@@ -3109,6 +3115,7 @@ COMMAND_CALLBACK(mouse)
return WEECHAT_RC_OK;
}
+ /* toggle mouse */
if (string_strcasecmp (argv[1], "toggle") == 0)
{
if (gui_mouse_enabled)
@@ -5460,6 +5467,8 @@ command_init ()
" grab_key_command: grab a key with its associated "
"command (optional argument: delay for end of grab, "
"default is 500 milliseconds)\n"
+ " grab_mouse: grab mouse event code\n"
+ " grab_mouse_area: grab mouse event code with area\n"
" scroll_unread: scroll to unread marker\n"
" set_unread: set unread marker for all buffers\n"
" set_unread_current_buffer: set unread marker for "
@@ -5481,8 +5490,8 @@ command_init ()
"history_global_previous|history_global_next|"
"jump_smart|jump_last_buffer|jump_previously_visited_buffer|"
"jump_next_visited_buffer|hotlist_clear|grab_key|"
- "grab_key_command|scroll_unread|set_unread|"
- "set_unread_current_buffer|switch_active_buffer|"
+ "grab_key_command|grab_mouse|grab_mouse_area|scroll_unread|"
+ "set_unread|set_unread_current_buffer|switch_active_buffer|"
"switch_active_buffer_previous|insert",
&command_input, NULL);
hook_command (NULL, "key",
diff --git a/src/gui/curses/gui-curses-key.c b/src/gui/curses/gui-curses-key.c
index ce19de112..5da21b7d5 100644
--- a/src/gui/curses/gui-curses-key.c
+++ b/src/gui/curses/gui-curses-key.c
@@ -263,6 +263,8 @@ gui_key_default_bindings (int context)
BIND("@item(buffer_nicklist):button1-gesture-left", "/window ${_window_number};/kick ${nick}");
BIND("@item(buffer_nicklist):button1-gesture-left-long", "/window ${_window_number};/kickban ${nick}");
BIND("@item(buffer_nicklist):button2-gesture-left", "/window ${_window_number};/ban ${nick}");
+ /* mouse events on input */
+ BIND("@bar(input):button2", "/input grab_mouse_area");
/* mouse wheel on any bar */
BIND("@bar(*):wheelup", "/bar scroll ${_bar_name} ${_window_number} -10%");
BIND("@bar(*):wheeldown", "/bar scroll ${_bar_name} ${_window_number} +10%");
@@ -296,7 +298,7 @@ gui_key_flush ()
insert_ok = 1;
- if (gui_mouse_grab)
+ if (gui_mouse_event_pending)
{
insert_ok = 0;
key_str[0] = (char) key;
diff --git a/src/gui/curses/gui-curses-mouse.c b/src/gui/curses/gui-curses-mouse.c
index 45151e0bc..5caa554fb 100644
--- a/src/gui/curses/gui-curses-mouse.c
+++ b/src/gui/curses/gui-curses-mouse.c
@@ -34,9 +34,16 @@
#include "../../core/wee-hook.h"
#include "../../core/wee-utf8.h"
#include "../../plugins/plugin.h"
+#include "../gui-bar.h"
+#include "../gui-bar-window.h"
+#include "../gui-buffer.h"
#include "../gui-chat.h"
+#include "../gui-completion.h"
+#include "../gui-cursor.h"
+#include "../gui-input.h"
#include "../gui-key.h"
#include "../gui-mouse.h"
+#include "../gui-window.h"
/*
@@ -74,29 +81,116 @@ gui_mouse_display_state ()
}
/*
- * gui_mouse_grab_timer_cb: timer for grabbing mouse code
+ * gui_mouse_grab_init: init "grab mode"
+ */
+
+void
+gui_mouse_grab_init (int area)
+{
+ gui_mouse_grab = (area) ? 2 : 1;
+}
+
+/*
+ * gui_mouse_grab_event2input: get area for input, according to (x,y) of mouse
+ * event
+ * for example: @item(buffer_nicklist)
+ * @bar(title)
+ * @chat
+ * @*
+ */
+
+char *
+gui_mouse_grab_event2input ()
+{
+ struct t_gui_cursor_info cursor_info;
+ static char area[256];
+
+ gui_cursor_get_info (gui_mouse_event_x[0],
+ gui_mouse_event_y[0],
+ &cursor_info);
+
+ if (cursor_info.bar_item)
+ {
+ snprintf (area, sizeof (area),
+ "@item(%s)", cursor_info.bar_item);
+ }
+ else if (cursor_info.bar_window)
+ {
+ snprintf (area, sizeof (area),
+ "@bar(%s)", ((cursor_info.bar_window)->bar)->name);
+ }
+ else if (cursor_info.chat)
+ {
+ snprintf (area, sizeof (area), "@chat");
+ }
+ else
+ {
+ snprintf (area, sizeof (area), "@*");
+ }
+
+ return area;
+}
+
+/*
+ * gui_mouse_grab_end: end "grab mode"
+ */
+
+void
+gui_mouse_grab_end (const char *mouse_key)
+{
+ char mouse_key_input[256];
+
+ /* insert mouse key in input */
+ if (gui_current_window->buffer->input)
+ {
+ if (gui_mouse_grab == 2)
+ {
+ /* mouse key with area */
+ snprintf (mouse_key_input, sizeof (mouse_key_input),
+ "%s:%s",
+ gui_mouse_grab_event2input (),
+ mouse_key);
+ }
+ else
+ {
+ /* mouse key without area */
+ snprintf (mouse_key_input, sizeof (mouse_key_input),
+ "%s", 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_mouse_grab = 0;
+}
+
+/*
+ * gui_mouse_event_timer_cb: timer for grabbing mouse code
*/
int
-gui_mouse_grab_timer_cb (void *data, int remaining_calls)
+gui_mouse_event_timer_cb (void *data, int remaining_calls)
{
/* make C compiler happy */
(void) data;
(void) remaining_calls;
- gui_mouse_grab_end ();
+ gui_mouse_event_end ();
return WEECHAT_RC_OK;
}
/*
- * gui_mouse_grab_init: init "grab mouse" mode
+ * gui_mouse_event_init: init mouse event
*/
void
-gui_mouse_grab_init ()
+gui_mouse_event_init ()
{
- gui_mouse_grab = 1;
+ gui_mouse_event_pending = 1;
if (gui_mouse_event_timer)
unhook (gui_mouse_event_timer);
@@ -104,18 +198,18 @@ gui_mouse_grab_init ()
gui_mouse_event_timer = hook_timer (NULL,
CONFIG_INTEGER(config_look_mouse_timer_delay),
0, 1,
- &gui_mouse_grab_timer_cb, NULL);
+ &gui_mouse_event_timer_cb, NULL);
}
/*
- * gui_mouse_grab_code2key: get key name with a mouse code
- * *extra_chars is set with first char following the
- * end of mouse code (this can point to the '\0' or
- * other chars)
+ * gui_mouse_event_code2key: get key name with a mouse code
+ * *extra_chars is set with first char following the
+ * end of mouse code (this can point to the '\0' or
+ * other chars)
*/
const char *
-gui_mouse_grab_code2key (const char *code, char **extra_chars)
+gui_mouse_event_code2key (const char *code, char **extra_chars)
{
int x, y, code_utf8, length;
double diff_x, diff_y, distance, angle, pi4;
@@ -288,17 +382,17 @@ gui_mouse_grab_code2key (const char *code, char **extra_chars)
}
/*
- * gui_mouse_grab_end: end "grab mouse" mode
+ * gui_mouse_event_end: end mouse event
*/
void
-gui_mouse_grab_end ()
+gui_mouse_event_end ()
{
const char *mouse_key;
char *extra_chars;
int i;
- gui_mouse_grab = 0;
+ gui_mouse_event_pending = 0;
/* end mouse event timer */
if (gui_mouse_event_timer)
@@ -307,13 +401,21 @@ gui_mouse_grab_end ()
gui_mouse_event_timer = NULL;
}
- /* get key from mouse code and execute command (if found) */
- mouse_key = gui_mouse_grab_code2key (gui_key_combo_buffer, &extra_chars);
+ /* get key from mouse code */
+ mouse_key = gui_mouse_event_code2key (gui_key_combo_buffer, &extra_chars);
if (mouse_key && mouse_key[0])
{
- (void) gui_key_focus (mouse_key,
- GUI_KEY_CONTEXT_MOUSE);
- gui_mouse_reset_event ();
+ if (gui_mouse_grab)
+ {
+ gui_mouse_grab_end (mouse_key);
+ }
+ else
+ {
+ /* execute command (if found) */
+ (void) gui_key_focus (mouse_key,
+ GUI_KEY_CONTEXT_MOUSE);
+ }
+ gui_mouse_event_reset ();
}
gui_key_combo_buffer[0] = '\0';
diff --git a/src/gui/gtk/gui-gtk-mouse.c b/src/gui/gtk/gui-gtk-mouse.c
index 8d7533d8d..65c1bfe56 100644
--- a/src/gui/gtk/gui-gtk-mouse.c
+++ b/src/gui/gtk/gui-gtk-mouse.c
@@ -60,21 +60,33 @@ gui_mouse_display_state ()
}
/*
- * gui_mouse_grab_init: init "grab mouse" mode
+ * gui_mouse_grab_init: init "grab mode"
*/
void
-gui_mouse_grab_init ()
+gui_mouse_grab_init (int area)
+{
+ (void) area;
+
+ /* This function does nothing in Gtk GUI */
+}
+
+/*
+ * gui_mouse_event_init: init mouse event
+ */
+
+void
+gui_mouse_event_init ()
{
/* This function does nothing in Gtk GUI */
}
/*
- * gui_mouse_grab_code2key: get key name with a mouse code
+ * gui_mouse_event_code2key: get key name with a mouse code
*/
const char *
-gui_mouse_grab_code2key (const char *code)
+gui_mouse_event_code2key (const char *code)
{
(void) code;
@@ -84,11 +96,11 @@ gui_mouse_grab_code2key (const char *code)
}
/*
- * gui_mouse_grab_end: end "grab mouse" mode
+ * gui_mouse_event_end: end mouse event
*/
void
-gui_mouse_grab_end ()
+gui_mouse_event_end ()
{
/* This function does nothing in Gtk GUI */
}
diff --git a/src/gui/gui-input.c b/src/gui/gui-input.c
index aa5c5dc5a..072df0368 100644
--- a/src/gui/gui-input.c
+++ b/src/gui/gui-input.c
@@ -43,6 +43,7 @@
#include "gui-hotlist.h"
#include "gui-key.h"
#include "gui-line.h"
+#include "gui-mouse.h"
#include "gui-window.h"
@@ -1343,22 +1344,23 @@ gui_input_hotlist_clear (struct t_gui_buffer *buffer)
*/
void
-gui_input_grab_key (struct t_gui_buffer *buffer, const char *delay)
+gui_input_grab_key (struct t_gui_buffer *buffer, int command, const char *delay)
{
if (buffer->input)
- gui_key_grab_init (0, delay);
+ gui_key_grab_init (command, delay);
}
/*
- * gui_input_grab_key_command: init "grab key mode" (next key and command
- * bound will be inserted into input buffer)
+ * gui_input_grab_mouse: init "grab mouse mode" (next mouse event will be
+ * inserted into input buffer) (default key: button2 of
+ * mouse in input bar)
*/
void
-gui_input_grab_key_command (struct t_gui_buffer *buffer, const char *delay)
+gui_input_grab_mouse (struct t_gui_buffer *buffer, int area)
{
if (buffer->input)
- gui_key_grab_init (1, delay);
+ gui_mouse_grab_init (area);
}
/*
diff --git a/src/gui/gui-input.h b/src/gui/gui-input.h
index 89a919baa..565dcb73e 100644
--- a/src/gui/gui-input.h
+++ b/src/gui/gui-input.h
@@ -70,10 +70,9 @@ extern void gui_input_jump_last_buffer (struct t_gui_buffer *buffer);
extern void gui_input_jump_previously_visited_buffer (struct t_gui_buffer *buffer);
extern void gui_input_jump_next_visited_buffer (struct t_gui_buffer *buffer);
extern void gui_input_hotlist_clear (struct t_gui_buffer *buffer);
-extern void gui_input_grab_key (struct t_gui_buffer *buffer,
+extern void gui_input_grab_key (struct t_gui_buffer *buffer, int command,
const char *delay);
-extern void gui_input_grab_key_command (struct t_gui_buffer *buffer,
- const char *delay);
+extern void gui_input_grab_mouse (struct t_gui_buffer *buffer, int area);
extern void gui_input_scroll_unread (struct t_gui_buffer *buffer);
extern void gui_input_set_unread ();
extern void gui_input_set_unread_current (struct t_gui_buffer *buffer);
diff --git a/src/gui/gui-key.c b/src/gui/gui-key.c
index d29d83851..e7e4d2103 100644
--- a/src/gui/gui-key.c
+++ b/src/gui/gui-key.c
@@ -820,15 +820,15 @@ gui_key_pressed (const char *key_str)
return 0;
}
- /* mode "mouse grab" (mouse event pending) */
- if (gui_mouse_grab)
+ /* mouse event pending */
+ if (gui_mouse_event_pending)
{
pos = strstr (gui_key_combo_buffer, "\x1B[M");
if (pos)
{
pos[0] = '\0';
- gui_mouse_grab_end ();
- gui_mouse_grab_init ();
+ gui_mouse_event_end ();
+ gui_mouse_event_init ();
}
return 0;
}
@@ -836,7 +836,7 @@ gui_key_pressed (const char *key_str)
if (strcmp (gui_key_combo_buffer, "\x01[[M") == 0)
{
gui_key_combo_buffer[0] = '\0';
- gui_mouse_grab_init ();
+ gui_mouse_event_init ();
return 0;
}
diff --git a/src/gui/gui-mouse.c b/src/gui/gui-mouse.c
index 6fe6ab8ff..8a062d89c 100644
--- a/src/gui/gui-mouse.c
+++ b/src/gui/gui-mouse.c
@@ -34,7 +34,10 @@
int gui_mouse_enabled = 0; /* 1 if mouse support is enabled */
int gui_mouse_debug = 0; /* debug mode for mouse */
-int gui_mouse_grab = 0; /* 1 if grab mouse code enabled */
+int gui_mouse_grab = 0; /* 1 if grab mode enabled */
+
+/* mouse event */
+int gui_mouse_event_pending = 0; /* 1 if mouse event has started */
struct t_hook *gui_mouse_event_timer = NULL; /* timer to detect entire */
/* mouse event */
int gui_mouse_event_index = 0; /* index for x/y in array (0 or 1) */
@@ -61,11 +64,11 @@ gui_mouse_debug_toggle ()
}
/*
- * gui_mouse_reset_event: reset event values
+ * gui_mouse_event_reset: reset event values
*/
void
-gui_mouse_reset_event ()
+gui_mouse_event_reset ()
{
gui_mouse_event_index = 0;
gui_mouse_event_x[0] = 0;
diff --git a/src/gui/gui-mouse.h b/src/gui/gui-mouse.h
index b23f4d656..a930a32d5 100644
--- a/src/gui/gui-mouse.h
+++ b/src/gui/gui-mouse.h
@@ -25,6 +25,7 @@
extern int gui_mouse_enabled;
extern int gui_mouse_debug;
extern int gui_mouse_grab;
+extern int gui_mouse_event_pending;
extern struct t_hook *gui_mouse_event_timer;
extern int gui_mouse_event_index;
extern int gui_mouse_event_x[2];
@@ -34,14 +35,15 @@ extern char gui_mouse_event_button;
/* mouse functions */
extern void gui_mouse_debug_toggle ();
-extern void gui_mouse_reset_event ();
+extern void gui_mouse_event_reset ();
/* mouse functions (GUI dependent) */
extern void gui_mouse_enable ();
extern void gui_mouse_disable ();
extern void gui_mouse_display_state ();
-extern void gui_mouse_grab_init ();
-extern void gui_mouse_grab_end ();
+extern void gui_mouse_grab_init (int area);
+extern void gui_mouse_event_init ();
+extern void gui_mouse_event_end ();
#endif /* __WEECHAT_GUI_MOUSE_H */