--- a/demo/data/demo.ui Mon Sep 03 16:10:29 2018 -0500
+++ b/demo/data/demo.ui Mon Sep 03 16:39:46 2018 -0500
@@ -75,6 +75,21 @@
+ <object class="GtkRadioToolButton" id="toggle_whole"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Whole</property> + <property name="use_underline">True</property> + <property name="icon_name">ascii</property> + <property name="group">toggle_plain</property> + <signal name="toggled" handler="talkatu_demo_buffer_changed_cb" object="TalkatuDemo" swapped="no"/> + <property name="expand">False</property> + <property name="homogeneous">True</property> <object class="GtkRadioToolButton" id="toggle_html">
<property name="visible">True</property>
<property name="can_focus">False</property>
@@ -183,4 +198,8 @@
+ <object class="TalkatuHtmlBuffer" id="buffer_whole"> + <property name="tag_table">table_plain</property> + <property name="style">whole</property> --- a/demo/talkatudemo.c Mon Sep 03 16:10:29 2018 -0500
+++ b/demo/talkatudemo.c Mon Sep 03 16:39:46 2018 -0500
@@ -39,10 +39,12 @@
GtkRadioToolButton *toggle_plain;
+ GtkRadioToolButton *toggle_whole; GtkRadioToolButton *toggle_html;
GtkRadioToolButton *toggle_markdown;
GtkTextBuffer *buffer_plain;
+ GtkTextBuffer *buffer_whole; GtkTextBuffer *buffer_html;
GtkTextBuffer *buffer_markdown;
GtkTextBuffer *buffer_history;
@@ -150,6 +152,9 @@
if(gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(demo->toggle_plain))) {
g_message("switching to plain buffer");
gtk_text_view_set_buffer(GTK_TEXT_VIEW(view), demo->buffer_plain);
+ } else if(gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(demo->toggle_whole))) { + g_message("switching to whole buffer"); + gtk_text_view_set_buffer(GTK_TEXT_VIEW(view), demo->buffer_whole); } else if(gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(demo->toggle_html))) {
g_message("switching to html buffer");
gtk_text_view_set_buffer(GTK_TEXT_VIEW(view), demo->buffer_html);
@@ -248,11 +253,13 @@
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, editor);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, buffer_plain);
+ gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, buffer_whole); gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, buffer_html);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, buffer_markdown);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, buffer_history);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, toggle_plain);
+ gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, toggle_whole); gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, toggle_html);
gtk_widget_class_bind_template_child(widget_class, TalkatuDemo, toggle_markdown);
--- a/talkatu/meson.build Mon Sep 03 16:10:29 2018 -0500
+++ b/talkatu/meson.build Mon Sep 03 16:39:46 2018 -0500
@@ -72,6 +72,7 @@
###############################################################################
--- a/talkatu/talkatuaction.c Mon Sep 03 16:10:29 2018 -0500
+++ b/talkatu/talkatuaction.c Mon Sep 03 16:39:46 2018 -0500
@@ -117,8 +117,19 @@
GtkTextBuffer *buffer = GTK_TEXT_BUFFER(data);
+ TalkatuBufferStyle style = talkatu_buffer_get_style(TALKATU_BUFFER(buffer)); + gboolean apply = FALSE; - if(gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) {
+ if(style == TALKATU_BUFFER_STYLE_WHOLE) { + gtk_text_buffer_get_bounds(buffer, &start, &end); + if(gtk_text_buffer_get_selection_bounds(buffer, &start, &end)) { const gchar *tag_name = NULL, *name = NULL;
name = g_action_get_name(G_ACTION(action));
@@ -131,10 +142,8 @@
gtk_text_buffer_begin_user_action(buffer);
if(g_variant_get_boolean(state)) {
- g_warning(_("applying %s"), tag_name);
gtk_text_buffer_apply_tag_by_name(buffer, tag_name, &start, &end);
- g_warning(_("removing %s"), tag_name);
gtk_text_buffer_remove_tag_by_name(buffer, tag_name, &start, &end);
--- a/talkatu/talkatubuffer.c Mon Sep 03 16:10:29 2018 -0500
+++ b/talkatu/talkatubuffer.c Mon Sep 03 16:39:46 2018 -0500
@@ -18,9 +18,10 @@
#include <glib/gi18n-lib.h>
-#include "talkatu/talkatuaction.h"
-#include "talkatu/talkatubuffer.h"
-#include "talkatu/talkatutag.h"
+#include <talkatu/talkatuaction.h> +#include <talkatu/talkatubuffer.h> +#include <talkatu/talkatuenums.h> +#include <talkatu/talkatutag.h> @@ -39,7 +40,16 @@
+ * @TALKATU_BUFFER_STYLE_RICH: Format the buffer character by character. + * @TALKATU_BUFFER_STYLE_WHOLE: Format the buffer as a whole. + * The format style of a #TalkatuBuffer. typedef struct _TalkatuBufferPrivate {
+ TalkatuBufferStyle style; GSimpleActionGroup *action_group;
@@ -47,6 +57,7 @@
@@ -237,6 +248,15 @@
*****************************************************************************/
+talkatu_buffer_set_style(TalkatuBuffer *buffer, TalkatuBufferStyle style) { + TalkatuBufferPrivate *priv = talkatu_buffer_get_instance_private(buffer); + g_object_notify(G_OBJECT(buffer), "style"); talkatu_buffer_set_action_group(TalkatuBuffer *buffer,
GSimpleActionGroup *action_group)
@@ -282,6 +302,9 @@
TalkatuBuffer *buffer = TALKATU_BUFFER(obj);
+ g_value_set_enum(value, talkatu_buffer_get_style(buffer)); g_value_set_object(value, talkatu_buffer_get_action_group(buffer));
@@ -300,6 +323,9 @@
TalkatuBuffer *buffer = TALKATU_BUFFER(obj);
+ talkatu_buffer_set_style(buffer, g_value_get_enum(value)); talkatu_buffer_set_action_group(buffer, g_value_get_object(value));
@@ -339,6 +365,13 @@
klass->insert_markup = talkatu_buffer_real_insert_markup;
klass->create_action_group = talkatu_buffer_default_creation_action_group;
+ properties[PROP_STYLE] = g_param_spec_enum( + "style", "style", "The format style of the buffer", + TALKATU_TYPE_BUFFER_STYLE, + TALKATU_BUFFER_STYLE_RICH, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY properties[PROP_ACTION_GROUP] = g_param_spec_object(
"action-group", "action-group", "The action group for this buffer",
@@ -371,6 +404,25 @@
+ * talkatu_buffer_get_style: + * @buffer: A #TalkatuBuffer instance. + * Get's format style of @buffer. + * Returns: The format style of @buffer. +talkatu_buffer_get_style(TalkatuBuffer *buffer) { + TalkatuBufferPrivate *priv = NULL; + g_return_val_if_fail(TALKATU_IS_BUFFER(buffer), TALKATU_BUFFER_STYLE_RICH); + priv = talkatu_buffer_get_instance_private(buffer); * talkatu_buffer_get_action_group:
* @buffer: A #TalkatuBuffer instance.
--- a/talkatu/talkatubuffer.h Mon Sep 03 16:10:29 2018 -0500
+++ b/talkatu/talkatubuffer.h Mon Sep 03 16:39:46 2018 -0500
@@ -39,6 +39,12 @@
typedef struct _TalkatuBuffer TalkatuBuffer;
typedef struct _TalkatuBufferClass TalkatuBufferClass;
+typedef enum /*< prefix=TALKATU_BUFFER_STYLE,underscore_name=TALKATU_BUFFER_STYLE >*/ + TALKATU_BUFFER_STYLE_RICH, + TALKATU_BUFFER_STYLE_WHOLE, @@ -67,6 +73,7 @@
GtkTextBuffer *talkatu_buffer_new(GSimpleActionGroup *action_group);
+TalkatuBufferStyle talkatu_buffer_get_style(TalkatuBuffer *buffer); GSimpleActionGroup *talkatu_buffer_get_action_group(TalkatuBuffer *buffer);
void talkatu_buffer_insert_markup(TalkatuBuffer *buffer, GtkTextIter *pos, const gchar *new_text, gint new_text_length);