messenger-gtk

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

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:
Mresources/ui/chat.ui | 6+++---
Mresources/ui/messenger.ui | 131++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------
Msrc/ui/messenger.c | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++------
Msrc/ui/messenger.h | 10+++++++++-
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;