[evolution/webkit-composer-rebased: 84/105] Fix HTML/Plain mode switching
- From: Matthew Barnes <mbarnes src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/webkit-composer-rebased: 84/105] Fix HTML/Plain mode switching
- Date: Thu, 13 Dec 2012 17:19:36 +0000 (UTC)
commit 660584e3c5cc6a97aca66d2624983222a0cbcef8
Author: Dan VrÃtil <dvratil redhat com>
Date: Sun Nov 4 19:37:58 2012 +0100
Fix HTML/Plain mode switching
e-util/e-editor-actions.c | 99 ++++++++++++++------------------------------
e-util/e-editor-widget.c | 35 +++++++++++++++-
2 files changed, 66 insertions(+), 68 deletions(-)
---
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index f9bf9db..3767909 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -623,56 +623,39 @@ action_language_cb (GtkToggleAction *action,
g_object_unref (dictionary);
}
-struct _ModeChanged {
- GtkRadioAction *action;
- EEditor *editor;
-};
-
static gboolean
-mode_changed (struct _ModeChanged *data)
+update_mode_combobox (gpointer data)
{
- GtkActionGroup *action_group;
- EEditor *editor = data->editor;
- EEditorWidget *widget;
+ EEditor *editor = data;
+ EEditorWidget *editor_widget;
+ GtkAction *action;
gboolean is_html;
- widget = e_editor_get_editor_widget (editor);
- is_html = gtk_radio_action_get_current_value (data->action);
+ editor_widget = e_editor_get_editor_widget (editor);
+ is_html = e_editor_widget_get_html_mode (editor_widget);
- if (is_html == e_editor_widget_get_html_mode (widget)) {
- goto exit;
- }
+ action = gtk_action_group_get_action (editor->priv->core_actions, "mode-html");
+ gtk_radio_action_set_current_value (GTK_RADIO_ACTION (action), (is_html ? TRUE : FALSE));
- /* If switching from HTML to plain text */
- if (!is_html) {
- GtkWidget *dialog, *parent;
+ return FALSE;
+}
- parent = gtk_widget_get_toplevel (GTK_WIDGET (editor));
- if (!GTK_IS_WINDOW (parent)) {
- parent = NULL;
- }
+static void
+action_mode_cb (GtkRadioAction *action,
+ GtkRadioAction *current,
+ EEditor *editor)
+{
+ GtkActionGroup *action_group;
+ EEditorWidget *editor_widget;
+ gboolean is_html;
- dialog = gtk_message_dialog_new (
- parent ? GTK_WINDOW (parent) : NULL,
- GTK_DIALOG_DESTROY_WITH_PARENT,
- GTK_MESSAGE_WARNING,
- GTK_BUTTONS_NONE,
- _("Turning HTML mode off will cause the text "
- "to lose all formatting. Do you want to continue?"));
- gtk_dialog_add_buttons (
- GTK_DIALOG (dialog),
- _("_Don't lose formatting"), GTK_RESPONSE_CANCEL,
- _("_Lose formatting"), GTK_RESPONSE_OK,
- NULL);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL) {
- gtk_radio_action_set_current_value (
- data->action, TRUE);
- gtk_widget_destroy (dialog);
- goto exit;
- }
+ editor_widget = e_editor_get_editor_widget (editor);
+ is_html = e_editor_widget_get_html_mode (editor_widget);
+ printf("action_mode_cb: is_html = %d\n", is_html);
- gtk_widget_destroy (dialog);
- }
+ /* This must be done from idle callback, because apparently we can change
+ * current value in callback of current value change */
+ g_idle_add (update_mode_combobox, editor);
action_group = editor->priv->html_actions;
gtk_action_group_set_sensitive (action_group, is_html);
@@ -696,33 +679,9 @@ mode_changed (struct _ModeChanged *data)
gtk_action_set_sensitive (ACTION (STYLE_H5), is_html);
gtk_action_set_sensitive (ACTION (STYLE_H6), is_html);
gtk_action_set_sensitive (ACTION (STYLE_ADDRESS), is_html);
-
- e_editor_widget_set_html_mode (
- e_editor_get_editor_widget (editor), is_html);
-
- exit:
- g_clear_object (&data->editor);
- g_clear_object (&data->action);
- g_free (data);
-
- return FALSE;
}
-static void
-action_mode_cb (GtkRadioAction *action,
- GtkRadioAction *current,
- EEditor *editor)
-{
- struct _ModeChanged *data;
-
- data = g_new0 (struct _ModeChanged, 1);
- data->action = g_object_ref (current);
- data->editor = g_object_ref (editor);
- /* We can't change group current value from this callback, so
- * let's do it all from an idle callback */
- g_idle_add ((GSourceFunc) mode_changed, data);
-}
static void
action_paste_cb (GtkAction *action,
@@ -1833,9 +1792,15 @@ editor_actions_init (EEditor *editor)
G_N_ELEMENTS (core_style_entries),
E_EDITOR_SELECTION_BLOCK_FORMAT_PARAGRAPH,
NULL, NULL);
- gtk_ui_manager_insert_action_group (manager, action_group, 0);
+ gtk_ui_manager_insert_action_group (manager, action_group, 0);\
+
+ action = gtk_action_group_get_action (action_group, "mode-html");
+ g_object_bind_property (
+ editor_widget, "html-mode",
+ action, "current-value",
+ G_BINDING_BIDIRECTIONAL | G_BINDING_SYNC_CREATE);
- /* Synchronize wiget mode with the button */
+ /* Synchronize wiget mode with the buttons */
e_editor_widget_set_html_mode (editor_widget, TRUE);
/* Face Action */
diff --git a/e-util/e-editor-widget.c b/e-util/e-editor-widget.c
index e781c72..7377297 100644
--- a/e-util/e-editor-widget.c
+++ b/e-util/e-editor-widget.c
@@ -706,7 +706,7 @@ e_editor_widget_class_init (EEditorWidgetClass *klass)
"html-mode",
"HTML Mode",
"Edit HTML or plain text",
- FALSE,
+ TRUE,
G_PARAM_READWRITE |
G_PARAM_CONSTRUCT));
@@ -955,6 +955,39 @@ e_editor_widget_set_html_mode (EEditorWidget *widget,
{
g_return_if_fail (E_IS_EDITOR_WIDGET (widget));
+ /* If toggling from HTML to plain text mode, ask user first */
+ if (widget->priv->html_mode && !html_mode) {
+ GtkWidget *parent, *dialog;
+
+ parent = gtk_widget_get_toplevel (GTK_WIDGET (widget));
+
+ if (!GTK_IS_WINDOW (parent)) {
+ parent = NULL;
+ }
+
+ dialog = gtk_message_dialog_new (
+ parent ? GTK_WINDOW (parent) : NULL,
+ GTK_DIALOG_DESTROY_WITH_PARENT,
+ GTK_MESSAGE_WARNING,
+ GTK_BUTTONS_NONE,
+ _("Turning HTML mode off will cause the text "
+ "to lose all formatting. Do you want to continue?"));
+ gtk_dialog_add_buttons (
+ GTK_DIALOG (dialog),
+ _("_Don't lose formatting"), GTK_RESPONSE_CANCEL,
+ _("_Lose formatting"), GTK_RESPONSE_OK,
+ NULL);
+
+ if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_CANCEL) {
+ gtk_widget_destroy (dialog);
+ /* Nothing has changed, but notify anyway */
+ g_object_notify (G_OBJECT (widget), "html-mode");
+ return;
+ }
+
+ gtk_widget_destroy (dialog);
+ }
+
if ((widget->priv->html_mode ? 1 : 0) == (html_mode ? 1 : 0)) {
return;
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]