URI: 
       tfix 'max' button in Kivy (fix #6169) - electrum - Electrum Bitcoin wallet
  HTML git clone https://git.parazyd.org/electrum
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
       ---
   DIR commit 915e132c335f8a4c70538088d7c6ce602de0f054
   DIR parent 9e1c4a59e56f0463281bb36fc7fe39482640fe26
  HTML Author: ThomasV <thomasv@electrum.org>
       Date:   Fri, 27 Nov 2020 12:48:32 +0100
       
       fix 'max' button in Kivy (fix #6169)
       
       Diffstat:
         M electrum/gui/kivy/main_window.py    |       7 ++++++-
         M electrum/gui/kivy/uix/dialogs/amou… |       5 ++++-
         M electrum/gui/kivy/uix/dialogs/ligh… |       3 ++-
         M electrum/gui/kivy/uix/screens.py    |      16 +++++++++++-----
       
       4 files changed, 23 insertions(+), 8 deletions(-)
       ---
   DIR diff --git a/electrum/gui/kivy/main_window.py b/electrum/gui/kivy/main_window.py
       t@@ -1173,7 +1173,12 @@ class ElectrumWindow(App, Logger):
                    amount, u = str(amount).split()
                    assert u == self.base_unit
                def cb(amount):
       -            screen.amount = amount
       +            if amount == '!':
       +                screen.is_max = True
       +                screen.amount = self.get_max_amount() + ' ' + self.base_unit
       +            else:
       +                screen.amount = amount
       +                screen.is_max = False
                popup = AmountDialog(show_max, amount, cb)
                popup.open()
        
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/amount_dialog.py b/electrum/gui/kivy/uix/dialogs/amount_dialog.py
       t@@ -49,6 +49,7 @@ Builder.load_string('''
                        amount: ''
                        fiat_amount: ''
                        is_fiat: False
       +                is_max: False
                        on_fiat_amount: if self.is_fiat: self.amount = app.fiat_to_btc(self.fiat_amount)
                        on_amount: if not self.is_fiat: self.fiat_amount = app.btc_to_fiat(self.amount)
                        size_hint: 1, None
       t@@ -92,6 +93,7 @@ Builder.load_string('''
                            on_release:
                                kb.is_fiat = False
                                kb.amount = app.get_max_amount()
       +                        kb.is_max = True
                        Button:
                            size_hint: 1, None
                            height: '48dp'
       t@@ -99,6 +101,7 @@ Builder.load_string('''
                            on_release:
                                kb.amount = ''
                                kb.fiat_amount = ''
       +                        kb.is_max = False
                    Widget:
                        size_hint: 1, 0.2
                    BoxLayout:
       t@@ -112,7 +115,7 @@ Builder.load_string('''
                            height: '48dp'
                            text: _('OK')
                            on_release:
       -                        root.callback(btc.text if kb.amount else '')
       +                        root.callback('!' if kb.is_max else btc.text if kb.amount else '')
                                popup.dismiss()
        ''')
        
   DIR diff --git a/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py b/electrum/gui/kivy/uix/dialogs/lightning_open_channel.py
       t@@ -23,6 +23,7 @@ Builder.load_string('''
            title: _('Open Lightning Channel')
            pubkey: ''
            amount: ''
       +    is_max: False
            ipport: ''
            BoxLayout
                spacing: '12dp'
       t@@ -154,7 +155,7 @@ class LightningOpenChannelDialog(Factory.Popup, Logger):
                conn_str = self.pubkey
                if self.ipport:
                    conn_str += '@' + self.ipport.strip()
       -        amount = self.app.get_amount(self.amount)
       +        amount = '!' if self.is_max else self.app.get_amount(self.amount)
                self.app.protected('Create a new channel?', self.do_open_channel, (conn_str, amount))
                self.dismiss()
        
   DIR diff --git a/electrum/gui/kivy/uix/screens.py b/electrum/gui/kivy/uix/screens.py
       t@@ -196,6 +196,7 @@ class SendScreen(CScreen, Logger):
                self.address = uri.get('address', '')
                self.message = uri.get('message', '')
                self.amount = self.app.format_amount_and_units(amount) if amount else ''
       +        self.is_max = False
                self.payment_request = None
                self.is_lightning = False
        
       t@@ -260,6 +261,7 @@ class SendScreen(CScreen, Logger):
                self.is_lightning = False
                self.is_bip70 = False
                self.parsed_URI = None
       +        self.is_max = False
        
            def set_request(self, pr: 'PaymentRequest'):
                self.address = pr.get_requestor()
       t@@ -298,11 +300,14 @@ class SendScreen(CScreen, Logger):
                if not self.amount:
                    self.app.show_error(_('Please enter an amount'))
                    return
       -        try:
       -            amount = self.app.get_amount(self.amount)
       -        except:
       -            self.app.show_error(_('Invalid amount') + ':\n' + self.amount)
       -            return
       +        if self.is_max:
       +            amount = '!'
       +        else:
       +            try:
       +                amount = self.app.get_amount(self.amount)
       +            except:
       +                self.app.show_error(_('Invalid amount') + ':\n' + self.amount)
       +                return
                message = self.message
                if self.is_lightning:
                    return LNInvoice.from_bech32(address)
       t@@ -439,6 +444,7 @@ class ReceiveScreen(CScreen):
            def clear(self):
                self.address = ''
                self.amount = ''
       +        self.is_max = False # not used for receiving (see app.amount_dialog)
                self.message = ''
                self.lnaddr = ''