summaryrefslogtreecommitdiff
path: root/gtk/gtkrecentchoosermenu.c
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2007-03-14 10:33:36 +0000
committerEmmanuele Bassi <ebassi@src.gnome.org>2007-03-14 10:33:36 +0000
commit86ea351bd71aaf1c420b9a3b1cee74649f197b8a (patch)
treebbe071490825a78940a36ce00a1d6f457900bde5 /gtk/gtkrecentchoosermenu.c
parent4b3364ccc947230f62be8339ad7476d7151bfb51 (diff)
downloadgtk+-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.c149
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