diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2007-03-14 10:33:36 +0000 |
---|---|---|
committer | Emmanuele Bassi <ebassi@src.gnome.org> | 2007-03-14 10:33:36 +0000 |
commit | 86ea351bd71aaf1c420b9a3b1cee74649f197b8a (patch) | |
tree | bbe071490825a78940a36ce00a1d6f457900bde5 /gtk/gtkrecentchoosermenu.c | |
parent | 4b3364ccc947230f62be8339ad7476d7151bfb51 (diff) | |
download | gtk+-86ea351bd71aaf1c420b9a3b1cee74649f197b8a.tar.gz |
Various clean ups in the GtkRecent code. (see #338843)
2007-03-14 Emmanuele Bassi <ebassi@gnome.org>
Various clean ups in the GtkRecent code. (see #338843)
* gtk/gtkrecentchooserdefault.c:
* gtk/gtkrecentchoosermenu.c:
* gtk/gtkrecentchooserprivate.h:
* gtk/gtkrecentchooserutils.c: Move the recent chooser function
for getting the sorted and clamped list of recent files from the
manager outside the implementations.
* gtk/gtkrecentchooserdefault.c (chooser_set_sort_type): Repopulate
the list when the sorting order changes.
(gtk_recent_chooser_default_dispose),
(gtk_recent_chooser_default_finalize): Move object unref and
source removal from finalize to dispose.
* gtk/gtkrecentchooser.c (gtk_recent_chooser_type_init): Relax the
prerequisite for the GtkRecentChooser interface implementations,
from GtkObject to GObject.
(gtk_recent_chooser_class_init): Use GTK_PARAM_* instead of
G_PARAM_*
svn path=/trunk/; revision=17514
Diffstat (limited to 'gtk/gtkrecentchoosermenu.c')
-rw-r--r-- | gtk/gtkrecentchoosermenu.c | 149 |
1 files changed, 30 insertions, 119 deletions
diff --git a/gtk/gtkrecentchoosermenu.c b/gtk/gtkrecentchoosermenu.c index 11731a1a90..99097fa8c8 100644 --- a/gtk/gtkrecentchoosermenu.c +++ b/gtk/gtkrecentchoosermenu.c @@ -46,6 +46,7 @@ #include "gtkobject.h" #include "gtktooltips.h" #include "gtktypebuiltins.h" +#include "gtkprivate.h" #include "gtkalias.h" struct _GtkRecentChooserMenuPrivate @@ -211,7 +212,7 @@ gtk_recent_chooser_menu_class_init (GtkRecentChooserMenuClass *klass) P_("Show Numbers"), P_("Whether the items should be displayed with a number"), FALSE, - G_PARAM_READWRITE)); + GTK_PARAM_READWRITE)); g_type_class_add_private (klass, sizeof (GtkRecentChooserMenuPrivate)); } @@ -353,26 +354,27 @@ gtk_recent_chooser_menu_set_property (GObject *object, GParamSpec *pspec) { GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (object); + GtkRecentChooserMenuPrivate *priv = menu->priv; switch (prop_id) { case PROP_SHOW_NUMBERS: - menu->priv->show_numbers = g_value_get_boolean (value); + priv->show_numbers = g_value_get_boolean (value); break; case GTK_RECENT_CHOOSER_PROP_RECENT_MANAGER: set_recent_manager (menu, g_value_get_object (value)); break; case GTK_RECENT_CHOOSER_PROP_SHOW_PRIVATE: - menu->priv->show_private = g_value_get_boolean (value); + priv->show_private = g_value_get_boolean (value); break; case GTK_RECENT_CHOOSER_PROP_SHOW_NOT_FOUND: - menu->priv->show_not_found = g_value_get_boolean (value); + priv->show_not_found = g_value_get_boolean (value); break; case GTK_RECENT_CHOOSER_PROP_SHOW_TIPS: gtk_recent_chooser_menu_set_show_tips (menu, g_value_get_boolean (value)); break; case GTK_RECENT_CHOOSER_PROP_SHOW_ICONS: - menu->priv->show_icons = g_value_get_boolean (value); + priv->show_icons = g_value_get_boolean (value); break; case GTK_RECENT_CHOOSER_PROP_SELECT_MULTIPLE: g_warning ("%s: Choosers of type `%s' do not support selecting multiple items.", @@ -380,10 +382,10 @@ gtk_recent_chooser_menu_set_property (GObject *object, G_OBJECT_TYPE_NAME (object)); break; case GTK_RECENT_CHOOSER_PROP_LOCAL_ONLY: - menu->priv->local_only = g_value_get_boolean (value); + priv->local_only = g_value_get_boolean (value); break; case GTK_RECENT_CHOOSER_PROP_LIMIT: - menu->priv->limit = g_value_get_int (value); + priv->limit = g_value_get_int (value); break; case GTK_RECENT_CHOOSER_PROP_SORT_TYPE: chooser_set_sort_type (menu, g_value_get_enum (value)); @@ -404,32 +406,33 @@ gtk_recent_chooser_menu_get_property (GObject *object, GParamSpec *pspec) { GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (object); + GtkRecentChooserMenuPrivate *priv = menu->priv; switch (prop_id) { case PROP_SHOW_NUMBERS: - g_value_set_boolean (value, menu->priv->show_numbers); + g_value_set_boolean (value, priv->show_numbers); break; case GTK_RECENT_CHOOSER_PROP_SHOW_TIPS: - g_value_set_boolean (value, menu->priv->show_tips); + g_value_set_boolean (value, priv->show_tips); break; case GTK_RECENT_CHOOSER_PROP_LIMIT: - g_value_set_int (value, menu->priv->limit); + g_value_set_int (value, priv->limit); break; case GTK_RECENT_CHOOSER_PROP_LOCAL_ONLY: - g_value_set_boolean (value, menu->priv->local_only); + g_value_set_boolean (value, priv->local_only); break; case GTK_RECENT_CHOOSER_PROP_SORT_TYPE: - g_value_set_enum (value, menu->priv->sort_type); + g_value_set_enum (value, priv->sort_type); break; case GTK_RECENT_CHOOSER_PROP_SHOW_PRIVATE: - g_value_set_boolean (value, menu->priv->show_private); + g_value_set_boolean (value, priv->show_private); break; case GTK_RECENT_CHOOSER_PROP_SHOW_NOT_FOUND: - g_value_set_boolean (value, menu->priv->show_not_found); + g_value_set_boolean (value, priv->show_not_found); break; case GTK_RECENT_CHOOSER_PROP_SHOW_ICONS: - g_value_set_boolean (value, menu->priv->show_icons); + g_value_set_boolean (value, priv->show_icons); break; case GTK_RECENT_CHOOSER_PROP_SELECT_MULTIPLE: g_warning ("%s: Choosers of type `%s' do not support selecting multiple items.", @@ -437,7 +440,7 @@ gtk_recent_chooser_menu_get_property (GObject *object, G_OBJECT_TYPE_NAME (object)); break; case GTK_RECENT_CHOOSER_PROP_FILTER: - g_value_set_object (value, menu->priv->current_filter); + g_value_set_object (value, priv->current_filter); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); @@ -456,6 +459,7 @@ gtk_recent_chooser_menu_set_current_uri (GtkRecentChooser *chooser, gboolean found = FALSE; children = gtk_container_get_children (GTK_CONTAINER (menu)); + for (l = children; l != NULL; l = l->next) { GtkRecentInfo *info; @@ -588,11 +592,12 @@ gtk_recent_chooser_menu_set_sort_func (GtkRecentChooser *chooser, if (priv->sort_data_destroy) { priv->sort_data_destroy (priv->sort_data); - - priv->sort_func = NULL; - priv->sort_data = NULL; priv->sort_data_destroy = NULL; } + + priv->sort_func = NULL; + priv->sort_data = NULL; + priv->sort_data_destroy = NULL; if (sort_func) { @@ -602,45 +607,6 @@ gtk_recent_chooser_menu_set_sort_func (GtkRecentChooser *chooser, } } -static gint -sort_recent_items_mru (GtkRecentInfo *a, - GtkRecentInfo *b, - gpointer unused) -{ - g_assert (a != NULL && b != NULL); - - return (gtk_recent_info_get_modified (a) < gtk_recent_info_get_modified (b)); -} - -static gint -sort_recent_items_lru (GtkRecentInfo *a, - GtkRecentInfo *b, - gpointer unused) -{ - g_assert (a != NULL && b != NULL); - - return (gtk_recent_info_get_modified (a) > gtk_recent_info_get_modified (b)); -} - -/* our proxy sorting function */ -static gint -sort_recent_items_proxy (gpointer *a, - gpointer *b, - gpointer user_data) -{ - GtkRecentInfo *info_a = (GtkRecentInfo *) a; - GtkRecentInfo *info_b = (GtkRecentInfo *) b; - GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (user_data); - - if (menu->priv->sort_func) - return (* menu->priv->sort_func) (info_a, - info_b, - menu->priv->sort_data); - - /* fallback */ - return 0; -} - static void chooser_set_sort_type (GtkRecentChooserMenu *menu, GtkRecentSortType sort_type) @@ -656,66 +622,11 @@ static GList * gtk_recent_chooser_menu_get_items (GtkRecentChooser *chooser) { GtkRecentChooserMenu *menu = GTK_RECENT_CHOOSER_MENU (chooser); - GtkRecentChooserMenuPrivate *priv; - gint limit; - GtkRecentSortType sort_type; - GList *items; - GCompareDataFunc compare_func; - gint length; - - priv = menu->priv; - - if (!priv->manager) - return NULL; - - limit = gtk_recent_chooser_get_limit (chooser); - if (limit == 0) - return NULL; - - sort_type = gtk_recent_chooser_get_sort_type (chooser); - switch (sort_type) - { - case GTK_RECENT_SORT_NONE: - compare_func = NULL; - break; - case GTK_RECENT_SORT_MRU: - compare_func = (GCompareDataFunc) sort_recent_items_mru; - break; - case GTK_RECENT_SORT_LRU: - compare_func = (GCompareDataFunc) sort_recent_items_lru; - break; - case GTK_RECENT_SORT_CUSTOM: - compare_func = (GCompareDataFunc) sort_recent_items_proxy; - break; - default: - g_assert_not_reached (); - break; - } - - items = gtk_recent_manager_get_items (priv->manager); - if (!items) - return NULL; - - if (compare_func) - items = g_list_sort_with_data (items, compare_func, menu); - - length = g_list_length (items); - if ((limit != -1) && (length > limit)) - { - GList *clamp, *l; - - clamp = g_list_nth (items, limit - 1); - if (!clamp) - return items; - - l = clamp->next; - clamp->next = NULL; - - g_list_foreach (l, (GFunc) gtk_recent_info_unref, NULL); - g_list_free (l); - } + GtkRecentChooserMenuPrivate *priv = menu->priv; - return items; + return _gtk_recent_chooser_get_items (chooser, + priv->sort_func, + priv->sort_data); } static GtkRecentManager * @@ -970,7 +881,7 @@ gtk_recent_chooser_menu_create_item (GtkRecentChooserMenu *menu, * display name is huge. */ label = GTK_BIN (item)->child; - if (label) + if (GTK_IS_LABEL (label)) { gtk_label_set_ellipsize (GTK_LABEL (label), PANGO_ELLIPSIZE_END); gtk_label_set_max_width_chars (GTK_LABEL (label), priv->label_width); @@ -1395,7 +1306,7 @@ gtk_recent_chooser_menu_get_show_numbers (GtkRecentChooserMenu *menu) * * Sets whether a number should be added to the items of @menu. The * numbers are shown to provide a unique character for a mnemonic to - * be used inside the menu item's label. Only the first the items + * be used inside ten menu item's label. Only the first the items * get a number to avoid clashes. * * Since: 2.10 |