2007-11-19 Alp Toker <alp@atoker.com>
authoralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2007 15:59:17 +0000 (15:59 +0000)
committeralp@webkit.org <alp@webkit.org@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 19 Nov 2007 15:59:17 +0000 (15:59 +0000)
        Reviewed by Mark Rowe.

        http://bugs.webkit.org/show_bug.cgi?id=16040
        [GTK] GtkLauncher should be written in C

        Port GtkLauncher to plain C.

        Use a more conventional GTK+ coding style.

        Use a toolbar instead of menus.

        Various signature fixes and cleanups.

        Add a license header. Assume all previous modifications were copyright
        assigned to Apple Inc. by default.

        * GtkLauncher/GtkLauncher.pro:
        * GtkLauncher/main.c: Added.
        (activate_url_entry_cb):
        (update_title):
        (link_hover_cb):
        (title_change_cb):
        (progress_change_cb):
        (destroy_cb):
        (go_back_cb):
        (go_forward_cb):
        (create_browser):
        (create_statusbar):
        (create_toolbar):
        (create_window):
        (main):
        * GtkLauncher/main.cpp: Removed.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@27906 268f45cc-cd09-0410-ab3c-d52691b4dbfc

WebKitTools/ChangeLog
WebKitTools/GtkLauncher/GtkLauncher.pro
WebKitTools/GtkLauncher/main.c [new file with mode: 0644]
WebKitTools/GtkLauncher/main.cpp [deleted file]

index bb1b20e..4b14d74 100644 (file)
@@ -1,3 +1,38 @@
+2007-11-19  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16040
+        [GTK] GtkLauncher should be written in C
+
+        Port GtkLauncher to plain C.
+
+        Use a more conventional GTK+ coding style.
+
+        Use a toolbar instead of menus.
+
+        Various signature fixes and cleanups.
+
+        Add a license header. Assume all previous modifications were copyright
+        assigned to Apple Inc. by default.
+
+        * GtkLauncher/GtkLauncher.pro:
+        * GtkLauncher/main.c: Added.
+        (activate_url_entry_cb):
+        (update_title):
+        (link_hover_cb):
+        (title_change_cb):
+        (progress_change_cb):
+        (destroy_cb):
+        (go_back_cb):
+        (go_forward_cb):
+        (create_browser):
+        (create_statusbar):
+        (create_toolbar):
+        (create_window):
+        (main):
+        * GtkLauncher/main.cpp: Removed.
+
 2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
 
         Build script fixes to ensure they do the right thing for the 
index 5671924..b8c4aa8 100644 (file)
@@ -1,5 +1,5 @@
 TEMPLATE = app
-SOURCES += main.cpp
+SOURCES += main.c
 CONFIG -= app_bundle
 
 BASE_DIR = $$PWD/../..
diff --git a/WebKitTools/GtkLauncher/main.c b/WebKitTools/GtkLauncher/main.c
new file mode 100644 (file)
index 0000000..cd502a9
--- /dev/null
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2006, 2007 Apple Inc.
+ * Copyright (C) 2007 Alp Toker <alp@atoker.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "webkitgtkpage.h"
+#include "webkitgtkglobal.h"
+#include <gtk/gtk.h>
+
+static GtkWidget* main_window;
+static GtkWidget* url_entry;
+static GtkStatusbar* main_statusbar;
+static WebKitPage* web_page;
+static gchar* main_title;
+static gint load_progress;
+static guint status_context_id;
+
+static void
+activate_url_entry_cb (GtkWidget* entry, gpointer data)
+{
+    const gchar* url = gtk_entry_get_text (GTK_ENTRY (entry));
+    g_assert (url);
+    webkit_page_open (web_page, url);
+}
+
+static void
+update_title (GtkWindow* window)
+{
+    GString* string = g_string_new (main_title);
+    g_string_append (string, " - WebKit Launcher");
+    if (load_progress < 100)
+        g_string_append_printf (string, " (%d%%)", load_progress);
+    gchar* title = g_string_free (string, FALSE);
+    gtk_window_set_title (window, title);
+    g_free (title);
+}
+
+static void
+link_hover_cb (WebKitPage* page, const gchar* title, const gchar* link, gpointer data)
+{
+    /* underflow is allowed */
+    gtk_statusbar_pop (main_statusbar, status_context_id);
+    if (link)
+        gtk_statusbar_push (main_statusbar, status_context_id, link);
+}
+
+static void
+title_change_cb (WebKitPage* page, const gchar* title, const gchar* url, gpointer data)
+{
+    gtk_entry_set_text (GTK_ENTRY (url_entry), url);
+
+    if (main_title)
+        g_free (main_title);
+    main_title = g_strdup (title);
+    update_title (GTK_WINDOW (main_window));
+}
+
+static void
+progress_change_cb (WebKitPage* page, gint progress, gpointer data)
+{
+    load_progress = progress;
+    update_title (GTK_WINDOW (main_window));
+}
+
+static void
+destroy_cb (GtkWidget* widget, gpointer data)
+{
+    gtk_main_quit ();
+}
+
+static void
+go_back_cb (GtkWidget* widget, gpointer data)
+{
+    webkit_page_go_backward (web_page);
+}
+
+static void
+go_forward_cb (GtkWidget* widget, gpointer data)
+{
+    webkit_page_go_forward (web_page);
+}
+
+static GtkWidget*
+create_browser ()
+{
+    GtkWidget* scrolled_window = gtk_scrolled_window_new (NULL, NULL);
+    gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+    web_page = WEBKIT_PAGE (webkit_page_new ());
+    gtk_container_add (GTK_CONTAINER (scrolled_window), GTK_WIDGET (web_page));
+
+    g_signal_connect (G_OBJECT (web_page), "title-changed", G_CALLBACK (title_change_cb), web_page);
+    g_signal_connect (G_OBJECT (web_page), "load-progress-changed", G_CALLBACK (progress_change_cb), web_page);
+    g_signal_connect (G_OBJECT (web_page), "hovering-over-link", G_CALLBACK (link_hover_cb), web_page);
+
+    return scrolled_window;
+}
+
+static GtkWidget*
+create_statusbar ()
+{
+    main_statusbar = GTK_STATUSBAR (gtk_statusbar_new ());
+    status_context_id = gtk_statusbar_get_context_id (main_statusbar, "Link Hover");
+
+    return (GtkWidget*)main_statusbar;
+}
+
+static GtkWidget*
+create_toolbar ()
+{
+    GtkWidget* toolbar = gtk_toolbar_new ();
+
+    gtk_toolbar_set_orientation (GTK_TOOLBAR (toolbar), GTK_ORIENTATION_HORIZONTAL);
+    gtk_toolbar_set_style (GTK_TOOLBAR (toolbar), GTK_TOOLBAR_BOTH_HORIZ);
+
+    GtkToolItem* item;
+
+    /* the back button */
+    item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_BACK);
+    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_back_cb), NULL);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+
+    /* The forward button */
+    item = gtk_tool_button_new_from_stock (GTK_STOCK_GO_FORWARD);
+    g_signal_connect (G_OBJECT (item), "clicked", G_CALLBACK (go_forward_cb), NULL);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+
+    /* The URL entry */
+    item = gtk_tool_item_new ();
+    gtk_tool_item_set_expand (item, TRUE);
+    url_entry = gtk_entry_new ();
+    gtk_container_add (GTK_CONTAINER (item), url_entry);
+    g_signal_connect (G_OBJECT (url_entry), "activate", G_CALLBACK (activate_url_entry_cb), NULL);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+
+    /* The go button */
+    item = gtk_tool_button_new_from_stock (GTK_STOCK_OK);
+    g_signal_connect_swapped (G_OBJECT (item), "clicked", G_CALLBACK (activate_url_entry_cb), (gpointer)url_entry);
+    gtk_toolbar_insert (GTK_TOOLBAR (toolbar), item, -1);
+
+    return toolbar;
+}
+
+static GtkWidget*
+create_window ()
+{
+    GtkWidget* window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
+    gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
+    gtk_widget_set_name (window, "GtkLauncher");
+    g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (destroy_cb), NULL);
+
+    return window;
+}
+
+int
+main (int argc, char* argv[])
+{
+    gtk_init (&argc, &argv);
+    webkit_init ();
+
+    GtkWidget* vbox = gtk_vbox_new (FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), create_toolbar (), FALSE, FALSE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), create_browser (), TRUE, TRUE, 0);
+    gtk_box_pack_start (GTK_BOX (vbox), create_statusbar (), FALSE, FALSE, 0);
+
+    main_window = create_window ();
+    gtk_container_add (GTK_CONTAINER (main_window), vbox);
+
+    gchar* url = (gchar*) (argc > 1 ? argv[1] : "http://www.google.com/");
+    webkit_page_open (web_page, url);
+
+    gtk_widget_grab_focus (GTK_WIDGET (web_page));
+    gtk_widget_show_all (main_window);
+    gtk_main ();
+
+    return 0;
+}
diff --git a/WebKitTools/GtkLauncher/main.cpp b/WebKitTools/GtkLauncher/main.cpp
deleted file mode 100644 (file)
index 3d62f40..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-#include "webkitgtkpage.h"
-#include "webkitgtkglobal.h"
-
-#include <gtk/gtk.h>
-
-#include <string.h>
-
-static GtkWidget* gURLBarEntry;
-static GtkWidget* gTopLevelWindow;
-static GtkStatusbar* gStatusbar;
-static WebKitPage* gPage;
-static gchar* gTitle;
-static gint gProgress;
-static guint gStatusbarContextId;
-
-static void goToURLBarText(GtkWidget* urlBarEntry)
-{
-    const gchar* url = gtk_entry_get_text(GTK_ENTRY(urlBarEntry));
-    if (!url || strlen(url) == 0)
-        return;
-
-    webkit_page_open(gPage, url);
-}
-
-static void goButtonClickedCallback(GtkWidget*, GtkWidget* entry)
-{
-    goToURLBarText(entry);
-}
-
-static void urlBarEnterCallback(GtkWidget*, GtkWidget* entry)
-{
-    goToURLBarText(entry);
-}
-
-static void updateWindowTitle()
-{
-    GString* string = g_string_new(NULL);
-    g_string_printf(string, "GtkLauncher %s  (%d/100)", gTitle, gProgress);
-    gchar* title = g_string_free(string, FALSE);
-    gtk_window_set_title(GTK_WINDOW(gTopLevelWindow), title);
-    g_free(title);
-}
-
-static void hoveringOverLink(WebKitPage*, const gchar*, const gchar* link, void*)
-{
-    // underflow is allowed
-    gtk_statusbar_pop(gStatusbar, gStatusbarContextId);
-    if (link)
-        gtk_statusbar_push(gStatusbar, gStatusbarContextId, link);
-}
-
-static void titleChanged(WebKitPage*, const gchar* title, const gchar* url, WebKitPage*)
-{
-    gtk_entry_set_text(GTK_ENTRY(gURLBarEntry), url);
-
-    if (gTitle)
-        g_free(gTitle);
-    gTitle = g_strdup(title);
-    updateWindowTitle();
-}
-
-static void progressChanged(WebKitPage*, gint progress, WebKitPage*)
-{
-    gProgress = progress;
-    updateWindowTitle();
-}
-
-static void frameDestroyCallback(GtkWidget*, gpointer)
-{
-    gtk_main_quit();
-}
-
-static void menuMainBackCallback(gpointer data)
-{
-    g_assert(!data);
-    webkit_page_go_backward(gPage);
-}
-
-static void menuMainForwardCallback(gpointer data)
-{
-    g_assert(!data);
-    webkit_page_go_forward(gPage);
-}
-
-static void menuMainQuitCallback(gpointer)
-{
-    gtk_main_quit();
-}
-
-static GtkWidget* setupMainMenu()
-{
-    GtkWidget* menuMain = gtk_menu_new();
-    GtkWidget* menuMainBack = gtk_menu_item_new_with_label("Back");
-    gtk_menu_shell_append(GTK_MENU_SHELL(menuMain), menuMainBack);
-    g_signal_connect_swapped(G_OBJECT(menuMainBack), "activate", G_CALLBACK(menuMainBackCallback), NULL);
-    gtk_widget_show(menuMainBack);
-
-    GtkWidget* menuMainForward = gtk_menu_item_new_with_label("Forward");
-    gtk_menu_shell_append(GTK_MENU_SHELL(menuMain), menuMainForward);
-    g_signal_connect_swapped(G_OBJECT(menuMainForward), "activate", G_CALLBACK(menuMainForwardCallback), NULL);
-    gtk_widget_show(menuMainForward);
-
-    GtkWidget* menuMainQuit = gtk_menu_item_new_with_label("Quit");
-    gtk_menu_shell_append(GTK_MENU_SHELL(menuMain), menuMainQuit);
-    g_signal_connect_swapped(G_OBJECT(menuMainQuit), "activate", G_CALLBACK(menuMainQuitCallback), NULL);
-    gtk_widget_show(menuMainQuit);
-
-    GtkWidget* menuMainRoot = gtk_menu_item_new_with_label("Main");
-    gtk_widget_show(menuMainRoot);
-    gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuMainRoot), menuMain);
-    
-    return menuMainRoot;
-}
-
-static void setupMainWindowUI()
-{
-    GtkWidget* menuMainRoot = setupMainMenu();
-
-    GtkWidget* menuBar = gtk_menu_bar_new();
-    gtk_menu_shell_append(GTK_MENU_SHELL(menuBar), menuMainRoot);
-
-    gTopLevelWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_default_size(GTK_WINDOW(gTopLevelWindow), 800, 600);
-    gtk_widget_set_name(gTopLevelWindow, "GtkLauncher");
-    GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
-    gtk_container_add(GTK_CONTAINER(gTopLevelWindow), vbox);
-    g_signal_connect(G_OBJECT(gTopLevelWindow), "destroy", G_CALLBACK(frameDestroyCallback), NULL);
-
-    GtkWidget* hbox = gtk_hbox_new(FALSE, 2);
-    gtk_box_pack_start(GTK_BOX(vbox), menuBar, FALSE, FALSE, 0);
-    gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0);
-
-    gURLBarEntry = gtk_entry_new();
-    g_signal_connect(G_OBJECT(gURLBarEntry), "activate", G_CALLBACK(urlBarEnterCallback), (gpointer)gURLBarEntry);
-    gtk_box_pack_start(GTK_BOX(hbox), gURLBarEntry, TRUE, TRUE, 0);
-
-    GtkWidget* urlBarSubmitButton = gtk_button_new_with_label("Go");  
-    gtk_box_pack_start(GTK_BOX(hbox), urlBarSubmitButton, FALSE, FALSE, 0);
-    g_signal_connect(G_OBJECT(urlBarSubmitButton), "clicked", G_CALLBACK(goButtonClickedCallback), (gpointer)gURLBarEntry);
-    gtk_widget_show(vbox);
-
-    GtkWidget* scrolledWindow = gtk_scrolled_window_new(NULL,NULL);
-    gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledWindow),
-                                   GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
-    
-    
-    gPage = WEBKIT_PAGE(webkit_page_new());
-    gtk_container_add(GTK_CONTAINER(scrolledWindow), GTK_WIDGET(gPage));
-    gtk_box_pack_start(GTK_BOX(vbox), scrolledWindow, TRUE, TRUE, 0);
-
-    gStatusbar = GTK_STATUSBAR(gtk_statusbar_new());
-    gStatusbarContextId = gtk_statusbar_get_context_id(gStatusbar, "Link Hover");
-    gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(gStatusbar), FALSE, FALSE, 0);
-    
-    g_signal_connect(gPage, "title-changed", G_CALLBACK(titleChanged), gPage);
-    g_signal_connect(gPage, "load-progress-changed", G_CALLBACK(progressChanged), gPage);
-    g_signal_connect(gPage, "hovering-over-link", G_CALLBACK(hoveringOverLink), gPage);
-}
-
-int main(int argc, char* argv[]) 
-{
-    gtk_init(&argc, &argv);
-    webkit_init();
-
-    setupMainWindowUI();
-
-    const gchar* url = static_cast<const gchar*>(argc > 1 ? argv[1] : "http://www.google.com");
-    webkit_page_open(gPage, url);
-
-    gtk_widget_show_all(gTopLevelWindow);
-    gtk_main();
-    return 0;
-}
-