--- a/talkatu/talkatuactiongroup.c Thu May 07 21:58:00 2020 -0500
+++ b/talkatu/talkatuactiongroup.c Thu May 07 23:13:36 2020 -0500
@@ -22,6 +22,8 @@
#include "talkatu/talkatuattachmentdialog.h"
#include "talkatu/talkatubuffer.h"
#include "talkatu/talkatulinkdialog.h"
+#include "talkatu/talkatumarkup.h" +#include "talkatu/talkatumessage.h" #include "talkatu/talkatutag.h"
@@ -112,11 +114,13 @@
} TalkatuActionGroupPrivate;
static GParamSpec *properties[N_PROPERTIES] = {NULL,};
@@ -358,7 +362,25 @@
gtk_widget_destroy(GTK_WIDGET(dialog));
} else if(response == GTK_RESPONSE_ACCEPT) {
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data); + TalkatuActionGroupPrivate *priv = NULL; + TalkatuAttachment *attachment = NULL; + TalkatuAttachmentDialog *adialog = TALKATU_ATTACHMENT_DIALOG(dialog); + const gchar *comment = NULL; + priv = talkatu_action_group_get_instance_private(ag); + /* Set the message to the comment from the dialog. */ + comment = talkatu_attachment_dialog_get_comment(adialog); + talkatu_markup_set_html(TALKATU_BUFFER(priv->buffer), comment, -1); + /* Add the attachment to the message */ + attachment = talkatu_attachment_dialog_get_attachment(adialog); + talkatu_message_add_attachment(TALKATU_MESSAGE(priv->input), attachment); + g_object_unref(G_OBJECT(attachment)); + /* Send the message! */ + talkatu_input_send_message(priv->input); gtk_widget_destroy(GTK_WIDGET(dialog));
@@ -374,9 +396,13 @@
gtk_widget_destroy(GTK_WIDGET(dialog));
} else if(response == GTK_RESPONSE_ACCEPT) {
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data); + TalkatuActionGroupPrivate *priv = NULL; TalkatuAttachment *attachment = NULL;
GtkWidget *attach_dialog = NULL;
- gchar *filename = NULL, *content_type = NULL;
+ gchar *filename = NULL, *content_type = NULL, *comment = NULL; + priv = talkatu_action_group_get_instance_private(ag); filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog));
content_type = g_content_type_guess(filename, NULL, 0, NULL);
@@ -389,7 +415,10 @@
gtk_widget_destroy(GTK_WIDGET(dialog));
- attach_dialog = talkatu_attachment_dialog_new(attachment, "");
+ comment = talkatu_markup_get_html(priv->buffer, NULL); + attach_dialog = talkatu_attachment_dialog_new(attachment, comment); g_signal_connect(G_OBJECT(attach_dialog), "response",
G_CALLBACK(talkatu_action_attach_file_attach_response_cb),
@@ -401,8 +430,13 @@
talkatu_action_attach_file(GSimpleAction *action, GVariant *parameter,
+ TalkatuActionGroup *ag = TALKATU_ACTION_GROUP(data); + TalkatuActionGroupPrivate *priv = NULL; GtkWidget *dialog = NULL;
+ priv = talkatu_action_group_get_instance_private(ag); + g_return_if_fail(TALKATU_IS_INPUT(priv->input)); dialog = gtk_file_chooser_dialog_new(_("Attach file..."),
GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -411,7 +445,7 @@
g_signal_connect(G_OBJECT(dialog), "response",
G_CALLBACK(talkatu_action_attach_file_response_cb),
gtk_widget_show_all(dialog);
@@ -487,6 +521,9 @@
g_value_set_object(value, talkatu_action_group_get_buffer(ag));
+ g_value_set_object(value, talkatu_action_group_get_input(ag)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
@@ -505,6 +542,9 @@
talkatu_action_group_set_buffer(ag, g_value_get_object(value));
+ talkatu_action_group_set_input(ag, g_value_get_object(value)); G_OBJECT_WARN_INVALID_PROPERTY_ID(obj, prop_id, pspec);
@@ -515,7 +555,8 @@
talkatu_action_group_finalize(GObject *obj) {
TalkatuActionGroupPrivate *priv = talkatu_action_group_get_instance_private(TALKATU_ACTION_GROUP(obj));
- g_clear_object(&priv->buffer);;
+ g_clear_object(&priv->buffer); + g_clear_object(&priv->input); G_OBJECT_CLASS(talkatu_action_group_parent_class)->finalize(obj);
@@ -605,10 +646,27 @@
obj_class->finalize = talkatu_action_group_finalize;
/* setup our properties */
+ * TalkatuActionGroup::buffer: + * The #TalkatuBuffer that this action group is tied to. properties[PROP_BUFFER] = g_param_spec_object(
"buffer", "buffer", "The buffer to work on",
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY
+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS + * TalkatuActionGroup::input: + * The #TalkatuInput that this action group is tied to. + properties[PROP_INPUT] = g_param_spec_object( + "input", "input", "The input to work on", + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS g_object_class_install_properties(obj_class, N_PROPERTIES, properties);
@@ -682,6 +740,44 @@
+ * talkatu_action_group_set_input: + * @ag: The #TalkatuActionGroup instance. + * @input: A #TalkatuInput instance or %NULL. + * Binds @ag to @input for actions that need to work against the input widget. +talkatu_action_group_set_input(TalkatuActionGroup *ag, TalkatuInput *input) { + TalkatuActionGroupPrivate *priv = NULL; + g_return_if_fail(TALKATU_IS_ACTION_GROUP(ag)); + priv = talkatu_action_group_get_instance_private(ag); + if(g_set_object(&priv->input, input)) { + g_object_notify_by_pspec(G_OBJECT(ag), properties[PROP_INPUT]); + * talkatu_action_group_get_input: + * @ag: The #TalkatuActionGroup instance. + * Gets the #TalkatuInput bound to @ag. + * Returns: (transfer full): The #TalkatuInput that @ag is bound to. +talkatu_action_group_get_input(TalkatuActionGroup *ag) { + TalkatuActionGroupPrivate *priv = NULL; + g_return_val_if_fail(TALKATU_IS_ACTION_GROUP(ag), NULL); + priv = talkatu_action_group_get_instance_private(ag);; * talkatu_action_group_enable_action:
* @ag: The #TalkatuActionGroup instance.
* @name: The name of the action to enable.
--- a/talkatu/talkatuactiongroup.h Thu May 07 21:58:00 2020 -0500
+++ b/talkatu/talkatuactiongroup.h Thu May 07 23:13:36 2020 -0500
@@ -26,6 +26,8 @@
+#include <talkatu/talkatuinput.h> #define TALKATU_ACTION_FORMAT_BOLD ("format-bold")
#define TALKATU_ACTION_FORMAT_ITALIC ("format-italic")
#define TALKATU_ACTION_FORMAT_UNDERLINE ("format-underline")
@@ -59,6 +61,9 @@
GtkTextBuffer *talkatu_action_group_get_buffer(TalkatuActionGroup *ag);
+void talkatu_action_group_set_input(TalkatuActionGroup *ag, TalkatuInput *input); +TalkatuInput *talkatu_action_group_get_input(TalkatuActionGroup *ag); void talkatu_action_group_enable_action(TalkatuActionGroup *ag, const gchar *name);
const gchar *talkatu_action_name_for_tag_name(const gchar *tag_name);
--- a/talkatu/talkatuinput.c Thu May 07 21:58:00 2020 -0500
+++ b/talkatu/talkatuinput.c Thu May 07 23:13:36 2020 -0500
@@ -23,6 +23,7 @@
#include "talkatu/talkatuinput.h"
+#include "talkatu/talkatuactiongroup.h" #include "talkatu/talkatuattachment.h"
#include "talkatu/talkatuattachmentdialog.h"
#include "talkatu/talkatuenums.h"
@@ -380,6 +381,16 @@
gtk_text_buffer_get_start_iter(buffer, &start);
priv->context_mark = gtk_text_buffer_create_mark(buffer, NULL, &start, TRUE);
+ if(TALKATU_IS_BUFFER(buffer)) { + TalkatuActionGroup *ag = NULL; + ag = talkatu_buffer_get_action_group(TALKATU_BUFFER(buffer)); + if(TALKATU_IS_ACTION_GROUP(ag)) { + /* Tell the action group of the buffer that we exist. */ + talkatu_action_group_set_input(ag, input);