diff options
author | Andy Hertzfeld <andy@src.gnome.org> | 2001-05-01 05:53:58 +0000 |
---|---|---|
committer | Andy Hertzfeld <andy@src.gnome.org> | 2001-05-01 05:53:58 +0000 |
commit | 8a67175d8eef4a639353565a03054c7511e7458d (patch) | |
tree | 1e9a1e9e3f524ad886189f4317d7879e68c808fb /components/news | |
parent | 59ea0f11849b8468ad70be042ac2bdf0eb148dcd (diff) | |
download | nautilus-8a67175d8eef4a639353565a03054c7511e7458d.tar.gz |
don't mark items new the first time we load a channel, so everything
* components/news/nautilus-news.c: (has_matching_uri),
(mark_new_items), (rss_read_done_callback),
(nautilus_news_make_new_channel), (news_get_indicator_image),
(configure_button_clicked), (empty_message_size_allocate),
(news_display_size_allocate), (set_up_main_widgets),
(make_news_view):
don't mark items new the first time we load a channel, so everything
doesn't appear new initially.
improved the text of the empty message, left justified it, and made it
resize as necessary.
fixed some bugs in the resizing code by reworking which object gets the
size_allocate signal and the conditions for when it calls update_sizes
* components/news/news_channels.xml:
tweaked some names to avoid horizonal scrolling
Diffstat (limited to 'components/news')
-rw-r--r-- | components/news/nautilus-news.c | 58 | ||||
-rw-r--r-- | components/news/news_channels.xml | 2 |
2 files changed, 41 insertions, 19 deletions
diff --git a/components/news/nautilus-news.c b/components/news/nautilus-news.c index 718d9e2e3..94d819335 100644 --- a/components/news/nautilus-news.c +++ b/components/news/nautilus-news.c @@ -116,6 +116,7 @@ typedef struct { int remove_selection_index; int line_width; + int display_height; int max_item_count; uint update_interval; @@ -167,8 +168,9 @@ typedef struct { time_t last_update; gboolean is_open; - gboolean is_showing; + gboolean is_showing; + gboolean initial_load_flag; gboolean channel_changed; gboolean update_in_progress; } RSSChannelData; @@ -182,13 +184,13 @@ typedef struct { #define LOGO_LEFT_OFFSET 15 #define INITIAL_Y_OFFSET 2 #define ITEM_POSITION 31 -#define RIGHT_ITEM_MARGIN 4 +#define RIGHT_ITEM_MARGIN 8 +#define EMPTY_MESSAGE_MARGIN 12 #define ITEM_FONT_SIZE 11 #define TIME_FONT_SIZE 9 #define TIME_MARGIN_OFFSET 2 #define TITLE_FONT_SIZE 18 #define MINIMUM_DRAW_SIZE 16 -#define EMPTY_MESSAGE_WIDTH 100 #define NEWS_BACKGROUND_RGBA 0xFFFFFFFF /* special prelight values for logo and triangle */ @@ -217,6 +219,7 @@ nautilus_news_make_new_channel (News *news_data, gboolean is_open, gboolean is_showing); +/* property bag property access routines */ static void get_bonobo_properties (BonoboPropertyBag *bag, BonoboArg *arg, @@ -281,7 +284,9 @@ set_bonobo_properties (BonoboPropertyBag *bag, } } - +/* do_destroy is invoked when the nautilus view is destroyed to deallocate the resources used + * by the news panel + */ static void do_destroy (GtkObject *obj, News *news) { @@ -1190,7 +1195,7 @@ has_matching_uri (GList *items, const char *target_uri) if (target_uri == NULL) { return FALSE; } - + mapped_target_uri = gnome_vfs_make_uri_canonical (target_uri); current_item = items; @@ -1220,10 +1225,9 @@ mark_new_items (RSSChannelData *channel_data, GList *old_items) current_item = channel_data->items; changed_count = 0; - while (current_item != NULL) { - + while (current_item != NULL) { item_data = (RSSItemData*) current_item->data; - if (!has_matching_uri (old_items, item_data->item_url)) { + if (!has_matching_uri (old_items, item_data->item_url) && !channel_data->initial_load_flag) { item_data->new_item = TRUE; channel_data->channel_changed = TRUE; nautilus_news_set_news_changed (channel_data->owner, TRUE); @@ -1457,8 +1461,9 @@ rss_read_done_callback (GnomeVFSResult result, eel_g_list_free_deep_custom (old_items, (GFunc) free_rss_data_item, NULL); xmlFreeDoc (rss_document); channel_data->update_in_progress = FALSE; + channel_data->initial_load_flag = FALSE; - /* update the size of the display aread to reflect the new content and + /* update the size of the display area to reflect the new content and * schedule a redraw. */ if (changed_count > 0) { @@ -1503,6 +1508,7 @@ nautilus_news_make_new_channel (News *news_data, channel_data->prelight_index = -1; channel_data->is_open = is_open; channel_data->is_showing = is_showing; + channel_data->initial_load_flag = TRUE; if (channel_data->is_showing) { nautilus_news_load_channel (news_data, channel_data); @@ -1644,7 +1650,7 @@ static char * news_get_indicator_image (News *news_data) { if (news_data->news_changed) { - return g_strdup ("news_bullet.png"); + return g_strdup ("changed_bullet.png"); } return NULL; } @@ -1770,6 +1776,7 @@ configure_button_clicked (GtkWidget *widget, News *news) if (!news->configure_mode) { /* when exiting configure mode, update everything */ nautilus_news_save_channel_state (news); + update_size_and_redraw (news); check_for_updates (news); } } @@ -2093,16 +2100,30 @@ add_channels_to_lists (News* news_data) xmlFreeDoc (channel_doc); } +/* when the empty message is resized, adjust its wrap width */ +static void +empty_message_size_allocate (GtkWidget *widget, GtkAllocation *allocation, News *news_data) +{ + eel_label_set_smooth_line_wrap_width (EEL_LABEL (widget), allocation->width - 2*EMPTY_MESSAGE_MARGIN); +} + /* handle resizing the news display by recalculating our size if necessary */ static void -nautilus_news_size_allocate (GtkWidget *widget, GtkAllocation *allocation, News *news_data) -{ - news_data->line_width = news_data->news_display->allocation.width - ITEM_POSITION; - if (news_data->line_width > 0) { +news_display_size_allocate (GtkWidget *widget, GtkAllocation *allocation, News *news_data) +{ + int old_line_width, old_height; + old_line_width = news_data->line_width; + old_height = news_data->display_height; + + news_data->line_width = allocation->width - ITEM_POSITION; + news_data->display_height = allocation->height; + + if (old_line_width != news_data->line_width || old_height != news_data->display_height) { update_size_and_redraw (news_data); } } + /* code-saving utility to allocate a left-justified anti-aliased label */ static GtkWidget * news_label_new (const char *label_text, gboolean title_mode) @@ -2303,10 +2324,10 @@ set_up_main_widgets (News *news, GtkWidget *container) news->news_display_scrolled_window = scrolled_window; /* add the empty message */ - news->empty_message = eel_label_new (_("Click the \'Select Sites\' button to select websites to view their current headlines here.")); + news->empty_message = eel_label_new (_("The News panel displays current headlines from your favorite websites. Click the \'Select Sites\' button to select the sites to display.")); eel_label_set_smooth_font_size (EEL_LABEL (news->empty_message), 14); + eel_label_set_justify (EEL_LABEL (news->empty_message), GTK_JUSTIFY_LEFT); eel_label_set_wrap (EEL_LABEL (news->empty_message), TRUE); - eel_label_set_smooth_line_wrap_width (EEL_LABEL (news->empty_message), EMPTY_MESSAGE_WIDTH); gtk_box_pack_start (GTK_BOX (news->main_box), news->empty_message, TRUE, TRUE, 0); @@ -2376,7 +2397,8 @@ make_news_view (const char *iid, gpointer callback_data) news->timer_task = gtk_timeout_add (10000, check_for_updates, news); /* arrange for notification when we're resized */ - gtk_signal_connect (GTK_OBJECT (main_container), "size_allocate", nautilus_news_size_allocate, news); + gtk_signal_connect (GTK_OBJECT (news->news_display), "size_allocate", news_display_size_allocate, news); + gtk_signal_connect (GTK_OBJECT (news->empty_message), "size_allocate", empty_message_size_allocate, news); /* Create the nautilus view CORBA object. */ news->view = nautilus_view_new (main_container); @@ -2396,7 +2418,7 @@ make_news_view (const char *iid, gpointer callback_data) nautilus_news_clear_changed_flags (news); /* read the channel definition file and start loading the channels */ - read_channel_list (news); + read_channel_list (news); /* populate the configuration list */ add_channels_to_lists (news); diff --git a/components/news/news_channels.xml b/components/news/news_channels.xml index e8a80007b..000a930e7 100644 --- a/components/news/news_channels.xml +++ b/components/news/news_channels.xml @@ -19,7 +19,7 @@ <rss_channel name="Mozilla" uri="http://www.mozilla.org/news.rdf" show="false" open="false"/> <rss_channel name="The Motley Fool" uri="http://www.fool.com/about/headlines/rss_headlines.asp" show="false" open="false"/> <rss_channel name="Newsforge" uri="http://www.newsforge.com/newsforge.rss" show="false" open="false"/> - <rss_channel name="Nanotechnology News" uri="http://www.nanotechnews.com/nano/rdf" show="false" open="false"/> + <rss_channel name="Nanotech News" uri="http://www.nanotechnews.com/nano/rdf" show="false" open="false"/> <rss_channel name="Perl.com" uri="http://www.perl.com/pace/news.rss" show="false" open="false"/> <rss_channel name="Pigdog" uri="http://www.pigdog.org/pigdog.rdf" show="false" open="false"/> <rss_channel name="Python.org" uri="http://www.python.org/channews.rdf" show="false" open="false"/> |