messenger-gtk

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

commit 184431dab83821d1a8cb01a2ad62e018276f2be5
parent 7b10b8c90d4bf3d2922f4c1d0eba779ced28be7f
Author: TheJackiMonster <thejackimonster@gmail.com>
Date:   Thu, 28 Oct 2021 15:38:24 +0200

Setup some test data in ui to visualize the target

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

Diffstat:
Mresources/css/style.css | 22++++++++++++++++++++++
Mresources/ui/messenger.ui | 1330++++++++++++++++++++++++++++++++++++++++++++++++++-----------------------------
Msrc/messenger_gtk.c | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
3 files changed, 946 insertions(+), 483 deletions(-)

diff --git a/resources/css/style.css b/resources/css/style.css @@ -3,3 +3,25 @@ background-color: @theme_bg_color; } +.chat-entry { + padding: 4px; +} + +.message-box { + border-radius: 12px; + padding: 8px 12px; + margin: 4px; + font-size: small; +} + +.message-box:not(.own) { + background-color: mix(@theme_bg_color, @theme_fg_color, 0.1); + color: @theme_fg_color; + margin-right: 20px; +} + +.message-box.own { + background-color: @theme_selected_bg_color; + color: @theme_selected_fg_color; + margin-left: 20px; +} diff --git a/resources/ui/messenger.ui b/resources/ui/messenger.ui @@ -26,171 +26,40 @@ Author: Tobias Frisch <object class="GtkApplicationWindow" id="main_window"> <property name="can-focus">False</property> <child> - <object class="HdyLeaflet"> + <object class="HdyLeaflet" id="leaflet_chat"> <property name="height-request">600</property> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="interpolate-size">True</property> + <property name="hexpand">True</property> + <property name="hhomogeneous-folded">False</property> + <property name="vhomogeneous-folded">False</property> <child> - <object class="HdyFlap" id="flap_user_details"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">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="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="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> - <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> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - </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="orientation">vertical</property> + <child> + <object class="HdyFlap" id="flap_user_details"> + <property name="width-request">300</property> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="orientation">vertical</property> - <child> + <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"> - <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"> + <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="orientation">vertical</property> <property name="spacing">8</property> - <property name="homogeneous">True</property> <child> - <object class="GtkButton" id="hide_user_details_button"> + <object class="GtkButton" id="user_details_button"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> @@ -199,7 +68,7 @@ Author: Tobias Frisch <object class="GtkImage"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="icon-name">go-previous-symbolic</property> + <property name="icon-name">open-menu-symbolic</property> </object> </child> </object> @@ -210,20 +79,13 @@ Author: Tobias Frisch </packing> </child> <child> - <object class="GtkButton"> + <object class="GtkSearchEntry"> + <property name="width-request">250</property> <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">user-bookmarks-symbolic</property> - </object> - </child> + <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> @@ -231,27 +93,103 @@ 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="GtkButton" id="account_details_button"> + <object class="GtkViewport"> <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> + <property name="can-focus">False</property> <child> - <object class="GtkImage"> + <object class="GtkListBox" id="chats_listbox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="icon-name">go-down-symbolic</property> + <property name="selection-mode">none</property> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="selectable">False</property> + <child> + <!-- n-columns=3 n-rows=2 --> + <object class="GtkGrid"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="column-spacing">8</property> + <child> + <object class="HdyAvatar"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="text">Tobias Frisch</property> + <property name="size">48</property> + </object> + <packing> + <property name="left-attach">0</property> + <property name="top-attach">0</property> + <property name="height">2</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">11.12.13</property> + <property name="justify">right</property> + </object> + <packing> + <property name="left-attach">2</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="hexpand">True</property> + <property name="label" translatable="yes">Chat title</property> + <property name="ellipsize">end</property> + <property name="xalign">2.2351741291171123e-10</property> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">0</property> + </packing> + </child> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">My evil comment text is awesome! This is coming to the Pinephone which will be extremely awesome and this text may only cut some borders in certain areas!!!</property> + <property name="ellipsize">end</property> + <property name="single-line-mode">True</property> + <property name="max-width-chars">48</property> + <property name="xalign">0</property> + </object> + <packing> + <property name="left-attach">1</property> + <property name="top-attach">1</property> + <property name="width">2</property> + </packing> + </child> + <style> + <class name="chat-entry"/> + </style> + </object> + </child> + </object> + </child> </object> </child> </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> </child> </object> <packing> @@ -261,47 +199,89 @@ 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> - <object class="GtkScrolledWindow"> + <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">True</property> + <property name="can-focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkViewport"> + <object class="GtkBox"> <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">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> <child> - <object class="GtkRevealer" id="account_details_revealer"> + <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" id="hide_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="GtkScrolledWindow"> - <property name="height-request">300</property> + <object class="GtkImage"> <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> - <child> - <object class="GtkListBox"> - <property name="visible">True</property> - <property name="can-focus">False</property> - </object> - </child> - </object> - </child> + <property name="can-focus">False</property> + <property name="icon-name">go-previous-symbolic</property> </object> </child> </object> @@ -312,51 +292,97 @@ Author: Tobias Frisch </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">user-bookmarks-symbolic</property> + </object> + </child> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="account_details_button"> + <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">2</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">1</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="GtkButton"> + <object class="GtkRevealer" id="account_details_revealer"> <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> <child> - <object class="GtkBox"> + <object class="GtkScrolledWindow"> + <property name="height-request">300</property> <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="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> + <property name="can-focus">True</property> <child> - <object class="GtkLabel" id="new-group-label"> + <object class="GtkViewport"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">New Group</property> - <property name="xalign">0</property> + <child> + <object class="GtkListBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + </object> + </child> </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> </child> </object> </child> @@ -368,333 +394,397 @@ Author: Tobias Frisch </packing> </child> <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="orientation">vertical</property> <child> - <object class="GtkBox"> + <object class="GtkButton"> <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> + <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="GtkImage"> + <object class="GtkBox"> <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> + <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> </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="GtkLabel" id="new-platform-label"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">New Platform</property> - <property name="xalign">0</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> </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="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"> + <object class="GtkButton"> <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> + <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="GtkImage"> + <object class="GtkBox"> <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> + <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> </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="GtkLabel" id="contacts-label"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">Contacts</property> - <property name="xalign">0</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> </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="GtkBox"> + <object class="GtkButton"> <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> + <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="GtkImage"> + <object class="GtkBox"> <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> + <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" id="calls-label"> + <object class="GtkBox"> <property name="visible">True</property> <property name="can-focus">False</property> - <property name="label" translatable="yes">Calls</property> - <property name="xalign">0</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="position">5</property> + </packing> </child> </object> <packing> - <property name="expand">False</property> + <property name="expand">True</property> <property name="fill">True</property> - <property name="position">3</property> + <property name="position">1</property> </packing> </child> <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">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="GtkBox"> + <object class="GtkLabel"> <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="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="halign">start</property> + <property name="label" translatable="yes">GNUnet Messenger</property> + <attributes> + <attribute name="weight" value="bold"/> + </attributes> </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"> <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="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="halign">start</property> + <property name="label" translatable="yes">Version 0.0.1</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="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">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="halign">start</property> - <property name="label" translatable="yes">GNUnet Messenger</property> - <attributes> - <attribute name="weight" value="bold"/> - </attributes> - </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="halign">start</property> - <property name="label" translatable="yes">Version 0.0.1</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">True</property> - <property name="position">1</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="pack-type">end</property> - <property name="position">2</property> - </packing> </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> - <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> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> </child> </object> </child> <child> <object class="GtkBox"> + <property name="name">chats-box</property> <property name="visible">True</property> <property name="can-focus">False</property> <property name="hexpand">True</property> @@ -829,7 +919,289 @@ Author: Tobias Frisch <property name="visible">True</property> <property name="can-focus">False</property> <child> - <placeholder/> + <object class="GtkListBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="selection-mode">none</property> + <property name="activate-on-single-click">False</property> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="activatable">False</property> + <property name="selectable">False</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">My evil comment text is awesome! This is coming to the Pinephone which will be extremely awesome and this text may only cut some borders in certain areas!!!</property> + <property name="wrap">True</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">User</property> + </object> + </child> + <style> + <class name="message-box"/> + <class name="own"/> + </style> + </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> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <property name="activatable">False</property> + <property name="selectable">False</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Great stuff to write</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">OtherGuy69</property> + </object> + </child> + <style> + <class name="message-box"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">My evil comment text is awesome! This is coming to the Pinephone which will be extremely awesome and this text may only cut some borders in certain areas!!!</property> + <property name="wrap">True</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">User</property> + </object> + </child> + <style> + <class name="message-box"/> + <class name="own"/> + </style> + </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> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">If people would know that you spam here like this...</property> + <property name="wrap">True</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">CookieHunter</property> + </object> + </child> + <style> + <class name="message-box"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">Existence is a crisis my friends. You will only get releaf by open-sourcing your hard work because profit is temporary. Forks remain forever!</property> + <property name="wrap">True</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">SomePhilosoph28</property> + </object> + </child> + <style> + <class name="message-box"/> + </style> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">True</property> + <property name="position">2</property> + </packing> + </child> + </object> + </child> + </object> + </child> + <child> + <object class="GtkListBoxRow"> + <property name="visible">True</property> + <property name="can-focus">True</property> + <child> + <object class="GtkBox"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <child> + <object class="GtkFrame"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label-xalign">0</property> + <property name="shadow-type">none</property> + <child> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">My evil comment text is awesome! This is coming to the Pinephone which will be extremely awesome and this text may only cut some borders in certain areas!!!</property> + <property name="wrap">True</property> + <property name="max-width-chars">64</property> + </object> + </child> + <child type="label"> + <object class="GtkLabel"> + <property name="visible">True</property> + <property name="can-focus">False</property> + <property name="label" translatable="yes">User</property> + </object> + </child> + <style> + <class name="message-box"/> + <class name="own"/> + </style> + </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> + </child> + </object> + </child> + </object> + <packing> + <property name="name">page0</property> + <property name="title" translatable="yes">page0</property> + </packing> </child> </object> </child> @@ -1077,7 +1449,7 @@ Author: Tobias Frisch <property name="subtitle" translatable="yes">GNUnet</property> <property name="interpolate-size">True</property> <child> - <object class="GtkButton"> + <object class="GtkButton" id="back_button"> <property name="visible">True</property> <property name="can-focus">True</property> <property name="receives-default">True</property> diff --git a/src/messenger_gtk.c b/src/messenger_gtk.c @@ -27,8 +27,8 @@ #include <gnunet/gnunet_chat_lib.h> -G_MODULE_EXPORT void handle_user_details_button_click(GtkButton* button, - gpointer user_data) +void handle_user_details_button_click(GtkButton* button, + gpointer user_data) { HdyFlap* flap = HDY_FLAP(user_data); @@ -39,8 +39,8 @@ G_MODULE_EXPORT void handle_user_details_button_click(GtkButton* button, } } -G_MODULE_EXPORT void handle_account_details_button_click(GtkButton* button, - gpointer user_data) +void handle_account_details_button_click(GtkButton* button, + gpointer user_data) { GtkRevealer* revealer = GTK_REVEALER(user_data); @@ -51,6 +51,31 @@ G_MODULE_EXPORT void handle_account_details_button_click(GtkButton* button, } } +void handle_chats_listbox_row_activated(GtkListBox* listbox, + GtkListBoxRow* row, + gpointer user_data) +{ + HdyLeaflet* leaflet = HDY_LEAFLET(user_data); + + GList* children = gtk_container_get_children(GTK_CONTAINER(leaflet)); + + if ((children) && (children->next)) { + hdy_leaflet_set_visible_child(leaflet, GTK_WIDGET(children->next->data)); + } +} + +void handle_back_button_click(GtkButton* button, + gpointer user_data) +{ + HdyLeaflet* leaflet = HDY_LEAFLET(user_data); + + GList* children = gtk_container_get_children(GTK_CONTAINER(leaflet)); + + if (children) { + hdy_leaflet_set_visible_child(leaflet, GTK_WIDGET(children->data)); + } +} + int main(int argc, char** argv) { gtk_init(&argc, &argv); @@ -84,6 +109,23 @@ int main(int argc, char** argv) { gtk_builder_get_object(builder, "title_bar") ); + HdyLeaflet* leaflet_chat = HDY_LEAFLET( + gtk_builder_get_object(builder, "leaflet_chat") + ); + + hdy_leaflet_set_homogeneous(leaflet_chat, FALSE, GTK_ORIENTATION_HORIZONTAL, FALSE); + + GtkListBox* chats_listbox = GTK_LIST_BOX( + gtk_builder_get_object(builder, "chats_listbox") + ); + + g_signal_connect( + chats_listbox, + "row-activated", + G_CALLBACK(handle_chats_listbox_row_activated), + leaflet_chat + ); + GtkButton* user_details_button = GTK_BUTTON( gtk_builder_get_object(builder, "user_details_button") ); @@ -125,6 +167,33 @@ int main(int argc, char** argv) { account_details_revealer ); + GtkButton* back_button = GTK_BUTTON( + gtk_builder_get_object(builder, "back_button") + ); + + g_signal_connect( + back_button, + "clicked", + G_CALLBACK(handle_back_button_click), + leaflet_chat + ); + + g_object_bind_property( + leaflet_chat, + "folded", + back_button, + "visible", + G_BINDING_SYNC_CREATE + ); + + g_object_bind_property( + leaflet_chat, + "folded", + title_bar, + "show-close-button", + G_BINDING_INVERT_BOOLEAN + ); + gtk_widget_show(GTK_WIDGET(window)); g_signal_connect(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);