[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