[Xfce4-commits] <midori:master> Add dialog API with unit test hooks

Christian Dywan noreply at xfce.org
Mon Sep 24 21:26:01 CEST 2012


Updating branch refs/heads/master
         to 0b0deabfae9aebe46dc829a52736709cf5a1afcd (commit)
       from 1853cbded2b43a5feda1c29e5b8d5d393be5e7c3 (commit)

commit 0b0deabfae9aebe46dc829a52736709cf5a1afcd
Author: Christian Dywan <christian at twotoasts.de>
Date:   Mon Sep 24 21:19:48 2012 +0200

    Add dialog API with unit test hooks

 extensions/delayed-load.vala              |    4 +-
 extensions/external-download-manager.vala |    4 +-
 extensions/history-list.vala              |    4 +-
 midori/midori-browser.c                   |   33 ++++++++++------------
 midori/midori-browser.h                   |    5 +++
 midori/midori-dialog.vala                 |   44 +++++++++++++++++++++++++++++
 midori/midori-locationaction.c            |    2 +-
 midori/sokoke.c                           |   34 ----------------------
 midori/sokoke.h                           |    5 ---
 tests/browser.c                           |   29 ++++++++++++++++++-
 10 files changed, 99 insertions(+), 65 deletions(-)

diff --git a/extensions/delayed-load.vala b/extensions/delayed-load.vala
index 4f290d7..546bdcc 100644
--- a/extensions/delayed-load.vala
+++ b/extensions/delayed-load.vala
@@ -14,7 +14,7 @@ using Katze;
 using Midori;
 
 namespace DelayedLoad {
-    private class PreferencesDialog : Dialog {
+    private class PreferencesDialog : Gtk.Dialog {
         protected Manager dl_manager;
         protected Scale slider;
 
@@ -32,7 +32,7 @@ namespace DelayedLoad {
             this.response.connect (response_cb);
         }
 
-        private void response_cb (Dialog source, int response_id) {
+        private void response_cb (Gtk.Dialog source, int response_id) {
             switch (response_id) {
                 case ResponseType.APPLY:
                     this.dl_manager.set_integer ("delay", (int) (this.slider.get_value () * 1000));
diff --git a/extensions/external-download-manager.vala b/extensions/external-download-manager.vala
index 35e7b71..b7d7042 100644
--- a/extensions/external-download-manager.vala
+++ b/extensions/external-download-manager.vala
@@ -211,7 +211,7 @@ namespace EDM {
     }
 #endif
 
-    private class CommandLinePreferences : Dialog {
+    private class CommandLinePreferences : Gtk.Dialog {
         protected Entry input;
         protected CommandLine commandline;
 
@@ -232,7 +232,7 @@ namespace EDM {
             this.response.connect (response_cb);
         }
 
-        private void response_cb (Dialog source, int response_id) {
+        private void response_cb (Gtk.Dialog source, int response_id) {
             switch (response_id) {
                 case ResponseType.APPLY:
                     this.commandline.set_string ("commandline", this.input.get_text ());
diff --git a/extensions/history-list.vala b/extensions/history-list.vala
index 499bb74..ea094a2 100644
--- a/extensions/history-list.vala
+++ b/extensions/history-list.vala
@@ -225,7 +225,7 @@ namespace HistoryList {
         }
     }
 
-    private class PreferencesDialog : Dialog {
+    private class PreferencesDialog : Gtk.Dialog {
         protected Manager hl_manager;
         protected ComboBox closing_behavior;
 
@@ -243,7 +243,7 @@ namespace HistoryList {
             this.response.connect (response_cb);
         }
 
-        private void response_cb (Dialog source, int response_id) {
+        private void response_cb (Gtk.Dialog source, int response_id) {
             switch (response_id) {
                 case ResponseType.APPLY:
                     int value;
diff --git a/midori/midori-browser.c b/midori/midori-browser.c
index c4c6f97..aacacd5 100644
--- a/midori/midori-browser.c
+++ b/midori/midori-browser.c
@@ -942,7 +942,7 @@ midori_browser_edit_bookmark_dialog_new (MidoriBrowser* browser,
     gtk_widget_show_all (content_area);
 
     gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
-    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+    if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
     {
         gint64 selected;
 
@@ -1037,7 +1037,7 @@ midori_browser_save_resources (MidoriView*  view,
     g_list_free (resources);
 }
 
-static void
+void
 midori_browser_save_uri (MidoriBrowser* browser,
                          MidoriView*    view,
                          const gchar*   uri)
@@ -1049,10 +1049,7 @@ midori_browser_save_uri (MidoriBrowser* browser,
     gboolean file_only = TRUE;
     GtkWidget* checkbox = NULL;
 
-    if (!gtk_widget_get_visible (GTK_WIDGET (browser)))
-        return;
-
-    dialog = sokoke_file_chooser_dialog_new (_("Save file as"),
+    dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Save file as"),
         GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_SAVE);
     gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
 
@@ -1089,7 +1086,7 @@ midori_browser_save_uri (MidoriBrowser* browser,
     gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
     g_free (filename);
 
-    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+    if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
     {
         filename = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
         if (checkbox != NULL)
@@ -1405,7 +1402,7 @@ midori_view_download_requested_cb (GtkWidget*      view,
             if (!dialog)
             {
                 gchar* folder;
-                dialog = sokoke_file_chooser_dialog_new (_("Save file"),
+                dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Save file"),
                     GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_SAVE);
                 gtk_file_chooser_set_do_overwrite_confirmation (
                     GTK_FILE_CHOOSER (dialog), TRUE);
@@ -1418,12 +1415,12 @@ midori_view_download_requested_cb (GtkWidget*      view,
                 g_signal_connect (dialog, "destroy",
                                   G_CALLBACK (gtk_widget_destroyed), &dialog);
             }
-            g_object_set_data (G_OBJECT (dialog), "download", download);
+
             filename = midori_download_get_suggested_filename (download);
             gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
             g_free (filename);
 
-            if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+            if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
             {
                 gtk_widget_hide (dialog);
                 gchar* uri = gtk_file_chooser_get_uri (GTK_FILE_CHOOSER (dialog));
@@ -2332,7 +2329,7 @@ _action_open_activate (GtkAction*     action,
     if (!gtk_widget_get_visible (GTK_WIDGET (browser)))
         return;
 
-    dialog = sokoke_file_chooser_dialog_new (_("Open file"),
+    dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Open file"),
         GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_OPEN);
 
      /* base the start folder on the current view's uri if it is local */
@@ -2361,7 +2358,7 @@ _action_open_activate (GtkAction*     action,
          gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (dialog), last_dir);
      #endif
 
-     if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
+     if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK)
      {
          #if !GTK_CHECK_VERSION (3, 1, 10)
          gchar* folder;
@@ -3512,7 +3509,7 @@ _action_caret_browsing_activate (GtkAction*     action,
             _("_Enable Caret Browsing"), GTK_RESPONSE_ACCEPT,
             NULL);
 
-        response = gtk_dialog_run (GTK_DIALOG (dialog));
+        response = midori_dialog_run (GTK_DIALOG (dialog));
         gtk_widget_destroy (dialog);
 
         if (response != GTK_RESPONSE_ACCEPT)
@@ -4443,7 +4440,7 @@ _action_bookmarks_import_activate (GtkAction*     action,
     gtk_container_add (GTK_CONTAINER (content_area), combobox_folder);
 
     gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
-    if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+    if (midori_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
     {
         GtkTreeIter iter;
         gchar* path = NULL;
@@ -4460,9 +4457,9 @@ _action_bookmarks_import_activate (GtkAction*     action,
         {
             GtkWidget* file_dialog;
 
-            file_dialog = sokoke_file_chooser_dialog_new (_("Import from a file"),
+            file_dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Import from a file"),
                 GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_OPEN);
-            if (gtk_dialog_run (GTK_DIALOG (file_dialog)) == GTK_RESPONSE_OK)
+            if (midori_dialog_run (GTK_DIALOG (file_dialog)) == GTK_RESPONSE_OK)
                 path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_dialog));
             gtk_widget_destroy (file_dialog);
         }
@@ -4501,7 +4498,7 @@ _action_bookmarks_export_activate (GtkAction*     action,
         return;
 
 wrong_format:
-    file_dialog = sokoke_file_chooser_dialog_new (_("Save file as"),
+    file_dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Save file as"),
         GTK_WINDOW (browser), GTK_FILE_CHOOSER_ACTION_SAVE);
     gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (file_dialog),
                                        "bookmarks.xbel");
@@ -4515,7 +4512,7 @@ wrong_format:
     gtk_file_filter_add_mime_type (filter, "text/html");
     gtk_file_filter_add_pattern (filter, "*.html");
     gtk_file_chooser_add_filter (GTK_FILE_CHOOSER (file_dialog), filter);
-    if (gtk_dialog_run (GTK_DIALOG (file_dialog)) == GTK_RESPONSE_OK)
+    if (midori_dialog_run (GTK_DIALOG (file_dialog)) == GTK_RESPONSE_OK)
         path = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (file_dialog));
     gtk_widget_destroy (file_dialog);
     if (g_str_has_suffix (path, ".xbel"))
diff --git a/midori/midori-browser.h b/midori/midori-browser.h
index 320006a..7f56ebb 100644
--- a/midori/midori-browser.h
+++ b/midori/midori-browser.h
@@ -185,6 +185,11 @@ midori_browser_update_history         (KatzeItem*         item,
                                        const gchar*       type,
                                        const gchar*       event);
 
+void
+midori_browser_save_uri               (MidoriBrowser*     browser,
+                                       MidoriView*        view,
+                                       const gchar*       uri);
+
 G_END_DECLS
 
 #endif /* __MIDORI_BROWSER_H__ */
diff --git a/midori/midori-dialog.vala b/midori/midori-dialog.vala
new file mode 100644
index 0000000..f0f5b71
--- /dev/null
+++ b/midori/midori-dialog.vala
@@ -0,0 +1,44 @@
+/*
+ Copyright (C) 2011-2012 Christian Dywan <christian at twotoats.de>
+
+ This library is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ See the file COPYING for the full license text.
+*/
+
+namespace Midori {
+    namespace Test {
+        internal static Gtk.ResponseType test_response = Gtk.ResponseType.NONE;
+        public void set_dialog_response (Gtk.ResponseType response) {
+            test_response = response;
+        }
+    }
+
+    public class FileChooserDialog : Gtk.FileChooserDialog {
+        public FileChooserDialog (string title, Gtk.Window window, Gtk.FileChooserAction action) {
+            /* Creates a new file chooser dialog to Open or Save and Cancel.
+               The positive response is %Gtk.ResponseType.OK. */
+            unowned string stock_id = Gtk.Stock.OPEN;
+            if (action == Gtk.FileChooserAction.SAVE)
+                stock_id = Gtk.Stock.SAVE;
+            this.title = title;
+            transient_for = window;
+            this.action = action;
+            add_buttons (Gtk.Stock.CANCEL, Gtk.ResponseType.CANCEL,
+                         stock_id, Gtk.ResponseType.OK);
+            icon_name = stock_id;
+        }
+    }
+
+    namespace Dialog {
+        public static new int run (Gtk.Dialog dialog) {
+            if (Test.test_response != Gtk.ResponseType.NONE)
+                return Test.test_response;
+            return dialog.run ();
+        }
+    }
+}
+
diff --git a/midori/midori-locationaction.c b/midori/midori-locationaction.c
index 5bd0b7d..c6aeca8 100644
--- a/midori/midori-locationaction.c
+++ b/midori/midori-locationaction.c
@@ -1224,7 +1224,7 @@ midori_location_action_cert_response_cb (GtkWidget*      dialog,
     {
         /* FIXME: Would be nice if GcrCertificateExporter became public */
         gchar* filename = g_strconcat (peer, ".crt", NULL);
-        GtkWidget* dialog = sokoke_file_chooser_dialog_new (_("Export certificate"),
+        GtkWidget* dialog = (GtkWidget*)midori_file_chooser_dialog_new (_("Export certificate"),
             NULL, GTK_FILE_CHOOSER_ACTION_SAVE);
         gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
         gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), filename);
diff --git a/midori/sokoke.c b/midori/sokoke.c
index a303bfb..dc7506b 100644
--- a/midori/sokoke.c
+++ b/midori/sokoke.c
@@ -1057,40 +1057,6 @@ sokoke_gtk_action_count_modifiers (GtkAction* action)
 }
 
 /**
- * sokoke_file_chooser_dialog_new:
- * @title: a window title, or %NULL
- * @window: a parent #GtkWindow, or %NULL
- * @action: a #GtkFileChooserAction
- *
- * Creates a new file chooser dialog, as appropriate for
- * the platform, with buttons according to the @action.
- *
- * The positive response is %GTK_RESPONSE_OK.
- *
- * Return value: a new #GtkFileChooser
- **/
-GtkWidget*
-sokoke_file_chooser_dialog_new (const gchar*         title,
-                                GtkWindow*           window,
-                                GtkFileChooserAction action)
-{
-    const gchar* stock_id = GTK_STOCK_OPEN;
-    GtkWidget* dialog;
-
-    if (action == GTK_FILE_CHOOSER_ACTION_SAVE)
-        stock_id = GTK_STOCK_SAVE;
-    #ifdef HAVE_HILDON_FM
-    dialog = hildon_file_chooser_dialog_new (window, action);
-    #else
-    dialog = gtk_file_chooser_dialog_new (title, window, action,
-        GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
-        stock_id, GTK_RESPONSE_OK, NULL);
-    gtk_window_set_icon_name (GTK_WINDOW (dialog), stock_id);
-    #endif
-    return dialog;
-}
-
-/**
  * sokoke_prefetch_uri:
  * @settings: a #MidoriWebSettings instance, or %NULL
  * @uri: an URI string
diff --git a/midori/sokoke.h b/midori/sokoke.h
index b322f4f..7d12538 100644
--- a/midori/sokoke.h
+++ b/midori/sokoke.h
@@ -103,11 +103,6 @@ sokoke_window_activate_key              (GtkWindow*      window,
 guint
 sokoke_gtk_action_count_modifiers       (GtkAction* action);
 
-GtkWidget*
-sokoke_file_chooser_dialog_new          (const gchar*         title,
-                                         GtkWindow*           window,
-                                         GtkFileChooserAction action);
-
 gboolean
 sokoke_prefetch_uri                     (MidoriWebSettings*  settings,
                                          const char*         uri,
diff --git a/tests/browser.c b/tests/browser.c
index fa94912..cee7917 100644
--- a/tests/browser.c
+++ b/tests/browser.c
@@ -11,18 +11,45 @@
 
 #include "midori.h"
 
+static gboolean
+skip_gtk_bugs (const gchar*   log_domain,
+               GLogLevelFlags log_level,
+               const gchar*   message,
+               gpointer       user_data)
+{
+    if (!strcmp (message, "get_column_number: assertion `i < gtk_tree_view_get_n_columns (treeview)' failed"))
+        return FALSE;
+    return TRUE;
+}
+
 static void
 browser_create (void)
 {
     MidoriApp* app;
     MidoriSpeedDial* dial;
+    MidoriWebSettings* settings;
     MidoriBrowser* browser;
+    gint n;
+    gchar* temporary_downloads;
+    GtkWidget* view;
+
+    g_test_log_set_fatal_handler (skip_gtk_bugs, NULL);
 
     app = midori_app_new ();
     dial = midori_speed_dial_new ("/", NULL);
-    g_object_set (app, "speed-dial", dial, NULL);
+    settings = midori_web_settings_new ();
+    g_object_set (app, "speed-dial", dial, "settings", settings, NULL);
     browser = midori_app_create_browser (app);
+    n = midori_browser_add_uri (browser, "about:blank");
+    view = midori_browser_get_nth_tab (browser, n);
+
+    midori_test_set_dialog_response (GTK_RESPONSE_OK);
+    temporary_downloads = g_dir_make_tmp ("saveXXXXXX", NULL);
+    midori_settings_set_download_folder (MIDORI_SETTINGS (settings), temporary_downloads);
+    midori_browser_save_uri (browser, MIDORI_VIEW (view), NULL);
+
     gtk_widget_destroy (GTK_WIDGET (browser));
+    g_object_unref (settings);
     g_object_unref (app);
     g_object_unref (dial);
 }


More information about the Xfce4-commits mailing list