From e6d9790d0090f416d560eb23cf59b1de2755a847 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Daniel=20Br=C3=B6tzmann?= <mailtrash@posteo.de>
Date: Sat, 18 Jan 2020 21:50:36 +0100
Subject: [PATCH] [length_notifier] Fix character counter

Setting the character count to 0 will disable color notification.
Removes setting for counter toggle.
---
 length_notifier/config_dialog.ui   | 46 +++++++++----------------
 length_notifier/length_notifier.py | 54 ++++++++++++------------------
 2 files changed, 36 insertions(+), 64 deletions(-)

diff --git a/length_notifier/config_dialog.ui b/length_notifier/config_dialog.ui
index 7190f86b..cca3ff1b 100644
--- a/length_notifier/config_dialog.ui
+++ b/length_notifier/config_dialog.ui
@@ -4,6 +4,9 @@
   <requires lib="gtk+" version="3.20"/>
   <object class="GtkWindow">
     <property name="can_focus">False</property>
+    <child>
+      <placeholder/>
+    </child>
     <child>
       <object class="GtkGrid" id="length_notifier_config_table">
         <property name="visible">True</property>
@@ -32,7 +35,7 @@
           <object class="GtkSpinButton" id="message_length_spinbutton">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="tooltip_text" translatable="yes">Message length for the notification to be shown</property>
+            <property name="tooltip_text" translatable="yes">Message length for the notification to be shown (set to 0 to disable color notification)</property>
             <property name="halign">start</property>
             <property name="width_chars">6</property>
             <property name="input_purpose">number</property>
@@ -50,27 +53,28 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="halign">end</property>
-            <property name="label" translatable="yes">XMPP Addresses</property>
+            <property name="label" translatable="yes">Notification Color</property>
             <style>
               <class name="dim-label"/>
             </style>
           </object>
           <packing>
             <property name="left_attach">0</property>
-            <property name="top_attach">3</property>
+            <property name="top_attach">1</property>
           </packing>
         </child>
         <child>
-          <object class="GtkEntry" id="jids_entry">
+          <object class="GtkColorButton" id="notification_colorbutton">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="tooltip_text" translatable="yes">Restrict this plugin to certain contacts, e.g. to one microblogging bot (use comma without space as separator)</property>
+            <property name="receives_default">True</property>
+            <property name="tooltip_text" translatable="yes">Background color of the message input when the specified message length is reached</property>
             <property name="halign">start</property>
-            <property name="placeholder_text" translatable="yes">user@example.org</property>
+            <property name="title" translatable="yes">Pick a color for notification</property>
           </object>
           <packing>
             <property name="left_attach">1</property>
-            <property name="top_attach">3</property>
+            <property name="top_attach">1</property>
           </packing>
         </child>
         <child>
@@ -78,7 +82,7 @@
             <property name="visible">True</property>
             <property name="can_focus">False</property>
             <property name="halign">end</property>
-            <property name="label" translatable="yes">Notification Color</property>
+            <property name="label" translatable="yes">XMPP Addresses</property>
             <style>
               <class name="dim-label"/>
             </style>
@@ -89,38 +93,18 @@
           </packing>
         </child>
         <child>
-          <object class="GtkColorButton" id="notification_colorbutton">
+          <object class="GtkEntry" id="jids_entry">
             <property name="visible">True</property>
             <property name="can_focus">True</property>
-            <property name="receives_default">True</property>
-            <property name="tooltip_text" translatable="yes">Background color of the message input when the specified message length is reached</property>
+            <property name="tooltip_text" translatable="yes">Restrict this plugin to certain contacts, e.g. to one microblogging bot (use comma without space as separator)</property>
             <property name="halign">start</property>
-            <property name="title" translatable="yes">Pick a color for notification</property>
+            <property name="placeholder_text" translatable="yes">user@example.org</property>
           </object>
           <packing>
             <property name="left_attach">1</property>
             <property name="top_attach">2</property>
           </packing>
         </child>
-        <child>
-          <object class="GtkCheckButton" id="char_counter">
-            <property name="label" translatable="yes">Show Character Count</property>
-            <property name="visible">True</property>
-            <property name="can_focus">True</property>
-            <property name="receives_default">False</property>
-            <property name="tooltip_text" translatable="yes">Adds a character counter to the message input</property>
-            <property name="halign">start</property>
-            <property name="draw_indicator">True</property>
-            <signal name="toggled" handler="_on_char_counter_toggled" swapped="no"/>
-          </object>
-          <packing>
-            <property name="left_attach">1</property>
-            <property name="top_attach">1</property>
-          </packing>
-        </child>
-        <child>
-          <placeholder/>
-        </child>
       </object>
     </child>
   </object>
diff --git a/length_notifier/length_notifier.py b/length_notifier/length_notifier.py
index 649af5e1..729c8846 100644
--- a/length_notifier/length_notifier.py
+++ b/length_notifier/length_notifier.py
@@ -48,7 +48,6 @@ class LengthNotifierPlugin(GajimPlugin):
 
         self.config_default_values = {
             'MESSAGE_WARNING_LENGTH' : (140, 'Message length at which notification is invoked.'),
-            'CHAR_COUNTER': (True, 'Show character count'),
             'WARNING_COLOR' : ('#F0DB3E', 'Background color of text entry field in chat window when notification is invoked.'),
             'JIDS' : ([], 'JabberIDs that plugin should be used with (eg. restrict only to one microblogging bot). If empty plugin is used with every JID. [not implemented]')
             }
@@ -57,13 +56,15 @@ class LengthNotifierPlugin(GajimPlugin):
     def textview_length_warning(self, tb, chat_control):
         tv = chat_control.msg_textview
         d = chat_control.length_notifier_plugin_data
+        counter = d['counter']
         if not tv.has_text():
-            self.counter.set_text('0')
+            counter.set_text('0')
         if tv.has_text():
             t = tb.get_text(tb.get_start_iter(), tb.get_end_iter(), True)
             len_t = len(t)
-            self.counter.set_text(str(len_t))
-            if len_t > self.config['MESSAGE_WARNING_LENGTH']:
+            counter.set_text(str(len_t))
+            warning_length = self.config['MESSAGE_WARNING_LENGTH']
+            if len_t > warning_length and warning_length != 0:
                 if not d['prev_color']:
                     #FIXME: That doesn't work
                     context = tv.get_style_context()
@@ -84,19 +85,27 @@ class LengthNotifierPlugin(GajimPlugin):
     def connect_with_chat_control(self, chat_control):
         jid = chat_control.contact.jid
         if self.jid_is_ok(jid):
-            self._create_counter(chat_control)
+            actions_hbox = chat_control.xml.get_object('hbox')
+            counter = Gtk.Label()
+            counter.set_tooltip_text(_('Number of typed characters'))
+            counter.get_style_context().add_class('dim-label')
+            counter.show()
+            actions_hbox.pack_start(counter, False, False, 0)
+
             d = {'prev_color' : None}
             tv = chat_control.msg_textview
             tb = tv.get_buffer()
             h_id = tb.connect('changed', self.textview_length_warning,
                 chat_control)
             d['h_id'] = h_id
+            d['counter'] = counter
 
             if tv.has_text():
                 t = tb.get_text(tb.get_start_iter(), tb.get_end_iter(), True)
                 len_t = len(t)
-                self.counter.set_text(str(len_t))
-                if len_t > self.config['MESSAGE_WARNING_LENGTH']:
+                counter.set_text(str(len_t))
+                warning_length = self.config['MESSAGE_WARNING_LENGTH']
+                if len_t > warning_length and warning_length != 0:
                     context = tv.get_style_context()
                     d['prev_color'] = context.get_background_color(
                         Gtk.StateFlags.NORMAL)
@@ -104,7 +113,7 @@ class LengthNotifierPlugin(GajimPlugin):
                     Gdk.RGBA.parse(color, self.config['WARNING_COLOR'])
                     tv.override_background_color(Gtk.StateType.NORMAL, color)
             else:
-                self.counter.set_text('0')
+                counter.set_text('0')
             chat_control.length_notifier_plugin_data = d
 
             return True
@@ -114,17 +123,17 @@ class LengthNotifierPlugin(GajimPlugin):
     @log_calls('LengthNotifierPlugin')
     def disconnect_from_chat_control(self, chat_control):
         try:
-            actions_hbox = chat_control.xml.get_object('hbox')
-            actions_hbox.remove(self.counter)
             d = chat_control.length_notifier_plugin_data
+            actions_hbox = chat_control.xml.get_object('hbox')
+            actions_hbox.remove(d['counter'])
+
             tv = chat_control.msg_textview
             tv.get_buffer().disconnect(d['h_id'])
             if d['prev_color']:
                 tv.override_background_color(Gtk.StateType.NORMAL,
                     d['prev_color'])
-        except AttributeError as error:
+        except AttributeError:
             pass
-            #log.debug('Length Notifier Plugin was (probably) never connected with this chat window.\n Error: %s' % (error))
 
     @log_calls('LengthNotifierPlugin')
     def jid_is_ok(self, jid):
@@ -133,21 +142,6 @@ class LengthNotifierPlugin(GajimPlugin):
 
         return False
 
-    def _create_counter(self, chat_control):
-        actions_hbox = chat_control.xml.get_object('hbox')
-        self.counter = Gtk.Label()
-        self.counter.set_tooltip_text(_('Number of typed characters'))
-        self.counter.get_style_context().add_class('dim-label')
-        self.counter.set_no_show_all(True)
-        actions_hbox.pack_start(self.counter, False, False, 0)
-        self.toggle_counter()
-
-    def toggle_counter(self):
-        if self.config['CHAR_COUNTER']:
-            self.counter.show()
-        else:
-            self.counter.hide()
-
 
 class LengthNotifierPluginConfigDialog(GajimPluginConfigDialog):
     def init(self):
@@ -164,7 +158,6 @@ class LengthNotifierPluginConfigDialog(GajimPluginConfigDialog):
             'message_length_spinbutton')
         self.message_length_spinbutton.get_adjustment().configure(140, 0, 500,
             1, 10, 0)
-        self.char_counter = self.xml.get_object('char_counter')
         self.notification_colorbutton = self.xml.get_object(
             'notification_colorbutton')
         self.jids_entry = self.xml.get_object('jids_entry')
@@ -175,7 +168,6 @@ class LengthNotifierPluginConfigDialog(GajimPluginConfigDialog):
         self.message_length_spinbutton.set_value(self.plugin.config[
             'MESSAGE_WARNING_LENGTH'])
         color = Gdk.Color.parse(self.plugin.config['WARNING_COLOR'])[1]
-        self.char_counter.set_active(self.plugin.config['CHAR_COUNTER'])
         self.notification_colorbutton.set_color(color)
         #self.jids_entry.set_text(self.plugin.config['JIDS'])
         self.jids_entry.set_text(','.join(self.plugin.config['JIDS']))
@@ -184,10 +176,6 @@ class LengthNotifierPluginConfigDialog(GajimPluginConfigDialog):
     def on_message_length_spinbutton_value_changed(self, spinbutton):
         self.plugin.config['MESSAGE_WARNING_LENGTH'] = spinbutton.get_value()
 
-    def _on_char_counter_toggled(self, checkbutton):
-        self.plugin.config['CHAR_COUNTER'] = checkbutton.get_active()
-        self.plugin.toggle_counter()
-
     @log_calls('LengthNotifierPluginConfigDialog')
     def on_notification_colorbutton_color_set(self, colorbutton):
         self.plugin.config['WARNING_COLOR'] = colorbutton.get_color().\
-- 
GitLab