Daniel Brötzmann pushed to branch master at gajim / gajim

Commits:

16 changed files:

Changes:

  • gajim/gtk/add_contact.py
    ... ... @@ -40,7 +40,6 @@
    40 40
     from .assistant import Assistant
    
    41 41
     from .assistant import Page
    
    42 42
     from .assistant import ErrorPage
    
    43
    -from .assistant import ProgressPage
    
    44 43
     from .groupchat_info import GroupChatInfoScrolled
    
    45 44
     from .builder import get_builder
    
    46 45
     from .util import open_window
    
    ... ... @@ -76,7 +75,7 @@ def __init__(self,
    76 75
                 'gateway': Gateway(),
    
    77 76
             })
    
    78 77
     
    
    79
    -        progress = cast(ProgressPage, self.add_default_page('progress'))
    
    78
    +        progress = self.add_default_page('progress')
    
    80 79
             progress.set_title(_('Gathering information…'))
    
    81 80
             progress.set_text(_('Trying to gather information on this address…'))
    
    82 81
     
    

  • gajim/gtk/assistant.py
    ... ... @@ -16,8 +16,10 @@
    16 16
     
    
    17 17
     from typing import Any
    
    18 18
     from typing import Callable
    
    19
    -from typing import Optional
    
    20 19
     from typing import cast
    
    20
    +from typing import Literal
    
    21
    +from typing import Optional
    
    22
    +from typing import overload
    
    21 23
     
    
    22 24
     from gi.repository import Gdk
    
    23 25
     from gi.repository import Gtk
    
    ... ... @@ -149,6 +151,15 @@ def add_pages(self, pages: dict[str, Page]):
    149 151
                 widget.connect('update-page-complete', self._update_page_complete)
    
    150 152
                 self._ui.stack.add_named(widget, name)
    
    151 153
     
    
    154
    +    @overload
    
    155
    +    def add_default_page(self, name: Literal['success']) -> SuccessPage: ...
    
    156
    +
    
    157
    +    @overload
    
    158
    +    def add_default_page(self, name: Literal['error']) -> ErrorPage: ...
    
    159
    +
    
    160
    +    @overload
    
    161
    +    def add_default_page(self, name: Literal['progress']) -> ProgressPage: ...
    
    162
    +
    
    152 163
         def add_default_page(self, name: str) -> Page:
    
    153 164
             if name == 'success':
    
    154 165
                 page = SuccessPage()
    

  • gajim/gtk/change_password.py
    ... ... @@ -12,8 +12,12 @@
    12 12
     # You should have received a copy of the GNU General Public License
    
    13 13
     # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    14 14
     
    
    15
    +from __future__ import annotations
    
    16
    +
    
    15 17
     from typing import Any
    
    16 18
     from typing import cast
    
    19
    +from typing import Literal
    
    20
    +from typing import overload
    
    17 21
     
    
    18 22
     import logging
    
    19 23
     
    
    ... ... @@ -32,7 +36,6 @@
    32 36
     from .assistant import Assistant
    
    33 37
     from .assistant import Page
    
    34 38
     from .assistant import ErrorPage
    
    35
    -from .assistant import ProgressPage
    
    36 39
     from .assistant import SuccessPage
    
    37 40
     from .dataform import DataFormWidget
    
    38 41
     from .util import ensure_not_destroyed
    
    ... ... @@ -58,7 +61,7 @@ def __init__(self, account: str) -> None:
    58 61
                             'error': Error(),
    
    59 62
                             'success': Success()})
    
    60 63
     
    
    61
    -        progress = cast(ProgressPage, self.add_default_page('progress'))
    
    64
    +        progress = self.add_default_page('progress')
    
    62 65
             progress.set_title(_('Changing Password...'))
    
    63 66
             progress.set_text(_('Trying to change password...'))
    
    64 67
     
    
    ... ... @@ -67,6 +70,21 @@ def __init__(self, account: str) -> None:
    67 70
     
    
    68 71
             self.show_all()
    
    69 72
     
    
    73
    +    @overload
    
    74
    +    def get_page(self, name: Literal['password']) -> EnterPassword: ...
    
    75
    +
    
    76
    +    @overload
    
    77
    +    def get_page(self, name: Literal['next_stage']) -> NextStage: ...
    
    78
    +
    
    79
    +    @overload
    
    80
    +    def get_page(self, name: Literal['error']) -> Error: ...
    
    81
    +
    
    82
    +    @overload
    
    83
    +    def get_page(self, name: Literal['success']) -> Success: ...
    
    84
    +
    
    85
    +    def get_page(self, name: str) -> Page:
    
    86
    +        return self._pages[name]
    
    87
    +
    
    70 88
         def _on_button_clicked(self,
    
    71 89
                                _assistant: Assistant,
    
    72 90
                                button_name: str
    
    ... ... @@ -84,13 +102,11 @@ def _on_button_clicked(self,
    84 102
     
    
    85 103
         def _on_apply(self, next_stage: bool = False) -> None:
    
    86 104
             if next_stage:
    
    87
    -            next_stage_page = cast(NextStage, self.get_page('next_stage'))
    
    88
    -            form = next_stage_page.get_submit_form()
    
    105
    +            form = self.get_page('next_stage').get_submit_form()
    
    89 106
                 self._client.get_module('Register').change_password_with_form(
    
    90 107
                     form, callback=self._on_change_password)
    
    91 108
             else:
    
    92
    -            password_page = cast(EnterPassword, self.get_page('password'))
    
    93
    -            password = password_page.get_password()
    
    109
    +            password = self.get_page('password').get_password()
    
    94 110
                 self._client.get_module('Register').change_password(
    
    95 111
                     password, callback=self._on_change_password)
    
    96 112
     
    
    ... ... @@ -99,20 +115,17 @@ def _on_change_password(self, task: Task) -> None:
    99 115
             try:
    
    100 116
                 task.finish()
    
    101 117
             except ChangePasswordStanzaError as error:
    
    102
    -            next_stage_page = cast(NextStage, self.get_page('next_stage'))
    
    103 118
                 form = cast(SimpleDataForm, error.get_form())
    
    104
    -            next_stage_page.set_form(form)
    
    119
    +            self.get_page('next_stage').set_form(form)
    
    105 120
                 self.show_page('next_stage', Gtk.StackTransitionType.SLIDE_LEFT)
    
    106 121
     
    
    107 122
             except StanzaError as error:
    
    108 123
                 error_text = to_user_string(error)
    
    109
    -            error_page = cast(Error, self.get_page('error'))
    
    110
    -            error_page.set_text(error_text)
    
    124
    +            self.get_page('error').set_text(error_text)
    
    111 125
                 self.show_page('error', Gtk.StackTransitionType.SLIDE_LEFT)
    
    112 126
     
    
    113 127
             else:
    
    114
    -            password_page = cast(EnterPassword, self.get_page('password'))
    
    115
    -            password = password_page.get_password()
    
    128
    +            password = self.get_page('password').get_password()
    
    116 129
                 passwords.save_password(self.account, password)
    
    117 130
                 self.show_page('success')
    
    118 131
     
    

  • gajim/gtk/component_search.py
    ... ... @@ -14,9 +14,13 @@
    14 14
     # You should have received a copy of the GNU General Public License
    
    15 15
     # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    16 16
     
    
    17
    +from __future__ import annotations
    
    18
    +
    
    17 19
     from typing import cast
    
    18 20
     from typing import Any
    
    21
    +from typing import Literal
    
    19 22
     from typing import Optional
    
    23
    +from typing import overload
    
    20 24
     from typing import Union
    
    21 25
     
    
    22 26
     import logging
    
    ... ... @@ -75,7 +79,7 @@ def __init__(self,
    75 79
                 'error': Error()
    
    76 80
             })
    
    77 81
     
    
    78
    -        progress = cast(ProgressPage, self.add_default_page('progress'))
    
    82
    +        progress = self.add_default_page('progress')
    
    79 83
             progress.set_title(_('Searching'))
    
    80 84
             progress.set_text(_('Searching…'))
    
    81 85
     
    
    ... ... @@ -91,13 +95,28 @@ def __init__(self,
    91 95
     
    
    92 96
             self.show_all()
    
    93 97
     
    
    98
    +    @overload
    
    99
    +    def get_page(self, name: Literal['prepare']) -> RequestForm: ...
    
    100
    +
    
    101
    +    @overload
    
    102
    +    def get_page(self, name: Literal['form']) -> SearchForm: ...
    
    103
    +
    
    104
    +    @overload
    
    105
    +    def get_page(self, name: Literal['result']) -> Result: ...
    
    106
    +
    
    107
    +    @overload
    
    108
    +    def get_page(self, name: Literal['error']) -> Error: ...
    
    109
    +
    
    110
    +    def get_page(self, name: str) -> Page:
    
    111
    +        return self._pages[name]
    
    112
    +
    
    94 113
         def _on_button_clicked(self,
    
    95 114
                                _assistant: Assistant,
    
    96 115
                                button_name: str
    
    97 116
                                ) -> None:
    
    98 117
             if button_name == 'search':
    
    99 118
                 self.show_page('progress', Gtk.StackTransitionType.SLIDE_LEFT)
    
    100
    -            form = cast(SearchForm, self.get_page('form')).get_submit_form()
    
    119
    +            form = self.get_page('form').get_submit_form()
    
    101 120
                 self._client.get_module('Search').send_search_form(
    
    102 121
                     self._jid, form, True)
    
    103 122
                 return
    
    ... ... @@ -112,13 +131,12 @@ def _on_button_clicked(self,
    112 131
         @ensure_not_destroyed
    
    113 132
         def _search_form_received(self, event: SearchFormReceivedEvent) -> None:
    
    114 133
             if not event.is_dataform:
    
    115
    -            error_page = cast(Error, self.get_page('error'))
    
    116
    -            error_page.set_text(_('Error while retrieving search form.'))
    
    134
    +            self.get_page('error').set_text(
    
    135
    +                _('Error while retrieving search form.'))
    
    117 136
                 self.show_page('error')
    
    118 137
                 return
    
    119 138
     
    
    120
    -        form_page = cast(SearchForm, self.get_page('form'))
    
    121
    -        form_page.process_search_form(event.data)
    
    139
    +        self.get_page('form').process_search_form(event.data)
    
    122 140
             self.show_page('form')
    
    123 141
     
    
    124 142
         @ensure_not_destroyed
    
    ... ... @@ -131,8 +149,7 @@ def _search_result_received(self,
    131 149
                 self.show_page('error')
    
    132 150
                 return
    
    133 151
     
    
    134
    -        result_page = cast(Result, self.get_page('result'))
    
    135
    -        result_page.process_result(event.data)
    
    152
    +        self.get_page('result').process_result(event.data)
    
    136 153
             self.show_page('result')
    
    137 154
     
    
    138 155
         def _on_destroy(self, *args: Any) -> None:
    

  • gajim/gtk/history_export.py
    ... ... @@ -15,7 +15,9 @@
    15 15
     from __future__ import annotations
    
    16 16
     
    
    17 17
     from typing import cast
    
    18
    +from typing import Literal
    
    18 19
     from typing import Optional
    
    20
    +from typing import overload
    
    19 21
     
    
    20 22
     import logging
    
    21 23
     import time
    
    ... ... @@ -33,10 +35,8 @@
    33 35
     from gajim.common.storage.archive import MessageExportRow
    
    34 36
     
    
    35 37
     from .assistant import Assistant
    
    36
    -from .assistant import Page
    
    37 38
     from .assistant import ErrorPage
    
    38
    -from .assistant import SuccessPage
    
    39
    -from .assistant import ProgressPage
    
    39
    +from .assistant import Page
    
    40 40
     from .builder import get_builder
    
    41 41
     
    
    42 42
     log = logging.getLogger('gajim.gui.history_export')
    
    ... ... @@ -58,16 +58,16 @@ def __init__(self, account: Optional[str] = None) -> None:
    58 58
     
    
    59 59
             self.add_pages({'start': SelectAccountDir(account)})
    
    60 60
     
    
    61
    -        progress_page = cast(ProgressPage, self.add_default_page('progress'))
    
    61
    +        progress_page = self.add_default_page('progress')
    
    62 62
             progress_page.set_title(_('Exporting History...'))
    
    63 63
             progress_page.set_text(_('Exporting your messages...'))
    
    64 64
     
    
    65
    -        success_page = cast(SuccessPage, self.add_default_page('success'))
    
    65
    +        success_page = self.add_default_page('success')
    
    66 66
             success_page.set_title(_('Export Finished'))
    
    67 67
             success_page.set_text(
    
    68 68
                 _('Your messages have been exported successfully'))
    
    69 69
     
    
    70
    -        error_page = cast(ErrorPage, self.add_default_page('error'))
    
    70
    +        error_page = self.add_default_page('error')
    
    71 71
             error_page.set_title(_('Error while Exporting'))
    
    72 72
             error_page.set_text(
    
    73 73
                 _('An error occurred while exporting your messages'))
    
    ... ... @@ -75,6 +75,15 @@ def __init__(self, account: Optional[str] = None) -> None:
    75 75
             self.connect('button-clicked', self._on_button_clicked)
    
    76 76
             self.show_all()
    
    77 77
     
    
    78
    +    @overload
    
    79
    +    def get_page(self, name: Literal['error']) -> ErrorPage: ...
    
    80
    +
    
    81
    +    @overload
    
    82
    +    def get_page(self, name: Literal['start']) -> SelectAccountDir: ...
    
    83
    +
    
    84
    +    def get_page(self, name: str) -> Page:
    
    85
    +        return self._pages[name]
    
    86
    +
    
    78 87
         @staticmethod
    
    79 88
         def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
    
    80 89
             if page_name == 'start':
    
    ... ... @@ -105,7 +114,7 @@ def _on_button_clicked(self,
    105 114
                 self.destroy()
    
    106 115
     
    
    107 116
         def _on_export(self) -> None:
    
    108
    -        start_page = cast(SelectAccountDir, self.get_page('start'))
    
    117
    +        start_page = self.get_page('start')
    
    109 118
             account, directory = start_page.get_account_and_directory()
    
    110 119
     
    
    111 120
             current_time = datetime.now()
    
    ... ... @@ -123,8 +132,7 @@ def _on_export(self) -> None:
    123 132
                 try:
    
    124 133
                     file_path.mkdir(parents=True, exist_ok=True)
    
    125 134
                 except OSError as err:
    
    126
    -                error_page = cast(ErrorPage, self.get_page('error'))
    
    127
    -                error_page.set_text(
    
    135
    +                self.get_page('error').set_text(
    
    128 136
                         _('An error occurred while trying to create a '
    
    129 137
                           'file at %(path)s: %(error)s') % {
    
    130 138
                               'path': file_path,
    

  • gajim/gtk/history_sync.py
    ... ... @@ -15,7 +15,9 @@
    15 15
     from __future__ import annotations
    
    16 16
     
    
    17 17
     from typing import cast
    
    18
    +from typing import Literal
    
    18 19
     from typing import Optional
    
    20
    +from typing import overload
    
    19 21
     
    
    20 22
     import logging
    
    21 23
     from datetime import datetime
    
    ... ... @@ -85,7 +87,7 @@ def __init__(self, account: str) -> None:
    85 87
             })
    
    86 88
     
    
    87 89
             self.add_default_page('success')
    
    88
    -        success_page = cast(SuccessPage, self.get_page('success'))
    
    90
    +        success_page = self.get_page('success')
    
    89 91
             success_page.set_title(_('Synchronize Chat History'))
    
    90 92
             success_page.set_heading(_('Finished'))
    
    91 93
     
    
    ... ... @@ -108,6 +110,18 @@ def __init__(self, account: str) -> None:
    108 110
     
    
    109 111
             self.show_all()
    
    110 112
     
    
    113
    +    @overload
    
    114
    +    def get_page(self, name: Literal['select']) -> SelectTime: ...
    
    115
    +
    
    116
    +    @overload
    
    117
    +    def get_page(self, name: Literal['progress']) -> Progress: ...
    
    118
    +
    
    119
    +    @overload
    
    120
    +    def get_page(self, name: Literal['success']) -> SuccessPage: ...
    
    121
    +
    
    122
    +    def get_page(self, name: str) -> Page:
    
    123
    +        return self._pages[name]
    
    124
    +
    
    111 125
         @staticmethod
    
    112 126
         def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
    
    113 127
             if page_name == 'select':
    
    ... ... @@ -134,7 +148,7 @@ def _on_button_clicked(self,
    134 148
                 self.destroy()
    
    135 149
     
    
    136 150
         def _prepare_query(self) -> None:
    
    137
    -        select_time_page = cast(SelectTime, self.get_page('select'))
    
    151
    +        select_time_page = self.get_page('select')
    
    138 152
             self._timedelta = select_time_page.get_timedelta()
    
    139 153
             if self._timedelta is not None:
    
    140 154
                 self._start = self._now - self._timedelta
    
    ... ... @@ -159,8 +173,7 @@ def _received_count(self, task: Task) -> None:
    159 173
                 return
    
    160 174
     
    
    161 175
             if result.rsm.count is not None:
    
    162
    -            progress_page = cast(Progress, self.get_page('progress'))
    
    163
    -            progress_page.set_count(int(result.rsm.count))
    
    176
    +            self.get_page('progress').set_count(int(result.rsm.count))
    
    164 177
             mam_module = self._client.get_module('MAM')
    
    165 178
             self._query_id = mam_module.request_archive_interval(
    
    166 179
                 self._start, self._end)
    
    ... ... @@ -171,10 +184,10 @@ def _received_finished(self, event: ArchivingIntervalFinished) -> None:
    171 184
                 return
    
    172 185
             self._query_id = None
    
    173 186
             log.info('Query finished')
    
    174
    -        progress_page = cast(Progress, self.get_page('progress'))
    
    187
    +        progress_page = self.get_page('progress')
    
    175 188
             GLib.idle_add(progress_page.set_finished)
    
    176 189
             received_count = progress_page.get_received_count()
    
    177
    -        success_page = cast(SuccessPage, self.get_page('success'))
    
    190
    +        success_page = self.get_page('success')
    
    178 191
             success_page.set_text(_('Finished synchronising chat history:\n'
    
    179 192
                                     '%s messages downloaded') % received_count)
    
    180 193
             self.show_page('success')
    
    ... ... @@ -185,7 +198,7 @@ def _mam_message_received(self, event: RawMamMessageReceived) -> None:
    185 198
                 return
    
    186 199
     
    
    187 200
             log.debug('Received message')
    
    188
    -        progress_page = cast(Progress, self.get_page('progress'))
    
    201
    +        progress_page = self.get_page('progress')
    
    189 202
             GLib.idle_add(progress_page.set_fraction)
    
    190 203
     
    
    191 204
     
    

  • gajim/gtk/remove_account.py
    ... ... @@ -12,8 +12,11 @@
    12 12
     # You should have received a copy of the GNU General Public License
    
    13 13
     # along with Gajim. If not, see <http://www.gnu.org/licenses/>.
    
    14 14
     
    
    15
    +from __future__ import annotations
    
    16
    +
    
    15 17
     from typing import Any
    
    16
    -from typing import cast
    
    18
    +from typing import Literal
    
    19
    +from typing import overload
    
    17 20
     
    
    18 21
     import logging
    
    19 22
     
    
    ... ... @@ -32,7 +35,6 @@
    32 35
     
    
    33 36
     from .assistant import Assistant
    
    34 37
     from .assistant import Page
    
    35
    -from .assistant import ProgressPage
    
    36 38
     from .assistant import ErrorPage
    
    37 39
     from .assistant import SuccessPage
    
    38 40
     
    
    ... ... @@ -61,7 +63,7 @@ def __init__(self, account: str) -> None:
    61 63
                             'error': Error(),
    
    62 64
                             'success': Success()})
    
    63 65
     
    
    64
    -        progress = cast(ProgressPage, self.add_default_page('progress'))
    
    66
    +        progress = self.add_default_page('progress')
    
    65 67
             progress.set_title(_('Removing Account...'))
    
    66 68
             progress.set_text(_('Trying to remove account...'))
    
    67 69
     
    
    ... ... @@ -78,6 +80,18 @@ def __init__(self, account: str) -> None:
    78 80
     
    
    79 81
             self.show_all()
    
    80 82
     
    
    83
    +    @overload
    
    84
    +    def get_page(self, name: Literal['remove_choice']) -> RemoveChoice: ...
    
    85
    +
    
    86
    +    @overload
    
    87
    +    def get_page(self, name: Literal['error']) -> Error: ...
    
    88
    +
    
    89
    +    @overload
    
    90
    +    def get_page(self, name: Literal['success']) -> Success: ...
    
    91
    +
    
    92
    +    def get_page(self, name: str) -> Page:
    
    93
    +        return self._pages[name]
    
    94
    +
    
    81 95
         @event_filter(['account'])
    
    82 96
         def _on_account_connected(self, _event: AccountConnected) -> None:
    
    83 97
             self._client = app.get_client(self.account)
    
    ... ... @@ -93,8 +107,7 @@ def _on_account_disconnected(self, _event: AccountDisconnected) -> None:
    93 107
     
    
    94 108
         def _set_remove_from_server_checkbox(self) -> None:
    
    95 109
             enabled = self._client is not None and self._client.state.is_available
    
    96
    -        remove_choice_page = cast(RemoveChoice, self.get_page('remove_choice'))
    
    97
    -        remove_choice_page.set_remove_from_server(enabled)
    
    110
    +        self.get_page('remove_choice').set_remove_from_server(enabled)
    
    98 111
     
    
    99 112
         def _on_button_clicked(self,
    
    100 113
                                _assistant: Assistant,
    
    ... ... @@ -117,7 +130,7 @@ def _on_button_clicked(self,
    117 130
                 self.destroy()
    
    118 131
     
    
    119 132
         def _on_remove(self, *args: Any) -> None:
    
    120
    -        remove_choice_page = cast(RemoveChoice, self.get_page('remove_choice'))
    
    133
    +        remove_choice_page = self.get_page('remove_choice')
    
    121 134
             if remove_choice_page.remove_from_server:
    
    122 135
                 assert self._client is not None
    
    123 136
                 self._client.set_remove_account(True)
    
    ... ... @@ -141,8 +154,7 @@ def _on_remove_response(self, task: Task) -> None:
    141 154
                 self._client.set_remove_account(False)
    
    142 155
     
    
    143 156
                 error_text = to_user_string(error)
    
    144
    -            error_page = cast(Error, self.get_page('error'))
    
    145
    -            error_page.set_text(error_text)
    
    157
    +            self.get_page('error').set_text(error_text)
    
    146 158
                 self.show_page('error')
    
    147 159
                 return
    
    148 160
     
    

  • test/gtk/__init__.py
    1
    +import gi
    
    2
    +
    
    3
    +
    
    4
    +def require_versions():
    
    5
    +    gi.require_versions({'Gdk': '3.0',
    
    6
    +                         'GLib': '2.0',
    
    7
    +                         'Gio': '2.0',
    
    8
    +                         'Gtk': '3.0',
    
    9
    +                         'GtkSource': '4',
    
    10
    +                         'GObject': '2.0',
    
    11
    +                         'Pango': '1.0'})
    
    12
    +
    
    13
    +
    
    14
    +require_versions()

  • test/gtk/assistant.py
    1
    -import gi
    
    2
    -gi.require_version('Gtk', '3.0')
    
    3 1
     from gi.repository import Gtk
    
    4 2
     
    
    5 3
     from gajim.common.const import CSSPriority
    
    ... ... @@ -10,7 +8,8 @@
    10 8
     from gajim.gui.assistant import Assistant
    
    11 9
     from gajim.gui.assistant import Page
    
    12 10
     
    
    13
    -from test.gtk import util
    
    11
    +from . import util
    
    12
    +
    
    14 13
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    15 14
     
    
    16 15
     
    
    ... ... @@ -46,7 +45,7 @@ def __init__(self):
    46 45
             self.show_all()
    
    47 46
     
    
    48 47
         @staticmethod
    
    49
    -    def _visible_func(_assistant, page_name):
    
    48
    +    def _visible_func(_assistant: Assistant, page_name: str) -> list[str]:
    
    50 49
             if page_name == 'start':
    
    51 50
                 return ['forward']
    
    52 51
     
    
    ... ... @@ -60,7 +59,11 @@ def _visible_func(_assistant, page_name):
    60 59
                 return ['back', 'close']
    
    61 60
             raise ValueError('page %s unknown' % page_name)
    
    62 61
     
    
    63
    -    def _on_button_clicked(self, _assistant, button_name):
    
    62
    +    def _on_button_clicked(self,
    
    63
    +                           _assistant: Assistant,
    
    64
    +                           button_name: str
    
    65
    +                           ) -> None:
    
    66
    +
    
    64 67
             page = self.get_current_page()
    
    65 68
             if button_name == 'forward':
    
    66 69
                 if page == 'start':
    
    ... ... @@ -83,7 +86,7 @@ def _on_button_clicked(self, _assistant, button_name):
    83 86
             if button_name == 'close':
    
    84 87
                 self.destroy()
    
    85 88
     
    
    86
    -    def _on_page_changed(self, _assistant, page_name):
    
    89
    +    def _on_page_changed(self, _assistant: Assistant, page_name: str) -> None:
    
    87 90
             if page_name == 'start':
    
    88 91
                 self.set_default_button('forward')
    
    89 92
     
    
    ... ... @@ -114,7 +117,8 @@ def __init__(self):
    114 117
             label1.set_justify(Gtk.Justification.CENTER)
    
    115 118
             label1.set_margin_bottom(24)
    
    116 119
     
    
    117
    -        entry = Gtk.Entry(activates_default=True)
    
    120
    +        entry = Gtk.Entry()
    
    121
    +        entry.set_activates_default(True)
    
    118 122
             entry.connect('changed', self._on_changed)
    
    119 123
     
    
    120 124
             self._server = Gtk.CheckButton.new_with_mnemonic('A fancy checkbox')
    
    ... ... @@ -126,7 +130,7 @@ def __init__(self):
    126 130
             self.pack_start(self._server, False, True, 0)
    
    127 131
             self.show_all()
    
    128 132
     
    
    129
    -    def _on_changed(self, entry):
    
    133
    +    def _on_changed(self, entry: Gtk.Entry) -> None:
    
    130 134
             self.complete = bool(entry.get_text())
    
    131 135
             self.update_page_complete()
    
    132 136
     
    

  • test/gtk/certificate_dialog.py
    1
    -import gi
    
    2
    -gi.require_version('Gio', '2.0')
    
    3
    -gi.require_version('Gtk', '3.0')
    
    4 1
     from gi.repository import Gio
    
    5 2
     from gi.repository import Gtk
    
    6 3
     
    
    4
    +from gajim.common.const import CSSPriority
    
    5
    +
    
    7 6
     from gajim import gui
    
    8 7
     gui.init('gtk')
    
    9 8
     
    
    10
    -from test.gtk import util
    
    11
    -from gajim.common.const import CSSPriority
    
    12 9
     from gajim.gui.certificate_dialog import CertificateDialog
    
    13 10
     
    
    11
    +from . import util
    
    12
    +
    
    14 13
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    15 14
     
    
    16 15
     cert = '''
    

  • test/gtk/change_password.py
    ... ... @@ -2,23 +2,21 @@
    2 2
     
    
    3 3
     from functools import partial
    
    4 4
     
    
    5
    -import gi
    
    6
    -gi.require_version('Gtk', '3.0')
    
    7
    -from gi.repository import Gtk
    
    8
    -
    
    9 5
     from nbxmpp.modules.dataforms import create_field
    
    10 6
     from nbxmpp.modules.dataforms import SimpleDataForm
    
    11 7
     
    
    8
    +from gi.repository import Gtk
    
    9
    +
    
    10
    +from gajim.common import app
    
    12 11
     from gajim.common.const import CSSPriority
    
    13 12
     
    
    14 13
     from gajim import gui
    
    15 14
     gui.init('gtk')
    
    16 15
     
    
    17
    -from gajim.common import app
    
    18
    -
    
    19 16
     from gajim.gui.change_password import ChangePassword
    
    20 17
     
    
    21
    -from test.gtk import util
    
    18
    +from . import util
    
    19
    +
    
    22 20
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    23 21
     
    
    24 22
     app.get_client = MagicMock()
    
    ... ... @@ -32,14 +30,16 @@
    32 30
     
    
    33 31
     form = SimpleDataForm(type_='form', fields=fields)
    
    34 32
     
    
    35
    -def _apply(self, next_stage=False):
    
    33
    +
    
    34
    +def _apply(self: ChangePassword, next_stage: bool = False) -> None:
    
    36 35
         if next_stage:
    
    37 36
             self.get_page('next_stage').get_submit_form()
    
    38 37
         else:
    
    39 38
             self.get_page('next_stage').set_form(form)
    
    40 39
             self.show_page('next_stage', Gtk.StackTransitionType.SLIDE_LEFT)
    
    41 40
     
    
    42
    -win = ChangePassword(None)
    
    41
    +
    
    42
    +win = ChangePassword('')
    
    43 43
     win._on_apply = partial(_apply, win)
    
    44 44
     
    
    45 45
     win.connect('destroy', Gtk.main_quit)
    

  • test/gtk/dataform.py
    ... ... @@ -2,21 +2,21 @@
    2 2
     
    
    3 3
     from base64 import b64decode
    
    4 4
     
    
    5
    -import gi
    
    6
    -gi.require_version('Gtk', '3.0')
    
    5
    +from nbxmpp.modules.dataforms import extend_form
    
    6
    +from nbxmpp.simplexml import Node
    
    7
    +
    
    7 8
     from gi.repository import Gtk
    
    8 9
     
    
    9
    -import nbxmpp
    
    10
    -from nbxmpp.modules.dataforms import extend_form
    
    10
    +from gajim.common import app
    
    11
    +from gajim.common.const import CSSPriority
    
    11 12
     
    
    12 13
     from gajim import gui
    
    13 14
     gui.init('gtk')
    
    14 15
     
    
    15 16
     from gajim.gui.dataform import DataFormWidget
    
    16
    -from gajim.common.const import CSSPriority
    
    17
    -from gajim.common import app
    
    18 17
     
    
    19
    -from test.gtk import util
    
    18
    +from . import util
    
    19
    +
    
    20 20
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    21 21
     
    
    22 22
     image = '''iVBORw0KGgoAAAANSUhEUgAAAIwAAAA8CAAAAACRYQ2XAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/4ePzL8AAAAHdElNRQfiCwQXMiypK
    
    ... ... @@ -130,10 +130,11 @@ def __init__(self):
    130 130
                 'form-width': 435,
    
    131 131
             }
    
    132 132
             self._widget = DataFormWidget(
    
    133
    -            extend_form(node=nbxmpp.Node(node=FORM)), options)
    
    133
    +            extend_form(node=Node(node=FORM)), options)
    
    134 134
             self.add(self._widget)
    
    135 135
             self.show()
    
    136 136
     
    
    137
    +
    
    137 138
     win = DataFormWindow()
    
    138 139
     win.connect('destroy', Gtk.main_quit)
    
    139 140
     win.show_all()
    

  • test/gtk/fake_dataform.py
    1
    -import gi
    
    2
    -gi.require_version('Gtk', '3.0')
    
    3 1
     from gi.repository import Gtk
    
    4 2
     
    
    5 3
     from gajim import gui
    
    ... ... @@ -9,7 +7,8 @@
    9 7
     
    
    10 8
     from gajim.gui.dataform import FakeDataFormWidget
    
    11 9
     
    
    12
    -from test.gtk import util
    
    10
    +from . import util
    
    11
    +
    
    13 12
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    14 13
     
    
    15 14
     
    
    ... ... @@ -40,6 +39,7 @@
    40 39
         'redirect-url': 'https://jabber.at/account/register/'
    
    41 40
     }
    
    42 41
     
    
    42
    +
    
    43 43
     class DataFormWindow(Gtk.Window):
    
    44 44
         def __init__(self):
    
    45 45
             Gtk.Window.__init__(self, title='Data Form Test')
    
    ... ... @@ -48,6 +48,7 @@ def __init__(self):
    48 48
             self.add(self._widget)
    
    49 49
             self.show()
    
    50 50
     
    
    51
    +
    
    51 52
     win = DataFormWindow()
    
    52 53
     win.connect('destroy', Gtk.main_quit)
    
    53 54
     win.show_all()
    

  • test/gtk/groupchat_info.py
    1 1
     from unittest.mock import MagicMock
    
    2 2
     
    
    3
    -import gi
    
    4
    -gi.require_version('Gtk', '3.0')
    
    5
    -from gi.repository import Gtk
    
    6
    -
    
    7 3
     from nbxmpp.protocol import Iq
    
    8 4
     from nbxmpp.modules.discovery import parse_disco_info
    
    9 5
     from nbxmpp.structs import MucSubject
    
    10 6
     
    
    7
    +from gi.repository import Gtk
    
    8
    +
    
    11 9
     from gajim.common import app
    
    12 10
     from gajim.common.const import CSSPriority
    
    13 11
     
    
    14 12
     from gajim import gui
    
    15 13
     gui.init('gtk')
    
    16 14
     
    
    17
    -from test.gtk import util
    
    18 15
     from gajim.gui.groupchat_info import GroupChatInfoScrolled
    
    19 16
     
    
    17
    +from . import util
    
    18
    +
    
    20 19
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    21 20
     
    
    22 21
     stanza = Iq(node='''
    
    ... ... @@ -97,6 +96,7 @@
    97 96
     app.css_config = MagicMock()
    
    98 97
     app.css_config.get_value = MagicMock(return_value='rgb(100, 100, 255)')
    
    99 98
     
    
    99
    +
    
    100 100
     class GroupchatInfo(Gtk.ApplicationWindow):
    
    101 101
         def __init__(self):
    
    102 102
             Gtk.ApplicationWindow.__init__(self)
    

  • test/gtk/ssl_error_dialog.py
    1 1
     from unittest.mock import MagicMock
    
    2 2
     
    
    3
    -import gi
    
    4
    -gi.require_version('Gio', '2.0')
    
    5
    -gi.require_version('Gtk', '3.0')
    
    6 3
     from gi.repository import Gio
    
    7 4
     from gi.repository import Gtk
    
    8 5
     
    
    9 6
     from gajim import gui
    
    10 7
     gui.init('gtk')
    
    11
    -
    
    12
    -from test.gtk import util
    
    13
    -
    
    14 8
     from gajim.common import app
    
    15 9
     from gajim.common.const import CSSPriority
    
    10
    +
    
    16 11
     from gajim.gui.ssl_error_dialog import SSLErrorDialog
    
    17 12
     
    
    13
    +from . import util
    
    14
    +
    
    18 15
     util.load_style('gajim.css', CSSPriority.APPLICATION)
    
    19 16
     
    
    20 17
     cert = '''
    

  • test/no_gui/__init__.py
    1 1
     import gi
    
    2 2
     
    
    3
    +
    
    3 4
     def require_versions():
    
    4 5
         gi.require_versions({'Gdk': '3.0',
    
    5 6
                              'GLib': '2.0',
    
    ... ... @@ -9,4 +10,5 @@ def require_versions():
    9 10
                              'GObject': '2.0',
    
    10 11
                              'Pango': '1.0'})
    
    11 12
     
    
    13
    +
    
    12 14
     require_versions()