[evolution-rss] disable status button on complete load; fix properties crash on main folder
- From: Lucian Langa <lucilanga src gnome org>
- To: svn-commits-list gnome org
- Subject: [evolution-rss] disable status button on complete load; fix properties crash on main folder
- Date: Sun, 14 Jun 2009 13:25:42 -0400 (EDT)
commit c61c8b0713d16865207be612e7c935b455c132ed
Author: Lucian Langa <lucilanga gnome org>
Date: Sun Jun 14 20:25:20 2009 +0300
disable status button on complete load; fix properties crash on main folder
TODO | 2 +-
configure.ac | 5 ++++
src/Makefile.am | 1 +
src/rss-config-factory.c | 7 ++++-
src/rss.c | 51 ++++++++++++++++++++++++++++++++++++++++-----
5 files changed, 57 insertions(+), 9 deletions(-)
---
diff --git a/TODO b/TODO
index c6a92de..b8f1f6e 100644
--- a/TODO
+++ b/TODO
@@ -34,10 +34,10 @@
* disable filters on setup_feed()
* store feed in an alternate file to serve images from
* migrate fetch_blocking -> fetch_unblocking
- * grey browser stop button on complete load
* grey out disabled folders (feeds)
* feed check runtime validation
* wrong send and receive count of articles after import
* handle 404 for images in comments
* gtkhtml does not handle script properly
* gtkhtml does not handle 
 construct
+ * switch webkit -> gecko leeds to crash on pfree()
diff --git a/configure.ac b/configure.ac
index f46da2d..43327ee 100644
--- a/configure.ac
+++ b/configure.ac
@@ -185,7 +185,12 @@ if test "x$have_webkit" == "xno"; then
AC_DEFINE_UNQUOTED(WEBKIT_UNSTD, 1, [unstandard webkit installation])
WEBKIT_CFLAGS=$WebKitGtk_CFLAGS
WEBKIT_LIBS=$WebKitGtk_LIBS
+else
+ WEBKIT_VERSION=`$PKG_CONFIG --modversion webkit-1.0`
+ WEBKIT_VERSION=`echo $WEBKIT_VERSION|$AWK -F . '{print $1 * 1000000 + $2 * 1000 + $3}'`
+
fi
+AC_SUBST([WEBKIT_VERSION])
AC_SUBST([WEBKIT_CFLAGS])
AC_SUBST([WEBKIT_LIBS])
AC_SUBST([WEBKIT_UNSTD])
diff --git a/src/Makefile.am b/src/Makefile.am
index 694a740..aca07a5 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -13,6 +13,7 @@ INCLUDES = \
-DEVOLUTION_ICONDIR=\""$(ICON_DIR)"\" \
-DGTK_VERSION="$(GTK_VERSION)" \
-DLIBSOUP_VERSION="$(SOUP_VERSION)" \
+ -DWEBKIT_VERSION="$(WEBKIT_VERSION)" \
-DRENDER=\""$(RENDER)"\" \
-DRENDER_N=$(RENDER_N) \
-DHAVE_DBUS=$(DBD) \
diff --git a/src/rss-config-factory.c b/src/rss-config-factory.c
index 3252a6e..15f7691 100644
--- a/src/rss-config-factory.c
+++ b/src/rss-config-factory.c
@@ -1892,13 +1892,16 @@ rss_folder_factory (EPlugin *epl, EConfigHookItemFactoryData *data)
{
EMConfigTargetFolder *target = (EMConfigTargetFolder *)data->config->target;
gchar *url = NULL, *ofolder = NULL;
- gchar *main_folder = get_main_folder();
+ gchar *main_folder = lookup_main_folder();
gchar *folder = target->folder->full_name;
add_feed *feed = NULL;
+ g_print("folder:%s\n", folder);
+ g_print("main_folder:%s\n", main_folder);
//filter only rss folders
if (folder == NULL
- || g_ascii_strncasecmp(folder, main_folder, strlen(main_folder)))
+ || g_ascii_strncasecmp(folder, main_folder, strlen(main_folder))
+ || !g_ascii_strcasecmp(folder, main_folder))
goto out;
ofolder = lookup_original_folder(folder);
diff --git a/src/rss.c b/src/rss.c
index b7daf65..ce427e8 100644
--- a/src/rss.c
+++ b/src/rss.c
@@ -164,6 +164,7 @@ struct _org_gnome_rss_controls_pobject {
EMFormatHTML *format;
GtkWidget *html;
GtkWidget *container;
+ GtkWidget *stopbut; //browser stop button
CamelStream *stream;
GtkWidget *mozembedwindow; //window containing GtkMozEmbed
gchar *website;
@@ -1371,7 +1372,6 @@ if (2 == gconf_client_get_int(rss_gconf, GCONF_KEY_HTML_RENDER, NULL))
void
rss_mozilla_init(void)
{
- GError *err = NULL;
gecko_init();
}
#endif
@@ -1477,6 +1477,25 @@ rss_menu_items_free(EPopup *ep, GSList *items, void *data)
}
#ifdef HAVE_WEBKIT
+#if (WEBKIT_VERSION >= 1001007)
+static void
+webkit_net_status (WebKitWebView *view,
+ GParamSpec *spec,
+ GtkWidget *data)
+{
+ WebKitLoadStatus status = webkit_web_view_get_load_status (view);
+ switch (status) {
+ case WEBKIT_LOAD_FINISHED:
+ gtk_widget_set_sensitive(data, FALSE);
+ break;
+ default:
+ gtk_widget_set_sensitive(data, TRUE);
+ break;
+ }
+
+}
+#endif
+
gboolean
webkit_over_link(WebKitWebView *web_view,
gchar *title,
@@ -1511,6 +1530,18 @@ webkit_click (GtkEntry *entry,
#endif
#ifdef HAVE_GECKO
+void
+gecko_net_start(GtkMozEmbed *mozembed, GtkWidget *data)
+{
+ gtk_widget_set_sensitive(data, TRUE);
+}
+
+void
+gecko_net_stop(GtkMozEmbed *mozembed, GtkWidget *data)
+{
+ gtk_widget_set_sensitive(data, FALSE);
+}
+
gboolean
gecko_over_link(GtkMozEmbed *mozembed)
{
@@ -1578,7 +1609,6 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
(struct _org_gnome_rss_controls_pobject *) pobject;
GtkWidget *moz;
-// gtk_widget_size_request (efhd->priv->attachment_bar, &req);
guint engine = fallback_engine();
moz = gtk_scrolled_window_new(NULL,NULL);
// moz = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -1593,8 +1623,9 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
gtk_container_add(GTK_CONTAINER(moz), GTK_WIDGET(rf->mozembed));
g_signal_connect (rf->mozembed, "populate-popup", G_CALLBACK (webkit_click), moz);
g_signal_connect (rf->mozembed, "hovering-over-link", G_CALLBACK (webkit_over_link), moz);
- // gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(moz), GTK_WIDGET(rf->mozembed));
- // gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(moz), GTK_SHADOW_ETCHED_OUT);
+#if (WEBKIT_VERSION >= 1001007)
+ g_signal_connect (rf->mozembed, "load-status", G_CALLBACK(webkit_net_status), po->stopbut);
+#endif
}
#endif
@@ -1608,6 +1639,8 @@ org_gnome_rss_browser (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobject
gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(moz), GTK_SHADOW_ETCHED_OUT);
g_signal_connect (rf->mozembed, "dom_mouse_click", G_CALLBACK(gecko_click), moz);
g_signal_connect (rf->mozembed, "link_message", G_CALLBACK(gecko_over_link), moz);
+ g_signal_connect (rf->mozembed, "net_start", G_CALLBACK(gecko_net_start), po->stopbut);
+ g_signal_connect (rf->mozembed, "net_stop", G_CALLBACK(gecko_net_stop), po->stopbut);
}
#endif
@@ -1720,8 +1753,10 @@ org_gnome_rss_controls (EMFormatHTML *efh, void *eb, EMFormatHTMLPObject *pobjec
gtk_widget_set_sensitive (button5, rf->online);
gtk_widget_show (button5);
gtk_box_pack_start (GTK_BOX (hbox2), button5, TRUE, TRUE, 0);
- GtkWidget *button2 = gtk_button_new_from_stock (GTK_STOCK_STOP);
+ //GtkWidget *button2 = gtk_button_new_from_stock (GTK_STOCK_STOP);
+ GtkWidget *button2 = po->stopbut;
g_signal_connect (button2, "clicked", G_CALLBACK(stop_cb), efh);
+
// gtk_widget_set_size_request(button2, 100, 10);
gtk_button_set_relief(GTK_BUTTON(button2), GTK_RELIEF_HALF);
gtk_widget_set_sensitive (button2, rf->online);
@@ -1788,7 +1823,7 @@ pfree(EMFormatHTMLPObject *o)
}
#endif
if (rf->mozembed) {
- if (engine ==2) //crashes webkit - https://bugs.webkit.org/show_bug.cgi?id=25042
+ if (engine == 2) //crashes webkit - https://bugs.webkit.org/show_bug.cgi?id=25042
gtk_widget_destroy(rf->mozembed);
rf->mozembed = NULL;
}
@@ -1869,6 +1904,9 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t) //camelmimepart
pobj->stream = t->stream;
pobj->object.free = free_rss_controls;
camel_stream_printf (t->stream, "<object classid=%s></object>\n", classid);
+ //precreate stop button as we need it to control it later
+ GtkWidget *button2 = gtk_button_new_from_stock (GTK_STOCK_STOP);
+ pobj->stopbut = button2;
if (rf->cur_format || (feedid && is_html && rf->cur_format)) {
@@ -1889,6 +1927,7 @@ void org_gnome_cooly_format_rss(void *ep, EMFormatHookTarget *t) //camelmimepart
pobj->format = (EMFormatHTML *)t->format;
pobj->object.free = pfree;
pobj->part = t->part;
+ pobj->stopbut = button2;
camel_stream_printf (t->stream,
"<div style=\"border: solid #%06x 1px; background-color: #%06x; color: #%06x;\">\n",
frame_colour & 0xffffff,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]