Philipp Hörist pushed to branch master at gajim / gajim

Commits:

3 changed files:

Changes:

  • gajim/data/gui/groupchat_control.ui
    ... ... @@ -103,319 +103,310 @@
    103 103
                     <signal name="button-release-event" handler="_on_hpaned_release_button" swapped="no"/>
    
    104 104
                     <signal name="notify::position" handler="_on_hpaned_handle_change" swapped="no"/>
    
    105 105
                     <child>
    
    106
    -                  <object class="GtkOverlay" id="overlay">
    
    106
    +                  <object class="GtkBox" id="gc_textviews_vbox">
    
    107
    +                    <property name="width_request">0</property>
    
    107 108
                         <property name="visible">True</property>
    
    108 109
                         <property name="can_focus">False</property>
    
    110
    +                    <property name="margin_right">4</property>
    
    111
    +                    <property name="orientation">vertical</property>
    
    109 112
                         <child>
    
    110
    -                      <object class="GtkBox" id="gc_textviews_vbox">
    
    111
    -                        <property name="width_request">0</property>
    
    113
    +                      <object class="GtkEventBox" id="banner_eventbox">
    
    114
    +                        <property name="name">GroupChatControl-BannerEventBox</property>
    
    112 115
                             <property name="visible">True</property>
    
    113 116
                             <property name="can_focus">False</property>
    
    114
    -                        <property name="margin_right">4</property>
    
    115
    -                        <property name="orientation">vertical</property>
    
    116 117
                             <child>
    
    117
    -                          <object class="GtkEventBox" id="banner_eventbox">
    
    118
    -                            <property name="name">GroupChatControl-BannerEventBox</property>
    
    118
    +                          <object class="GtkBox" id="hbox3024">
    
    119 119
                                 <property name="visible">True</property>
    
    120 120
                                 <property name="can_focus">False</property>
    
    121 121
                                 <child>
    
    122
    -                              <object class="GtkBox" id="hbox3024">
    
    122
    +                              <object class="GtkImage" id="gc_banner_status_image">
    
    123 123
                                     <property name="visible">True</property>
    
    124 124
                                     <property name="can_focus">False</property>
    
    125
    -                                <child>
    
    126
    -                                  <object class="GtkImage" id="gc_banner_status_image">
    
    127
    -                                    <property name="visible">True</property>
    
    128
    -                                    <property name="can_focus">False</property>
    
    129
    -                                    <property name="stock">gtk-missing-image</property>
    
    130
    -                                  </object>
    
    131
    -                                  <packing>
    
    132
    -                                    <property name="expand">False</property>
    
    133
    -                                    <property name="fill">False</property>
    
    134
    -                                    <property name="padding">5</property>
    
    135
    -                                    <property name="position">0</property>
    
    136
    -                                  </packing>
    
    137
    -                                </child>
    
    138
    -                                <child>
    
    139
    -                                  <object class="GtkLabel" id="banner_name_label">
    
    140
    -                                    <property name="name">GroupChatControl-BannerNameLabel</property>
    
    141
    -                                    <property name="visible">True</property>
    
    142
    -                                    <property name="can_focus">False</property>
    
    143
    -                                    <property name="label">&lt;span weight="heavy" size="large"&gt;room jid&lt;/span&gt;</property>
    
    144
    -                                    <property name="use_markup">True</property>
    
    145
    -                                    <property name="selectable">True</property>
    
    146
    -                                    <property name="xalign">0</property>
    
    147
    -                                  </object>
    
    148
    -                                  <packing>
    
    149
    -                                    <property name="expand">False</property>
    
    150
    -                                    <property name="fill">True</property>
    
    151
    -                                    <property name="position">1</property>
    
    152
    -                                  </packing>
    
    153
    -                                </child>
    
    154
    -                                <child>
    
    155
    -                                  <object class="GtkActionBar" id="banner_actionbar">
    
    156
    -                                    <property name="visible">True</property>
    
    157
    -                                    <property name="can_focus">False</property>
    
    158
    -                                    <style>
    
    159
    -                                      <class name="actionbar-no-border"/>
    
    160
    -                                    </style>
    
    161
    -                                  </object>
    
    162
    -                                  <packing>
    
    163
    -                                    <property name="expand">True</property>
    
    164
    -                                    <property name="fill">True</property>
    
    165
    -                                    <property name="pack_type">end</property>
    
    166
    -                                    <property name="position">2</property>
    
    167
    -                                  </packing>
    
    168
    -                                </child>
    
    125
    +                                <property name="stock">gtk-missing-image</property>
    
    126
    +                              </object>
    
    127
    +                              <packing>
    
    128
    +                                <property name="expand">False</property>
    
    129
    +                                <property name="fill">False</property>
    
    130
    +                                <property name="padding">5</property>
    
    131
    +                                <property name="position">0</property>
    
    132
    +                              </packing>
    
    133
    +                            </child>
    
    134
    +                            <child>
    
    135
    +                              <object class="GtkLabel" id="banner_name_label">
    
    136
    +                                <property name="name">GroupChatControl-BannerNameLabel</property>
    
    137
    +                                <property name="visible">True</property>
    
    138
    +                                <property name="can_focus">False</property>
    
    139
    +                                <property name="label">&lt;span weight="heavy" size="large"&gt;room jid&lt;/span&gt;</property>
    
    140
    +                                <property name="use_markup">True</property>
    
    141
    +                                <property name="selectable">True</property>
    
    142
    +                                <property name="xalign">0</property>
    
    143
    +                              </object>
    
    144
    +                              <packing>
    
    145
    +                                <property name="expand">False</property>
    
    146
    +                                <property name="fill">True</property>
    
    147
    +                                <property name="position">1</property>
    
    148
    +                              </packing>
    
    149
    +                            </child>
    
    150
    +                            <child>
    
    151
    +                              <object class="GtkActionBar" id="banner_actionbar">
    
    152
    +                                <property name="visible">True</property>
    
    153
    +                                <property name="can_focus">False</property>
    
    154
    +                                <style>
    
    155
    +                                  <class name="actionbar-no-border"/>
    
    156
    +                                </style>
    
    157
    +                              </object>
    
    158
    +                              <packing>
    
    159
    +                                <property name="expand">True</property>
    
    160
    +                                <property name="fill">True</property>
    
    161
    +                                <property name="pack_type">end</property>
    
    162
    +                                <property name="position">2</property>
    
    163
    +                              </packing>
    
    164
    +                            </child>
    
    165
    +                          </object>
    
    166
    +                        </child>
    
    167
    +                        <style>
    
    168
    +                          <class name="gajim-banner"/>
    
    169
    +                        </style>
    
    170
    +                      </object>
    
    171
    +                      <packing>
    
    172
    +                        <property name="expand">False</property>
    
    173
    +                        <property name="fill">True</property>
    
    174
    +                        <property name="position">0</property>
    
    175
    +                      </packing>
    
    176
    +                    </child>
    
    177
    +                    <child>
    
    178
    +                      <object class="GtkSeparator">
    
    179
    +                        <property name="visible">True</property>
    
    180
    +                        <property name="can_focus">False</property>
    
    181
    +                        <style>
    
    182
    +                          <class name="chatcontrol-separator-top"/>
    
    183
    +                        </style>
    
    184
    +                      </object>
    
    185
    +                      <packing>
    
    186
    +                        <property name="expand">False</property>
    
    187
    +                        <property name="fill">True</property>
    
    188
    +                        <property name="position">1</property>
    
    189
    +                      </packing>
    
    190
    +                    </child>
    
    191
    +                    <child>
    
    192
    +                      <object class="GtkScrolledWindow" id="conversation_scrolledwindow">
    
    193
    +                        <property name="width_request">200</property>
    
    194
    +                        <property name="height_request">60</property>
    
    195
    +                        <property name="visible">True</property>
    
    196
    +                        <property name="can_focus">True</property>
    
    197
    +                        <property name="shadow_type">in</property>
    
    198
    +                        <property name="overlay_scrolling">False</property>
    
    199
    +                        <signal name="edge-reached" handler="_on_edge_reached" swapped="no"/>
    
    200
    +                        <signal name="scroll-event" handler="_on_scroll" swapped="no"/>
    
    201
    +                        <child>
    
    202
    +                          <placeholder/>
    
    203
    +                        </child>
    
    204
    +                        <style>
    
    205
    +                          <class name="scrolled-no-border"/>
    
    206
    +                          <class name="no-scroll-indicator"/>
    
    207
    +                          <class name="scrollbar-style"/>
    
    208
    +                        </style>
    
    209
    +                      </object>
    
    210
    +                      <packing>
    
    211
    +                        <property name="expand">True</property>
    
    212
    +                        <property name="fill">True</property>
    
    213
    +                        <property name="position">2</property>
    
    214
    +                      </packing>
    
    215
    +                    </child>
    
    216
    +                    <child>
    
    217
    +                      <object class="GtkSeparator">
    
    218
    +                        <property name="visible">True</property>
    
    219
    +                        <property name="can_focus">False</property>
    
    220
    +                        <style>
    
    221
    +                          <class name="chatcontrol-separator"/>
    
    222
    +                        </style>
    
    223
    +                      </object>
    
    224
    +                      <packing>
    
    225
    +                        <property name="expand">False</property>
    
    226
    +                        <property name="fill">True</property>
    
    227
    +                        <property name="position">3</property>
    
    228
    +                      </packing>
    
    229
    +                    </child>
    
    230
    +                    <child>
    
    231
    +                      <object class="GtkBox" id="hbox">
    
    232
    +                        <property name="visible">True</property>
    
    233
    +                        <property name="can_focus">False</property>
    
    234
    +                        <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    235
    +                        <child>
    
    236
    +                          <object class="GtkMenuButton" id="settings_menu">
    
    237
    +                            <property name="visible">True</property>
    
    238
    +                            <property name="can_focus">True</property>
    
    239
    +                            <property name="receives_default">True</property>
    
    240
    +                            <property name="relief">none</property>
    
    241
    +                            <child>
    
    242
    +                              <object class="GtkImage">
    
    243
    +                                <property name="visible">True</property>
    
    244
    +                                <property name="can_focus">False</property>
    
    245
    +                                <property name="icon_name">open-menu-symbolic</property>
    
    169 246
                                   </object>
    
    170 247
                                 </child>
    
    171 248
                                 <style>
    
    172
    -                              <class name="gajim-banner"/>
    
    249
    +                              <class name="chatcontrol-actionbar-button"/>
    
    173 250
                                 </style>
    
    174 251
                               </object>
    
    175 252
                               <packing>
    
    176 253
                                 <property name="expand">False</property>
    
    177 254
                                 <property name="fill">True</property>
    
    255
    +                            <property name="pack_type">end</property>
    
    178 256
                                 <property name="position">0</property>
    
    179 257
                               </packing>
    
    180 258
                             </child>
    
    181 259
                             <child>
    
    182
    -                          <object class="GtkSeparator">
    
    183
    -                            <property name="visible">True</property>
    
    184
    -                            <property name="can_focus">False</property>
    
    260
    +                          <object class="GtkButton" id="authentication_button">
    
    261
    +                            <property name="can_focus">True</property>
    
    262
    +                            <property name="focus_on_click">False</property>
    
    263
    +                            <property name="receives_default">True</property>
    
    264
    +                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    265
    +                            <property name="no_show_all">True</property>
    
    266
    +                            <property name="relief">none</property>
    
    267
    +                            <child>
    
    268
    +                              <object class="GtkImage" id="lock_image">
    
    269
    +                                <property name="visible">True</property>
    
    270
    +                                <property name="can_focus">False</property>
    
    271
    +                                <property name="stock">gtk-dialog-authentication</property>
    
    272
    +                                <property name="icon_size">1</property>
    
    273
    +                              </object>
    
    274
    +                            </child>
    
    185 275
                                 <style>
    
    186
    -                              <class name="chatcontrol-separator-top"/>
    
    276
    +                              <class name="chatcontrol-actionbar-button"/>
    
    187 277
                                 </style>
    
    188 278
                               </object>
    
    189 279
                               <packing>
    
    190 280
                                 <property name="expand">False</property>
    
    191
    -                            <property name="fill">True</property>
    
    281
    +                            <property name="fill">False</property>
    
    282
    +                            <property name="pack_type">end</property>
    
    192 283
                                 <property name="position">1</property>
    
    193 284
                               </packing>
    
    194 285
                             </child>
    
    195 286
                             <child>
    
    196
    -                          <object class="GtkScrolledWindow" id="conversation_scrolledwindow">
    
    197
    -                            <property name="width_request">200</property>
    
    198
    -                            <property name="height_request">60</property>
    
    287
    +                          <object class="GtkMenuButton" id="encryption_menu">
    
    199 288
                                 <property name="visible">True</property>
    
    200 289
                                 <property name="can_focus">True</property>
    
    201
    -                            <property name="shadow_type">in</property>
    
    202
    -                            <property name="overlay_scrolling">False</property>
    
    203
    -                            <signal name="edge-reached" handler="_on_edge_reached" swapped="no"/>
    
    204
    -                            <signal name="scroll-event" handler="_on_scroll" swapped="no"/>
    
    290
    +                            <property name="receives_default">True</property>
    
    291
    +                            <property name="tooltip_text" translatable="yes">Choose encryption</property>
    
    292
    +                            <property name="relief">none</property>
    
    205 293
                                 <child>
    
    206 294
                                   <placeholder/>
    
    207 295
                                 </child>
    
    208 296
                                 <style>
    
    209
    -                              <class name="scrolled-no-border"/>
    
    210
    -                              <class name="no-scroll-indicator"/>
    
    211
    -                              <class name="scrollbar-style"/>
    
    297
    +                              <class name="chatcontrol-actionbar-button"/>
    
    212 298
                                 </style>
    
    213 299
                               </object>
    
    214 300
                               <packing>
    
    215
    -                            <property name="expand">True</property>
    
    301
    +                            <property name="expand">False</property>
    
    216 302
                                 <property name="fill">True</property>
    
    303
    +                            <property name="pack_type">end</property>
    
    217 304
                                 <property name="position">2</property>
    
    218 305
                               </packing>
    
    219 306
                             </child>
    
    220 307
                             <child>
    
    221
    -                          <object class="GtkSeparator">
    
    308
    +                          <object class="GtkButton" id="sendfile_button">
    
    222 309
                                 <property name="visible">True</property>
    
    223
    -                            <property name="can_focus">False</property>
    
    310
    +                            <property name="can_focus">True</property>
    
    311
    +                            <property name="focus_on_click">False</property>
    
    312
    +                            <property name="receives_default">True</property>
    
    313
    +                            <property name="relief">none</property>
    
    314
    +                            <child>
    
    315
    +                              <object class="GtkImage">
    
    316
    +                                <property name="visible">True</property>
    
    317
    +                                <property name="can_focus">False</property>
    
    318
    +                                <property name="icon_name">mail-attachment-symbolic</property>
    
    319
    +                              </object>
    
    320
    +                            </child>
    
    224 321
                                 <style>
    
    225
    -                              <class name="chatcontrol-separator"/>
    
    322
    +                              <class name="chatcontrol-actionbar-button"/>
    
    226 323
                                 </style>
    
    227 324
                               </object>
    
    228 325
                               <packing>
    
    229 326
                                 <property name="expand">False</property>
    
    230
    -                            <property name="fill">True</property>
    
    327
    +                            <property name="fill">False</property>
    
    328
    +                            <property name="pack_type">end</property>
    
    231 329
                                 <property name="position">3</property>
    
    232 330
                               </packing>
    
    233 331
                             </child>
    
    234 332
                             <child>
    
    235
    -                          <object class="GtkBox" id="hbox">
    
    333
    +                          <object class="GtkMenuButton" id="emoticons_button">
    
    236 334
                                 <property name="visible">True</property>
    
    237
    -                            <property name="can_focus">False</property>
    
    238
    -                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    239
    -                            <child>
    
    240
    -                              <object class="GtkMenuButton" id="settings_menu">
    
    241
    -                                <property name="visible">True</property>
    
    242
    -                                <property name="can_focus">True</property>
    
    243
    -                                <property name="receives_default">True</property>
    
    244
    -                                <property name="relief">none</property>
    
    245
    -                                <child>
    
    246
    -                                  <object class="GtkImage">
    
    247
    -                                    <property name="visible">True</property>
    
    248
    -                                    <property name="can_focus">False</property>
    
    249
    -                                    <property name="icon_name">open-menu-symbolic</property>
    
    250
    -                                  </object>
    
    251
    -                                </child>
    
    252
    -                                <style>
    
    253
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    254
    -                                </style>
    
    255
    -                              </object>
    
    256
    -                              <packing>
    
    257
    -                                <property name="expand">False</property>
    
    258
    -                                <property name="fill">True</property>
    
    259
    -                                <property name="pack_type">end</property>
    
    260
    -                                <property name="position">0</property>
    
    261
    -                              </packing>
    
    262
    -                            </child>
    
    263
    -                            <child>
    
    264
    -                              <object class="GtkButton" id="authentication_button">
    
    265
    -                                <property name="can_focus">True</property>
    
    266
    -                                <property name="focus_on_click">False</property>
    
    267
    -                                <property name="receives_default">True</property>
    
    268
    -                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    269
    -                                <property name="no_show_all">True</property>
    
    270
    -                                <property name="relief">none</property>
    
    271
    -                                <child>
    
    272
    -                                  <object class="GtkImage" id="lock_image">
    
    273
    -                                    <property name="visible">True</property>
    
    274
    -                                    <property name="can_focus">False</property>
    
    275
    -                                    <property name="stock">gtk-dialog-authentication</property>
    
    276
    -                                    <property name="icon_size">1</property>
    
    277
    -                                  </object>
    
    278
    -                                </child>
    
    279
    -                                <style>
    
    280
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    281
    -                                </style>
    
    282
    -                              </object>
    
    283
    -                              <packing>
    
    284
    -                                <property name="expand">False</property>
    
    285
    -                                <property name="fill">False</property>
    
    286
    -                                <property name="pack_type">end</property>
    
    287
    -                                <property name="position">1</property>
    
    288
    -                              </packing>
    
    289
    -                            </child>
    
    290
    -                            <child>
    
    291
    -                              <object class="GtkMenuButton" id="encryption_menu">
    
    292
    -                                <property name="visible">True</property>
    
    293
    -                                <property name="can_focus">True</property>
    
    294
    -                                <property name="receives_default">True</property>
    
    295
    -                                <property name="tooltip_text" translatable="yes">Choose encryption</property>
    
    296
    -                                <property name="relief">none</property>
    
    297
    -                                <child>
    
    298
    -                                  <placeholder/>
    
    299
    -                                </child>
    
    300
    -                                <style>
    
    301
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    302
    -                                </style>
    
    303
    -                              </object>
    
    304
    -                              <packing>
    
    305
    -                                <property name="expand">False</property>
    
    306
    -                                <property name="fill">True</property>
    
    307
    -                                <property name="pack_type">end</property>
    
    308
    -                                <property name="position">2</property>
    
    309
    -                              </packing>
    
    310
    -                            </child>
    
    311
    -                            <child>
    
    312
    -                              <object class="GtkButton" id="sendfile_button">
    
    313
    -                                <property name="visible">True</property>
    
    314
    -                                <property name="can_focus">True</property>
    
    315
    -                                <property name="focus_on_click">False</property>
    
    316
    -                                <property name="receives_default">True</property>
    
    317
    -                                <property name="relief">none</property>
    
    318
    -                                <child>
    
    319
    -                                  <object class="GtkImage">
    
    320
    -                                    <property name="visible">True</property>
    
    321
    -                                    <property name="can_focus">False</property>
    
    322
    -                                    <property name="icon_name">mail-attachment-symbolic</property>
    
    323
    -                                  </object>
    
    324
    -                                </child>
    
    325
    -                                <style>
    
    326
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    327
    -                                </style>
    
    328
    -                              </object>
    
    329
    -                              <packing>
    
    330
    -                                <property name="expand">False</property>
    
    331
    -                                <property name="fill">False</property>
    
    332
    -                                <property name="pack_type">end</property>
    
    333
    -                                <property name="position">3</property>
    
    334
    -                              </packing>
    
    335
    -                            </child>
    
    336
    -                            <child>
    
    337
    -                              <object class="GtkMenuButton" id="emoticons_button">
    
    338
    -                                <property name="visible">True</property>
    
    339
    -                                <property name="can_focus">True</property>
    
    340
    -                                <property name="receives_default">True</property>
    
    341
    -                                <property name="tooltip_text" translatable="yes">Show a list of emojis (Alt+M)</property>
    
    342
    -                                <property name="relief">none</property>
    
    343
    -                                <child>
    
    344
    -                                  <object class="GtkImage">
    
    345
    -                                    <property name="visible">True</property>
    
    346
    -                                    <property name="can_focus">False</property>
    
    347
    -                                    <property name="icon_name">face-smile-symbolic</property>
    
    348
    -                                  </object>
    
    349
    -                                </child>
    
    350
    -                                <style>
    
    351
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    352
    -                                </style>
    
    353
    -                              </object>
    
    354
    -                              <packing>
    
    355
    -                                <property name="expand">False</property>
    
    356
    -                                <property name="fill">True</property>
    
    357
    -                                <property name="position">4</property>
    
    358
    -                              </packing>
    
    359
    -                            </child>
    
    335
    +                            <property name="can_focus">True</property>
    
    336
    +                            <property name="receives_default">True</property>
    
    337
    +                            <property name="tooltip_text" translatable="yes">Show a list of emojis (Alt+M)</property>
    
    338
    +                            <property name="relief">none</property>
    
    360 339
                                 <child>
    
    361
    -                              <object class="GtkMenuButton" id="formattings_button">
    
    340
    +                              <object class="GtkImage">
    
    362 341
                                     <property name="visible">True</property>
    
    363
    -                                <property name="can_focus">True</property>
    
    364
    -                                <property name="focus_on_click">False</property>
    
    365
    -                                <property name="receives_default">True</property>
    
    366
    -                                <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    367
    -                                <property name="has_tooltip">True</property>
    
    368
    -                                <property name="relief">none</property>
    
    369
    -                                <property name="popup">formattings_menu</property>
    
    370
    -                                <child>
    
    371
    -                                  <object class="GtkImage" id="image10">
    
    372
    -                                    <property name="visible">True</property>
    
    373
    -                                    <property name="can_focus">False</property>
    
    374
    -                                    <property name="icon_name">format-text-bold-symbolic</property>
    
    375
    -                                    <property name="icon_size">1</property>
    
    376
    -                                  </object>
    
    377
    -                                </child>
    
    378
    -                                <style>
    
    379
    -                                  <class name="chatcontrol-actionbar-button"/>
    
    380
    -                                </style>
    
    342
    +                                <property name="can_focus">False</property>
    
    343
    +                                <property name="icon_name">face-smile-symbolic</property>
    
    381 344
                                   </object>
    
    382
    -                              <packing>
    
    383
    -                                <property name="expand">False</property>
    
    384
    -                                <property name="fill">True</property>
    
    385
    -                                <property name="position">5</property>
    
    386
    -                              </packing>
    
    387
    -                            </child>
    
    388
    -                            <child>
    
    389
    -                              <placeholder/>
    
    390 345
                                 </child>
    
    346
    +                            <style>
    
    347
    +                              <class name="chatcontrol-actionbar-button"/>
    
    348
    +                            </style>
    
    349
    +                          </object>
    
    350
    +                          <packing>
    
    351
    +                            <property name="expand">False</property>
    
    352
    +                            <property name="fill">True</property>
    
    353
    +                            <property name="position">4</property>
    
    354
    +                          </packing>
    
    355
    +                        </child>
    
    356
    +                        <child>
    
    357
    +                          <object class="GtkMenuButton" id="formattings_button">
    
    358
    +                            <property name="visible">True</property>
    
    359
    +                            <property name="can_focus">True</property>
    
    360
    +                            <property name="focus_on_click">False</property>
    
    361
    +                            <property name="receives_default">True</property>
    
    362
    +                            <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
    
    363
    +                            <property name="has_tooltip">True</property>
    
    364
    +                            <property name="relief">none</property>
    
    365
    +                            <property name="popup">formattings_menu</property>
    
    391 366
                                 <child>
    
    392
    -                              <object class="GtkComboBox" id="label_selector">
    
    367
    +                              <object class="GtkImage" id="image10">
    
    393 368
                                     <property name="visible">True</property>
    
    394 369
                                     <property name="can_focus">False</property>
    
    395
    -                                <property name="no_show_all">True</property>
    
    370
    +                                <property name="icon_name">format-text-bold-symbolic</property>
    
    371
    +                                <property name="icon_size">1</property>
    
    396 372
                                   </object>
    
    397
    -                              <packing>
    
    398
    -                                <property name="expand">False</property>
    
    399
    -                                <property name="fill">True</property>
    
    400
    -                                <property name="position">7</property>
    
    401
    -                              </packing>
    
    402 373
                                 </child>
    
    374
    +                            <style>
    
    375
    +                              <class name="chatcontrol-actionbar-button"/>
    
    376
    +                            </style>
    
    403 377
                               </object>
    
    404 378
                               <packing>
    
    405 379
                                 <property name="expand">False</property>
    
    406
    -                            <property name="fill">False</property>
    
    407
    -                            <property name="position">4</property>
    
    380
    +                            <property name="fill">True</property>
    
    381
    +                            <property name="position">5</property>
    
    382
    +                          </packing>
    
    383
    +                        </child>
    
    384
    +                        <child>
    
    385
    +                          <placeholder/>
    
    386
    +                        </child>
    
    387
    +                        <child>
    
    388
    +                          <object class="GtkComboBox" id="label_selector">
    
    389
    +                            <property name="visible">True</property>
    
    390
    +                            <property name="can_focus">False</property>
    
    391
    +                            <property name="no_show_all">True</property>
    
    392
    +                          </object>
    
    393
    +                          <packing>
    
    394
    +                            <property name="expand">False</property>
    
    395
    +                            <property name="fill">True</property>
    
    396
    +                            <property name="position">7</property>
    
    408 397
                               </packing>
    
    409 398
                             </child>
    
    410 399
                           </object>
    
    411 400
                           <packing>
    
    412
    -                        <property name="index">-1</property>
    
    401
    +                        <property name="expand">False</property>
    
    402
    +                        <property name="fill">False</property>
    
    403
    +                        <property name="position">4</property>
    
    413 404
                           </packing>
    
    414 405
                         </child>
    
    415 406
                       </object>
    
    416 407
                       <packing>
    
    417 408
                         <property name="resize">False</property>
    
    418
    -                    <property name="shrink">False</property>
    
    409
    +                    <property name="shrink">True</property>
    
    419 410
                       </packing>
    
    420 411
                     </child>
    
    421 412
                     <child>
    
    ... ... @@ -790,6 +781,7 @@
    790 781
                         <property name="can_focus">True</property>
    
    791 782
                         <property name="visibility">False</property>
    
    792 783
                         <property name="invisible_char">*</property>
    
    784
    +                    <property name="activates_default">True</property>
    
    793 785
                         <property name="input_purpose">password</property>
    
    794 786
                         <signal name="notify::text" handler="_on_password_changed" swapped="no"/>
    
    795 787
                       </object>
    
    ... ... @@ -811,6 +803,97 @@
    811 803
                 <property name="position">4</property>
    
    812 804
               </packing>
    
    813 805
             </child>
    
    806
    +        <child>
    
    807
    +          <object class="GtkBox">
    
    808
    +            <property name="visible">True</property>
    
    809
    +            <property name="can_focus">False</property>
    
    810
    +            <property name="orientation">vertical</property>
    
    811
    +            <child>
    
    812
    +              <object class="GtkGrid">
    
    813
    +                <property name="visible">True</property>
    
    814
    +                <property name="can_focus">False</property>
    
    815
    +                <property name="halign">center</property>
    
    816
    +                <property name="valign">center</property>
    
    817
    +                <property name="hexpand">True</property>
    
    818
    +                <property name="vexpand">True</property>
    
    819
    +                <property name="row_spacing">12</property>
    
    820
    +                <child>
    
    821
    +                  <object class="GtkBox">
    
    822
    +                    <property name="visible">True</property>
    
    823
    +                    <property name="can_focus">False</property>
    
    824
    +                    <property name="homogeneous">True</property>
    
    825
    +                    <child>
    
    826
    +                      <object class="GtkButton">
    
    827
    +                        <property name="label" translatable="yes">_Cancel</property>
    
    828
    +                        <property name="visible">True</property>
    
    829
    +                        <property name="can_focus">True</property>
    
    830
    +                        <property name="receives_default">True</property>
    
    831
    +                        <property name="halign">start</property>
    
    832
    +                        <property name="valign">start</property>
    
    833
    +                        <property name="use_underline">True</property>
    
    834
    +                        <signal name="clicked" handler="_on_captcha_cancel_clicked" swapped="no"/>
    
    835
    +                      </object>
    
    836
    +                      <packing>
    
    837
    +                        <property name="expand">False</property>
    
    838
    +                        <property name="fill">True</property>
    
    839
    +                        <property name="position">0</property>
    
    840
    +                      </packing>
    
    841
    +                    </child>
    
    842
    +                    <child>
    
    843
    +                      <object class="GtkButton" id="captcha_set_button">
    
    844
    +                        <property name="label" translatable="yes">_Join</property>
    
    845
    +                        <property name="visible">True</property>
    
    846
    +                        <property name="sensitive">False</property>
    
    847
    +                        <property name="can_focus">True</property>
    
    848
    +                        <property name="can_default">True</property>
    
    849
    +                        <property name="receives_default">True</property>
    
    850
    +                        <property name="halign">end</property>
    
    851
    +                        <property name="valign">start</property>
    
    852
    +                        <property name="use_underline">True</property>
    
    853
    +                        <signal name="clicked" handler="_on_captcha_set_clicked" swapped="no"/>
    
    854
    +                        <style>
    
    855
    +                          <class name="suggested-action"/>
    
    856
    +                        </style>
    
    857
    +                      </object>
    
    858
    +                      <packing>
    
    859
    +                        <property name="expand">False</property>
    
    860
    +                        <property name="fill">True</property>
    
    861
    +                        <property name="position">1</property>
    
    862
    +                      </packing>
    
    863
    +                    </child>
    
    864
    +                  </object>
    
    865
    +                  <packing>
    
    866
    +                    <property name="left_attach">0</property>
    
    867
    +                    <property name="top_attach">1</property>
    
    868
    +                  </packing>
    
    869
    +                </child>
    
    870
    +                <child>
    
    871
    +                  <object class="GtkBox" id="captcha_box">
    
    872
    +                    <property name="visible">True</property>
    
    873
    +                    <property name="can_focus">False</property>
    
    874
    +                    <property name="orientation">vertical</property>
    
    875
    +                    <child>
    
    876
    +                      <placeholder/>
    
    877
    +                    </child>
    
    878
    +                  </object>
    
    879
    +                  <packing>
    
    880
    +                    <property name="left_attach">0</property>
    
    881
    +                    <property name="top_attach">0</property>
    
    882
    +                  </packing>
    
    883
    +                </child>
    
    884
    +              </object>
    
    885
    +              <packing>
    
    886
    +                <property name="expand">False</property>
    
    887
    +                <property name="fill">True</property>
    
    888
    +                <property name="position">0</property>
    
    889
    +              </packing>
    
    890
    +            </child>
    
    891
    +          </object>
    
    892
    +          <packing>
    
    893
    +            <property name="name">captcha</property>
    
    894
    +            <property name="position">5</property>
    
    895
    +          </packing>
    
    896
    +        </child>
    
    814 897
           </object>
    
    815 898
           <packing>
    
    816 899
             <property name="expand">True</property>
    

  • gajim/groupchat_control.py
    ... ... @@ -1125,33 +1125,6 @@ class GroupchatControl(ChatControlBase):
    1125 1125
                                 from_whom=self.room_jid,
    
    1126 1126
                                 form_node=event.form)
    
    1127 1127
     
    
    1128
    -    @event_filter(['account', 'room_jid'])
    
    1129
    -    def _on_captcha_challenge(self, event):
    
    1130
    -        self._remove_captcha_request()
    
    1131
    -
    
    1132
    -        def on_send_dataform_clicked(*args):
    
    1133
    -            form_node = self._captcha_request.get_submit_form()
    
    1134
    -            con = app.connections[self.account]
    
    1135
    -            con.get_module('MUC').send_captcha(self.room_jid, form_node)
    
    1136
    -            self._remove_captcha_request()
    
    1137
    -
    
    1138
    -        self._captcha_request = CaptchaRequest(event.form,
    
    1139
    -                                               on_send_dataform_clicked)
    
    1140
    -        self._overlay.add_overlay(self._captcha_request)
    
    1141
    -
    
    1142
    -        if self.parent_win:
    
    1143
    -            self.parent_win.redraw_tab(self, 'attention')
    
    1144
    -        else:
    
    1145
    -            self.attention_flag = True
    
    1146
    -
    
    1147
    -    def _remove_captcha_request(self):
    
    1148
    -        if self._captcha_request is None:
    
    1149
    -            return
    
    1150
    -        if self._captcha_request in self._overlay.get_children():
    
    1151
    -            self._overlay.remove(self._captcha_request)
    
    1152
    -        self._captcha_request.destroy()
    
    1153
    -        self._captcha_request = None
    
    1154
    -
    
    1155 1128
         @event_filter(['account'])
    
    1156 1129
         def _nec_mam_decrypted_message_received(self, obj):
    
    1157 1130
             if not obj.groupchat:
    
    ... ... @@ -1946,7 +1919,6 @@ class GroupchatControl(ChatControlBase):
    1946 1919
     
    
    1947 1920
         @event_filter(['account', 'room_jid'])
    
    1948 1921
         def _on_presence_error(self, event):
    
    1949
    -        nick = event.properties.muc_nickname
    
    1950 1922
             error_type = event.properties.error.type
    
    1951 1923
             error_message = event.properties.error.message
    
    1952 1924
     
    
    ... ... @@ -2477,6 +2449,8 @@ class GroupchatControl(ChatControlBase):
    2477 2449
     
    
    2478 2450
                 if self._get_current_page() == 'password':
    
    2479 2451
                     self._on_password_cancel_clicked()
    
    2452
    +            elif self._get_current_page() == 'captcha':
    
    2453
    +                self._on_captcha_cancel_clicked()
    
    2480 2454
                 else:
    
    2481 2455
                     self._show_page('groupchat')
    
    2482 2456
                 return Gdk.EVENT_STOP
    
    ... ... @@ -2935,6 +2909,8 @@ class GroupchatControl(ChatControlBase):
    2935 2909
                 self.xml.password_entry.set_text('')
    
    2936 2910
                 self.xml.password_entry.grab_focus()
    
    2937 2911
                 self.xml.password_set_button.grab_default()
    
    2912
    +        elif page_name == 'captcha':
    
    2913
    +            self.xml.captcha_set_button.grab_default()
    
    2938 2914
     
    
    2939 2915
         def _on_change_nick(self, _action, _param):
    
    2940 2916
             if self._get_current_page() == 'nickname':
    
    ... ... @@ -2993,6 +2969,50 @@ class GroupchatControl(ChatControlBase):
    2993 2969
             self.parent_win.remove_tab(self, self.parent_win.CLOSE_COMMAND)
    
    2994 2970
             self.force_non_minimizable = False
    
    2995 2971
     
    
    2972
    +    @event_filter(['account', 'room_jid'])
    
    2973
    +    def _on_captcha_challenge(self, event):
    
    2974
    +        self._remove_captcha_request()
    
    2975
    +
    
    2976
    +        options = {'no-scrolling': True,
    
    2977
    +                   'entry-activates-default': True}
    
    2978
    +        self._captcha_request = DataFormWidget(event.form, options=options)
    
    2979
    +        self._captcha_request.connect('is-valid', self._on_captcha_changed)
    
    2980
    +        self._captcha_request.set_valign(Gtk.Align.START)
    
    2981
    +        self._captcha_request.show_all()
    
    2982
    +        self.xml.captcha_box.add(self._captcha_request)
    
    2983
    +
    
    2984
    +        if self.parent_win:
    
    2985
    +            self.parent_win.redraw_tab(self, 'attention')
    
    2986
    +        else:
    
    2987
    +            self.attention_flag = True
    
    2988
    +
    
    2989
    +        self._show_page('captcha')
    
    2990
    +        self._captcha_request.focus_first_entry()
    
    2991
    +
    
    2992
    +    def _remove_captcha_request(self):
    
    2993
    +        if self._captcha_request is None:
    
    2994
    +            return
    
    2995
    +        if self._captcha_request in self.xml.captcha_box.get_children():
    
    2996
    +            self.xml.captcha_box.remove(self._captcha_request)
    
    2997
    +        self._captcha_request.destroy()
    
    2998
    +        self._captcha_request = None
    
    2999
    +
    
    3000
    +    def _on_captcha_changed(self, _widget, is_valid):
    
    3001
    +        self.xml.captcha_set_button.set_sensitive(is_valid)
    
    3002
    +
    
    3003
    +    def _on_captcha_set_clicked(self, _button):
    
    3004
    +        form_node = self._captcha_request.get_submit_form()
    
    3005
    +        con = app.connections[self.account]
    
    3006
    +        con.get_module('MUC').send_captcha(self.room_jid, form_node)
    
    3007
    +        self._remove_captcha_request()
    
    3008
    +        self._show_page('groupchat')
    
    3009
    +
    
    3010
    +    def _on_captcha_cancel_clicked(self, _button=None):
    
    3011
    +        self._remove_captcha_request()
    
    3012
    +        self.force_non_minimizable = True
    
    3013
    +        self.parent_win.remove_tab(self, self.parent_win.CLOSE_COMMAND)
    
    3014
    +        self.force_non_minimizable = False
    
    3015
    +
    
    2996 3016
         def _on_page_cancel_clicked(self, _button):
    
    2997 3017
             self._show_page('groupchat')
    
    2998 3018
     
    
    ... ... @@ -3040,27 +3060,3 @@ class SubjectPopover(Gtk.Popover):
    3040 3060
             # is not cross-platform compatible
    
    3041 3061
             open_uri(uri)
    
    3042 3062
             return Gdk.EVENT_STOP
    3043
    -
    
    3044
    -
    
    3045
    -class CaptchaRequest(Gtk.Box):
    
    3046
    -    def __init__(self, form, callback):
    
    3047
    -        Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL)
    
    3048
    -
    
    3049
    -        options = {'no-scrolling': True}
    
    3050
    -        self._form_widget = DataFormWidget(form, options=options)
    
    3051
    -        self._form_widget.set_valign(Gtk.Align.START)
    
    3052
    -
    
    3053
    -        send_button = Gtk.Button(label='Send')
    
    3054
    -        send_button.connect('clicked', callback)
    
    3055
    -        send_button.set_halign(Gtk.Align.CENTER)
    
    3056
    -
    
    3057
    -        self.add(self._form_widget)
    
    3058
    -        self.add(send_button)
    
    3059
    -
    
    3060
    -        self.set_valign(Gtk.Align.START)
    
    3061
    -        self.set_margin_top(100)
    
    3062
    -
    
    3063
    -        self.show_all()
    
    3064
    -
    
    3065
    -    def get_submit_form(self):
    
    3066
    -        return self._form_widget.get_submit_form()

  • gajim/gtk/dataform.py
    ... ... @@ -66,6 +66,12 @@ class DataFormWidget(Gtk.ScrolledWindow):
    66 66
             self._form_node.type_ = 'submit'
    
    67 67
             return self._form_node
    
    68 68
     
    
    69
    +    def focus_first_entry(self):
    
    70
    +        for widget in self._form_grid.get_children():
    
    71
    +            if isinstance(widget, Gtk.Entry):
    
    72
    +                widget.grab_focus()
    
    73
    +                break
    
    74
    +
    
    69 75
     
    
    70 76
     class FormGrid(Gtk.Grid):
    
    71 77
         def __init__(self, form_node, options):
    
    ... ... @@ -266,6 +272,7 @@ class Field:
    266 272
             self._warning_image.set_visible(not is_valid)
    
    267 273
     
    
    268 274
         def _validate(self):
    
    275
    +        self._form_grid.validate(False)
    
    269 276
             if self._validate_source_id is not None:
    
    270 277
                 GLib.source_remove(self._validate_source_id)
    
    271 278
     
    
    ... ... @@ -504,6 +511,8 @@ class TextSingleField(Field):
    504 511
                 self._widget = Gtk.Entry()
    
    505 512
                 self._widget.set_text(field.value)
    
    506 513
                 self._widget.connect('changed', self._changed)
    
    514
    +            if options.get('entry-activates-default', False):
    
    515
    +                self._widget.set_activates_default(True)
    
    507 516
             self._widget.set_valign(Gtk.Align.CENTER)
    
    508 517
     
    
    509 518
         def _changed(self, _widget):