Daniel Brötzmann pushed to branch new-chat-menu at gajim / gajim

Commits:

12 changed files:

Changes:

  • debian/control
    ... ... @@ -12,7 +12,7 @@ Build-Depends:
    12 12
         python3-css-parser,
    
    13 13
         python3-gi,
    
    14 14
         python3-gi-cairo,
    
    15
    -    python3-nbxmpp-nightly (>=20230206),
    
    15
    +    python3-nbxmpp-nightly (>=20230405),
    
    16 16
         python3-setuptools,
    
    17 17
         python3-packaging,
    
    18 18
         python3-cryptography (>=3.4.8),
    
    ... ... @@ -34,7 +34,7 @@ Depends:
    34 34
         python3 (>= 3.10),
    
    35 35
         python3-gi (>= 3.42.0),
    
    36 36
         python3-gi-cairo (>= 1.14.0~),
    
    37
    -    python3-nbxmpp-nightly (>=20230123),
    
    37
    +    python3-nbxmpp-nightly (>=20230405),
    
    38 38
         gir1.2-pango-1.0 (>= 1.50.0),
    
    39 39
         gir1.2-gtk-3.0 (>= 3.24.30),
    
    40 40
         gir1.2-gtksource-4,
    

  • gajim/data/gui/chat_banner.ui
    ... ... @@ -2,6 +2,70 @@
    2 2
     <!-- Generated with glade 3.40.0 -->
    
    3 3
     <interface>
    
    4 4
       <requires lib="gtk+" version="3.24"/>
    
    5
    +  <object class="GtkPopover" id="share_popover">
    
    6
    +    <property name="can-focus">False</property>
    
    7
    +    <child>
    
    8
    +      <object class="GtkBox">
    
    9
    +        <property name="visible">True</property>
    
    10
    +        <property name="can-focus">False</property>
    
    11
    +        <property name="orientation">vertical</property>
    
    12
    +        <property name="spacing">6</property>
    
    13
    +        <child>
    
    14
    +          <object class="GtkBox">
    
    15
    +            <property name="visible">True</property>
    
    16
    +            <property name="can-focus">False</property>
    
    17
    +            <property name="spacing">12</property>
    
    18
    +            <child>
    
    19
    +              <object class="GtkLabel" id="jid_label">
    
    20
    +                <property name="visible">True</property>
    
    21
    +                <property name="can-focus">False</property>
    
    22
    +                <property name="justify">center</property>
    
    23
    +                <property name="wrap">True</property>
    
    24
    +                <property name="wrap-mode">word-char</property>
    
    25
    +                <property name="max-width-chars">30</property>
    
    26
    +              </object>
    
    27
    +              <packing>
    
    28
    +                <property name="expand">True</property>
    
    29
    +                <property name="fill">True</property>
    
    30
    +                <property name="position">0</property>
    
    31
    +              </packing>
    
    32
    +            </child>
    
    33
    +            <child>
    
    34
    +              <object class="GtkButton">
    
    35
    +                <property name="visible">True</property>
    
    36
    +                <property name="can-focus">True</property>
    
    37
    +                <property name="receives-default">True</property>
    
    38
    +                <property name="tooltip-text" translatable="yes">Copy to clipboard</property>
    
    39
    +                <property name="valign">center</property>
    
    40
    +                <signal name="clicked" handler="_on_copy_jid_clicked" swapped="no"/>
    
    41
    +                <child>
    
    42
    +                  <object class="GtkImage">
    
    43
    +                    <property name="visible">True</property>
    
    44
    +                    <property name="can-focus">False</property>
    
    45
    +                    <property name="icon-name">edit-copy-symbolic</property>
    
    46
    +                  </object>
    
    47
    +                </child>
    
    48
    +              </object>
    
    49
    +              <packing>
    
    50
    +                <property name="expand">False</property>
    
    51
    +                <property name="fill">True</property>
    
    52
    +                <property name="pack-type">end</property>
    
    53
    +                <property name="position">1</property>
    
    54
    +              </packing>
    
    55
    +            </child>
    
    56
    +          </object>
    
    57
    +          <packing>
    
    58
    +            <property name="expand">False</property>
    
    59
    +            <property name="fill">True</property>
    
    60
    +            <property name="position">1</property>
    
    61
    +          </packing>
    
    62
    +        </child>
    
    63
    +        <style>
    
    64
    +          <class name="padding-12"/>
    
    65
    +        </style>
    
    66
    +      </object>
    
    67
    +    </child>
    
    68
    +  </object>
    
    5 69
       <object class="GtkBox" id="banner_box">
    
    6 70
         <property name="visible">True</property>
    
    7 71
         <property name="can-focus">False</property>
    
    ... ... @@ -23,51 +87,39 @@
    23 87
             <property name="can-focus">False</property>
    
    24 88
             <property name="spacing">12</property>
    
    25 89
             <child>
    
    26
    -          <object class="GtkBox">
    
    90
    +          <object class="GtkSeparator">
    
    27 91
                 <property name="visible">True</property>
    
    28 92
                 <property name="can-focus">False</property>
    
    93
    +            <property name="margin-top">12</property>
    
    94
    +            <property name="margin-bottom">12</property>
    
    95
    +          </object>
    
    96
    +          <packing>
    
    97
    +            <property name="expand">False</property>
    
    98
    +            <property name="fill">True</property>
    
    99
    +            <property name="pack-type">end</property>
    
    100
    +            <property name="position">0</property>
    
    101
    +          </packing>
    
    102
    +        </child>
    
    103
    +        <child>
    
    104
    +          <object class="GtkMenuButton" id="chat_menu_button">
    
    105
    +            <property name="visible">True</property>
    
    106
    +            <property name="can-focus">True</property>
    
    107
    +            <property name="focus-on-click">False</property>
    
    108
    +            <property name="receives-default">True</property>
    
    29 109
                 <property name="valign">center</property>
    
    30
    -            <property name="orientation">vertical</property>
    
    31
    -            <property name="spacing">3</property>
    
    110
    +            <property name="margin-end">6</property>
    
    32 111
                 <child>
    
    33
    -              <object class="GtkLabel" id="name_label">
    
    112
    +              <object class="GtkImage">
    
    34 113
                     <property name="visible">True</property>
    
    35
    -                <property name="can-focus">True</property>
    
    36
    -                <property name="selectable">True</property>
    
    37
    -                <property name="halign">start</property>
    
    38
    -                <property name="hexpand">True</property>
    
    39
    -                <property name="ellipsize">end</property>
    
    40
    -                <property name="single-line-mode">True</property>
    
    41
    -                <property name="xalign">0</property>
    
    42
    -                <style>
    
    43
    -                  <class name="large-header"/>
    
    44
    -                </style>
    
    45
    -              </object>
    
    46
    -              <packing>
    
    47
    -                <property name="expand">False</property>
    
    48
    -                <property name="fill">True</property>
    
    49
    -                <property name="position">0</property>
    
    50
    -              </packing>
    
    51
    -            </child>
    
    52
    -            <child>
    
    53
    -              <object class="GtkImage" id="phone_image">
    
    54 114
                     <property name="can-focus">False</property>
    
    55
    -                <property name="no-show-all">True</property>
    
    56
    -                <property name="tooltip-text" translatable="yes">The last message was written on a mobile client</property>
    
    57
    -                <property name="halign">start</property>
    
    58
    -                <property name="margin-end">4</property>
    
    59
    -                <property name="icon-name">phone-apple-iphone-symbolic</property>
    
    115
    +                <property name="icon-name">view-more-symbolic</property>
    
    60 116
                   </object>
    
    61
    -              <packing>
    
    62
    -                <property name="expand">False</property>
    
    63
    -                <property name="fill">True</property>
    
    64
    -                <property name="position">1</property>
    
    65
    -              </packing>
    
    66 117
                 </child>
    
    67 118
               </object>
    
    68 119
               <packing>
    
    69 120
                 <property name="expand">False</property>
    
    70 121
                 <property name="fill">True</property>
    
    122
    +            <property name="pack-type">end</property>
    
    71 123
                 <property name="position">0</property>
    
    72 124
               </packing>
    
    73 125
             </child>
    
    ... ... @@ -78,7 +130,6 @@
    78 130
                 <property name="no-show-all">True</property>
    
    79 131
                 <property name="tooltip-text" translatable="yes">Toggle participants list</property>
    
    80 132
                 <property name="valign">center</property>
    
    81
    -            <property name="relief">none</property>
    
    82 133
                 <signal name="clicked" handler="_on_toggle_roster_clicked" swapped="no"/>
    
    83 134
                 <child>
    
    84 135
                   <object class="GtkBox">
    
    ... ... @@ -109,20 +160,163 @@
    109 160
                         <property name="position">1</property>
    
    110 161
                       </packing>
    
    111 162
                     </child>
    
    163
    +              </object>
    
    164
    +            </child>
    
    165
    +          </object>
    
    166
    +          <packing>
    
    167
    +            <property name="expand">False</property>
    
    168
    +            <property name="fill">True</property>
    
    169
    +            <property name="pack-type">end</property>
    
    170
    +            <property name="position">2</property>
    
    171
    +          </packing>
    
    172
    +        </child>
    
    173
    +        <child>
    
    174
    +          <object class="GtkButton" id="contact_info_button">
    
    175
    +            <property name="visible">True</property>
    
    176
    +            <property name="can-focus">True</property>
    
    177
    +            <property name="receives-default">True</property>
    
    178
    +            <property name="tooltip-text" translatable="yes">Contact Details and Settings</property>
    
    179
    +            <property name="valign">center</property>
    
    180
    +            <property name="action-name">win.show-contact-info</property>
    
    181
    +            <child>
    
    182
    +              <object class="GtkImage">
    
    183
    +                <property name="visible">True</property>
    
    184
    +                <property name="can-focus">False</property>
    
    185
    +                <property name="icon-name">user-info-symbolic</property>
    
    186
    +              </object>
    
    187
    +            </child>
    
    188
    +          </object>
    
    189
    +          <packing>
    
    190
    +            <property name="expand">False</property>
    
    191
    +            <property name="fill">True</property>
    
    192
    +            <property name="pack-type">end</property>
    
    193
    +            <property name="position">3</property>
    
    194
    +          </packing>
    
    195
    +        </child>
    
    196
    +        <child>
    
    197
    +          <object class="GtkButton">
    
    198
    +            <property name="visible">True</property>
    
    199
    +            <property name="can-focus">True</property>
    
    200
    +            <property name="receives-default">True</property>
    
    201
    +            <property name="tooltip-text" translatable="yes">Search…</property>
    
    202
    +            <property name="valign">center</property>
    
    203
    +            <property name="action-name">win.search-history</property>
    
    204
    +            <child>
    
    205
    +              <object class="GtkImage">
    
    206
    +                <property name="visible">True</property>
    
    207
    +                <property name="can-focus">False</property>
    
    208
    +                <property name="icon-name">system-search-symbolic</property>
    
    209
    +              </object>
    
    210
    +            </child>
    
    211
    +          </object>
    
    212
    +          <packing>
    
    213
    +            <property name="expand">False</property>
    
    214
    +            <property name="fill">True</property>
    
    215
    +            <property name="pack-type">end</property>
    
    216
    +            <property name="position">4</property>
    
    217
    +          </packing>
    
    218
    +        </child>
    
    219
    +        <child>
    
    220
    +          <object class="GtkMenuButton" id="share_menu_button">
    
    221
    +            <property name="visible">True</property>
    
    222
    +            <property name="sensitive">False</property>
    
    223
    +            <property name="can-focus">True</property>
    
    224
    +            <property name="focus-on-click">False</property>
    
    225
    +            <property name="receives-default">True</property>
    
    226
    +            <property name="tooltip-text" translatable="yes">Share Contact…</property>
    
    227
    +            <property name="valign">center</property>
    
    228
    +            <property name="popover">share_popover</property>
    
    229
    +            <child>
    
    230
    +              <object class="GtkImage">
    
    231
    +                <property name="visible">True</property>
    
    232
    +                <property name="can-focus">False</property>
    
    233
    +                <property name="icon-name">emblem-shared-symbolic</property>
    
    234
    +              </object>
    
    235
    +            </child>
    
    236
    +          </object>
    
    237
    +          <packing>
    
    238
    +            <property name="expand">False</property>
    
    239
    +            <property name="fill">True</property>
    
    240
    +            <property name="pack-type">end</property>
    
    241
    +            <property name="position">5</property>
    
    242
    +          </packing>
    
    243
    +        </child>
    
    244
    +        <child>
    
    245
    +          <object class="GtkBox">
    
    246
    +            <property name="visible">True</property>
    
    247
    +            <property name="can-focus">False</property>
    
    248
    +            <property name="valign">center</property>
    
    249
    +            <property name="orientation">vertical</property>
    
    250
    +            <child>
    
    251
    +              <object class="GtkLabel" id="name_label">
    
    252
    +                <property name="visible">True</property>
    
    253
    +                <property name="can-focus">True</property>
    
    254
    +                <property name="halign">start</property>
    
    255
    +                <property name="hexpand">True</property>
    
    256
    +                <property name="selectable">True</property>
    
    257
    +                <property name="ellipsize">end</property>
    
    258
    +                <property name="single-line-mode">True</property>
    
    259
    +                <property name="xalign">0</property>
    
    112 260
                     <style>
    
    113
    -                  <class name="dim-label"/>
    
    261
    +                  <class name="large-header"/>
    
    114 262
                     </style>
    
    115 263
                   </object>
    
    264
    +              <packing>
    
    265
    +                <property name="expand">False</property>
    
    266
    +                <property name="fill">True</property>
    
    267
    +                <property name="position">0</property>
    
    268
    +              </packing>
    
    269
    +            </child>
    
    270
    +            <child>
    
    271
    +              <object class="GtkBox">
    
    272
    +                <property name="visible">True</property>
    
    273
    +                <property name="can-focus">False</property>
    
    274
    +                <property name="spacing">12</property>
    
    275
    +                <child>
    
    276
    +                  <object class="GtkImage" id="phone_image">
    
    277
    +                    <property name="can-focus">False</property>
    
    278
    +                    <property name="no-show-all">True</property>
    
    279
    +                    <property name="tooltip-text" translatable="yes">The last message was written on a mobile client</property>
    
    280
    +                    <property name="halign">start</property>
    
    281
    +                    <property name="margin-end">4</property>
    
    282
    +                    <property name="icon-name">phone-apple-iphone-symbolic</property>
    
    283
    +                  </object>
    
    284
    +                  <packing>
    
    285
    +                    <property name="expand">False</property>
    
    286
    +                    <property name="fill">True</property>
    
    287
    +                    <property name="position">0</property>
    
    288
    +                  </packing>
    
    289
    +                </child>
    
    290
    +                <child>
    
    291
    +                  <object class="GtkLabel" id="description_label">
    
    292
    +                    <property name="visible">True</property>
    
    293
    +                    <property name="can-focus">False</property>
    
    294
    +                    <property name="ellipsize">end</property>
    
    295
    +                    <property name="single-line-mode">True</property>
    
    296
    +                    <property name="max-width-chars">30</property>
    
    297
    +                    <property name="xalign">0</property>
    
    298
    +                    <style>
    
    299
    +                      <class name="dim-label"/>
    
    300
    +                    </style>
    
    301
    +                  </object>
    
    302
    +                  <packing>
    
    303
    +                    <property name="expand">False</property>
    
    304
    +                    <property name="fill">True</property>
    
    305
    +                    <property name="position">1</property>
    
    306
    +                  </packing>
    
    307
    +                </child>
    
    308
    +              </object>
    
    309
    +              <packing>
    
    310
    +                <property name="expand">False</property>
    
    311
    +                <property name="fill">True</property>
    
    312
    +                <property name="position">1</property>
    
    313
    +              </packing>
    
    116 314
                 </child>
    
    117
    -            <style>
    
    118
    -              <class name="flat"/>
    
    119
    -            </style>
    
    120 315
               </object>
    
    121 316
               <packing>
    
    122 317
                 <property name="expand">False</property>
    
    123 318
                 <property name="fill">True</property>
    
    124
    -            <property name="pack-type">end</property>
    
    125
    -            <property name="position">0</property>
    
    319
    +            <property name="position">6</property>
    
    126 320
               </packing>
    
    127 321
             </child>
    
    128 322
             <child>
    
    ... ... @@ -141,7 +335,7 @@
    141 335
                 <property name="expand">False</property>
    
    142 336
                 <property name="fill">True</property>
    
    143 337
                 <property name="pack-type">end</property>
    
    144
    -            <property name="position">1</property>
    
    338
    +            <property name="position">6</property>
    
    145 339
               </packing>
    
    146 340
             </child>
    
    147 341
             <child>
    
    ... ... @@ -192,7 +386,7 @@
    192 386
                 <property name="expand">False</property>
    
    193 387
                 <property name="fill">True</property>
    
    194 388
                 <property name="pack-type">end</property>
    
    195
    -            <property name="position">3</property>
    
    389
    +            <property name="position">7</property>
    
    196 390
               </packing>
    
    197 391
             </child>
    
    198 392
           </object>
    

  • gajim/data/gui/chat_control.ui
    1 1
     <?xml version="1.0" encoding="UTF-8"?>
    
    2
    -<!-- Generated with glade 3.38.2 -->
    
    2
    +<!-- Generated with glade 3.40.0 -->
    
    3 3
     <interface>
    
    4 4
       <requires lib="gtk+" version="3.24"/>
    
    5 5
       <object class="GtkBox" id="control_box">
    
    6 6
         <property name="can-focus">True</property>
    
    7 7
         <child>
    
    8
    -      <object class="GtkBox" id="conv_view_box">
    
    8
    +      <object class="GtkPaned" id="conv_view_paned">
    
    9
    +        <property name="visible">True</property>
    
    9 10
             <property name="can-focus">True</property>
    
    10
    -        <property name="spacing">3</property>
    
    11 11
             <child>
    
    12 12
               <object class="GtkOverlay" id="conv_view_overlay">
    
    13 13
                 <property name="visible">True</property>
    
    ... ... @@ -18,16 +18,18 @@
    18 18
                 </child>
    
    19 19
               </object>
    
    20 20
               <packing>
    
    21
    -            <property name="expand">False</property>
    
    22
    -            <property name="fill">True</property>
    
    23
    -            <property name="position">0</property>
    
    21
    +            <property name="resize">True</property>
    
    22
    +            <property name="shrink">True</property>
    
    24 23
               </packing>
    
    25 24
             </child>
    
    25
    +        <child>
    
    26
    +          <placeholder/>
    
    27
    +        </child>
    
    26 28
           </object>
    
    27 29
           <packing>
    
    28 30
             <property name="expand">True</property>
    
    29 31
             <property name="fill">True</property>
    
    30
    -        <property name="position">0</property>
    
    32
    +        <property name="position">1</property>
    
    31 33
           </packing>
    
    32 34
         </child>
    
    33 35
       </object>
    

  • gajim/data/gui/groupchat_roster.ui
    ... ... @@ -2,74 +2,167 @@
    2 2
     <!-- Generated with glade 3.40.0 -->
    
    3 3
     <interface>
    
    4 4
       <requires lib="gtk+" version="3.20"/>
    
    5
    -  <object class="GtkTreeStore" id="participant_store">
    
    6
    -    <columns>
    
    7
    -      <!-- column-name Avatar -->
    
    8
    -      <column type="CairoGObjectSurface"/>
    
    9
    -      <!-- column-name Text -->
    
    10
    -      <column type="gchararray"/>
    
    11
    -      <!-- column-name IsContact -->
    
    12
    -      <column type="gboolean"/>
    
    13
    -      <!-- column-name GroupOrNickname -->
    
    14
    -      <column type="gchararray"/>
    
    15
    -    </columns>
    
    16
    -  </object>
    
    17
    -  <object class="GtkScrolledWindow" id="scrolled">
    
    5
    +  <object class="GtkBox" id="box">
    
    18 6
         <property name="visible">True</property>
    
    19
    -    <property name="can-focus">True</property>
    
    20
    -    <property name="hscrollbar-policy">never</property>
    
    7
    +    <property name="can-focus">False</property>
    
    8
    +    <property name="orientation">vertical</property>
    
    9
    +    <property name="spacing">6</property>
    
    21 10
         <child>
    
    22
    -      <object class="GtkTreeView" id="roster_treeview">
    
    11
    +      <object class="GtkBox">
    
    23 12
             <property name="visible">True</property>
    
    24
    -        <property name="can-focus">True</property>
    
    25
    -        <property name="headers-visible">False</property>
    
    26
    -        <property name="expander-column">expander</property>
    
    27
    -        <property name="search-column">1</property>
    
    28
    -        <signal name="button-press-event" handler="_on_roster_button_press_event" swapped="no"/>
    
    29
    -        <signal name="focus-out-event" handler="_on_focus_out" swapped="no"/>
    
    30
    -        <signal name="query-tooltip" handler="_query_tooltip" swapped="no"/>
    
    31
    -        <signal name="row-activated" handler="_on_roster_row_activated" swapped="no"/>
    
    32
    -        <child internal-child="selection">
    
    33
    -          <object class="GtkTreeSelection"/>
    
    13
    +        <property name="can-focus">False</property>
    
    14
    +        <property name="margin-start">6</property>
    
    15
    +        <property name="margin-end">6</property>
    
    16
    +        <property name="margin-top">12</property>
    
    17
    +        <property name="orientation">vertical</property>
    
    18
    +        <property name="spacing">12</property>
    
    19
    +        <child>
    
    20
    +          <object class="GtkButton">
    
    21
    +            <property name="visible">True</property>
    
    22
    +            <property name="can-focus">True</property>
    
    23
    +            <property name="receives-default">True</property>
    
    24
    +            <property name="halign">center</property>
    
    25
    +            <property name="action-name">win.muc-invite</property>
    
    26
    +            <child>
    
    27
    +              <object class="GtkBox">
    
    28
    +                <property name="visible">True</property>
    
    29
    +                <property name="can-focus">False</property>
    
    30
    +                <property name="spacing">12</property>
    
    31
    +                <child>
    
    32
    +                  <object class="GtkImage">
    
    33
    +                    <property name="visible">True</property>
    
    34
    +                    <property name="can-focus">False</property>
    
    35
    +                    <property name="icon-name">contact-new-symbolic</property>
    
    36
    +                  </object>
    
    37
    +                  <packing>
    
    38
    +                    <property name="expand">False</property>
    
    39
    +                    <property name="fill">True</property>
    
    40
    +                    <property name="position">0</property>
    
    41
    +                  </packing>
    
    42
    +                </child>
    
    43
    +                <child>
    
    44
    +                  <object class="GtkLabel">
    
    45
    +                    <property name="visible">True</property>
    
    46
    +                    <property name="can-focus">False</property>
    
    47
    +                    <property name="label" translatable="yes">Invite someone…</property>
    
    48
    +                  </object>
    
    49
    +                  <packing>
    
    50
    +                    <property name="expand">False</property>
    
    51
    +                    <property name="fill">True</property>
    
    52
    +                    <property name="position">1</property>
    
    53
    +                  </packing>
    
    54
    +                </child>
    
    55
    +              </object>
    
    56
    +            </child>
    
    57
    +          </object>
    
    58
    +          <packing>
    
    59
    +            <property name="expand">False</property>
    
    60
    +            <property name="fill">True</property>
    
    61
    +            <property name="position">0</property>
    
    62
    +          </packing>
    
    34 63
             </child>
    
    35 64
             <child>
    
    36
    -          <object class="GtkTreeViewColumn" id="contact_column">
    
    37
    -            <property name="sizing">fixed</property>
    
    38
    -            <property name="fixed-width">210</property>
    
    39
    -            <property name="title">avatar</property>
    
    40
    -            <property name="expand">True</property>
    
    65
    +          <object class="GtkSearchEntry" id="search_entry">
    
    66
    +            <property name="visible">True</property>
    
    67
    +            <property name="can-focus">True</property>
    
    68
    +            <property name="primary-icon-name">edit-find-symbolic</property>
    
    69
    +            <property name="primary-icon-activatable">False</property>
    
    70
    +            <property name="primary-icon-sensitive">False</property>
    
    71
    +            <property name="placeholder-text" translatable="yes">Search Participants…</property>
    
    72
    +            <signal name="changed" handler="_on_search_changed" swapped="no"/>
    
    73
    +          </object>
    
    74
    +          <packing>
    
    75
    +            <property name="expand">False</property>
    
    76
    +            <property name="fill">True</property>
    
    77
    +            <property name="position">1</property>
    
    78
    +          </packing>
    
    79
    +        </child>
    
    80
    +      </object>
    
    81
    +      <packing>
    
    82
    +        <property name="expand">False</property>
    
    83
    +        <property name="fill">True</property>
    
    84
    +        <property name="position">0</property>
    
    85
    +      </packing>
    
    86
    +    </child>
    
    87
    +    <child>
    
    88
    +      <placeholder/>
    
    89
    +    </child>
    
    90
    +    <child>
    
    91
    +      <object class="GtkScrolledWindow" id="scrolled">
    
    92
    +        <property name="visible">True</property>
    
    93
    +        <property name="can-focus">True</property>
    
    94
    +        <property name="hscrollbar-policy">never</property>
    
    95
    +        <child>
    
    96
    +          <object class="GtkTreeView" id="roster_treeview">
    
    97
    +            <property name="visible">True</property>
    
    98
    +            <property name="can-focus">True</property>
    
    99
    +            <property name="headers-visible">False</property>
    
    100
    +            <property name="expander-column">expander</property>
    
    101
    +            <property name="enable-search">False</property>
    
    102
    +            <signal name="button-press-event" handler="_on_roster_button_press_event" swapped="no"/>
    
    103
    +            <signal name="focus-out-event" handler="_on_focus_out" swapped="no"/>
    
    104
    +            <signal name="query-tooltip" handler="_query_tooltip" swapped="no"/>
    
    105
    +            <signal name="row-activated" handler="_on_roster_row_activated" swapped="no"/>
    
    106
    +            <child internal-child="selection">
    
    107
    +              <object class="GtkTreeSelection"/>
    
    108
    +            </child>
    
    41 109
                 <child>
    
    42
    -              <object class="GtkCellRendererPixbuf" id="avatar_renderer">
    
    43
    -                <property name="width">40</property>
    
    44
    -                <property name="ypad">3</property>
    
    45
    -                <property name="xalign">0</property>
    
    110
    +              <object class="GtkTreeViewColumn" id="contact_column">
    
    111
    +                <property name="sizing">fixed</property>
    
    112
    +                <property name="fixed-width">210</property>
    
    113
    +                <property name="title">avatar</property>
    
    114
    +                <property name="expand">True</property>
    
    115
    +                <child>
    
    116
    +                  <object class="GtkCellRendererPixbuf" id="avatar_renderer">
    
    117
    +                    <property name="width">40</property>
    
    118
    +                    <property name="ypad">3</property>
    
    119
    +                    <property name="xalign">0</property>
    
    120
    +                  </object>
    
    121
    +                  <attributes>
    
    122
    +                    <attribute name="visible">2</attribute>
    
    123
    +                    <attribute name="surface">0</attribute>
    
    124
    +                  </attributes>
    
    125
    +                </child>
    
    126
    +                <child>
    
    127
    +                  <object class="GtkCellRendererText" id="text_renderer">
    
    128
    +                    <property name="ellipsize">end</property>
    
    129
    +                  </object>
    
    130
    +                  <attributes>
    
    131
    +                    <attribute name="markup">1</attribute>
    
    132
    +                  </attributes>
    
    133
    +                </child>
    
    46 134
                   </object>
    
    47
    -              <attributes>
    
    48
    -                <attribute name="visible">2</attribute>
    
    49
    -                <attribute name="surface">0</attribute>
    
    50
    -              </attributes>
    
    51 135
                 </child>
    
    52 136
                 <child>
    
    53
    -              <object class="GtkCellRendererText" id="text_renderer">
    
    54
    -                <property name="ellipsize">end</property>
    
    137
    +              <object class="GtkTreeViewColumn" id="expander">
    
    138
    +                <property name="visible">False</property>
    
    139
    +                <property name="sizing">fixed</property>
    
    140
    +                <property name="title">expander</property>
    
    55 141
                   </object>
    
    56
    -              <attributes>
    
    57
    -                <attribute name="markup">1</attribute>
    
    58
    -              </attributes>
    
    59 142
                 </child>
    
    60 143
               </object>
    
    61 144
             </child>
    
    62
    -        <child>
    
    63
    -          <object class="GtkTreeViewColumn" id="expander">
    
    64
    -            <property name="visible">False</property>
    
    65
    -            <property name="sizing">fixed</property>
    
    66
    -            <property name="title">expander</property>
    
    67
    -          </object>
    
    68
    -        </child>
    
    69 145
           </object>
    
    146
    +      <packing>
    
    147
    +        <property name="expand">True</property>
    
    148
    +        <property name="fill">True</property>
    
    149
    +        <property name="position">2</property>
    
    150
    +      </packing>
    
    70 151
         </child>
    
    71 152
         <style>
    
    72 153
           <class name="groupchat-roster"/>
    
    73 154
         </style>
    
    74 155
       </object>
    
    156
    +  <object class="GtkTreeStore" id="participant_store">
    
    157
    +    <columns>
    
    158
    +      <!-- column-name Avatar -->
    
    159
    +      <column type="CairoGObjectSurface"/>
    
    160
    +      <!-- column-name Text -->
    
    161
    +      <column type="gchararray"/>
    
    162
    +      <!-- column-name IsContact -->
    
    163
    +      <column type="gboolean"/>
    
    164
    +      <!-- column-name GroupOrNickname -->
    
    165
    +      <column type="gchararray"/>
    
    166
    +    </columns>
    
    167
    +  </object>
    
    75 168
     </interface>

  • gajim/data/gui/message_actions_box.ui
    ... ... @@ -9,55 +9,7 @@
    9 9
         <property name="hexpand">True</property>
    
    10 10
         <property name="spacing">2</property>
    
    11 11
         <child>
    
    12
    -      <object class="GtkButton" id="quick_invite_button">
    
    13
    -        <property name="visible">True</property>
    
    14
    -        <property name="can-focus">True</property>
    
    15
    -        <property name="receives-default">True</property>
    
    16
    -        <property name="tooltip-text" translatable="yes">Invite Contacts…</property>
    
    17
    -        <property name="action-name">win.invite</property>
    
    18
    -        <property name="relief">none</property>
    
    19
    -        <child>
    
    20
    -          <object class="GtkImage">
    
    21
    -            <property name="visible">True</property>
    
    22
    -            <property name="can-focus">False</property>
    
    23
    -            <property name="icon-name">list-add-symbolic</property>
    
    24
    -          </object>
    
    25
    -        </child>
    
    26
    -        <style>
    
    27
    -          <class name="message-actions-box-button"/>
    
    28
    -          <class name="flat"/>
    
    29
    -        </style>
    
    30
    -      </object>
    
    31
    -      <packing>
    
    32
    -        <property name="expand">False</property>
    
    33
    -        <property name="fill">True</property>
    
    34
    -        <property name="pack-type">end</property>
    
    35
    -        <property name="position">0</property>
    
    36
    -      </packing>
    
    37
    -    </child>
    
    38
    -    <child>
    
    39
    -      <object class="GtkMenuButton" id="settings_menu">
    
    40
    -        <property name="visible">True</property>
    
    41
    -        <property name="can-focus">True</property>
    
    42
    -        <property name="receives-default">True</property>
    
    43
    -        <property name="relief">none</property>
    
    44
    -        <child>
    
    45
    -          <object class="GtkImage">
    
    46
    -            <property name="visible">True</property>
    
    47
    -            <property name="can-focus">False</property>
    
    48
    -            <property name="icon-name">open-menu-symbolic</property>
    
    49
    -          </object>
    
    50
    -        </child>
    
    51
    -        <style>
    
    52
    -          <class name="message-actions-box-button"/>
    
    53
    -        </style>
    
    54
    -      </object>
    
    55
    -      <packing>
    
    56
    -        <property name="expand">False</property>
    
    57
    -        <property name="fill">True</property>
    
    58
    -        <property name="pack-type">end</property>
    
    59
    -        <property name="position">0</property>
    
    60
    -      </packing>
    
    12
    +      <placeholder/>
    
    61 13
         </child>
    
    62 14
         <child>
    
    63 15
           <object class="GtkButton" id="encryption_details_button">
    
    ... ... @@ -216,20 +168,17 @@
    216 168
             <property name="position">7</property>
    
    217 169
           </packing>
    
    218 170
         </child>
    
    219
    -    <child>
    
    220
    -      <placeholder/>
    
    221
    -    </child>
    
    222 171
         <child>
    
    223 172
           <object class="GtkScrolledWindow" id="input_scrolled">
    
    224 173
             <property name="visible">True</property>
    
    225 174
             <property name="can-focus">True</property>
    
    226 175
             <property name="margin-start">3</property>
    
    227 176
             <property name="margin-end">3</property>
    
    177
    +        <property name="hscrollbar-policy">external</property>
    
    228 178
             <property name="shadow-type">in</property>
    
    229 179
             <property name="overlay-scrolling">False</property>
    
    230 180
             <property name="max-content-height">100</property>
    
    231 181
             <property name="propagate-natural-height">True</property>
    
    232
    -        <property name="hscrollbar-policy">GTK_POLICY_EXTERNAL</property>
    
    233 182
             <child>
    
    234 183
               <placeholder/>
    
    235 184
             </child>
    

  • gajim/data/style/gajim.css
    ... ... @@ -968,10 +968,6 @@ .start-chat-row:not(.activatable) label { color: @insensitive_fg_color; }
    968 968
     .start-chat-row:focus { outline: none; }
    
    969 969
     
    
    970 970
     /* GroupChatRoster */
    
    971
    -.groupchat-roster {
    
    972
    -    border-left: 1px solid;
    
    973
    -    border-color: @borders;
    
    974
    -}
    
    975 971
     .groupchat-roster treeview { padding-left: 4px; }
    
    976 972
     
    
    977 973
     /* GroupchatConfig */
    

  • gajim/gtk/builder.pyi
    ... ... @@ -186,12 +186,18 @@ class CertificateBuilder(Builder):
    186 186
     
    
    187 187
     
    
    188 188
     class ChatBannerBuilder(Builder):
    
    189
    +    share_popover: Gtk.Popover
    
    190
    +    jid_label: Gtk.Label
    
    189 191
         banner_box: Gtk.Box
    
    190 192
         avatar_image: Gtk.Image
    
    191
    -    name_label: Gtk.Label
    
    192
    -    phone_image: Gtk.Image
    
    193
    +    chat_menu_button: Gtk.MenuButton
    
    193 194
         toggle_roster_button: Gtk.Button
    
    194 195
         toggle_roster_image: Gtk.Image
    
    196
    +    contact_info_button: Gtk.Button
    
    197
    +    share_menu_button: Gtk.MenuButton
    
    198
    +    name_label: Gtk.Label
    
    199
    +    phone_image: Gtk.Image
    
    200
    +    description_label: Gtk.Label
    
    195 201
         additional_items_box: Gtk.Box
    
    196 202
         visitor_box: Gtk.Box
    
    197 203
         visitor_menu_button: Gtk.MenuButton
    
    ... ... @@ -200,7 +206,7 @@ class ChatBannerBuilder(Builder):
    200 206
     
    
    201 207
     class ChatControlBuilder(Builder):
    
    202 208
         control_box: Gtk.Box
    
    203
    -    conv_view_box: Gtk.Box
    
    209
    +    conv_view_paned: Gtk.Paned
    
    204 210
         conv_view_overlay: Gtk.Overlay
    
    205 211
     
    
    206 212
     
    
    ... ... @@ -485,13 +491,15 @@ class GroupchatOutcastBuilder(Builder):
    485 491
     
    
    486 492
     
    
    487 493
     class GroupchatRosterBuilder(Builder):
    
    488
    -    participant_store: Gtk.TreeStore
    
    494
    +    box: Gtk.Box
    
    495
    +    search_entry: Gtk.SearchEntry
    
    489 496
         scrolled: Gtk.ScrolledWindow
    
    490 497
         roster_treeview: Gtk.TreeView
    
    491 498
         contact_column: Gtk.TreeViewColumn
    
    492 499
         avatar_renderer: Gtk.CellRendererPixbuf
    
    493 500
         text_renderer: Gtk.CellRendererText
    
    494 501
         expander: Gtk.TreeViewColumn
    
    502
    +    participant_store: Gtk.TreeStore
    
    495 503
     
    
    496 504
     
    
    497 505
     class GroupchatRosterTooltipBuilder(Builder):
    
    ... ... @@ -572,8 +580,6 @@ class ManageSoundsBuilder(Builder):
    572 580
     
    
    573 581
     class MessageActionsBoxBuilder(Builder):
    
    574 582
         box: Gtk.Box
    
    575
    -    quick_invite_button: Gtk.Button
    
    576
    -    settings_menu: Gtk.MenuButton
    
    577 583
         encryption_details_button: Gtk.Button
    
    578 584
         encryption_details_image: Gtk.Image
    
    579 585
         encryption_menu_button: Gtk.MenuButton
    

  • gajim/gtk/chat_banner.py
    ... ... @@ -18,6 +18,7 @@
    18 18
     from typing import Optional
    
    19 19
     
    
    20 20
     import cairo
    
    21
    +from gi.repository import Gdk
    
    21 22
     from gi.repository import GLib
    
    22 23
     from gi.repository import Gtk
    
    23 24
     
    
    ... ... @@ -38,6 +39,10 @@
    38 39
     
    
    39 40
     from gajim.gtk.builder import get_builder
    
    40 41
     from gajim.gtk.groupchat_voice_requests_button import VoiceRequestsButton
    
    42
    +from gajim.gtk.menus import get_groupchat_menu
    
    43
    +from gajim.gtk.menus import get_private_chat_menu
    
    44
    +from gajim.gtk.menus import get_self_contact_menu
    
    45
    +from gajim.gtk.menus import get_singlechat_menu
    
    41 46
     from gajim.gtk.util import AccountBadge
    
    42 47
     
    
    43 48
     
    
    ... ... @@ -93,12 +98,15 @@ def switch_contact(self, contact: types.ChatContactT) -> None:
    93 98
     
    
    94 99
             self._voice_requests_button.switch_contact(self._contact)
    
    95 100
     
    
    101
    +        self._set_chat_menu(contact)
    
    96 102
             self._update_phone_image()
    
    97 103
             self._update_roster_button()
    
    98 104
             self._update_avatar()
    
    99 105
             self._update_visitor_button()
    
    100 106
             self._update_name_label()
    
    107
    +        self._update_description_label()
    
    101 108
             self._update_account_badge()
    
    109
    +        self._update_share_box()
    
    102 110
     
    
    103 111
         def _connect_signals(self) -> None:
    
    104 112
             assert self._contact is not None
    
    ... ... @@ -212,6 +220,7 @@ def _on_muc_disco_update(self, event: MucDiscoUpdate) -> None:
    212 220
                 return
    
    213 221
     
    
    214 222
             self._update_name_label()
    
    223
    +        self._update_description_label()
    
    215 224
     
    
    216 225
         def _on_account_changed(self, event: AccountEnabled) -> None:
    
    217 226
             self._update_account_badge()
    
    ... ... @@ -232,6 +241,17 @@ def _on_message_received(self, event: MessageReceived) -> None:
    232 241
     
    
    233 242
             self._update_phone_image()
    
    234 243
     
    
    244
    +    def _set_chat_menu(self, contact: types.ChatContactT) -> None:
    
    245
    +        if isinstance(contact, GroupchatContact):
    
    246
    +            menu = get_groupchat_menu(contact)
    
    247
    +        elif isinstance(contact, GroupchatParticipant):
    
    248
    +            menu = get_private_chat_menu(contact)
    
    249
    +        elif contact.is_self:
    
    250
    +            menu = get_self_contact_menu(contact)
    
    251
    +        else:
    
    252
    +            menu = get_singlechat_menu(contact)
    
    253
    +        self._ui.chat_menu_button.set_menu_model(menu)
    
    254
    +
    
    235 255
         def _update_phone_image(self) -> None:
    
    236 256
             self._ui.phone_image.set_visible(
    
    237 257
                 self._contact in self._last_message_from_phone)
    
    ... ... @@ -283,6 +303,17 @@ def _update_name_label(self) -> None:
    283 303
     
    
    284 304
             self._ui.name_label.set_tooltip_text(tooltip_text)
    
    285 305
     
    
    306
    +    def _update_description_label(self) -> None:
    
    307
    +        assert self._contact is not None
    
    308
    +        text = ''
    
    309
    +        if self._contact.is_groupchat:
    
    310
    +            disco_info = app.storage.cache.get_last_disco_info(
    
    311
    +                self._contact.jid)
    
    312
    +            if disco_info is not None:
    
    313
    +                text = disco_info.muc_description or ''
    
    314
    +        self._ui.description_label.set_text(text)
    
    315
    +        self._ui.description_label.set_visible(bool(text))
    
    316
    +
    
    286 317
         def _update_account_badge(self) -> None:
    
    287 318
             if self._contact is None:
    
    288 319
                 self._account_badge.set_visible(False)
    
    ... ... @@ -294,6 +325,20 @@ def _update_account_badge(self) -> None:
    294 325
     
    
    295 326
             self._account_badge.set_visible(visible)
    
    296 327
     
    
    328
    +    def _update_share_box(self) -> None:
    
    329
    +        assert self._contact is not None
    
    330
    +        self._ui.share_menu_button.set_sensitive(True)
    
    331
    +        self._ui.jid_label.set_text(str(self._contact.jid))
    
    332
    +
    
    333
    +    def _on_copy_jid_clicked(self, _button: Gtk.Button) -> None:
    
    334
    +        assert self._contact is not None
    
    335
    +        text = f'xmpp:{self._contact.jid}'
    
    336
    +        if self._contact.is_groupchat:
    
    337
    +            text = f'{text}?join'
    
    338
    +        clipboard = Gtk.Clipboard.get(Gdk.SELECTION_CLIPBOARD)
    
    339
    +        clipboard.set_text(text, -1)
    
    340
    +        self._ui.share_popover.popdown()
    
    341
    +
    
    297 342
         def _on_request_voice_clicked(self, _button: Gtk.Button) -> None:
    
    298 343
             self._ui.visitor_popover.popdown()
    
    299 344
             app.window.activate_action('muc-request-voice', None)
    

  • gajim/gtk/control.py
    ... ... @@ -90,8 +90,7 @@ def __init__(self) -> None:
    90 90
             self._ui.conv_view_overlay.add_overlay(self._jump_to_end_button)
    
    91 91
     
    
    92 92
             self._roster = GroupchatRoster()
    
    93
    -
    
    94
    -        self._ui.conv_view_box.add(self._roster)
    
    93
    +        self._ui.conv_view_paned.pack2(self._roster, False, False)
    
    95 94
     
    
    96 95
             # Used with encryption plugins
    
    97 96
             self.sendmessage = False
    

  • gajim/gtk/groupchat_roster.py
    ... ... @@ -84,7 +84,7 @@ def __init__(self) -> None:
    84 84
             self._tooltip = GCTooltip()
    
    85 85
     
    
    86 86
             self._ui = get_builder('groupchat_roster.ui')
    
    87
    -        self.add(self._ui.scrolled)
    
    87
    +        self.add(self._ui.box)
    
    88 88
     
    
    89 89
             self._contact_refs: dict[str, Gtk.TreeRowReference] = {}
    
    90 90
             self._group_refs: dict[str, Gtk.TreeRowReference] = {}
    
    ... ... @@ -93,7 +93,10 @@ def __init__(self) -> None:
    93 93
             self._store.set_sort_func(Column.TEXT, self._tree_compare_iters)
    
    94 94
     
    
    95 95
             self._roster = self._ui.roster_treeview
    
    96
    -        self._roster.set_search_equal_func(self._search_func)
    
    96
    +
    
    97
    +        self._filter_string = ''
    
    98
    +        self._modelfilter = self._store.filter_new()
    
    99
    +        self._modelfilter.set_visible_func(self._visible_func)
    
    97 100
             self._roster.set_has_tooltip(True)
    
    98 101
     
    
    99 102
             self._ui.contact_column.set_fixed_width(
    
    ... ... @@ -201,14 +204,24 @@ def _query_tooltip(self,
    201 204
             tooltip.set_custom(widget)
    
    202 205
             return value
    
    203 206
     
    
    204
    -    @staticmethod
    
    205
    -    def _search_func(model: Gtk.TreeModel,
    
    206
    -                     _column: int,
    
    207
    -                     search_text: str,
    
    208
    -                     iter_: Gtk.TreeIter
    
    209
    -                     ) -> bool:
    
    207
    +    def _on_search_changed(self, widget: Gtk.SearchEntry) -> None:
    
    208
    +        self._filter_string = widget.get_text().lower()
    
    209
    +        self._modelfilter.refilter()
    
    210
    +        self._roster.expand_all()
    
    211
    +
    
    212
    +    def _visible_func(self,
    
    213
    +                      model: Gtk.TreeModelFilter,
    
    214
    +                      iter_: Gtk.TreeIter,
    
    215
    +                      *_data: Any
    
    216
    +                      ) -> bool:
    
    210 217
     
    
    211
    -        return search_text.lower() not in model[iter_][1].lower()
    
    218
    +        if not self._filter_string:
    
    219
    +            return True
    
    220
    +
    
    221
    +        if not model[iter_][Column.IS_CONTACT]:
    
    222
    +            return True
    
    223
    +
    
    224
    +        return self._filter_string in model[iter_][Column.TEXT].lower()
    
    212 225
     
    
    213 226
         def _get_group_iter(self, group_name: str) -> Optional[Gtk.TreeIter]:
    
    214 227
             try:
    
    ... ... @@ -512,7 +525,9 @@ def _load_roster(self) -> None:
    512 525
                 self._add_contact(participant)
    
    513 526
     
    
    514 527
             self.enable_sort(True)
    
    515
    -        self._roster.set_model(self._store)
    
    528
    +        self._roster.set_model(self._modelfilter)
    
    529
    +
    
    530
    +        self._ui.search_entry.set_text('')
    
    516 531
             self._roster.expand_all()
    
    517 532
     
    
    518 533
         def _unload_roster(self) -> None:
    

  • gajim/gtk/menus.py
    ... ... @@ -75,7 +75,6 @@ def get_self_contact_menu(contact: types.BareContact) -> GajimMenu:
    75 75
     
    
    76 76
         params = RemoveHistoryActionParams(account=account, jid=jid)
    
    77 77
         menu.add_item(_('Remove History…'), 'app.remove-history', params)
    
    78
    -    menu.add_item(_('Search…'), 'win.search-history', None)
    
    79 78
         return menu
    
    80 79
     
    
    81 80
     
    
    ... ... @@ -83,7 +82,6 @@ def get_singlechat_menu(contact: types.BareContact) -> GajimMenu:
    83 82
         account = contact.account
    
    84 83
     
    
    85 84
         menu = GajimMenu()
    
    86
    -    menu.add_item(_('Details'), 'win.show-contact-info')
    
    87 85
         menu.add_item(_('Block Contact…'),
    
    88 86
                       f'app.{account}-block-contact',
    
    89 87
                       str(contact.jid))
    
    ... ... @@ -94,8 +92,6 @@ def get_singlechat_menu(contact: types.BareContact) -> GajimMenu:
    94 92
         menu.add_item(_('Start Voice Call…'), 'win.start-voice-call')
    
    95 93
         menu.add_item(_('Start Video Call…'), 'win.start-video-call')
    
    96 94
     
    
    97
    -    menu.add_item(_('Search…'), 'win.search-history', None)
    
    98
    -
    
    99 95
         if can_add_to_roster(contact):
    
    100 96
             params = AccountJidParam(account=account, jid=contact.jid)
    
    101 97
             menu.add_item(_('Add to Contact List…'), 'win.add-to-roster', params)
    
    ... ... @@ -108,9 +104,7 @@ def get_private_chat_menu(contact: types.GroupchatParticipant) -> GajimMenu:
    108 104
     
    
    109 105
         value = GLib.Variant('as', [''])
    
    110 106
     
    
    111
    -    menu.add_item(_('Details'), 'win.show-contact-info')
    
    112 107
         menu.add_item(_('Upload File…'), 'win.send-file-httpupload', value)
    
    113
    -    menu.add_item(_('Search…'), 'win.search-history')
    
    114 108
     
    
    115 109
         if can_add_to_roster(contact):
    
    116 110
             params = AccountJidParam(account=contact.account, jid=contact.jid)
    
    ... ... @@ -131,11 +125,9 @@ def get_send_file_submenu() -> GajimMenu:
    131 125
     
    
    132 126
     def get_groupchat_menu(contact: GroupchatContact) -> GajimMenu:
    
    133 127
         menuitems: MenuItemListT = [
    
    134
    -        (_('Details'), 'win.show-contact-info', None),
    
    135 128
             (_('Change Nickname…'), 'win.muc-change-nickname', None),
    
    136 129
             (_('Request Voice'), 'win.muc-request-voice', None),
    
    137 130
             (_('Execute Command…'), 'win.muc-execute-command', ''),
    
    138
    -        (_('Search…'), 'win.search-history', None)
    
    139 131
         ]
    
    140 132
     
    
    141 133
         return GajimMenu.from_list(menuitems)
    

  • gajim/gtk/message_actions_box.py
    ... ... @@ -44,10 +44,6 @@
    44 44
     from gajim.gtk.dialogs import ErrorDialog
    
    45 45
     from gajim.gtk.menus import get_encryption_menu
    
    46 46
     from gajim.gtk.menus import get_format_menu
    
    47
    -from gajim.gtk.menus import get_groupchat_menu
    
    48
    -from gajim.gtk.menus import get_private_chat_menu
    
    49
    -from gajim.gtk.menus import get_self_contact_menu
    
    50
    -from gajim.gtk.menus import get_singlechat_menu
    
    51 47
     from gajim.gtk.message_input import MessageInputTextView
    
    52 48
     from gajim.gtk.security_label_selector import SecurityLabelSelector
    
    53 49
     
    
    ... ... @@ -93,8 +89,6 @@ def __init__(self) -> None:
    93 89
             self._ui.formattings_button.set_menu_model(get_format_menu())
    
    94 90
             self._ui.encryption_menu_button.set_menu_model(get_encryption_menu())
    
    95 91
     
    
    96
    -        self._ui.quick_invite_button.set_action_name('win.muc-invite')
    
    97
    -
    
    98 92
             self.show_all()
    
    99 93
             self._ui.connect_signals(self)
    
    100 94
     
    
    ... ... @@ -181,23 +175,17 @@ def switch_contact(self, contact: ChatContactT) -> None:
    181 175
             self._contact = contact
    
    182 176
     
    
    183 177
             if isinstance(self._contact, GroupchatContact):
    
    184
    -            self._ui.quick_invite_button.show()
    
    185 178
                 self._contact.multi_connect({
    
    186 179
                     'state-changed': self._on_muc_state_changed,
    
    187 180
                     'user-role-changed': self._on_muc_state_changed,
    
    188 181
                 })
    
    189 182
             elif isinstance(self._contact, GroupchatParticipant):
    
    190
    -            self._ui.quick_invite_button.hide()
    
    191 183
                 self._contact.multi_connect({
    
    192 184
                     'user-joined': self._on_user_state_changed,
    
    193 185
                     'user-left': self._on_user_state_changed,
    
    194 186
                     'room-joined': self._on_user_state_changed,
    
    195 187
                     'room-left': self._on_user_state_changed,
    
    196 188
                 })
    
    197
    -        else:
    
    198
    -            self._ui.quick_invite_button.hide()
    
    199
    -
    
    200
    -        self._set_settings_menu(contact)
    
    201 189
     
    
    202 190
             self._update_encryption_button()
    
    203 191
             self._update_encryption_details_button()
    
    ... ... @@ -374,17 +362,6 @@ def _on_encryption_details_clicked(self, _button: Gtk.Button) -> None:
    374 362
             app.plugin_manager.extension_point(
    
    375 363
                 f'encryption_dialog{encryption}', app.window.get_control())
    
    376 364
     
    
    377
    -    def _set_settings_menu(self, contact: ChatContactT) -> None:
    
    378
    -        if isinstance(contact, GroupchatContact):
    
    379
    -            menu = get_groupchat_menu(contact)
    
    380
    -        elif isinstance(contact, GroupchatParticipant):
    
    381
    -            menu = get_private_chat_menu(contact)
    
    382
    -        elif contact.is_self:
    
    383
    -            menu = get_self_contact_menu(contact)
    
    384
    -        else:
    
    385
    -            menu = get_singlechat_menu(contact)
    
    386
    -        self._ui.settings_menu.set_menu_model(menu)
    
    387
    -
    
    388 365
         def _on_format(self, name: str) -> None:
    
    389 366
             name = name.removeprefix('input-')
    
    390 367
             self.msg_textview.apply_formatting(name)