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:
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);