[Webkit-unassigned] [Bug 19456] [GTK] Editing capabilities

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Jun 9 20:11:34 PDT 2008


http://bugs.webkit.org/show_bug.cgi?id=19456





------- Comment #1 from alp at nuanti.com  2008-06-09 20:11 PDT -------
The Evolution email client's composer is a good place to look for inspiration.

The important things we can learn from it:

gtkhtml_editor_run_command()

^ For running editor commands. We have this in WebKit but the command strings
may be different.

gtkhtml_editor_get_action()
gtkhtml_editor_get_ui_manager()

^ For hooking up UI actions directly to the composer.

gtkhtml_editor_get_html()
gtkhtml_editor_set_html()

^ For accessing the full content.

gtkhtml_editor_get_paragraph_data()
gtkhtml_editor_set_paragraph_data()

^ For accessing individual paragraph contents(?)

It will also be important to hook up Undo/Redo for editing, which is available
in WebKit but not yet hooked up in the GTK+ port. Note the ability to group
editing actions and label them in undo history.

Other things to note are the spell checking support and smiley conversion (we
should make it easy for this kind of cute feature to be implemented directly in
the app since it doesn't really belong in the widget).

Another interesting design decision is that the editor is a subclass of the
HTML widget. It might be worth doing this kind of separation over WebView.

See also:
http://www.go-evolution.org/New_Composer

Grep of gtkhtml use in the composer:

gnome/evolution/composer$ grep gtkhtml_ *
e-composer-actions.c:   response = gtkhtml_editor_file_chooser_dialog_run (
e-composer-actions.c:   if (!gtkhtml_editor_get_changed (editor) &&
e-composer-actions.c:   gtkhtml_editor_set_changed (editor, TRUE);
e-composer-actions.c:   gtkhtml_editor_set_changed (editor, TRUE);
e-composer-actions.c:   filename = gtkhtml_editor_get_filename (editor);
e-composer-actions.c:   if (!gtkhtml_editor_save (editor, filename, TRUE,
&error)) {
e-composer-actions.c:   gtkhtml_editor_run_command (GTKHTML_EDITOR (composer),
"saved");
e-composer-actions.c:   response = gtkhtml_editor_file_chooser_dialog_run (
e-composer-actions.c:   gtkhtml_editor_set_filename (GTKHTML_EDITOR (composer),
filename);
e-composer-actions.c:   gtkhtml_editor_set_changed (editor, TRUE);
e-composer-actions.c:   gtkhtml_editor_set_changed (editor, TRUE);
e-composer-actions.c:   manager = gtkhtml_editor_get_ui_manager (GTKHTML_EDITOR
(composer));
e-composer-actions.h:   (gtkhtml_editor_get_action (GTKHTML_EDITOR (composer),
(name)))
e-composer-autosave.c:  if (!gtkhtml_editor_get_changed (editor))
e-composer-autosave.c:  gtkhtml_editor_set_changed (editor, FALSE);
e-composer-private.c:   manager = gtkhtml_editor_get_ui_manager (GTKHTML_EDITOR
(composer));
e-composer-private.c:   manager = gtkhtml_editor_get_ui_manager (GTKHTML_EDITOR
(composer));
e-composer-private.c:   manager = gtkhtml_editor_get_ui_manager (editor);
e-msg-composer.c:               text = gtkhtml_editor_get_text_plain (editor,
&length);
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"save-data-on");
e-msg-composer.c:               text = gtkhtml_editor_get_text_html (editor,
&length);
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"save-data-off");
e-msg-composer.c:       gtkhtml_editor_set_text_html (GTKHTML_EDITOR
(composer), body, -1);
e-msg-composer.c:       gtkhtml_editor_set_changed (editor, TRUE);
e-msg-composer.c:               gtkhtml_editor_set_inline_spelling (editor,
enable);
e-msg-composer.c:               gtkhtml_editor_set_magic_links (editor,
enable);
e-msg-composer.c:               gtkhtml_editor_set_magic_smileys (editor,
enable);
e-msg-composer.c:       gtkhtml_editor_set_changed (editor, TRUE);
e-msg-composer.c:       gtkhtml_editor_set_html_mode (GTKHTML_EDITOR
(composer), active);
e-msg-composer.c:               language = gtkhtml_spell_language_lookup
(language_code);
e-msg-composer.c:       gtkhtml_editor_set_spell_languages (
e-msg-composer.c:       gtkhtml_editor_run_command (GTKHTML_EDITOR (widget),
"grab-focus");
e-msg-composer.c:               gtkhtml_editor_run_command (
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"orig");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"italic-off");
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"signature");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"italic-off");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "italic-off");
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"orig");
e-msg-composer.c:       gtkhtml_editor_set_paragraph_data (editor, "orig",
"0");
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"signature");
e-msg-composer.c:       if (gtkhtml_editor_is_paragraph_empty (editor))
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"signature" ,"0");
e-msg-composer.c:       else if (gtkhtml_editor_is_previous_paragraph_empty
(editor) &&
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"cursor-backward")) {
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"signature", "0");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"cursor-forward");
e-msg-composer.c:       gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "italic-off");
e-msg-composer.c:       if (!gtkhtml_editor_is_paragraph_empty (editor))
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"orig");
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"orig", "0");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"indent-zero");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"style-normal");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"italic-off");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"insert-paragraph");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"delete-back");
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"signature");
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"signature", "0");
e-msg-composer.c:       html = gtkhtml_editor_get_html (editor);
e-msg-composer.c:               gtkhtml_editor_get_html (editor), stream,
e-msg-composer.c:       html = gtkhtml_editor_get_html (editor);
e-msg-composer.c:       manager = gtkhtml_editor_get_ui_manager (editor);
e-msg-composer.c:       gtkhtml_editor_set_changed (editor, FALSE);
e-msg-composer.c:       if (!gtkhtml_editor_search_by_data (editor, 1,
"ClueFlow", "signature", "1"))
e-msg-composer.c:       data = gtkhtml_editor_get_paragraph_data (editor,
"signature_name");
e-msg-composer.c:                               gtkhtml_editor_set_html_mode (
e-msg-composer.c:                               gtkhtml_editor_set_html_mode (
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "editable-off");
e-msg-composer.c:       gtkhtml_editor_set_changed (editor, FALSE);
e-msg-composer.c:       html_content = gtkhtml_editor_get_html_mode (editor);
e-msg-composer.c:       gtkhtml_editor_set_html_mode (GTKHTML_EDITOR
(composer), FALSE);
e-msg-composer.c:       html_content = gtkhtml_editor_get_html_mode (editor);
e-msg-composer.c:       html_content = gtkhtml_editor_get_html_mode (editor);
e-msg-composer.c:       html_content = gtkhtml_editor_get_html_mode (editor);
e-msg-composer.c:       html = gtkhtml_editor_get_html (editor);
e-msg-composer.c:       gtkhtml_editor_freeze (editor);
e-msg-composer.c:       gtkhtml_editor_run_command (editor,
"cursor-position-save");
e-msg-composer.c:       gtkhtml_editor_undo_begin (editor, "Set signature",
"Reset signature");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "block-selection");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "cursor-bod");
e-msg-composer.c:       if (gtkhtml_editor_search_by_data (editor, 1,
"ClueFlow", "signature", "1")) {
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"select-paragraph");
e-msg-composer.c:               gtkhtml_editor_run_command (editor, "delete");
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"signature", "0");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"delete-back");
e-msg-composer.c:       gtkhtml_editor_run_command (editor,
"unblock-selection");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"insert-paragraph");
e-msg-composer.c:               if (!gtkhtml_editor_run_command (editor,
"cursor-backward"))
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"insert-paragraph");
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"cursor-forward");
e-msg-composer.c:               gtkhtml_editor_set_paragraph_data (editor,
"orig", "0");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"indent-zero");
e-msg-composer.c:               gtkhtml_editor_run_command (editor,
"style-normal");
e-msg-composer.c:               gtkhtml_editor_insert_html (editor, html_text);
e-msg-composer.c:       gtkhtml_editor_undo_end (editor);
e-msg-composer.c:       gtkhtml_editor_run_command (editor,
"cursor-position-restore");
e-msg-composer.c:       gtkhtml_editor_thaw (editor);
e-msg-composer.c:       text = gtkhtml_editor_get_text_plain (editor, &length);
e-msg-composer.c:       gtkhtml_editor_set_html_mode (editor, !alt);
e-msg-composer.c:       if (!gtkhtml_editor_is_paragraph_empty (editor)) {
e-msg-composer.c:               if (gtkhtml_editor_is_previous_paragraph_empty
(editor))
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"cursor-backward");
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"italic-off");
e-msg-composer.c:                       gtkhtml_editor_run_command (editor,
"insert-paragraph");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "style-normal");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "indent-zero");
e-msg-composer.c:       gtkhtml_editor_run_command (editor,
"text-default-color");
e-msg-composer.c:       gtkhtml_editor_run_command (editor, "italic-off");


-- 
Configure bugmail: http://bugs.webkit.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.



More information about the webkit-unassigned mailing list