messenger-gtk

Gtk+3 graphical user interfaces for GNUnet Messenger
Log | Files | Refs | Submodules | README | LICENSE

commit df4110a471c485a378faa695376956860b8fea1e
parent 7d2fbbeea808ae7dad7b403fc17244d1c07cb2de
Author: TheJackiMonster <thejackimonster@gmail.com>
Date:   Wed, 27 Oct 2021 01:04:48 +0200

Added basic code to startup ui file and handle first interactions

Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>

Diffstat:
Aresources/css/style.css | 5+++++
Mresources/ui/messenger.ui | 1487+++++++++++++++++++++++++++++++++++++++----------------------------------------
Msrc/messenger_gtk.c | 103++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 846 insertions(+), 749 deletions(-)

diff --git a/resources/css/style.css b/resources/css/style.css @@ -0,0 +1,5 @@ + +.flap-background { + background-color: @theme_bg_color; +} + diff --git a/resources/ui/messenger.ui b/resources/ui/messenger.ui @@ -22,74 +22,185 @@ Author: Tobias Frisch --> <interface> <requires lib="gtk+" version="3.24"/> - <requires lib="libhandy" version="0.0"/> - <object class="HdyApplicationWindow"> + <requires lib="libhandy" version="1.2"/> + <object class="GtkSizeGroup"> + <widgets> + <widget name="new-group-label"/> + <widget name="new-platform-label"/> + <widget name="contacts-label"/> + <widget name="calls-label"/> + <widget name="settings-label"/> + <widget name="night-mode-label"/> + </widgets> + </object> + <object class="GtkApplicationWindow" id="main_window"> <property name="can-focus">False</property> <child> - <object class="GtkBox"> + <object class="HdyLeaflet"> + <property name="height-request">600</property> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="orientation">vertical</property> + <property name="interpolate-size">True</property> <child> - <object class="HdyTitleBar"> + <object class="HdyFlap" id="flap_user_details"> <property name="visible">True</property> <property name="can-focus">False</property> - <child> - <object class="HdyHeaderBar"> + <property name="fold-policy">always</property> + <child type="content"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="title" translatable="yes">Messenger</property> - <property name="subtitle" translatable="yes">GNUnet</property> - <property name="show-close-button">True</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="chats-header-box"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">8</property> + <property name="margin-end">8</property> + <property name="margin-top">8</property> + <property name="margin-bottom">8</property> + <property name="spacing">8</property> + <child> + <object class="GtkButton" id="user_details_button"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">open-menu-symbolic</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkSearchEntry"> + <property name="width-request">250</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="primary-icon-name">edit-find-symbolic</property> + <property name="primary-icon-activatable">False</property> + <property name="primary-icon-sensitive">False</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</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> + </packing> + </child> <child> - <object class="GtkButton"> + <object class="GtkScrolledWindow"> <property name="visible">True</property> <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">half</property> + <property name="shadow-type">in</property> <child> - <object class="GtkImage"> + <object class="GtkViewport"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="icon-name">go-previous-symbolic</property> + <child> + <object class="GtkListBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> </object> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="HdyLeaflet"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="interpolate-size">True</property> - <child> - <object class="HdyFlap"> + <child type="separator"> + <object class="GtkSeparator"> <property name="visible">True</property> <property name="can-focus">False</property> - <child type="content"> + </object> + </child> + <child type="flap"> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <child> <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="orientation">vertical</property> <child> - <object class="GtkBox" id="chats-header-box"> + <object class="GtkBox"> + <property name="width-request">150</property> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">16</property> + <property name="margin-end">16</property> + <property name="margin-top">16</property> + <property name="margin-bottom">16</property> + <property name="orientation">vertical</property> + <property name="spacing">16</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="xalign">0</property> + <property name="icon-name">avatar-default-symbolic</property> + <property name="icon_size">6</property> + </object> + <packing> + <property name="expand">True</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="label" translatable="yes">Profile name</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> <property name="margin-start">8</property> <property name="margin-end">8</property> <property name="margin-top">8</property> <property name="margin-bottom">8</property> + <property name="orientation">vertical</property> <property name="spacing">8</property> + <property name="homogeneous">True</property> <child> - <object class="GtkButton"> + <object class="GtkButton" id="hide_user_details_button"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> @@ -98,7 +209,7 @@ Author: Tobias Frisch <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="icon-name">open-menu-symbolic</property> + <property name="icon-name">go-previous-symbolic</property> </object> </child> </object> @@ -109,13 +220,20 @@ Author: Tobias Frisch </packing> </child> <child> - <object class="GtkSearchEntry"> - <property name="width-request">250</property> + <object class="GtkButton"> <property name="visible">True</property> <property name="can-focus">True</property> - <property name="primary-icon-name">edit-find-symbolic</property> - <property name="primary-icon-activatable">False</property> - <property name="primary-icon-sensitive">False</property> + <property name="receives-default">True</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="relief">none</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">user-bookmarks-symbolic</property> + </object> + </child> </object> <packing> <property name="expand">True</property> @@ -123,29 +241,27 @@ Author: Tobias Frisch <property name="position">1</property> </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkScrolledWindow"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="shadow-type">in</property> <child> - <object class="GtkViewport"> + <object class="GtkButton" id="account_details_button"> <property name="visible">True</property> - <property name="can-focus">False</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="halign">center</property> + <property name="valign">center</property> + <property name="relief">none</property> <child> - <object class="GtkListBox"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> + <property name="icon-name">go-down-symbolic</property> </object> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> </child> </object> <packing> @@ -155,613 +271,389 @@ Author: Tobias Frisch </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> - <child type="separator"> - <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - </child> - <child type="flap"> - <object class="GtkBox"> + <child> + <object class="GtkScrolledWindow"> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="orientation">vertical</property> + <property name="can-focus">True</property> <child> - <object class="GtkBox"> + <object class="GtkViewport"> <property name="visible">True</property> <property name="can-focus">False</property> + <property name="shadow-type">none</property> <child> <object class="GtkBox"> - <property name="width-request">150</property> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-start">16</property> - <property name="margin-end">16</property> - <property name="margin-top">16</property> - <property name="margin-bottom">16</property> <property name="orientation">vertical</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="xalign">0</property> - <property name="icon-name">avatar-default-symbolic</property> - <property name="icon_size">6</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> <child> - <object class="GtkLabel"> + <object class="GtkRevealer" id="account_details_revealer"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">Profile name</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">8</property> - <property name="margin-end">8</property> - <property name="margin-top">8</property> - <property name="margin-bottom">8</property> - <property name="orientation">vertical</property> - <property name="spacing">8</property> - <property name="homogeneous">True</property> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="halign">center</property> - <property name="valign">center</property> - <property name="relief">none</property> <child> - <object class="GtkImage"> + <object class="GtkScrolledWindow"> + <property name="height-request">300</property> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">user-bookmarks-symbolic</property> + <property name="can-focus">True</property> + <child> + <object class="GtkViewport"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkListBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> + </object> + </child> </object> </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="halign">center</property> - <property name="valign">center</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">go-down-symbolic</property> - </object> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</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> - </packing> - </child> - <child> - <object class="GtkScrolledWindow"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <child> - <object class="GtkViewport"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="shadow-type">none</property> - <child> <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkRevealer"> + <object class="GtkButton"> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="reveal-child">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> <child> - <object class="GtkScrolledWindow"> + <object class="GtkBox"> <property name="visible">True</property> - <property name="can-focus">True</property> + <property name="can-focus">False</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">system-users-symbolic</property> + <property name="icon_size">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> <child> - <object class="GtkViewport"> + <object class="GtkLabel" id="new-group-label"> <property name="visible">True</property> <property name="can-focus">False</property> - <child> - <object class="GtkListBox"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - </child> + <property name="label" translatable="yes">New Group</property> + <property name="xalign">0</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkBox"> + <object class="GtkButton"> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="orientation">vertical</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> <child> - <object class="GtkButton"> + <object class="GtkBox"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> + <property name="can-focus">False</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> <child> - <object class="GtkBox"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">system-users-symbolic</property> - <property name="icon_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="new-group-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">New Group</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="icon-name">network-wired-symbolic</property> + <property name="icon_size">3</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> <child> - <object class="GtkBox"> + <object class="GtkLabel" id="new-platform-label"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">network-wired-symbolic</property> - <property name="icon_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="new-platform-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">New Platform</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="label" translatable="yes">New Platform</property> + <property name="xalign">0</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> <child> - <object class="GtkBox"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">avatar-default-symbolic</property> - <property name="icon_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="contacts-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">Contacts</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="icon-name">avatar-default-symbolic</property> + <property name="icon_size">3</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> <child> - <object class="GtkBox"> + <object class="GtkLabel" id="contacts-label"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">call-start-symbolic</property> - <property name="icon_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="calls-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">Calls</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="label" translatable="yes">Contacts</property> + <property name="xalign">0</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> <child> - <object class="GtkButton"> + <object class="GtkBox"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> + <property name="can-focus">False</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> <child> - <object class="GtkBox"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <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_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="settings-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">Settings</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="icon-name">call-start-symbolic</property> + <property name="icon_size">3</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">4</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <property name="always-show-image">True</property> <child> - <object class="GtkBox"> + <object class="GtkLabel" id="calls-label"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> - <property name="margin-top">4</property> - <property name="margin-bottom">4</property> - <property name="spacing">16</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">weather-clear-night-symbolic</property> - <property name="icon_size">3</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkLabel" id="night-mode-label"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="label" translatable="yes">Night Mode</property> - <property name="xalign">0</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> + <property name="label" translatable="yes">Calls</property> + <property name="xalign">0</property> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">5</property> - </packing> </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> - <property name="position">1</property> + <property name="position">3</property> </packing> </child> <child> - <object class="GtkBox"> + <object class="GtkButton"> <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">16</property> - <property name="margin-end">16</property> - <property name="margin-top">16</property> - <property name="margin-bottom">16</property> - <property name="orientation">vertical</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> <child> - <object class="GtkLabel"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">GNUnet Messenger</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> + <child> + <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_size">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="settings-label"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Settings</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</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> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <property name="always-show-image">True</property> <child> - <object class="GtkLabel"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="halign">start</property> - <property name="label" translatable="yes">Version 0.0.1</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="margin-top">4</property> + <property name="margin-bottom">4</property> + <property name="spacing">16</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">weather-clear-night-symbolic</property> + <property name="icon_size">3</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkLabel" id="night-mode-label"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Night Mode</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">2</property> + <property name="position">5</property> </packing> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> - </object> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">4</property> - </packing> - </child> - </object> - </child> - </object> - </child> - <child> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="hexpand">True</property> - <property name="orientation">vertical</property> - <child> - <object class="HdyFlap"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="flap-position">end</property> - <property name="reveal-flap">False</property> - <child type="content"> - <object class="GtkBox"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkBox" id="chat-header-box"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="margin-start">8</property> - <property name="margin-end">8</property> - <property name="margin-top">8</property> - <property name="margin-bottom">8</property> - <property name="spacing">8</property> <child> <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="halign">start</property> - <property name="margin-left">4</property> - <property name="margin-right">4</property> - <property name="margin-start">4</property> - <property name="margin-end">4</property> + <property name="margin-start">16</property> + <property name="margin-end">16</property> + <property name="margin-top">16</property> + <property name="margin-bottom">16</property> <property name="orientation">vertical</property> <child> <object class="GtkLabel"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">Chat title</property> - <property name="xalign">0</property> + <property name="halign">start</property> + <property name="label" translatable="yes">GNUnet Messenger</property> <attributes> <attribute name="weight" value="bold"/> </attributes> @@ -776,327 +668,436 @@ Author: Tobias Frisch <object class="GtkLabel"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">Chat subtitle</property> - <property name="xalign">0</property> - <attributes> - <attribute name="weight" value="light"/> - </attributes> + <property name="halign">start</property> + <property name="label" translatable="yes">Version 0.0.1</property> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> <property name="position">1</property> </packing> </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> - <property name="position">0</property> + <property name="pack-type">end</property> + <property name="position">2</property> </packing> </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <style> + <class name="flap-background"/> + </style> + </object> + </child> + </object> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="orientation">vertical</property> + <child> + <object class="HdyFlap" id="flap_chat_details"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="flap-position">end</property> + <property name="reveal-flap">False</property> + <property name="fold-policy">always</property> + <child type="content"> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="chat-header-box"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">8</property> + <property name="margin-end">8</property> + <property name="margin-top">8</property> + <property name="margin-bottom">8</property> + <property name="spacing">8</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="halign">start</property> + <property name="margin-start">4</property> + <property name="margin-end">4</property> + <property name="orientation">vertical</property> <child> - <object class="GtkButton"> + <object class="GtkLabel"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">view-more-symbolic</property> - </object> - </child> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Chat title</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">1</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkButton"> + <object class="GtkLabel"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">system-search-symbolic</property> - </object> - </child> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Chat subtitle</property> + <property name="xalign">0</property> + <attributes> + <attribute name="weight" value="light"/> + </attributes> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">2</property> + <property name="position">1</property> </packing> </child> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> <child> - <object class="GtkScrolledWindow"> + <object class="GtkButton"> <property name="visible">True</property> <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> <child> - <object class="GtkViewport"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <child> - <object class="GtkStack"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <child> - <placeholder/> - </child> - </object> - </child> + <property name="icon-name">view-more-symbolic</property> </object> </child> </object> <packing> - <property name="expand">True</property> + <property name="expand">False</property> <property name="fill">True</property> + <property name="pack-type">end</property> <property name="position">1</property> </packing> </child> <child> - <object class="GtkBox"> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">system-search-symbolic</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="pack-type">end</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <child> + <object class="GtkViewport"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-start">8</property> - <property name="margin-end">8</property> - <property name="margin-top">8</property> - <property name="margin-bottom">8</property> - <property name="spacing">8</property> <child> - <object class="GtkButton"> + <object class="GtkStack"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="valign">end</property> - <property name="relief">none</property> + <property name="can-focus">False</property> <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">mail-attachment-symbolic</property> - </object> + <placeholder/> </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="margin-start">8</property> + <property name="margin-end">8</property> + <property name="margin-top">8</property> + <property name="margin-bottom">8</property> + <property name="spacing">8</property> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="valign">end</property> + <property name="relief">none</property> <child> - <object class="GtkTextView"> - <property name="width-request">250</property> + <object class="GtkImage"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="valign">end</property> - <property name="wrap-mode">word-char</property> - <property name="left-margin">8</property> - <property name="right-margin">8</property> - <property name="top-margin">8</property> - <property name="bottom-margin">8</property> - <property name="input-hints">GTK_INPUT_HINT_SPELLCHECK | GTK_INPUT_HINT_WORD_COMPLETION | GTK_INPUT_HINT_INHIBIT_OSK | GTK_INPUT_HINT_EMOJI | GTK_INPUT_HINT_NONE</property> + <property name="can-focus">False</property> + <property name="icon-name">mail-attachment-symbolic</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</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> + </packing> + </child> + <child> + <object class="GtkTextView"> + <property name="width-request">250</property> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="valign">end</property> + <property name="wrap-mode">word-char</property> + <property name="left-margin">8</property> + <property name="right-margin">8</property> + <property name="top-margin">8</property> + <property name="bottom-margin">8</property> + <property name="input-hints">GTK_INPUT_HINT_SPELLCHECK | GTK_INPUT_HINT_WORD_COMPLETION | GTK_INPUT_HINT_INHIBIT_OSK | GTK_INPUT_HINT_EMOJI | GTK_INPUT_HINT_NONE</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="valign">end</property> + <property name="relief">none</property> <child> - <object class="GtkButton"> + <object class="GtkImage"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="valign">end</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">face-smile-symbolic</property> - </object> - </child> + <property name="can-focus">False</property> + <property name="icon-name">face-smile-symbolic</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="valign">end</property> + <property name="relief">none</property> <child> - <object class="GtkButton"> + <object class="GtkImage"> <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="valign">end</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">audio-input-microphone-symbolic</property> - </object> - </child> + <property name="can-focus">False</property> + <property name="icon-name">audio-input-microphone-symbolic</property> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> </object> <packing> <property name="expand">False</property> <property name="fill">True</property> - <property name="position">2</property> + <property name="position">3</property> </packing> </child> </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> </child> - <child type="separator"> - <object class="GtkSeparator"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - </child> - <child type="flap"> - <object class="GtkBox"> + </object> + </child> + <child type="separator"> + <object class="GtkSeparator"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> + <child type="flap"> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="details-header-box"> + <property name="width-request">250</property> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="orientation">vertical</property> + <property name="margin-start">8</property> + <property name="margin-end">8</property> + <property name="margin-top">8</property> + <property name="margin-bottom">8</property> <child> - <object class="GtkBox" id="details-header-box"> - <property name="width-request">250</property> + <object class="GtkStack"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="margin-start">8</property> - <property name="margin-end">8</property> - <property name="margin-top">8</property> - <property name="margin-bottom">8</property> <child> - <object class="GtkStack"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> + <property name="spacing">8</property> <child> - <object class="GtkBox"> + <object class="GtkLabel"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="spacing">8</property> + <property name="xpad">8</property> + <property name="label" translatable="yes">Chat Details</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <property name="relief">none</property> <child> - <object class="GtkLabel"> + <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="xpad">8</property> - <property name="label" translatable="yes">Chat Details</property> - <property name="xalign">0</property> + <property name="icon-name">window-close-symbolic</property> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton"> - <property name="visible">True</property> - <property name="can-focus">True</property> - <property name="receives-default">True</property> - <property name="relief">none</property> - <child> - <object class="GtkImage"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <property name="icon-name">window-close-symbolic</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="pack-type">end</property> - <property name="position">1</property> - </packing> </child> </object> <packing> - <property name="name">page0</property> - <property name="title" translatable="yes">page0</property> + <property name="expand">False</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="position">0</property> + <property name="name">page0</property> + <property name="title" translatable="yes">page0</property> </packing> </child> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> <property name="fill">True</property> <property name="position">0</property> </packing> </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow"> + <property name="visible">True</property> + <property name="can-focus">True</property> <child> - <object class="GtkScrolledWindow"> + <object class="GtkViewport"> <property name="visible">True</property> - <property name="can-focus">True</property> + <property name="can-focus">False</property> <child> - <object class="GtkViewport"> + <object class="GtkStack"> <property name="visible">True</property> <property name="can-focus">False</property> <child> - <object class="GtkStack"> - <property name="visible">True</property> - <property name="can-focus">False</property> - <child> - <placeholder/> - </child> - </object> + <placeholder/> </child> </object> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> </child> + <style> + <class name="flap-background"/> + </style> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> </child> </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child type="titlebar"> + <object class="HdyHeaderBar" id="title_bar"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="title" translatable="yes">Messenger</property> + <property name="subtitle" translatable="yes">GNUnet</property> + <property name="interpolate-size">True</property> + <child> + <object class="GtkButton"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="receives-default">True</property> + <child> + <object class="GtkImage"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="icon-name">go-previous-symbolic</property> + </object> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> </child> @@ -1109,14 +1110,4 @@ Author: Tobias Frisch <widget name="details-header-box"/> </widgets> </object> - <object class="GtkSizeGroup"> - <widgets> - <widget name="new-group-label"/> - <widget name="new-platform-label"/> - <widget name="contacts-label"/> - <widget name="calls-label"/> - <widget name="settings-label"/> - <widget name="night-mode-label"/> - </widgets> - </object> </interface> diff --git a/src/messenger_gtk.c b/src/messenger_gtk.c @@ -23,11 +23,112 @@ */ #include <gtk-3.0/gtk/gtk.h> +#include <libhandy-1/handy.h> + #include <gnunet/gnunet_chat_lib.h> +G_MODULE_EXPORT void handle_user_details_button_click(GtkButton* button, + gpointer user_data) +{ + HdyFlap* flap = HDY_FLAP(user_data); + + if (TRUE == hdy_flap_get_reveal_flap(flap)) { + hdy_flap_set_reveal_flap(flap, FALSE); + } else { + hdy_flap_set_reveal_flap(flap, TRUE); + } +} + +G_MODULE_EXPORT void handle_account_details_button_click(GtkButton* button, + gpointer user_data) +{ + GtkRevealer* revealer = GTK_REVEALER(user_data); + + if (TRUE == gtk_revealer_get_reveal_child(revealer)) { + gtk_revealer_set_reveal_child(revealer, FALSE); + } else { + gtk_revealer_set_reveal_child(revealer, TRUE); + } +} + int main(int argc, char** argv) { gtk_init(&argc, &argv); - GNUNET_CHAT_test("Hello world"); + GtkBuilder* builder = gtk_builder_new(); + gtk_builder_add_from_file( + builder, + "resources/ui/messenger.ui", + NULL + ); + + GtkApplicationWindow* window = GTK_APPLICATION_WINDOW( + gtk_builder_get_object(builder, "main_window") + ); + + GdkScreen* screen = gdk_screen_get_default(); + + GtkCssProvider* provider = gtk_css_provider_new(); + gtk_css_provider_load_from_path( + provider, + "resources/css/style.css", + NULL + ); + + gtk_style_context_add_provider_for_screen( + screen, + GTK_STYLE_PROVIDER(provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION + ); + + HdyHeaderBar* title_bar = HDY_HEADER_BAR( + gtk_builder_get_object(builder, "title_bar") + ); + + GtkButton* user_details_button = GTK_BUTTON( + gtk_builder_get_object(builder, "user_details_button") + ); + + GtkButton* hide_user_details_button = GTK_BUTTON( + gtk_builder_get_object(builder, "hide_user_details_button") + ); + + HdyFlap* flap_user_details = HDY_FLAP( + gtk_builder_get_object(builder, "flap_user_details") + ); + + g_signal_connect( + user_details_button, + "clicked", + G_CALLBACK(handle_user_details_button_click), + flap_user_details + ); + + g_signal_connect( + hide_user_details_button, + "clicked", + G_CALLBACK(handle_user_details_button_click), + flap_user_details + ); + + GtkButton* account_details_button = GTK_BUTTON( + gtk_builder_get_object(builder, "account_details_button") + ); + + GtkRevealer* account_details_revealer = GTK_REVEALER( + gtk_builder_get_object(builder, "account_details_revealer") + ); + + g_signal_connect( + account_details_button, + "clicked", + G_CALLBACK(handle_account_details_button_click), + account_details_revealer + ); + + gtk_widget_show(GTK_WIDGET(window)); + + g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL); + + gtk_main(); return 0; }