widget = midori_browser_get_current_tab (browser);
web_view = widget && MIDORI_IS_WEB_VIEW (widget) ? widget : NULL;
loading = web_view != NULL
- && midori_web_view_is_loading (MIDORI_WEB_VIEW (web_view));
+ && midori_web_view_get_load_status (MIDORI_WEB_VIEW (web_view))
+ != MIDORI_LOAD_FINISHED;
_action_set_sensitive (browser, "Reload", web_view != NULL && !loading);
_action_set_sensitive (browser, "Stop", web_view != NULL && loading);
static void
_midori_browser_update_progress (MidoriBrowser* browser,
- gint progress)
+ MidoriWebView* web_view)
{
- if (progress > -1)
+ gdouble progress;
+ gchar* message;
+
+ progress = midori_web_view_get_progress (web_view);
+ if (progress > 0.0)
{
gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (browser->progressbar),
- progress ? progress / 100.0 : 0);
- gchar* message = g_strdup_printf (_("%d%% loaded"), progress);
+ progress);
+ message = g_strdup_printf (_("%d%% loaded"), (gint)(progress * 100));
gtk_progress_bar_set_text (GTK_PROGRESS_BAR (browser->progressbar),
message);
g_free (message);
}
else
{
- gtk_progress_bar_pulse (GTK_PROGRESS_BAR (browser->progressbar));
- gtk_progress_bar_set_text (GTK_PROGRESS_BAR (browser->progressbar),
- NULL);
+ gtk_progress_bar_pulse (GTK_PROGRESS_BAR (browser->progressbar));
+ gtk_progress_bar_set_text (GTK_PROGRESS_BAR (browser->progressbar),
+ NULL);
}
}
}
static void
-midori_web_view_load_started_cb (GtkWidget* web_view,
- WebKitWebFrame* web_frame,
- MidoriBrowser* browser)
+midori_web_view_notify_load_status_cb (GtkWidget* web_view,
+ GParamSpec* pspec,
+ MidoriBrowser* browser)
{
+ const gchar* uri;
+
if (web_view == midori_browser_get_current_web_view (browser))
{
+ if (midori_web_view_get_load_status (MIDORI_WEB_VIEW (web_view))
+ == MIDORI_LOAD_COMMITTED)
+ {
+ uri = midori_web_view_get_display_uri (MIDORI_WEB_VIEW (web_view));
+ midori_location_entry_set_text (MIDORI_LOCATION_ENTRY (
+ browser->location), uri);
+ gtk_icon_entry_set_icon_from_pixbuf (GTK_ICON_ENTRY (
+ gtk_bin_get_child (GTK_BIN (browser->location))),
+ GTK_ICON_ENTRY_SECONDARY, NULL);
+ }
+
_midori_browser_update_interface (browser);
_midori_browser_set_statusbar_text (browser, NULL);
}
}
static void
-midori_web_view_progress_started_cb (GtkWidget* web_view,
- guint progress,
- MidoriBrowser* browser)
-{
- if (web_view == midori_browser_get_current_web_view (browser))
- _midori_browser_update_progress (browser, progress);
-}
-
-static void
-midori_web_view_progress_changed_cb (GtkWidget* web_view,
- guint progress,
- MidoriBrowser* browser)
-{
- if (web_view == midori_browser_get_current_web_view (browser))
- _midori_browser_update_progress (browser, progress);
-}
-
-static void
-midori_web_view_progress_done_cb (GtkWidget* web_view,
- guint progress,
- MidoriBrowser* browser)
-{
- if (web_view == midori_browser_get_current_web_view (browser))
- _midori_browser_update_progress (browser, progress);
-}
-
-static void
-midori_web_view_load_done_cb (GtkWidget* web_view,
- WebKitWebFrame* web_frame,
- MidoriBrowser* browser)
+midori_web_view_notify_progress_cb (GtkWidget* web_view,
+ GParamSpec* pspec,
+ MidoriBrowser* browser)
{
if (web_view == midori_browser_get_current_web_view (browser))
- {
- _midori_browser_update_interface (browser);
- _midori_browser_set_statusbar_text (browser, NULL);
- }
+ _midori_browser_update_progress (browser, MIDORI_WEB_VIEW (web_view));
}
static void
_midori_browser_set_statusbar_text (browser, link_uri);
}
-static void
-midori_web_view_load_committed_cb (GtkWidget* web_view,
- WebKitWebFrame* web_frame,
- MidoriBrowser* browser)
-{
- const gchar* uri;
-
- if (web_view == midori_browser_get_current_web_view (browser))
- {
- uri = midori_web_view_get_display_uri (MIDORI_WEB_VIEW (web_view));
- midori_location_entry_set_text (MIDORI_LOCATION_ENTRY (
- browser->location), uri);
- _midori_browser_set_statusbar_text (browser, NULL);
- gtk_icon_entry_set_icon_from_pixbuf (GTK_ICON_ENTRY (
- gtk_bin_get_child (GTK_BIN (browser->location))),
- GTK_ICON_ENTRY_SECONDARY, NULL);
- }
-}
-
static void
midori_web_view_icon_ready_cb (MidoriWebView* web_view,
GdkPixbuf* icon,
g_object_connect (widget,
"signal::window-object-cleared",
midori_web_view_window_object_cleared_cb, browser,
- "signal::load-started",
- midori_web_view_load_started_cb, browser,
- "signal::load-committed",
- midori_web_view_load_committed_cb, browser,
+ "signal::notify::progress",
+ midori_web_view_notify_progress_cb, browser,
+ "signal::notify::mload-status",
+ midori_web_view_notify_load_status_cb, browser,
"signal::icon-ready",
midori_web_view_icon_ready_cb, browser,
"signal::news-feed-ready",
midori_web_view_news_feed_ready_cb, browser,
- "signal::progress-started",
- midori_web_view_progress_started_cb, browser,
- "signal::progress-changed",
- midori_web_view_progress_changed_cb, browser,
- "signal::progress-done",
- midori_web_view_progress_done_cb, browser,
- "signal::load-done",
- midori_web_view_load_done_cb, browser,
"signal::notify::title",
midori_web_view_notify_title_cb, browser,
"signal::notify::zoom-level",
g_free (window_title);
_midori_browser_set_statusbar_text (browser, NULL);
_midori_browser_update_interface (browser);
+ if (MIDORI_IS_WEB_VIEW (widget))
+ _midori_browser_update_progress (browser, MIDORI_WEB_VIEW (widget));
}
static void
GdkPixbuf* icon;
gchar* uri;
gchar* title;
- gboolean is_loading;
- gint progress;
+ gdouble progress;
+ MidoriLoadStatus load_status;
gchar* statusbar_text;
gchar* link_uri;
G_DEFINE_TYPE (MidoriWebView, midori_web_view, WEBKIT_TYPE_WEB_VIEW)
+GType
+midori_load_status_get_type (void)
+{
+ static GType type = 0;
+ if (!type)
+ {
+ static const GEnumValue values[] = {
+ { MIDORI_LOAD_PROVISIONAL, "MIDORI_LOAD_PROVISIONAL", N_("Load Provisional") },
+ { MIDORI_LOAD_COMMITTED, "MIDORI_LOAD_COMMITTED", N_("Load Committed") },
+ { MIDORI_LOAD_FINISHED, "MIDORI_LOAD_FINISHED", N_("Load Finished") },
+ { 0, NULL, NULL }
+ };
+ type = g_enum_register_static ("MidoriLoadStatus", values);
+ }
+ return type;
+}
+
enum
{
PROP_0,
PROP_URI,
PROP_TITLE,
+ PROP_PROGRESS,
+ PROP_MLOAD_STATUS,
PROP_STATUSBAR_TEXT,
PROP_SETTINGS
};
enum {
ICON_READY,
NEWS_FEED_READY,
- PROGRESS_STARTED,
- PROGRESS_CHANGED,
- PROGRESS_DONE,
- LOAD_DONE,
ELEMENT_MOTION,
NEW_TAB,
NEW_WINDOW,
G_TYPE_STRING,
G_TYPE_STRING);
- signals[PROGRESS_STARTED] = g_signal_new (
- "progress-started",
- G_TYPE_FROM_CLASS (class),
- (GSignalFlags)(G_SIGNAL_RUN_LAST),
- G_STRUCT_OFFSET (MidoriWebViewClass, progress_started),
- 0,
- NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[PROGRESS_CHANGED] = g_signal_new (
- "progress-changed",
- G_TYPE_FROM_CLASS (class),
- (GSignalFlags)(G_SIGNAL_RUN_LAST),
- G_STRUCT_OFFSET (MidoriWebViewClass, progress_changed),
- 0,
- NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[PROGRESS_DONE] = g_signal_new (
- "progress-done",
- G_TYPE_FROM_CLASS (class),
- (GSignalFlags)(G_SIGNAL_RUN_LAST),
- G_STRUCT_OFFSET (MidoriWebViewClass, progress_done),
- 0,
- NULL,
- g_cclosure_marshal_VOID__INT,
- G_TYPE_NONE, 1,
- G_TYPE_INT);
-
- signals[LOAD_DONE] = g_signal_new (
- "load-done",
- G_TYPE_FROM_CLASS (class),
- (GSignalFlags)(G_SIGNAL_RUN_LAST),
- G_STRUCT_OFFSET (MidoriWebViewClass, load_done),
- 0,
- NULL,
- g_cclosure_marshal_VOID__OBJECT,
- G_TYPE_NONE, 1,
- WEBKIT_TYPE_WEB_FRAME);
-
signals[ELEMENT_MOTION] = g_signal_new (
"element-motion",
G_TYPE_FROM_CLASS (class),
GParamFlags flags = G_PARAM_READWRITE | G_PARAM_CONSTRUCT;
+ if (!g_object_class_find_property (gobject_class, "uri"))
g_object_class_install_property (gobject_class,
PROP_URI,
g_param_spec_string (
"",
flags));
+ if (!g_object_class_find_property (gobject_class, "title"))
g_object_class_install_property (gobject_class,
PROP_TITLE,
g_param_spec_string (
NULL,
flags));
+ if (!g_object_class_find_property (gobject_class, "progress"))
+ g_object_class_install_property (gobject_class,
+ PROP_PROGRESS,
+ g_param_spec_double (
+ "progress",
+ "Progress",
+ _("The current loading progress"),
+ 0.0, 1.0, 0.0,
+ G_PARAM_READABLE));
+
+ g_object_class_install_property (gobject_class,
+ PROP_MLOAD_STATUS,
+ g_param_spec_enum (
+ "mload-status",
+ "Load Status",
+ _("The current loading status"),
+ MIDORI_TYPE_LOAD_STATUS,
+ MIDORI_LOAD_FINISHED,
+ G_PARAM_READABLE));
+
+ if (!g_object_class_find_property (gobject_class, "statusbar-text"))
g_object_class_install_property (gobject_class,
PROP_STATUSBAR_TEXT,
g_param_spec_string (
"settings");
}
-/*static void
-webkit_web_view_load_started (MidoriWebView* web_view,
+static void
+webkit_web_view_load_started (MidoriWebView* web_view,
WebKitWebFrame* web_frame)
{
- web_view->is_loading = TRUE;
- web_view->progress = -1;
- katze_throbber_set_animated (KATZE_THROBBER (web_view->tab_icon), TRUE);
-}*/
+ web_view->load_status = MIDORI_LOAD_PROVISIONAL;
+ g_object_notify (G_OBJECT (web_view), "mload-status");
+ if (web_view->tab_icon)
+ katze_throbber_set_animated (KATZE_THROBBER (web_view->tab_icon), TRUE);
-static void
-_midori_web_view_set_uri (MidoriWebView* web_view,
- const gchar* uri)
-{
- katze_assign (web_view->uri, g_strdup (uri));
- if (web_view->xbel_item)
- {
- const gchar* uri = midori_web_view_get_display_uri (web_view);
- katze_xbel_bookmark_set_href (web_view->xbel_item, uri);
- }
- g_object_set (web_view, "title", NULL, NULL);
+ web_view->progress = 0.0;
+ g_object_notify (G_OBJECT (web_view), "progress");
}
#if GLIB_CHECK_VERSION (2, 16, 0)
const gchar* uri;
GdkPixbuf* icon;
- web_view->progress = 0;
uri = webkit_web_frame_get_uri (web_frame);
- _midori_web_view_set_uri (web_view, uri);
+ katze_assign (web_view->uri, g_strdup (uri));
+ if (web_view->xbel_item)
+ {
+ uri = midori_web_view_get_display_uri (web_view);
+ katze_xbel_bookmark_set_href (web_view->xbel_item, uri);
+ }
+ g_object_notify (G_OBJECT (web_view), "uri");
+ g_object_set (web_view, "title", NULL, NULL);
icon = gtk_widget_render_icon (GTK_WIDGET (web_view),
GTK_STOCK_FILE, GTK_ICON_SIZE_MENU, NULL);
gtk_image_menu_item_set_image (
GTK_IMAGE_MENU_ITEM (web_view->menu_item),
gtk_image_new_from_pixbuf (icon));
+
+ web_view->load_status = MIDORI_LOAD_COMMITTED;
+ g_object_notify (G_OBJECT (web_view), "mload-status");
}
static void
gtk_image_new_from_pixbuf (icon));
}
-static void
-webkit_web_view_load_started (MidoriWebView* web_view,
- WebKitWebFrame* web_frame)
-{
- /* FIXME: This is a hack, until signals are fixed upstream */
- web_view->is_loading = TRUE;
- if (web_view->tab_icon)
- katze_throbber_set_animated (KATZE_THROBBER (web_view->tab_icon), TRUE);
-
- web_view->progress = 0;
- g_signal_emit (web_view, signals[PROGRESS_STARTED], 0, web_view->progress);
-}
-
static void
webkit_web_view_progress_changed (MidoriWebView* web_view, gint progress)
{
- web_view->progress = progress;
- g_signal_emit (web_view, signals[PROGRESS_CHANGED], 0, web_view->progress);
-}
-
-static void
-webkit_web_view_load_finished (MidoriWebView* web_view)
-{
- web_view->progress = 100;
- g_signal_emit (web_view, signals[PROGRESS_DONE], 0, web_view->progress);
+ web_view->progress = progress ? progress / 100.0 : 0.0;
+ g_object_notify (G_OBJECT (web_view), "progress");
}
static void
g_object_unref (document);
g_object_unref (value);
- web_view->is_loading = FALSE;
- web_view->progress = -1;
-
if (web_view->tab_icon)
katze_throbber_set_animated (KATZE_THROBBER (web_view->tab_icon),
FALSE);
- g_signal_emit (web_view, signals[LOAD_DONE], 0, web_frame);
+ web_view->load_status = MIDORI_LOAD_FINISHED;
+ g_object_notify (G_OBJECT (web_view), "mload-status");
+}
+
+static void
+webkit_web_view_load_finished (MidoriWebView* web_view)
+{
+ web_view->progress = 1.0;
+ g_object_notify (G_OBJECT (web_view), "progress");
}
static void
{
web_view->icon = gtk_widget_render_icon (GTK_WIDGET (web_view),
GTK_STOCK_FILE, GTK_ICON_SIZE_MENU, NULL);
- web_view->is_loading = FALSE;
- web_view->progress = -1;
+ web_view->progress = 0.0;
+ web_view->load_status = MIDORI_LOAD_FINISHED;
web_view->settings = midori_web_settings_new ();
g_object_set (web_view, "WebKitWebView::settings", web_view->settings, NULL);
web_frame = webkit_web_view_get_main_frame (WEBKIT_WEB_VIEW (web_view));
g_object_connect (web_view,
- /* "signal::load-started",
- webkit_web_view_load_started, NULL, */
+ "signal::load-started",
+ webkit_web_view_load_started, NULL,
"signal::load-committed",
webkit_web_view_load_committed, NULL,
"signal::icon-ready",
webkit_web_view_icon_ready, NULL,
- "signal::load-started",
- webkit_web_view_load_started, NULL,
"signal::load-progress-changed",
webkit_web_view_progress_changed, NULL,
"signal::load-finished",
webkit_web_view_load_finished, NULL,
- /* "signal::load-done",
- webkit_web_view_load_done, NULL, */
"signal::title-changed",
webkit_web_view_title_changed, NULL,
"signal::status-bar-text-changed",
case PROP_TITLE:
g_value_set_string (value, web_view->title);
break;
+ case PROP_PROGRESS:
+ g_value_set_double (value, web_view->progress);
+ break;
+ case PROP_MLOAD_STATUS:
+ g_value_set_enum (value, web_view->load_status);
+ break;
case PROP_STATUSBAR_TEXT:
g_value_set_string (value, web_view->statusbar_text);
break;
}
/**
- * midori_web_view_is_loading:
+ * midori_web_view_load_status:
* @web_view: a #MidoriWebView
*
- * Determines whether currently a page is being loaded or not.
+ * Determines the current loading status of a page.
*
- * Return value: %TRUE if a page is being loaded, %FALSE otherwise
+ * Return value: the current #MidoriLoadStatus
**/
-gint
-midori_web_view_is_loading (MidoriWebView* web_view)
+MidoriLoadStatus
+midori_web_view_get_load_status (MidoriWebView* web_view)
{
- g_return_val_if_fail (MIDORI_IS_WEB_VIEW (web_view), -1);
+ g_return_val_if_fail (MIDORI_IS_WEB_VIEW (web_view), MIDORI_LOAD_FINISHED);
- return web_view->is_loading;
+ return web_view->load_status;
}
/**
* midori_web_view_get_progress:
* @web_view: a #MidoriWebView
*
- * Retrieves the current loading progress in percent or -1 if no data
- * has been loaded so far.
- *
- * The value is undefined if no loading is in progress.
+ * Retrieves the current loading progress as
+ * a fraction between 0.0 and 1.0.
*
- * Return value: the current loading progress or -1
+ * Return value: the current loading progress
**/
-gint
+gdouble
midori_web_view_get_progress (MidoriWebView* web_view)
{
- g_return_val_if_fail (MIDORI_IS_WEB_VIEW (web_view), -1);
+ g_return_val_if_fail (MIDORI_IS_WEB_VIEW (web_view), 0.0);
return web_view->progress;
}