commit e134f8741e94254b5c36490269032171db31ca8f
parent 36ba13a946169ee4a206bf0895eedf6ca2a3caeb
Author: Jacki <jacki@thejackimonster.de>
Date: Wed, 3 Jan 2024 18:11:28 +0100
Add block button to contact sidebar
Signed-off-by: Jacki <jacki@thejackimonster.de>
Diffstat:
4 files changed, 192 insertions(+), 6 deletions(-)
diff --git a/resources/ui/chat.ui b/resources/ui/chat.ui
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<!-- Generated with glade 3.38.2
+<!-- Generated with glade 3.40.0
Copyright (C) 2021‑‑2022 GNUnet e.V.
@@ -674,6 +674,110 @@ Author: Tobias Frisch
</packing>
</child>
<child>
+ <object class="GtkStack" id="block_stack">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <child>
+ <object class="GtkButton" id="block_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="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="border-width">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">mail-mark-junk-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">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Block Contact</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="pack-type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">page_block</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="unblock_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="GtkBox">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="border-width">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">mail-mark-notjunk-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">
+ <property name="visible">True</property>
+ <property name="can-focus">False</property>
+ <property name="label" translatable="yes">Unblock Contact</property>
+ <property name="xalign">0</property>
+ </object>
+ <packing>
+ <property name="expand">True</property>
+ <property name="fill">True</property>
+ <property name="pack-type">end</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </object>
+ </child>
+ </object>
+ <packing>
+ <property name="name">page_unblock</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" id="leave_chat_button">
<property name="visible">True</property>
<property name="can-focus">True</property>
@@ -720,7 +824,7 @@ Author: Tobias Frisch
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
- <property name="position">1</property>
+ <property name="position">2</property>
</packing>
</child>
<style>
diff --git a/resources/ui/contact_info.ui b/resources/ui/contact_info.ui
@@ -172,7 +172,7 @@ Author: Tobias Frisch
<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-name">user-info-symbolic</property>
</object>
<packing>
<property name="expand">False</property>
diff --git a/src/ui/chat.c b/src/ui/chat.c
@@ -25,6 +25,7 @@
#include "chat.h"
#include <gdk/gdkkeysyms.h>
+#include <gnunet/gnunet_chat_lib.h>
#include <stdlib.h>
#include "chat_entry.h"
@@ -184,6 +185,42 @@ handle_reveal_identity_button_click(GtkButton *button,
}
static void
+handle_block_button_click(UNUSED GtkButton *button,
+ gpointer user_data)
+{
+ UI_CHAT_Handle *handle = (UI_CHAT_Handle*) user_data;
+
+ struct GNUNET_CHAT_Contact *contact = (struct GNUNET_CHAT_Contact*) (
+ g_object_get_qdata(G_OBJECT(handle->block_stack), handle->app->quarks.data)
+ );
+
+ if (!contact)
+ return;
+
+ GNUNET_CHAT_contact_set_blocked(contact, GNUNET_YES);
+
+ gtk_stack_set_visible_child(handle->block_stack, GTK_WIDGET(handle->unblock_button));
+}
+
+static void
+handle_unblock_button_click(UNUSED GtkButton *button,
+ gpointer user_data)
+{
+ UI_CHAT_Handle *handle = (UI_CHAT_Handle*) user_data;
+
+ struct GNUNET_CHAT_Contact *contact = (struct GNUNET_CHAT_Contact*) (
+ g_object_get_qdata(G_OBJECT(handle->block_stack), handle->app->quarks.data)
+ );
+
+ if (!contact)
+ return;
+
+ GNUNET_CHAT_contact_set_blocked(contact, GNUNET_NO);
+
+ gtk_stack_set_visible_child(handle->block_stack, GTK_WIDGET(handle->block_button));
+}
+
+static void
handle_leave_chat_button_click(UNUSED GtkButton *button,
gpointer user_data)
{
@@ -194,8 +231,8 @@ handle_leave_chat_button_click(UNUSED GtkButton *button,
struct GNUNET_CHAT_Context *context = (struct GNUNET_CHAT_Context*) (
g_object_get_qdata(
- G_OBJECT(handle->send_text_view),
- handle->app->quarks.data
+ G_OBJECT(handle->send_text_view),
+ handle->app->quarks.data
)
);
@@ -1081,6 +1118,32 @@ ui_chat_new(MESSENGER_Application *app)
handle
);
+ handle->block_stack = GTK_STACK(
+ gtk_builder_get_object(handle->builder, "block_stack")
+ );
+
+ handle->block_button = GTK_BUTTON(
+ gtk_builder_get_object(handle->builder, "block_button")
+ );
+
+ g_signal_connect(
+ handle->block_button,
+ "clicked",
+ G_CALLBACK(handle_block_button_click),
+ handle
+ );
+
+ handle->unblock_button = GTK_BUTTON(
+ gtk_builder_get_object(handle->builder, "unblock_button")
+ );
+
+ g_signal_connect(
+ handle->unblock_button,
+ "clicked",
+ G_CALLBACK(handle_unblock_button_click),
+ handle
+ );
+
handle->leave_chat_button = GTK_BUTTON(
gtk_builder_get_object(handle->builder, "leave_chat_button")
);
@@ -1455,6 +1518,22 @@ ui_chat_update(UI_CHAT_Handle *handle,
contact? TRUE : FALSE
);
+ g_object_set_qdata(
+ G_OBJECT(handle->block_stack),
+ app->quarks.data,
+ contact
+ );
+
+ if (GNUNET_YES == GNUNET_CHAT_contact_is_blocked(contact))
+ gtk_stack_set_visible_child(handle->block_stack, GTK_WIDGET(handle->unblock_button));
+ else
+ gtk_stack_set_visible_child(handle->block_stack, GTK_WIDGET(handle->block_button));
+
+ gtk_widget_set_visible(
+ GTK_WIDGET(handle->block_stack),
+ contact? TRUE : FALSE
+ );
+
gtk_widget_set_sensitive(
GTK_WIDGET(handle->leave_chat_button),
(contact) || (group)? TRUE : FALSE
diff --git a/src/ui/chat.h b/src/ui/chat.h
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2021--2022 GNUnet e.V.
+ Copyright (C) 2021--2024 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -95,6 +95,9 @@ typedef struct UI_CHAT_Handle
HdyAvatar *chat_details_avatar;
GtkButton *reveal_identity_button;
+ GtkStack *block_stack;
+ GtkButton *block_button;
+ GtkButton *unblock_button;
GtkButton *leave_chat_button;
GtkSwitch *chat_notifications_switch;