[evolution/wip/webkit-composer: 54/262] Some more fixes in the dialogs
- From: Tomas Popela <tpopela src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [evolution/wip/webkit-composer: 54/262] Some more fixes in the dialogs
- Date: Thu, 16 Jan 2014 09:52:25 +0000 (UTC)
commit d2356308f39b6075701337aa485da230d1fe774f
Author: Dan Vrátil <dvratil redhat com>
Date: Mon Aug 20 22:31:44 2012 +0200
Some more fixes in the dialogs
- make the dialog modal
- fix gtk_window_set_transient_for()
- always give focus to WebKit so that text selection is painted even when
there's a modal dialog on top of the main window which has the actual focus
e-util/e-editor-actions.c | 1 +
e-util/e-editor-dialog.c | 21 ++++++++++++---
e-util/e-editor-find-dialog.c | 7 +++++
e-util/e-editor-hrule-dialog.c | 2 +-
e-util/e-editor-page-dialog.c | 2 +-
e-util/e-editor-spell-check-dialog.c | 48 ++++++++++++++++++++++++----------
6 files changed, 61 insertions(+), 20 deletions(-)
---
diff --git a/e-util/e-editor-actions.c b/e-util/e-editor-actions.c
index 84254a7..77386ff 100644
--- a/e-util/e-editor-actions.c
+++ b/e-util/e-editor-actions.c
@@ -1931,6 +1931,7 @@ editor_actions_init (EEditor *editor)
gtk_action_set_sensitive (ACTION (UNINDENT), FALSE);
gtk_action_set_sensitive (ACTION (FIND_AGAIN), FALSE);
+ gtk_action_set_sensitive (ACTION (SPELL_CHECK), FALSE);
g_object_bind_property (
editor_widget, "can-redo",
diff --git a/e-util/e-editor-dialog.c b/e-util/e-editor-dialog.c
index 5f6a18f..0adfa56 100644
--- a/e-util/e-editor-dialog.c
+++ b/e-util/e-editor-dialog.c
@@ -39,16 +39,13 @@ enum {
PROP_EDITOR,
};
+
static void
editor_dialog_set_editor (EEditorDialog *dialog,
EEditor *editor)
{
dialog->priv->editor = g_object_ref (editor);
- gtk_window_set_transient_for (
- GTK_WINDOW (dialog),
- GTK_WINDOW (gtk_widget_get_toplevel (GTK_WIDGET (editor))));
-
g_object_notify (G_OBJECT (dialog), "editor");
}
@@ -86,6 +83,20 @@ editor_dialog_set_property (GObject *object,
}
static void
+editor_dialog_constructed (GObject *object)
+{
+ EEditorDialog *dialog = E_EDITOR_DIALOG (object);
+
+ /* Chain up to parent implementation first */
+ G_OBJECT_CLASS (e_editor_dialog_parent_class)->constructed (object);
+
+ gtk_window_set_transient_for (
+ GTK_WINDOW (dialog),
+ GTK_WINDOW (gtk_widget_get_toplevel (
+ GTK_WIDGET (dialog->priv->editor))));
+}
+
+static void
editor_dialog_show (GtkWidget *widget)
{
gtk_widget_show_all (GTK_WIDGET (E_EDITOR_DIALOG (widget)->priv->container));
@@ -118,6 +129,7 @@ e_editor_dialog_class_init (EEditorDialogClass *klass)
object_class->get_property = editor_dialog_get_property;
object_class->set_property = editor_dialog_set_property;
object_class->dispose = editor_dialog_dispose;
+ object_class->constructed = editor_dialog_constructed;
widget_class = GTK_WIDGET_CLASS (klass);
widget_class->show = editor_dialog_show;
@@ -171,6 +183,7 @@ e_editor_dialog_init (EEditorDialog *dialog)
g_object_set (
G_OBJECT (dialog),
"destroy-with-parent", TRUE,
+ "modal", TRUE,
"resizable", FALSE,
"type-hint", GDK_WINDOW_TYPE_HINT_POPUP_MENU,
"window-position", GTK_WIN_POS_CENTER_ON_PARENT,
diff --git a/e-util/e-editor-find-dialog.c b/e-util/e-editor-find-dialog.c
index eeb0553..ae28732 100644
--- a/e-util/e-editor-find-dialog.c
+++ b/e-util/e-editor-find-dialog.c
@@ -85,6 +85,13 @@ editor_find_dialog_find_cb (EEditorFindDialog *dialog)
gtk_widget_set_sensitive (dialog->priv->find_button, found);
+ /* We give focus to WebKit so that the selection is highlited.
+ * Without focus selection is not visible (at least with my default
+ * color scheme). The focus in fact is not given to WebKit, because
+ * this dialog is modal, but it satisfies it in a way that it paints
+ * the selection :) */
+ gtk_widget_grab_focus (GTK_WIDGET (editor_widget));
+
if (!found) {
gtk_label_set_label (
GTK_LABEL (dialog->priv->result_label),
diff --git a/e-util/e-editor-hrule-dialog.c b/e-util/e-editor-hrule-dialog.c
index 0f2134f..1c572a5 100644
--- a/e-util/e-editor-hrule-dialog.c
+++ b/e-util/e-editor-hrule-dialog.c
@@ -51,7 +51,7 @@ editor_hrule_dialog_set_alignment (EEditorHRuleDialog *dialog)
g_return_if_fail (WEBKIT_DOM_IS_HTMLHR_ELEMENT (dialog->priv->hr_element));
alignment = gtk_combo_box_get_active_id (
- GTK_COMBO_BOX_TEXT (dialog->priv->alignment_combo));
+ GTK_COMBO_BOX (dialog->priv->alignment_combo));
webkit_dom_htmlhr_element_set_align (dialog->priv->hr_element, alignment);
}
diff --git a/e-util/e-editor-page-dialog.c b/e-util/e-editor-page-dialog.c
index 6976172..0ce56a4 100644
--- a/e-util/e-editor-page-dialog.c
+++ b/e-util/e-editor-page-dialog.c
@@ -255,7 +255,7 @@ editor_page_dialog_set_background_image (EEditorPageDialog *dialog)
EEditorWidget *widget;
WebKitDOMDocument *document;
WebKitDOMHTMLElement *body;
- const gchar *uri;
+ gchar *uri;
editor = e_editor_dialog_get_editor(E_EDITOR_DIALOG (dialog));
widget = e_editor_get_editor_widget (editor);
diff --git a/e-util/e-editor-spell-check-dialog.c b/e-util/e-editor-spell-check-dialog.c
index 2447ec5..0b2594a 100644
--- a/e-util/e-editor-spell-check-dialog.c
+++ b/e-util/e-editor-spell-check-dialog.c
@@ -60,6 +60,8 @@ static void
editor_spell_check_dialog_set_word (EEditorSpellCheckDialog *dialog,
const gchar *word)
{
+ EEditor *editor;
+ EEditorWidget *editor_widget;
GtkListStore *store;
gchar *markup;
gchar **suggestions;
@@ -95,17 +97,29 @@ editor_spell_check_dialog_set_word (EEditorSpellCheckDialog *dialog,
}
g_strfreev (suggestions);
+
+ /* We give focus to WebKit so that the currently selected word
+ * is highlited. Without focus selection is not visible (at
+ * least with my default color scheme). The focus in fact is not
+ * given to WebKit, because this dialog is modal, but it satisfies
+ * it in a way that it paints the selection :) */
+ editor = e_editor_dialog_get_editor (E_EDITOR_DIALOG (dialog));
+ editor_widget = e_editor_get_editor_widget (editor);
+ gtk_widget_grab_focus (GTK_WIDGET (editor_widget));
}
static gboolean
select_next_word (EEditorSpellCheckDialog *dialog)
{
- WebKitDOMNode *anchor;
- gulong anchor_offset;
+ WebKitDOMNode *anchor, *focus;
+ gulong anchor_offset, focus_offset;
anchor = webkit_dom_dom_selection_get_anchor_node (dialog->priv->selection);
anchor_offset = webkit_dom_dom_selection_get_anchor_offset (dialog->priv->selection);
+ focus = webkit_dom_dom_selection_get_focus_node (dialog->priv->selection);
+ focus_offset = webkit_dom_dom_selection_get_focus_offset (dialog->priv->selection);
+
/* Jump _behind_ next word */
webkit_dom_dom_selection_modify (
dialog->priv->selection, "move", "forward", "word");
@@ -116,16 +130,20 @@ select_next_word (EEditorSpellCheckDialog *dialog)
webkit_dom_dom_selection_modify (
dialog->priv->selection, "extend", "forward", "word");
- /* If the selection start didn't change, then we have most probably
+ /* If the selection didn't change, then we have most probably
* reached the end of document - return FALSE */
- return ((anchor != webkit_dom_dom_selection_get_anchor_node (
- dialog->priv->selection)) ||
- (anchor_offset != webkit_dom_dom_selection_get_anchor_offset (
+ return !((anchor == webkit_dom_dom_selection_get_anchor_node (
+ dialog->priv->selection)) &&
+ (anchor_offset == webkit_dom_dom_selection_get_anchor_offset (
+ dialog->priv->selection)) &&
+ (focus == webkit_dom_dom_selection_get_focus_node (
+ dialog->priv->selection)) &&
+ (focus_offset == webkit_dom_dom_selection_get_focus_offset (
dialog->priv->selection)));
}
-static void
+static gboolean
editor_spell_check_dialog_next (EEditorSpellCheckDialog *dialog)
{
WebKitDOMNode *start = NULL, *end = NULL;
@@ -163,7 +181,7 @@ editor_spell_check_dialog_next (EEditorSpellCheckDialog *dialog)
if (loc != -1) {
editor_spell_check_dialog_set_word (dialog, word);
g_free (word);
- return;
+ return TRUE;
}
g_free (word);
@@ -179,6 +197,7 @@ editor_spell_check_dialog_next (EEditorSpellCheckDialog *dialog)
/* Close the dialog */
gtk_widget_hide (GTK_WIDGET (dialog));
+ return FALSE;
}
static gboolean
@@ -208,7 +227,7 @@ select_previous_word (EEditorSpellCheckDialog *dialog)
dialog->priv->selection)));
}
-static void
+static gboolean
editor_spell_check_dialog_prev (EEditorSpellCheckDialog *dialog)
{
WebKitDOMNode *start = NULL, *end = NULL;
@@ -248,7 +267,7 @@ editor_spell_check_dialog_prev (EEditorSpellCheckDialog *dialog)
if (loc != -1) {
editor_spell_check_dialog_set_word (dialog, word);
g_free (word);
- return;
+ return TRUE;
}
g_free (word);
@@ -264,6 +283,7 @@ editor_spell_check_dialog_prev (EEditorSpellCheckDialog *dialog)
/* Close the dialog */
gtk_widget_hide (GTK_WIDGET (dialog));
+ return FALSE;
}
static void
@@ -395,10 +415,10 @@ editor_spell_check_dialog_show (GtkWidget *gtk_widget)
window = webkit_dom_document_get_default_view (document);
dialog->priv->selection = webkit_dom_dom_window_get_selection (window);
- /* Select the first word */
- editor_spell_check_dialog_next (dialog);
-
- GTK_WIDGET_CLASS (e_editor_spell_check_dialog_parent_class)->show (gtk_widget);
+ /* Select the first word or quit */
+ if (editor_spell_check_dialog_next (dialog)) {
+ GTK_WIDGET_CLASS (e_editor_spell_check_dialog_parent_class)->show (gtk_widget);
+ }
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]