From 05184e4292fb6b027f33bbe14ea59fcc07832deb Mon Sep 17 00:00:00 2001
From: wurstsalat <mailtrash@posteo.de>
Date: Tue, 31 May 2022 16:23:41 +0200
Subject: [PATCH] imprv: Windows: Enable native emoji chooser

---
 gajim/gtk/application.py               |  4 +++-
 gajim/gtk/controls/base.py             |  8 ++++++--
 gajim/gtk/conversation/plain_widget.py | 19 +++++++++++--------
 gajim/gtk/message_input.py             |  6 ++++++
 gajim/gtk/preferences.py               |  8 ++++++--
 5 files changed, 32 insertions(+), 13 deletions(-)

diff --git a/gajim/gtk/application.py b/gajim/gtk/application.py
index 984e22a1ee..acbcb940c8 100644
--- a/gajim/gtk/application.py
+++ b/gajim/gtk/application.py
@@ -232,7 +232,9 @@ def _startup(self, _application: GajimApplication) -> None:
         idle.Monitor.set_interval(app.settings.get('autoawaytime') * 60,
                                   app.settings.get('autoxatime') * 60)
 
-        if sys.platform in ('win32', 'darwin'):
+        if sys.platform == 'darwin':
+            # TODO: Remove if colored emoji rendering works well on
+            # Windows and MacOS
             from gajim.gui.emoji_chooser import emoji_chooser
             emoji_chooser.load()
 
diff --git a/gajim/gtk/controls/base.py b/gajim/gtk/controls/base.py
index d760f945ea..d850654686 100644
--- a/gajim/gtk/controls/base.py
+++ b/gajim/gtk/controls/base.py
@@ -491,7 +491,9 @@ def delegate_action(self, action: str) -> int:
             return Gdk.EVENT_STOP
 
         if action == 'show-emoji-chooser':
-            if sys.platform in ('win32', 'darwin'):
+            if sys.platform == 'darwin':
+                # TODO: Remove if colored emoji rendering works well on
+                # Windows and MacOS
                 self.xml.emoticons_button.get_popover().show()
                 return Gdk.EVENT_STOP
             self.msg_textview.emit('insert-emoji')
@@ -1297,7 +1299,9 @@ def set_emoticon_popover(self) -> None:
         if not app.settings.get('emoticons_theme'):
             return
 
-        if sys.platform in ('win32', 'darwin'):
+        if sys.platform == 'darwin':
+            # TODO: Remove if colored emoji rendering works well on
+            # Windows and MacOS
             emoji_chooser.text_widget = self.msg_textview
             self.xml.emoticons_button.set_popover(emoji_chooser)
             return
diff --git a/gajim/gtk/conversation/plain_widget.py b/gajim/gtk/conversation/plain_widget.py
index b9bb793b81..1c824fdff0 100644
--- a/gajim/gtk/conversation/plain_widget.py
+++ b/gajim/gtk/conversation/plain_widget.py
@@ -17,6 +17,7 @@
 from typing import Any
 
 import logging
+import sys
 
 from gi.repository import Gtk
 from gi.repository import Pango
@@ -52,15 +53,17 @@ def __init__(self, account: str, selectable: bool) -> None:
 
         self._account = account
 
-        # We use a Gtk.Textview on Windows and MacOS, since there is no support
-        # for rendering color fonts (Emojis) on Windows/MacOS yet, see:
-        # https://gitlab.freedesktop.org/cairo/cairo/-/merge_requests/244
+        # We use a Gtk.Textview on MacOS, since there is no support
+        # for rendering color fonts (Emojis) on MacOS yet, see:
+        # https://gitlab.freedesktop.org/cairo/cairo/-/merge_requests/289
         # https://gitlab.freedesktop.org/cairo/cairo/-/merge_requests/9
-        # if app.settings.get('dev_use_message_label'):
-        #     self._text_widget = MessageLabel(self._account, selectable)
-        # else:
-        #     self._text_widget = MessageTextview(self._account)
-        self._text_widget = MessageLabel(self._account, selectable)
+        if sys.platform == 'darwin':
+            if app.settings.get('dev_use_message_label'):
+                self._text_widget = MessageLabel(self._account, selectable)
+            else:
+                self._text_widget = MessageTextview(self._account)
+        else:
+            self._text_widget = MessageLabel(self._account, selectable)
         self.add(self._text_widget)
 
     def add_content(self, block: PlainBlock) -> None:
diff --git a/gajim/gtk/message_input.py b/gajim/gtk/message_input.py
index d6eb231b5d..771465d2c1 100644
--- a/gajim/gtk/message_input.py
+++ b/gajim/gtk/message_input.py
@@ -19,6 +19,8 @@
 
 from typing import Any
 
+import sys
+
 from gi.repository import Gtk
 from gi.repository import Gdk
 from gi.repository import GdkPixbuf
@@ -222,6 +224,10 @@ def apply_formatting(self, formatting: str) -> None:
             buf.get_iter_at_offset(end_offset + 2))
 
     def replace_emojis(self) -> None:
+        if sys.platform != 'darwin':
+            # TODO: Remove if colored emoji rendering works well on MacOS
+            return
+
         theme = app.settings.get('emoticons_theme')
         if not theme or theme == 'font':
             return
diff --git a/gajim/gtk/preferences.py b/gajim/gtk/preferences.py
index e849706c17..560cfd6ec4 100644
--- a/gajim/gtk/preferences.py
+++ b/gajim/gtk/preferences.py
@@ -116,7 +116,9 @@ def __init__(self) -> None:
         self._ui.connect_signals(self)
 
         self.show_all()
-        if sys.platform not in ('win32', 'darwin'):
+        if sys.platform != 'darwin':
+            # TODO: Remove if colored emoji rendering works well on
+            # Windows and MacOS
             self._ui.emoji.hide()
 
     def get_ui(self):
@@ -701,7 +703,9 @@ def _on_dark_theme(value: str, *args: Any) -> None:
 
 class Emoji(PreferenceBox):
     def __init__(self, *args: Any) -> None:
-        if sys.platform not in ('win32', 'darwin'):
+        if sys.platform != 'darwin':
+            # TODO: Remove if colored emoji rendering works well on
+            # Windows and MacOS
             PreferenceBox.__init__(self, [])
             return
 
-- 
GitLab