commit 4278733835274953112551f8b311892965c50a4c
parent 0b146f0b3edbee3724b9f3630c611c0717db6f23
Author: Jacki <jacki@thejackimonster.de>
Date: Thu, 9 May 2024 03:11:38 +0200
Unify layout of UI headers regarding chats search
Signed-off-by: Jacki <jacki@thejackimonster.de>
Diffstat:
4 files changed, 182 insertions(+), 34 deletions(-)
diff --git a/resources/ui/chat.ui b/resources/ui/chat.ui
@@ -345,7 +345,7 @@ Author: Tobias Frisch
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
@@ -361,7 +361,7 @@ Author: Tobias Frisch
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
- <property name="position">2</property>
+ <property name="position">3</property>
</packing>
</child>
<child>
@@ -577,7 +577,7 @@ Author: Tobias Frisch
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack-type">end</property>
- <property name="position">3</property>
+ <property name="position">4</property>
</packing>
</child>
</object>
diff --git a/resources/ui/messenger.ui b/resources/ui/messenger.ui
@@ -52,49 +52,131 @@ Author: Tobias Frisch
<property name="can-focus">False</property>
<property name="orientation">vertical</property>
<child>
- <object class="GtkBox">
+ <object class="GtkStack" id="chats_title_stack">
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="border-width">8</property>
- <property name="spacing">8</property>
+ <property name="transition-type">slide-down</property>
<child>
- <object class="GtkButton" id="user_details_button">
+ <object class="GtkBox" id="title_box">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="receives-default">True</property>
- <property name="relief">none</property>
+ <property name="can-focus">False</property>
+ <property name="border-width">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="GtkImage">
+ <object class="GtkLabel">
+ <property name="width-request">200</property>
<property name="visible">True</property>
<property name="can-focus">False</property>
- <property name="icon-name">open-menu-symbolic</property>
+ <property name="label" translatable="yes">GNUnet Messenger</property>
+ <property name="xalign">0</property>
+ <attributes>
+ <attribute name="weight" value="bold"/>
+ </attributes>
</object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
</child>
+ <child>
+ <object class="GtkButton" id="chats_search_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">edit-find-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack-type">end</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ <style>
+ <class name="header-box"/>
+ </style>
</object>
<packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
+ <property name="name">title_page</property>
</packing>
</child>
<child>
- <object class="GtkSearchEntry" id="chats_search">
- <property name="width-request">250</property>
+ <object class="GtkBox" id="search_box">
<property name="visible">True</property>
- <property name="can-focus">True</property>
- <property name="primary-icon-name">edit-find-symbolic</property>
- <property name="primary-icon-activatable">False</property>
- <property name="primary-icon-sensitive">False</property>
+ <property name="can-focus">False</property>
+ <property name="border-width">8</property>
+ <property name="spacing">8</property>
+ <child>
+ <object class="GtkSearchEntry" id="chats_search_entry">
+ <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">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="chats_search_end_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">window-close-symbolic</property>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <style>
+ <class name="header-box"/>
+ </style>
</object>
<packing>
- <property name="expand">True</property>
- <property name="fill">True</property>
+ <property name="name">search_page</property>
<property name="position">1</property>
</packing>
</child>
- <style>
- <class name="header-box"/>
- </style>
</object>
<packing>
<property name="expand">False</property>
@@ -123,7 +205,8 @@ Author: Tobias Frisch
<packing>
<property name="expand">True</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>
diff --git a/src/ui/messenger.c b/src/ui/messenger.c
@@ -71,7 +71,7 @@ _flap_user_details_reveal_switch(gpointer user_data)
hdy_flap_set_reveal_flap(flap, TRUE);
}
- gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_search), TRUE);
+ gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_search_entry), TRUE);
gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_listbox), TRUE);
return FALSE;
}
@@ -84,7 +84,7 @@ handle_user_details_via_button_click(UNUSED GtkButton* button,
UI_MESSENGER_Handle *handle = (UI_MESSENGER_Handle*) user_data;
- gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_search), FALSE);
+ gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_search_entry), FALSE);
gtk_widget_set_sensitive(GTK_WIDGET(handle->chats_listbox), FALSE);
util_idle_add(
G_SOURCE_FUNC(_flap_user_details_reveal_switch),
@@ -340,7 +340,7 @@ handle_chats_listbox_filter_func(GtkListBoxRow *row,
return TRUE;
const gchar *filter = gtk_entry_get_text(
- GTK_ENTRY(app->ui.messenger.chats_search)
+ GTK_ENTRY(app->ui.messenger.chats_search_entry)
);
if (!filter)
@@ -362,6 +362,29 @@ handle_chats_listbox_filter_func(GtkListBoxRow *row,
}
static void
+handle_search_button_click(UNUSED GtkButton *button,
+ gpointer user_data)
+{
+ g_assert(user_data);
+
+ UI_MESSENGER_Handle *handle = (UI_MESSENGER_Handle*) user_data;
+
+ gtk_stack_set_visible_child(handle->chats_title_stack, handle->search_box);
+}
+
+static void
+handle_search_end_button_click(UNUSED GtkButton *button,
+ gpointer user_data)
+{
+ g_assert(user_data);
+
+ UI_MESSENGER_Handle *handle = (UI_MESSENGER_Handle*) user_data;
+
+ gtk_stack_set_visible_child(handle->chats_title_stack, handle->title_box);
+ gtk_entry_set_text(GTK_ENTRY(handle->chats_search_entry), "");
+}
+
+static void
handle_chats_search_changed(UNUSED GtkSearchEntry *search,
gpointer user_data)
{
@@ -634,6 +657,18 @@ ui_messenger_init(MESSENGER_Application *app,
app
);
+ handle->chats_title_stack = GTK_STACK(
+ gtk_builder_get_object(handle->builder, "chats_title_stack")
+ );
+
+ handle->title_box = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "title_box")
+ );
+
+ handle->search_box = GTK_WIDGET(
+ gtk_builder_get_object(handle->builder, "search_box")
+ );
+
handle->user_details_button = GTK_BUTTON(
gtk_builder_get_object(handle->builder, "user_details_button")
);
@@ -645,8 +680,30 @@ ui_messenger_init(MESSENGER_Application *app,
handle
);
- handle->chats_search = GTK_SEARCH_ENTRY(
- gtk_builder_get_object(handle->builder, "chats_search")
+ handle->chats_search_button = GTK_BUTTON(
+ gtk_builder_get_object(handle->builder, "chats_search_button")
+ );
+
+ g_signal_connect(
+ handle->chats_search_button,
+ "clicked",
+ G_CALLBACK(handle_search_button_click),
+ handle
+ );
+
+ handle->chats_search_entry = GTK_SEARCH_ENTRY(
+ gtk_builder_get_object(handle->builder, "chats_search_entry")
+ );
+
+ handle->chats_search_end_button = GTK_BUTTON(
+ gtk_builder_get_object(handle->builder, "chats_search_end_button")
+ );
+
+ g_signal_connect(
+ handle->chats_search_end_button,
+ "clicked",
+ G_CALLBACK(handle_search_end_button_click),
+ handle
);
handle->chats_listbox = GTK_LIST_BOX(
@@ -668,7 +725,7 @@ ui_messenger_init(MESSENGER_Application *app,
);
g_signal_connect(
- handle->chats_search,
+ handle->chats_search_entry,
"search-changed",
G_CALLBACK(handle_chats_search_changed),
handle->chats_listbox
diff --git a/src/ui/messenger.h b/src/ui/messenger.h
@@ -70,8 +70,16 @@ typedef struct UI_MESSENGER_Handle
GtkButton *settings_button;
GtkButton *about_button;
+ GtkStack *chats_title_stack;
+ GtkWidget *title_box;
+ GtkWidget *search_box;
+
GtkButton *user_details_button;
- GtkSearchEntry *chats_search;
+ GtkButton *chats_search_button;
+
+ GtkSearchEntry *chats_search_entry;
+ GtkButton *chats_search_end_button;
+
GtkListBox *chats_listbox;
GtkStack *chats_stack;