Title: [185312] trunk/Tools
Revision
185312
Author
[email protected]
Date
2015-06-07 23:38:06 -0700 (Sun, 07 Jun 2015)

Log Message

[GTK] Add editor mode to MiniBrowser
https://bugs.webkit.org/show_bug.cgi?id=145595

Reviewed by Sergio Villar Senin.

It loads an empty editable web view with an edit toolbar. It makes
easier to test the editor, editing commands and input methods.

* MiniBrowser/gtk/BrowserWindow.c:
(editingCommandCallback):
(browserWindowSetupEditorToolbar):
(browserWindowConstructed):
* MiniBrowser/gtk/main.c:
(createBrowserWindow):

Modified Paths

Diff

Modified: trunk/Tools/ChangeLog (185311 => 185312)


--- trunk/Tools/ChangeLog	2015-06-08 06:35:31 UTC (rev 185311)
+++ trunk/Tools/ChangeLog	2015-06-08 06:38:06 UTC (rev 185312)
@@ -1,3 +1,20 @@
+2015-06-07  Carlos Garcia Campos  <[email protected]>
+
+        [GTK] Add editor mode to MiniBrowser
+        https://bugs.webkit.org/show_bug.cgi?id=145595
+
+        Reviewed by Sergio Villar Senin.
+
+        It loads an empty editable web view with an edit toolbar. It makes
+        easier to test the editor, editing commands and input methods.
+
+        * MiniBrowser/gtk/BrowserWindow.c:
+        (editingCommandCallback):
+        (browserWindowSetupEditorToolbar):
+        (browserWindowConstructed):
+        * MiniBrowser/gtk/main.c:
+        (createBrowserWindow):
+
 2015-06-05  Zalan Bujtas  <[email protected]>
 
         From r185273 on WTF::RefCounter exposes the actual refcount instead of a boolean value.

Modified: trunk/Tools/MiniBrowser/gtk/BrowserWindow.c (185311 => 185312)


--- trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2015-06-08 06:35:31 UTC (rev 185311)
+++ trunk/Tools/MiniBrowser/gtk/BrowserWindow.c	2015-06-08 06:38:06 UTC (rev 185312)
@@ -691,6 +691,12 @@
     return TRUE;
 }
 
+static void editingCommandCallback(GtkWidget*widget, BrowserWindow *window)
+{
+    webkit_web_view_execute_editing_command(window->webView, gtk_widget_get_name(widget));
+}
+
+
 static void browserWindowFinalize(GObject *gObject)
 {
     BrowserWindow *window = BROWSER_WINDOW(gObject);
@@ -742,6 +748,118 @@
     }
 }
 
+static void browserWindowSetupEditorToolbar(BrowserWindow *window)
+{
+    GtkWidget *toolbar = gtk_toolbar_new();
+    gtk_orientable_set_orientation(GTK_ORIENTABLE(toolbar), GTK_ORIENTATION_HORIZONTAL);
+    gtk_toolbar_set_style(GTK_TOOLBAR(toolbar), GTK_TOOLBAR_BOTH_HORIZ);
+
+    GtkToolItem *item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_BOLD);
+    gtk_widget_set_name(GTK_WIDGET(item), "Bold");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_ITALIC);
+    gtk_widget_set_name(GTK_WIDGET(item), "Italic");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_UNDERLINE);
+    gtk_widget_set_name(GTK_WIDGET(item), "Underline");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_toggle_tool_button_new_from_stock(GTK_STOCK_STRIKETHROUGH);
+    gtk_widget_set_name(GTK_WIDGET(item), "Strikethrough");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_separator_tool_item_new();
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_CUT);
+    gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_CUT);
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_COPY);
+    gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_COPY);
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_PASTE);
+    gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_PASTE);
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_separator_tool_item_new();
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_UNDO);
+    gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_UNDO);
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_REDO);
+    gtk_widget_set_name(GTK_WIDGET(item), WEBKIT_EDITING_COMMAND_REDO);
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_separator_tool_item_new();
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_radio_tool_button_new_from_stock(NULL, GTK_STOCK_JUSTIFY_LEFT);
+    GSList *justifyRadioGroup = gtk_radio_tool_button_get_group(GTK_RADIO_TOOL_BUTTON(item));
+    gtk_widget_set_name(GTK_WIDGET(item), "JustifyLeft");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_radio_tool_button_new_from_stock(justifyRadioGroup, GTK_STOCK_JUSTIFY_CENTER);
+    justifyRadioGroup = gtk_radio_tool_button_get_group(GTK_RADIO_TOOL_BUTTON(item));
+    gtk_widget_set_name(GTK_WIDGET(item), "JustifyCenter");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_radio_tool_button_new_from_stock(justifyRadioGroup, GTK_STOCK_JUSTIFY_RIGHT);
+    gtk_widget_set_name(GTK_WIDGET(item), "JustifyRight");
+    g_signal_connect(G_OBJECT(item), "toggled", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_separator_tool_item_new();
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_INDENT);
+    gtk_widget_set_name(GTK_WIDGET(item), "Indent");
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    item = gtk_tool_button_new_from_stock(GTK_STOCK_UNINDENT);
+    gtk_widget_set_name(GTK_WIDGET(item), "Outdent");
+    g_signal_connect(G_OBJECT(item), "clicked", G_CALLBACK(editingCommandCallback), window);
+    gtk_toolbar_insert(GTK_TOOLBAR(toolbar), item, -1);
+    gtk_widget_show(GTK_WIDGET(item));
+
+    gtk_box_pack_start(GTK_BOX(window->mainBox), toolbar, FALSE, FALSE, 0);
+    gtk_widget_show(toolbar);
+}
+
 static void browser_window_init(BrowserWindow *window)
 {
     g_atomic_int_inc(&windowCount);
@@ -886,6 +1004,8 @@
     BrowserWindow *window = BROWSER_WINDOW(gObject);
 
     browserWindowUpdateZoomActions(window);
+    if (webkit_web_view_is_editable(window->webView))
+        browserWindowSetupEditorToolbar(window);
 
     g_signal_connect(window->webView, "notify::uri", G_CALLBACK(webViewURIChanged), window);
     g_signal_connect(window->webView, "notify::estimated-load-progress", G_CALLBACK(webViewLoadProgressChanged), window);
@@ -940,6 +1060,9 @@
     gtk_widget_set_no_show_all(window->fullScreenMessageLabel, TRUE);
     gtk_overlay_add_overlay(GTK_OVERLAY(overlay), window->fullScreenMessageLabel);
     gtk_widget_show(GTK_WIDGET(window->webView));
+
+    if (webkit_web_view_is_editable(window->webView))
+        webkit_web_view_load_html(window->webView, "<html></html>", NULL);
 }
 
 static void browser_window_class_init(BrowserWindowClass *klass)

Modified: trunk/Tools/MiniBrowser/gtk/main.c (185311 => 185312)


--- trunk/Tools/MiniBrowser/gtk/main.c	2015-06-08 06:35:31 UTC (rev 185311)
+++ trunk/Tools/MiniBrowser/gtk/main.c	2015-06-08 06:38:06 UTC (rev 185312)
@@ -38,6 +38,7 @@
 static const gchar **uriArguments = NULL;
 static const char *miniBrowserAboutScheme = "minibrowser-about";
 static GdkRGBA *backgroundColor;
+static gboolean editorMode;
 
 typedef enum {
     MINI_BROWSER_ERROR_INVALID_ABOUT_PATH
@@ -60,16 +61,20 @@
 static void createBrowserWindow(const gchar *uri, WebKitSettings *webkitSettings)
 {
     GtkWidget *webView = webkit_web_view_new();
+    if (editorMode)
+        webkit_web_view_set_editable(WEBKIT_WEB_VIEW(webView), TRUE);
     GtkWidget *mainWindow = browser_window_new(WEBKIT_WEB_VIEW(webView), NULL);
     if (backgroundColor)
         browser_window_set_background_color(BROWSER_WINDOW(mainWindow), backgroundColor);
-    gchar *url = ""
 
     if (webkitSettings)
         webkit_web_view_set_settings(WEBKIT_WEB_VIEW(webView), webkitSettings);
 
-    browser_window_load_uri(BROWSER_WINDOW(mainWindow), url);
-    g_free(url);
+    if (!editorMode) {
+        gchar *url = ""
+        browser_window_load_uri(BROWSER_WINDOW(mainWindow), url);
+        g_free(url);
+    }
 
     gtk_widget_grab_focus(webView);
     gtk_widget_show(mainWindow);
@@ -90,6 +95,7 @@
 static const GOptionEntry commandLineOptions[] =
 {
     { "bg-color", 0, 0, G_OPTION_ARG_CALLBACK, parseBackgroundColor, "Background color", NULL },
+    { "editor-mode", 'e', 0, G_OPTION_ARG_NONE, &editorMode, "Run in editor mode", NULL },
     { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_FILENAME_ARRAY, &uriArguments, 0, "[URL…]" },
     { 0, 0, 0, 0, 0, 0, 0 }
 };
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to