Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'gajim/gtk/conversation/rows/message.py')
-rw-r--r--gajim/gtk/conversation/rows/message.py38
1 files changed, 36 insertions, 2 deletions
diff --git a/gajim/gtk/conversation/rows/message.py b/gajim/gtk/conversation/rows/message.py
index 60fea0a8e..3c56837af 100644
--- a/gajim/gtk/conversation/rows/message.py
+++ b/gajim/gtk/conversation/rows/message.py
@@ -53,6 +53,7 @@ from .widgets import MoreMenuButton
from ..message_widget import MessageWidget
from ...dialogs import InputDialog
from ...dialogs import DialogButton
+from ...menus import get_groupchat_participant_menu
from ...preview import PreviewWidget
from ...util import format_fingerprint
from ...util import get_cursor
@@ -254,10 +255,43 @@ class MessageRow(BaseRow):
event: Gdk.EventButton,
name: str
) -> int:
- if event.type == Gdk.EventType.BUTTON_PRESS and event.button == 1:
- app.window.activate_action('mention', GLib.Variant('s', name))
+ if event.type == Gdk.EventType.BUTTON_PRESS:
+ if event.button == 1:
+ app.window.activate_action('mention', GLib.Variant('s', name))
+ elif event.button == 3:
+ rect = Gdk.Rectangle()
+ rect.x, rect.y = int(event.x), int(event.y)
+ rect.height, rect.width = 1, 1
+ self._show_participant_menu(name, rect)
+
return Gdk.EVENT_STOP
+ def _show_participant_menu(self, nick: str, rect: Gdk.Rectangle) -> None:
+ assert isinstance(self._contact, GroupchatContact)
+ if not self._contact.is_joined:
+ return
+
+ self_contact = self._contact.get_self()
+ assert self_contact is not None
+
+ if nick == self_contact.name:
+ # Don’t show menu for us
+ return
+
+ contact = self._contact.get_resource(nick)
+ menu = get_groupchat_participant_menu(self._contact.account,
+ self_contact,
+ contact)
+
+ def destroy(popover: Gtk.Popover) -> None:
+ app.check_finalize(popover)
+ GLib.idle_add(popover.set_relative_to, None)
+
+ popover = Gtk.Popover.new_from_model(self, menu)
+ popover.set_pointing_to(rect)
+ popover.connect('closed', destroy)
+ popover.popup()
+
@staticmethod
def _on_realize(event_box: Gtk.EventBox) -> None:
window = event_box.get_window()