Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package gnunet-messenger-gtk for 
openSUSE:Factory checked in at 2025-10-01 18:56:05
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gnunet-messenger-gtk (Old)
 and      /work/SRC/openSUSE:Factory/.gnunet-messenger-gtk.new.11973 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gnunet-messenger-gtk"

Wed Oct  1 18:56:05 2025 rev:5 rq:1308237 version:0.11.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/gnunet-messenger-gtk/gnunet-messenger-gtk.changes    
    2025-01-15 17:45:55.063431105 +0100
+++ 
/work/SRC/openSUSE:Factory/.gnunet-messenger-gtk.new.11973/gnunet-messenger-gtk.changes
     2025-10-01 18:56:36.789540935 +0200
@@ -1,0 +2,11 @@
+Fri Sep 26 18:59:20 UTC 2025 - Andreas Stieger <[email protected]>
+
+- Update to version 0.11.0
+  * Utilize new features from libgnunetchat 0.6.0
+  * Implement private notes chat
+  * Update symbolic icons
+  * Adjust appdata and user interface
+  * Fix thread locking issues
+  * Improve readability of invitations
+
+-------------------------------------------------------------------

Old:
----
  messenger-gtk-0.10.2.tar.gz
  messenger-gtk-0.10.2.tar.gz.sig

New:
----
  messenger-gtk-0.11.0.tar.gz
  messenger-gtk-0.11.0.tar.gz.sig

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gnunet-messenger-gtk.spec ++++++
--- /var/tmp/diff_new_pack.bMXISF/_old  2025-10-01 18:56:37.517571422 +0200
+++ /var/tmp/diff_new_pack.bMXISF/_new  2025-10-01 18:56:37.521571589 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gnunet-messenger-gtk
-Version:        0.10.2
+Version:        0.11.0
 Release:        0
 Summary:        GUI for GNUnet Messenger service
 License:        AGPL-3.0-or-later
@@ -31,7 +31,7 @@
 BuildRequires:  meson
 BuildRequires:  pkgconfig
 BuildRequires:  pkgconfig(glib-2.0)
-BuildRequires:  pkgconfig(gnunetchat) >= 0.5.1
+BuildRequires:  pkgconfig(gnunetchat) >= 0.6.0
 BuildRequires:  pkgconfig(gnunetutil)
 BuildRequires:  pkgconfig(gstreamer-1.0)
 BuildRequires:  pkgconfig(gstreamer-rtp-1.0)


++++++ messenger-gtk-0.10.2.tar.gz -> messenger-gtk-0.11.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/.github/workflows/linux.yml 
new/messenger-gtk-0.11.0/.github/workflows/linux.yml
--- old/messenger-gtk-0.10.2/.github/workflows/linux.yml        2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/.github/workflows/linux.yml        2025-09-17 
21:38:22.000000000 +0200
@@ -20,7 +20,7 @@
       - name: Install dependencies (framework)
         run: |
           sudo apt-get -qq update
-          sudo apt-get -qq install automake autoconf autopoint gcc gettext 
recutils uncrustify yapf3
+          sudo apt-get -qq install meson ninja-build gcc gettext recutils 
uncrustify yapf3
           sudo apt-get -qq install python3-sphinx python3-sphinx-multiversion 
python3-sphinx-rtd-theme
           sudo apt-get -qq install libgcrypt20-dev libjansson-dev 
libsodium-dev libcurl4-gnutls-dev libidn2-dev libunistring-dev libsqlite3-dev 
libmicrohttpd-dev libltdl-dev
 
@@ -28,9 +28,9 @@
         run: |
           cd gnunet
           ./bootstrap
-          ./configure --prefix=/usr --disable-documentation
-          make -j $(nproc)
-          sudo make install
+          meson setup --prefix=/usr --libdir=lib build
+          meson compile -C build
+          sudo meson install -C build
           cd ..
 
       - name: Checkout library
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/.version 
new/messenger-gtk-0.11.0/.version
--- old/messenger-gtk-0.10.2/.version   2025-01-11 21:56:22.088754200 +0100
+++ new/messenger-gtk-0.11.0/.version   2025-09-19 18:28:29.138614000 +0200
@@ -1 +1 @@
-0.10.2
+0.11.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/ChangeLog 
new/messenger-gtk-0.11.0/ChangeLog
--- old/messenger-gtk-0.10.2/ChangeLog  2025-01-08 18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/ChangeLog  2025-09-17 21:38:22.000000000 +0200
@@ -1,3 +1,11 @@
+## Version 0.11.0
+* Utilize new features from libgnunetchat 0.6.0
+* Implement private notes chat
+* Update symbolic icons
+* Adjust appdata and user interface
+* Fix thread locking issues
+* Improve readability of invitations
+
 ## Version 0.10.2
 * Fixes compatibility with libgnunetchat 0.5.2
 * Update appdata to current state
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/README.md 
new/messenger-gtk-0.11.0/README.md
--- old/messenger-gtk-0.10.2/README.md  2025-01-08 18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/README.md  2025-09-17 21:38:22.000000000 +0200
@@ -8,7 +8,7 @@
 
 ## Features
 
-Messenger-GTK is a convergent GTK messaging application using the GNUnet 
Messenger service. The goal is to provide private and secure communication 
between any group of devices.
+Messenger-GTK is a convergent graphical messaging application using the GNUnet 
Messenger service. The goal is to provide private and secure communication 
between any group of devices.
 
 The application provides the following features:
 
@@ -25,6 +25,7 @@
  - Switching between different accounts
  - Chatting live via video or voice streaming
  - Sharing your screen with a selected group
+ - Writing notes to yourself
 
 Chats will generally created as opt-in. So you can decide who may contact you 
directly and who does not, accepting to a direct chat. Leaving a chat is also 
always possible.
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/css/style.css 
new/messenger-gtk-0.11.0/resources/css/style.css
--- old/messenger-gtk-0.10.2/resources/css/style.css    2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/css/style.css    2025-09-17 
21:38:22.000000000 +0200
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2021--2024 GNUnet e.V.
+   Copyright (C) 2021--2025 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -70,6 +70,10 @@
        background-color: @error_color;
 }
 
+.chat-view {
+       border-bottom: 1px solid mix(black, @theme_bg_color, 0.6);
+}
+
 .message-avatar {
        margin: 4px;
 }
@@ -85,11 +89,17 @@
        background-color: mix(@theme_bg_color, @theme_fg_color, 0.1);
        color: @theme_fg_color;
        margin-right: 20px;
+       box-shadow: 3px 3px 2px alpha(black, 0.25);
 }
 
 .message-box.sent {
        background-color: mix(@theme_bg_color, @theme_selected_bg_color, 0.8);
        color: @theme_selected_fg_color;
+       box-shadow: -3px 3px 2px alpha(black, 0.25);
+}
+
+.message-box.status {
+       box-shadow: 0px 3px 2px alpha(black, 0.25);
 }
 
 .message-box.sent, .message-box.status {
@@ -108,6 +118,10 @@
        font-size: 12px;
 }
 
+.picker-switcher-bar {
+       border-bottom: 1px solid mix(black, @theme_bg_color, 0.6);
+}
+
 .picker-switcher-box {
        padding: 0px 8px;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/messenger-gtk-0.10.2/resources/org.gnunet.Messenger.appdata.xml 
new/messenger-gtk-0.11.0/resources/org.gnunet.Messenger.appdata.xml
--- old/messenger-gtk-0.10.2/resources/org.gnunet.Messenger.appdata.xml 
2025-01-08 18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/org.gnunet.Messenger.appdata.xml 
2025-09-17 21:38:22.000000000 +0200
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Copyright 2022-2024 GNUnet e.V. -->
+<!-- Copyright 2022-2025 GNUnet e.V. -->
 <component type="desktop">
        <id>org.gnunet.Messenger</id>
        <metadata_license>CC0-1.0</metadata_license>
@@ -16,7 +16,7 @@
        <name>GNUnet Messenger</name>
        <summary>Private and secure communication</summary>
        <description>
-               <p>Messenger-GTK is a convergent GTK messaging application 
using the GNUnet Messenger service. The goal is to provide private and secure 
communication between any group of devices.</p>
+               <p>Messenger-GTK is a convergent graphical messaging 
application using the GNUnet Messenger service. The goal is to provide private 
and secure communication between any group of devices.</p>
                <p>The application provides the following features:</p>
                <ul>
                        <li>Creating direct chats and group chats</li>
@@ -32,6 +32,7 @@
                        <li>Switching between different accounts</li>
                        <li>Chatting live via video or voice streaming</li>
                        <li>Sharing your screen with a selected group</li>
+                       <li>Writing notes to yourself</li>
                </ul>
                <p>Chats will generally created as opt-in. So you can decide 
who may contact you directly and who does not, accepting to a direct chat. 
Leaving a chat is also always possible.</p>
        </description>
@@ -67,18 +68,26 @@
        <url type="vcs-browser">https://git.gnunet.org/messenger-gtk.git</url>
        <url 
type="contribute">https://git.gnunet.org/messenger-gtk.git/about</url>
        
-       <update_contact>thejackimonster_at_gmail.com</update_contact>
+       <update_contact>gnunet_at_thejackimonster.de</update_contact>
 
        <launchable type="desktop-id">org.gnunet.Messenger.desktop</launchable>
        <releases>
-         <release version="0.10.2" date="2024-01-08">
+         <release version="0.11.0" date="2025-09-17">
+                       <description>
+                               <ul>
+                                 <li>Private chats for writing notes to 
yourself can be opened</li>
+                               </ul>
+                       </description>
+                       
<url>https://www.gnunet.org/en/news/2025-09-libgnunetchat-0.6.0.html</url>
+         </release>
+         <release version="0.10.2" date="2025-01-08">
                        <description>
                                <ul>
                                  <li>Notifications play sounds if enabled.</li>
                                  <li>Contacts can be filtered by tags.</li>
                                </ul>
                        </description>
-                       
<url>https://www.gnunet.org/en/news/2024-06-0.21.2.html</url>
+                       
<url>https://www.gnunet.org/en/news/2025-01-libgnunetchat-0.5.2.html</url>
                </release>
          <release version="0.10.1" date="2024-08-29">
                        <description>
@@ -87,7 +96,7 @@
                                  <li>Capturing a specific application or a 
whole monitor can be selected as video source in a live chat.</li>
                                </ul>
                        </description>
-                       
<url>https://www.gnunet.org/en/news/2024-06-0.21.2.html</url>
+                       
<url>https://www.gnunet.org/en/news/2024-08-0.22.0.html</url>
                </release>
          <release version="0.10.0" date="2024-06-09">
                        <description>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/chat.ui 
new/messenger-gtk-0.11.0/resources/ui/chat.ui
--- old/messenger-gtk-0.10.2/resources/ui/chat.ui       2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/chat.ui       2025-09-17 
21:38:22.000000000 +0200
@@ -79,6 +79,9 @@
                     </child>
                   </object>
                 </child>
+                <style>
+                  <class name="chat-view"/>
+                </style>
               </object>
               <packing>
                 <property name="expand">True</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/chat_entry.ui 
new/messenger-gtk-0.11.0/resources/ui/chat_entry.ui
--- old/messenger-gtk-0.10.2/resources/ui/chat_entry.ui 2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/chat_entry.ui 2025-09-17 
21:38:22.000000000 +0200
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2 
+<!-- Generated with glade 3.40.0 
 
 Copyright (C) 2021 GNUnet e.V.
 
@@ -112,7 +112,7 @@
             <child>
               <object class="GtkImage" id="read_receipt_image">
                 <property name="can-focus">False</property>
-                <property name="icon-name">emblem-default-symbolic</property>
+                <property 
name="icon-name">mail-mark-notjunk-symbolic</property>
               </object>
               <packing>
                 <property name="expand">False</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/contact_info.ui 
new/messenger-gtk-0.11.0/resources/ui/contact_info.ui
--- old/messenger-gtk-0.10.2/resources/ui/contact_info.ui       2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/contact_info.ui       2025-09-17 
21:38:22.000000000 +0200
@@ -269,7 +269,7 @@
                                   <object class="GtkImage">
                                     <property name="visible">True</property>
                                     <property name="can-focus">False</property>
-                                    <property 
name="icon-name">emblem-documents-symbolic</property>
+                                    <property 
name="icon-name">view-list-symbolic</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -313,7 +313,7 @@
                                   <object class="GtkImage">
                                     <property name="visible">True</property>
                                     <property name="can-focus">False</property>
-                                    <property 
name="icon-name">emblem-shared-symbolic</property>
+                                    <property 
name="icon-name">folder-publicshare-symbolic</property>
                                   </object>
                                   <packing>
                                     <property name="expand">False</property>
@@ -493,33 +493,79 @@
                             <property name="can-focus">True</property>
                             <property name="receives-default">True</property>
                             <child>
-                              <object class="GtkBox">
+                              <object class="GtkStack" id="open_chat_stack">
                                 <property name="visible">True</property>
                                 <property name="can-focus">False</property>
-                                <property name="spacing">4</property>
                                 <child>
-                                  <object class="GtkImage">
+                                  <object class="GtkBox">
                                     <property name="visible">True</property>
                                     <property name="can-focus">False</property>
-                                    <property 
name="icon-name">user-available-symbolic</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property 
name="icon-name">user-available-symbolic</property>
+                                      </object>
+                                      <packing>
+                                        <property 
name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property 
name="margin-end">16</property>
+                                        <property name="label" 
translatable="yes">Open Private Chat</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property 
name="pack-type">end</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                   <packing>
-                                    <property name="expand">False</property>
-                                    <property name="fill">True</property>
-                                    <property name="position">0</property>
+                                    <property 
name="name">open_private_chat_page</property>
                                   </packing>
                                 </child>
                                 <child>
-                                  <object class="GtkLabel">
+                                  <object class="GtkBox">
                                     <property name="visible">True</property>
                                     <property name="can-focus">False</property>
-                                    <property name="margin-end">16</property>
-                                    <property name="label" 
translatable="yes">Open Private Chat</property>
+                                    <property name="spacing">4</property>
+                                    <child>
+                                      <object class="GtkImage">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property 
name="icon-name">view-paged-symbolic</property>
+                                      </object>
+                                      <packing>
+                                        <property 
name="expand">False</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <object class="GtkLabel">
+                                        <property 
name="visible">True</property>
+                                        <property 
name="can-focus">False</property>
+                                        <property 
name="margin-end">16</property>
+                                        <property name="label" 
translatable="yes">Open Notes</property>
+                                      </object>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property 
name="pack-type">end</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
                                   </object>
                                   <packing>
-                                    <property name="expand">True</property>
-                                    <property name="fill">True</property>
-                                    <property name="pack-type">end</property>
+                                    <property 
name="name">open_notes_page</property>
                                     <property name="position">1</property>
                                   </packing>
                                 </child>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/files.ui 
new/messenger-gtk-0.11.0/resources/ui/files.ui
--- old/messenger-gtk-0.10.2/resources/ui/files.ui      2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/files.ui      2025-09-17 
21:38:22.000000000 +0200
@@ -119,7 +119,7 @@
                     <property name="visible">True</property>
                     <property name="can-focus">False</property>
                     <property name="pixel-size">64</property>
-                    <property 
name="icon-name">emblem-documents-symbolic</property>
+                    <property 
name="icon-name">folder-documents-symbolic</property>
                     <property name="icon_size">3</property>
                   </object>
                   <packing>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/message-status.ui 
new/messenger-gtk-0.11.0/resources/ui/message-status.ui
--- old/messenger-gtk-0.10.2/resources/ui/message-status.ui     2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/message-status.ui     2025-09-17 
21:38:22.000000000 +0200
@@ -58,7 +58,7 @@
                           <object class="GtkImage">
                             <property name="visible">True</property>
                             <property name="can-focus">False</property>
-                            <property 
name="icon-name">edit-delete-symbolic</property>
+                            <property 
name="icon-name">window-close-symbolic</property>
                           </object>
                         </child>
                       </object>
@@ -100,7 +100,7 @@
                           <object class="GtkImage">
                             <property name="visible">True</property>
                             <property name="can-focus">False</property>
-                            <property 
name="icon-name">emblem-ok-symbolic</property>
+                            <property 
name="icon-name">object-select-symbolic</property>
                           </object>
                         </child>
                       </object>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/message_content.ui 
new/messenger-gtk-0.11.0/resources/ui/message_content.ui
--- old/messenger-gtk-0.10.2/resources/ui/message_content.ui    2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/message_content.ui    2025-09-17 
21:38:22.000000000 +0200
@@ -35,7 +35,7 @@
         <child>
           <object class="GtkImage" id="read_receipt_image">
             <property name="can-focus">False</property>
-            <property name="icon-name">emblem-default-symbolic</property>
+            <property name="icon-name">mail-mark-notjunk-symbolic</property>
           </object>
           <packing>
             <property name="expand">False</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/messenger.ui 
new/messenger-gtk-0.11.0/resources/ui/messenger.ui
--- old/messenger-gtk-0.10.2/resources/ui/messenger.ui  2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/messenger.ui  2025-09-17 
21:38:22.000000000 +0200
@@ -568,7 +568,7 @@
                                               <object class="GtkImage">
                                                 <property 
name="visible">True</property>
                                                 <property 
name="can-focus">False</property>
-                                                <property 
name="icon-name">emblem-system-symbolic</property>
+                                                <property 
name="icon-name">applications-system-symbolic</property>
                                                 <property 
name="icon_size">3</property>
                                               </object>
                                               <packing>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/picker.ui 
new/messenger-gtk-0.11.0/resources/ui/picker.ui
--- old/messenger-gtk-0.10.2/resources/ui/picker.ui     2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/picker.ui     2025-09-17 
21:38:22.000000000 +0200
@@ -57,6 +57,9 @@
                     </child>
                   </object>
                 </child>
+                <style>
+                  <class name="picker-switcher-bar"/>
+                </style>
               </object>
               <packing>
                 <property name="expand">False</property>
@@ -71,7 +74,6 @@
                 <child>
                   <object class="GtkScrolledWindow" id="recent_emoji_page">
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -102,7 +104,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -134,7 +135,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -166,7 +166,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -198,7 +197,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -230,7 +228,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -262,7 +259,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -294,7 +290,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
@@ -326,7 +321,6 @@
                   <object class="GtkScrolledWindow">
                     <property name="visible">True</property>
                     <property name="can-focus">True</property>
-                    <property name="shadow-type">in</property>
                     <child>
                       <object class="GtkViewport">
                         <property name="visible">True</property>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/resources/ui/play_media.ui 
new/messenger-gtk-0.11.0/resources/ui/play_media.ui
--- old/messenger-gtk-0.10.2/resources/ui/play_media.ui 2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/resources/ui/play_media.ui 2025-09-17 
21:38:22.000000000 +0200
@@ -324,7 +324,7 @@
                           <object class="GtkImage">
                             <property name="visible">True</property>
                             <property name="can-focus">False</property>
-                            <property 
name="icon-name">emblem-system-symbolic</property>
+                            <property 
name="icon-name">preferences-other-symbolic</property>
                           </object>
                         </child>
                       </object>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/snap/snapcraft.yaml 
new/messenger-gtk-0.11.0/snap/snapcraft.yaml
--- old/messenger-gtk-0.10.2/snap/snapcraft.yaml        2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/snap/snapcraft.yaml        2025-09-17 
21:38:22.000000000 +0200
@@ -1,5 +1,5 @@
 name: messenger-gtk
-version: 0.10.1
+version: 0.11.0
 title: GNUnet Messenger
 summary: A GTK based GUI for the Messenger service of GNUnet.
 description: |
@@ -17,6 +17,9 @@
   * Exchanging contact details physically
   * Verifying contact identities
   * Switching between different accounts
+  * Chatting live via video or voice streaming
+  * Sharing your screen with a selected group
+  * Writing notes to yourself
   
   Chats will generally created as opt-in. So you can decide who may contact 
you directly and who does not, accepting to a direct chat. Leaving a chat is 
also always possible.
 adopt-info: messenger-gtk
@@ -29,9 +32,6 @@
   amd64:
     build-on: [amd64]
     build-for: [amd64]
-  armhf:
-    build-on: [armhf]
-    build-for: [armhf]
   arm64:
     build-on: [arm64]
     build-for: [arm64]
@@ -82,14 +82,14 @@
       - libgnutls-dane0
       - libunbound8
       - libltdl7
-    source: http://ftp.gnu.org/gnu/gnunet/gnunet-0.22.0.tar.gz
-    plugin: autotools
-    autotools-configure-parameters:
+    source: http://ftp.gnu.org/gnu/gnunet/gnunet-0.25.0.tar.gz
+    plugin: meson
+    meson-parameters:
       - --prefix=/usr
-      - --disable-documentation
+      - --buildtype=release
   libgnunetchat:
     after: [ gnunet ]
-    source: http://ftp.gnu.org/gnu/gnunet/libgnunetchat-0.5.1.tar.gz
+    source: http://ftp.gnu.org/gnu/gnunet/libgnunetchat-0.6.0.tar.gz
     plugin: meson
     meson-parameters:
       - --prefix=/usr
@@ -120,7 +120,7 @@
       - libpipewire-0.3-0t64
       - libportal1
       - libportal-gtk3-1
-    source: http://ftp.gnu.org/gnu/gnunet/messenger-gtk-0.10.1.tar.gz
+    source: http://ftp.gnu.org/gnu/gnunet/messenger-gtk-0.11.0.tar.gz
     plugin: meson
     meson-parameters:
       - --prefix=/usr
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/event.c 
new/messenger-gtk-0.11.0/src/event.c
--- old/messenger-gtk-0.10.2/src/event.c        2025-01-08 18:17:48.000000000 
+0100
+++ new/messenger-gtk-0.11.0/src/event.c        2025-09-17 21:38:22.000000000 
+0200
@@ -35,6 +35,7 @@
 #include "ui/chat_title.h"
 #include "ui/message.h"
 
+#include <glib-2.0/glib.h>
 #include <gnunet/gnunet_chat_lib.h>
 #include <gnunet/gnunet_common.h>
 #include <stdio.h>
@@ -650,29 +651,24 @@
 }
 
 static void
-_event_invitation_accept_click(UNUSED GtkButton *button,
-                               gpointer user_data)
+_event_invitation_action(MESSENGER_Application *app,
+                         gboolean status,
+                         gpointer user_data)
 {
-  g_assert(user_data);
+  g_assert((app) && (user_data));
 
   struct GNUNET_CHAT_Invitation *invitation = (
     (struct GNUNET_CHAT_Invitation*) user_data
   );
 
-  GNUNET_CHAT_invitation_accept(invitation);
-}
+  application_chat_lock(app);
 
-static void
-_event_invitation_deny_click(UNUSED GtkButton *button,
-                             gpointer user_data)
-{
-  g_assert(user_data);
-
-  struct GNUNET_CHAT_Invitation *invitation = (
-    (struct GNUNET_CHAT_Invitation*) user_data
-  );
+  if (status)
+    GNUNET_CHAT_invitation_accept(invitation);
+  else
+    GNUNET_CHAT_invitation_reject(invitation);
 
-  GNUNET_CHAT_invitation_reject(invitation);
+  application_chat_unlock(app);
 }
 
 void
@@ -693,68 +689,76 @@
   if (!invitation)
     return;
 
-  if (app->settings.delete_invitations_delay > 0)
-    GNUNET_CHAT_message_delete(
-      msg,
-      app->settings.delete_invitations_delay
-    );
+  UI_MESSAGE_Handle *message = GNUNET_CHAT_message_get_user_pointer(msg);
+  enum GNUNET_GenericReturnValue new_message = GNUNET_NO;
 
-  const int sent = GNUNET_CHAT_message_is_sent(msg);
-
-  if ((GNUNET_YES != sent) && (app->settings.send_read_receipts))
-    GNUNET_CHAT_context_send_read_receipt(context, msg);
+  if (!message)
+  {
+    if (app->settings.delete_invitations_delay > 0)
+      GNUNET_CHAT_message_delete(
+        msg,
+        app->settings.delete_invitations_delay
+      );
 
-  UI_MESSAGE_Handle *message = ui_message_new(app, UI_MESSAGE_STATUS);
-  ui_message_update(message, app, msg);
+    const enum GNUNET_GenericReturnValue sent =
+      GNUNET_CHAT_message_is_sent(msg);
 
-  struct GNUNET_CHAT_Contact *sender = GNUNET_CHAT_message_get_sender(
-    msg
-  );
+    if ((GNUNET_YES != sent) && (app->settings.send_read_receipts))
+      GNUNET_CHAT_context_send_read_receipt(context, msg);
 
-  struct GNUNET_CHAT_Contact *recipient = GNUNET_CHAT_message_get_recipient(
-    msg
-  );
+    message = ui_message_new(app, UI_MESSAGE_STATUS);
+    new_message = GNUNET_YES;
+  }
 
-  ui_message_set_contact(message, sender);
+  if (!message)
+    return;
 
-  const char *invite_message = _("invited %s to a chat");
-  const char *recipient_name = (
-    (recipient) && 
-    (GNUNET_YES != GNUNET_CHAT_contact_is_owned(recipient))
-  )? GNUNET_CHAT_contact_get_name(recipient) : _("you");
+  ui_message_update(message, app, msg);
 
-  GString *message_string = g_string_new(NULL);
-  g_string_printf(message_string, invite_message, recipient_name);
+  if (GNUNET_YES == new_message)
+  {
+    struct GNUNET_CHAT_Contact *sender = GNUNET_CHAT_message_get_sender(
+      msg
+    );
 
-  if ((!ui_messenger_is_context_active(&(app->ui.messenger), context)) &&
-      (GNUNET_YES == GNUNET_CHAT_message_is_recent(msg)))
-    _show_notification(
-           app,
-      context,
-      sender,
-      message_string->str,
-      "mail-message-new-symbolic",
-      "im.received"
+    struct GNUNET_CHAT_Contact *recipient = GNUNET_CHAT_message_get_recipient(
+      msg
     );
 
-  ui_label_set_text(message->text_label, message_string->str);
-  g_string_free(message_string, TRUE);
+    ui_message_set_contact(message, sender);
 
-  g_signal_connect(
-    message->accept_button,
-    "clicked",
-    G_CALLBACK(_event_invitation_accept_click),
-    invitation
-  );
+    const char *invite_message = (
+      GNUNET_YES != GNUNET_CHAT_invitation_is_direct(invitation)
+    )? _("invited %s to a chat") : _("requested %s to chat");
+
+    const char *recipient_name = (
+      (recipient) && 
+      (GNUNET_YES != GNUNET_CHAT_contact_is_owned(recipient))
+    )? GNUNET_CHAT_contact_get_name(recipient) : _("you");
+
+    GString *message_string = g_string_new(NULL);
+    g_string_printf(message_string, invite_message, recipient_name);
+
+    if ((!ui_messenger_is_context_active(&(app->ui.messenger), context)) &&
+        (GNUNET_YES == GNUNET_CHAT_message_is_recent(msg)))
+      _show_notification(
+        app,
+        context,
+        sender,
+        message_string->str,
+        "mail-message-new-symbolic",
+        "im.received"
+      );
 
-  g_signal_connect(
-    message->deny_button,
-    "clicked",
-    G_CALLBACK(_event_invitation_deny_click),
-    invitation
-  );
+    ui_label_set_text(message->text_label, message_string->str);
+    g_string_free(message_string, TRUE);
 
-  ui_chat_add_message(handle->chat, app, message);
+    ui_message_set_status_callback(
+      message, _event_invitation_action, invitation
+    );
+
+    ui_chat_add_message(handle->chat, app, message);
+  }
 
   enqueue_chat_entry_update(handle);
 }
@@ -843,6 +847,45 @@
   enqueue_chat_entry_update(handle);
 }
 
+static UI_MESSAGE_Handle*
+_find_ui_message_handle(MESSENGER_Application *app,
+                        struct GNUNET_CHAT_Context *context,
+                        struct GNUNET_CHAT_Message *msg)
+{
+  g_assert((app) && (context) && (msg));
+
+  UI_CHAT_ENTRY_Handle *handle = GNUNET_CHAT_context_get_user_pointer(context);
+
+  if ((!handle) || (!(handle->chat)))
+    return NULL;
+
+  UI_MESSAGE_Handle *message = GNUNET_CHAT_message_get_user_pointer(msg);
+
+  if (!message)
+  {
+    GList *rows = gtk_container_get_children(
+      GTK_CONTAINER(handle->chat->messages_listbox)
+    );
+
+    for (GList *row = rows; row; row = row->next)
+    {
+      message = (UI_MESSAGE_Handle*) g_object_get_qdata(
+        G_OBJECT(row->data), app->quarks.ui
+      );
+
+      if ((message) && (message->msg == msg))
+        break;
+
+      message = NULL;
+    }
+
+    if (rows)
+      g_list_free(rows);
+  }
+
+  return message;
+}
+
 static void
 _event_update_tag_message_state(MESSENGER_Application *app,
                                 struct GNUNET_CHAT_Context *context,
@@ -867,29 +910,15 @@
   if ((!handle) || (!(handle->chat)))
     return;
 
-  GList *rows = gtk_container_get_children(
-    GTK_CONTAINER(handle->chat->messages_listbox)
-  );
-
-  for (GList *row = rows; row; row = row->next)
-  {
-    UI_MESSAGE_Handle *message = (UI_MESSAGE_Handle*) g_object_get_qdata(
-      G_OBJECT(row->data), app->quarks.ui
-    );
-
-    if ((message) && (message->msg == target))
-    {
-      if (GNUNET_YES == GNUNET_CHAT_message_is_deleted(msg))
-        ui_message_remove_tag(message, app, msg);
-      else
-        ui_message_add_tag(message, app, msg);
+  UI_MESSAGE_Handle *message = _find_ui_message_handle(app, context, target);
 
-      break;
-    }
-  }
+  if (!message)
+    return;
 
-  if (rows)
-    g_list_free(rows);
+  if (GNUNET_YES == GNUNET_CHAT_message_is_deleted(msg))
+    ui_message_remove_tag(message, app, msg);
+  else
+    ui_message_add_tag(message, app, msg);
 }
 
 void
@@ -904,25 +933,10 @@
   if ((!handle) || (!(handle->chat)))
     return;
 
-  GList *rows = gtk_container_get_children(
-    GTK_CONTAINER(handle->chat->messages_listbox)
-  );
-
-  for (GList *row = rows; row; row = row->next)
-  {
-    UI_MESSAGE_Handle *message = (UI_MESSAGE_Handle*) g_object_get_qdata(
-      G_OBJECT(row->data), app->quarks.ui
-    );
-
-    if ((message) && (message->msg == msg))
-    {
-      ui_chat_remove_message(handle->chat, app, message);
-      break;
-    }
-  }
+  UI_MESSAGE_Handle *message = _find_ui_message_handle(app, context, msg);
 
-  if (rows)
-    g_list_free(rows);
+  if (message)
+    ui_chat_remove_message(handle->chat, app, message);
 
   if (GNUNET_CHAT_KIND_TAG == GNUNET_CHAT_message_get_kind(msg))
     _event_update_tag_message_state(app, context, msg);
@@ -946,25 +960,10 @@
   if ((!handle) || (!(handle->chat)))
     return;
 
-  GList *rows = gtk_container_get_children(
-    GTK_CONTAINER(handle->chat->messages_listbox)
-  );
-
-  for (GList *row = rows; row; row = row->next)
-  {
-    UI_MESSAGE_Handle *message = (UI_MESSAGE_Handle*) g_object_get_qdata(
-      G_OBJECT(row->data), app->quarks.ui
-    );
-
-    if ((message) && (message->msg == target))
-    {
-      ui_message_update(message, app, message->msg);
-      break;
-    }
-  }
+  UI_MESSAGE_Handle *message = _find_ui_message_handle(app, context, target);
 
-  if (rows)
-    g_list_free(rows);
+  if (message)
+    ui_message_update(message, app, message->msg);
 
   enqueue_chat_entry_update(handle);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/contact_info.c 
new/messenger-gtk-0.11.0/src/ui/contact_info.c
--- old/messenger-gtk-0.10.2/src/ui/contact_info.c      2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/src/ui/contact_info.c      2025-09-17 
21:38:22.000000000 +0200
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2022--2024 GNUnet e.V.
+   Copyright (C) 2022--2025 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -33,6 +33,7 @@
 #include "../ui.h"
 
 #include <gnunet/gnunet_chat_lib.h>
+#include <gnunet/gnunet_common.h>
 #include <string.h>
 
 static void
@@ -303,6 +304,38 @@
   );
 }
 
+static void*
+_open_direct_chat(MESSENGER_Application *app,
+                  struct GNUNET_CHAT_Contact *contact)
+{
+  g_assert((app) && (contact));
+
+  application_chat_lock(app);
+
+  struct GNUNET_CHAT_Context *context = GNUNET_CHAT_contact_get_context(
+    contact
+  );
+
+  if (!context)
+    return GNUNET_NO;
+
+  void *user_pointer = NULL;;
+  enum GNUNET_GenericReturnValue status = GNUNET_CHAT_context_get_status(
+    context
+  );
+
+  if (GNUNET_SYSERR != status)
+    user_pointer = GNUNET_CHAT_context_get_user_pointer(
+      context
+    );
+  else
+    GNUNET_CHAT_context_request(context);
+
+  application_chat_unlock(app);
+
+  return user_pointer;
+}
+
 static void
 handle_open_chat_button_click(UNUSED GtkButton *button,
                               gpointer user_data)
@@ -314,30 +347,19 @@
   if (!(handle->contact))
     return;
 
-  struct GNUNET_CHAT_Context *context = GNUNET_CHAT_contact_get_context(
-    handle->contact
+  UI_CHAT_ENTRY_Handle *entry = _open_direct_chat(
+    handle->app, handle->contact
   );
 
-  if (!context)
-    return;
-
-  if (GNUNET_SYSERR == GNUNET_CHAT_context_get_status(context))
-  {
-    GNUNET_CHAT_context_request(context);
-    goto close_dialog;
-  }
-
-  UI_CHAT_ENTRY_Handle *entry = GNUNET_CHAT_context_get_user_pointer(context);
-
   if ((!entry) || (!(entry->entry_box)))
-    return;
+    goto close_dialog;
 
   GtkListBoxRow *row = GTK_LIST_BOX_ROW(
     gtk_widget_get_parent(entry->entry_box)
   );
 
   if (!row)
-    return;
+    goto close_dialog;
 
   gtk_list_box_select_row(handle->app->ui.messenger.chats_listbox, row);
   gtk_list_box_invalidate_filter(handle->app->ui.messenger.chats_listbox);
@@ -1328,6 +1350,10 @@
     handle
   );
 
+  handle->open_chat_stack = GTK_STACK(
+    gtk_builder_get_object(handle->builder, "open_chat_stack")
+  );
+
   handle->back_button = GTK_BUTTON(
     gtk_builder_get_object(handle->builder, "back_button")
   );
@@ -1393,6 +1419,9 @@
 {
   g_assert(handle);
 
+  if (!contact)
+    contact = GNUNET_CHAT_get_own_contact(handle->app->chat.messenger.handle);
+
   const char *name = NULL;
   const char *key = NULL;
 
@@ -1567,6 +1596,11 @@
     );
   }
 
+  gtk_stack_set_visible_child_name(
+    handle->open_chat_stack,
+    editable? "open_notes_page" : "open_private_chat_page"
+  );
+
   struct GNUNET_CHAT_Context *context = GNUNET_CHAT_contact_get_context(
     contact
   );
@@ -1578,7 +1612,7 @@
 
   gtk_widget_set_visible(
     GTK_WIDGET(handle->open_chat_button),
-    !editable
+    context? TRUE : FALSE
   );
 
   if (reveal)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/contact_info.h 
new/messenger-gtk-0.11.0/src/ui/contact_info.h
--- old/messenger-gtk-0.10.2/src/ui/contact_info.h      2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/src/ui/contact_info.h      2025-09-17 
21:38:22.000000000 +0200
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2022--2024 GNUnet e.V.
+   Copyright (C) 2022--2025 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -91,6 +91,8 @@
   GtkButton *add_tag_button;
   GtkButton *remove_tag_button;
 
+  GtkStack *open_chat_stack;
+
   GtkButton *back_button;
   GtkButton *close_button;
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/message.c 
new/messenger-gtk-0.11.0/src/ui/message.c
--- old/messenger-gtk-0.10.2/src/ui/message.c   2025-01-08 18:17:48.000000000 
+0100
+++ new/messenger-gtk-0.11.0/src/ui/message.c   2025-09-17 21:38:22.000000000 
+0200
@@ -138,6 +138,42 @@
 }
 
 static void
+handle_accept_button_click(GtkButton *button,
+                           gpointer user_data)
+{
+  g_assert((button) && (user_data));
+
+  MESSENGER_Application *app = (MESSENGER_Application*) user_data;
+
+  UI_MESSAGE_Handle* handle = (UI_MESSAGE_Handle*) (
+      g_object_get_qdata(G_OBJECT(button), app->quarks.ui)
+  );
+
+  if ((!handle) || (!(handle->status_cb)))
+    return;
+
+  handle->status_cb(app, true, handle->status_cls);
+}
+
+static void
+handle_deny_button_click(GtkButton *button,
+                         gpointer user_data)
+{
+  g_assert((button) && (user_data));
+
+  MESSENGER_Application *app = (MESSENGER_Application*) user_data;
+
+  UI_MESSAGE_Handle* handle = (UI_MESSAGE_Handle*) (
+      g_object_get_qdata(G_OBJECT(button), app->quarks.ui)
+  );
+
+  if ((!handle) || (!(handle->status_cb)))
+    return;
+
+  handle->status_cb(app, false, handle->status_cls);
+}
+
+static void
 handle_media_button_click(GtkButton *button,
                           gpointer user_data)
 {
@@ -266,6 +302,9 @@
   handle->msg = NULL;
   handle->contact = NULL;
 
+  handle->status_cb = NULL;
+  handle->status_cls = NULL;
+
   const char *ui_builder_file;
 
   switch (handle->type)
@@ -318,6 +357,23 @@
     handle->accept_button = GTK_BUTTON(
            gtk_builder_get_object(handle->builder[0], "accept_button")
     );
+
+    g_object_set_qdata(G_OBJECT(handle->accept_button), app->quarks.ui, 
handle);
+    g_object_set_qdata(G_OBJECT(handle->deny_button), app->quarks.ui, handle);
+
+    g_signal_connect(
+      handle->accept_button,
+      "clicked",
+      G_CALLBACK(handle_accept_button_click),
+      app
+    );
+
+    g_signal_connect(
+      handle->deny_button,
+      "clicked",
+      G_CALLBACK(handle_deny_button_click),
+      app
+    );
   }
   else
   {
@@ -418,6 +474,8 @@
 
   handle->app = app;
 
+  g_object_set_qdata(G_OBJECT(handle->media_button), app->quarks.ui, handle);
+
   g_signal_connect(
     handle->media_button,
     "clicked",
@@ -425,8 +483,6 @@
     app
   );
 
-  g_object_set_qdata(G_OBJECT(handle->media_button), app->quarks.ui, handle);
-
   switch (handle->type)
   {
     case UI_MESSAGE_STATUS:
@@ -690,8 +746,14 @@
   struct GNUNET_CHAT_File *file = NULL;
   struct GNUNET_CHAT_Invitation *invitation = NULL;
 
+  if (handle->msg)
+    GNUNET_CHAT_message_set_user_pointer(handle->msg, NULL);
+
   handle->msg = msg;
 
+  if (msg)
+    GNUNET_CHAT_message_set_user_pointer(msg, handle);
+
   ui_message_refresh(handle);
 
   if (msg)
@@ -752,6 +814,17 @@
 }
 
 void
+ui_message_set_status_callback(UI_MESSAGE_Handle *handle,
+                               UI_MESSAGE_StatusCallback cb,
+                               gpointer cls)
+{
+  g_assert(handle);
+
+  handle->status_cb = cb;
+  handle->status_cls = cls;
+}
+
+void
 ui_message_add_tag(UI_MESSAGE_Handle *handle,
                    MESSENGER_Application *app,
                    struct GNUNET_CHAT_Message *tag_message)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/message.h 
new/messenger-gtk-0.11.0/src/ui/message.h
--- old/messenger-gtk-0.10.2/src/ui/message.h   2025-01-08 18:17:48.000000000 
+0100
+++ new/messenger-gtk-0.11.0/src/ui/message.h   2025-09-17 21:38:22.000000000 
+0200
@@ -27,6 +27,7 @@
 
 #include <stdbool.h>
 
+#include <glib-2.0/glib.h>
 #include <gtk-3.0/gtk/gtk.h>
 #include <libhandy-1/handy.h>
 
@@ -41,6 +42,10 @@
   UI_MESSAGE_STATUS    = 2
 } UI_MESSAGE_Type;
 
+typedef void (*UI_MESSAGE_StatusCallback)(MESSENGER_Application *app,
+                                          gboolean status,
+                                          gpointer user_data);
+
 typedef struct UI_MESSAGE_Handle
 {
   UI_MESSAGE_Type type;
@@ -49,6 +54,9 @@
   struct GNUNET_CHAT_Message *msg;
   struct GNUNET_CHAT_Contact *contact;
 
+  UI_MESSAGE_StatusCallback status_cb;
+  gpointer status_cls;
+
   GtkBuilder *builder [2];
   GtkWidget *message_box;
   GtkFlowBox *tag_flow_box;
@@ -135,6 +143,19 @@
                        struct GNUNET_CHAT_Contact *contact);
 
 /**
+ * Sets the callback and closure of a given message
+ * handle for actions of a status message.
+ *
+ * @param handle Message handle
+ * @param cb Status callback
+ * @param cls Status closure
+ */
+void
+ui_message_set_status_callback(UI_MESSAGE_Handle *handle,
+                               UI_MESSAGE_StatusCallback cb,
+                               gpointer cls);
+
+/**
  * Adds a widget to represent a given tag message
  * to another message handle.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/new_group.c 
new/messenger-gtk-0.11.0/src/ui/new_group.c
--- old/messenger-gtk-0.10.2/src/ui/new_group.c 2025-01-08 18:17:48.000000000 
+0100
+++ new/messenger-gtk-0.11.0/src/ui/new_group.c 2025-09-17 21:38:22.000000000 
+0200
@@ -47,8 +47,6 @@
   if ((name) && (strlen(name) > 0))
     GNUNET_CHAT_group_set_name(group, name);
 
-  application_chat_unlock(app);
-
   GList *selected = gtk_list_box_get_selected_rows(listbox);
 
   GList *item = selected;
@@ -62,14 +60,14 @@
              g_object_get_qdata(G_OBJECT(row), app->quarks.data)
       );
 
-      application_chat_lock(app);
       GNUNET_CHAT_group_invite_contact(group, contact);
-      application_chat_unlock(app);
     }
 
     item = item->next;
   }
 
+  application_chat_unlock(app);
+
   if (selected)
     g_list_free(selected);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/messenger-gtk-0.10.2/src/ui/play_media.c 
new/messenger-gtk-0.11.0/src/ui/play_media.c
--- old/messenger-gtk-0.10.2/src/ui/play_media.c        2025-01-08 
18:17:48.000000000 +0100
+++ new/messenger-gtk-0.11.0/src/ui/play_media.c        2025-09-17 
21:38:22.000000000 +0200
@@ -1,6 +1,6 @@
 /*
    This file is part of GNUnet.
-   Copyright (C) 2022--2024 GNUnet e.V.
+   Copyright (C) 2022--2025 GNUnet e.V.
 
    GNUnet is free software: you can redistribute it and/or modify it
    under the terms of the GNU Affero General Public License as published
@@ -27,6 +27,7 @@
 #include "../application.h"
 #include "../ui.h"
 #include "../util.h"
+#include <glib-2.0/glib.h>
 
 gboolean
 ui_play_media_window_supports_file_extension(const gchar *filename)
@@ -170,23 +171,41 @@
 }
 
 static gboolean
+_adjust_playing_media_position(UI_PLAY_MEDIA_Handle *handle);
+
+static void
+_set_next_timeout_callback_of_timeline(UI_PLAY_MEDIA_Handle *handle)
+{
+  g_assert(handle);
+
+  handle->timeline = util_timeout_add(
+    200,
+    G_SOURCE_FUNC(_adjust_playing_media_position),
+    handle
+  );
+}
+
+static gboolean
 _adjust_playing_media_position(UI_PLAY_MEDIA_Handle *handle)
 {
   g_assert(handle);
 
   gint64 pos, len;
 
+  handle->timeline = 0;
+
   if (!(handle->pipeline))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   if (!gst_element_query_position(handle->pipeline, GST_FORMAT_TIME, &pos))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   if (!gst_element_query_duration(handle->pipeline, GST_FORMAT_TIME, &len))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   _set_media_position(handle, pos, len, TRUE);
-  return TRUE;
+  _set_next_timeout_callback_of_timeline(handle);
+  return G_SOURCE_REMOVE;
 }
 
 static void
@@ -199,11 +218,7 @@
     util_source_remove(handle->timeline);
 
   if (connected)
-    handle->timeline = util_timeout_add_seconds(
-      1,
-      G_SOURCE_FUNC(_adjust_playing_media_position),
-      handle
-    );
+    _set_next_timeout_callback_of_timeline(handle);
   else
     handle->timeline = 0;
 }
@@ -413,14 +428,17 @@
 static gboolean
 handle_media_motion_lost(gpointer user_data)
 {
+  g_assert(user_data);
+
   UI_PLAY_MEDIA_Handle *handle = (UI_PLAY_MEDIA_Handle*) user_data;
 
+  handle->motion_lost = 0;
+
   if (!(hdy_flap_get_reveal_flap(handle->controls_flap)))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   hdy_flap_set_reveal_flap(handle->controls_flap, FALSE);
-  handle->motion_lost = 0;
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
 
 static gboolean
@@ -428,10 +446,12 @@
                           GdkEvent *event,
                           gpointer user_data)
 {
+  g_assert(user_data);
+
   UI_PLAY_MEDIA_Handle *handle = (UI_PLAY_MEDIA_Handle*) user_data;
 
   if (hdy_flap_get_reveal_flap(handle->controls_flap))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   if (handle->motion_lost)
     util_source_remove(handle->motion_lost);
@@ -439,7 +459,7 @@
   hdy_flap_set_reveal_flap(handle->controls_flap, TRUE);
 
   if (!(handle->fullscreen))
-    return FALSE;
+    return G_SOURCE_REMOVE;
 
   handle->motion_lost = util_timeout_add_seconds(
       3,
@@ -447,7 +467,7 @@
       handle
   );
 
-  return FALSE;
+  return G_SOURCE_REMOVE;
 }
 
 static void

Reply via email to