static void gtk_recent_action_connect_proxy (GtkAction *action, GtkWidget *widget) { GtkRecentAction *recent_action = GTK_RECENT_ACTION (action); GtkRecentActionPrivate *priv = recent_action->priv; /* it can only be a recent chooser implementor anyway... */ if (GTK_IS_RECENT_CHOOSER (widget) && !g_slist_find (priv->choosers, widget)) { if (priv->sort_func) { gtk_recent_chooser_set_sort_func (GTK_RECENT_CHOOSER (widget), priv->sort_func, priv->sort_data, priv->data_destroy); } g_signal_connect_swapped (widget, "selection_changed", G_CALLBACK (delegate_selection_changed), action); g_signal_connect_swapped (widget, "item-activated", G_CALLBACK (delegate_item_activated), action); } if (GTK_ACTION_CLASS (gtk_recent_action_parent_class)->connect_proxy) GTK_ACTION_CLASS (gtk_recent_action_parent_class)->connect_proxy (action, widget); }
static void gtk_recent_action_set_sort_func (GtkRecentChooser *chooser, GtkRecentSortFunc sort_func, gpointer sort_data, GDestroyNotify data_destroy) { GtkRecentAction *action = GTK_RECENT_ACTION (chooser); GtkRecentActionPrivate *priv = action->priv; GSList *l; if (priv->data_destroy) { priv->data_destroy (priv->sort_data); priv->data_destroy = NULL; } priv->sort_func = NULL; priv->sort_data = NULL; if (sort_func) { priv->sort_func = sort_func; priv->sort_data = sort_data; priv->data_destroy = data_destroy; } for (l = priv->choosers; l; l = l->next) { GtkRecentChooser *chooser_menu = l->data; gtk_recent_chooser_set_sort_func (chooser_menu, priv->sort_func, priv->sort_data, priv->data_destroy); } }
static VALUE rc_set_sort_func(VALUE self) { VALUE func = rb_block_proc(); G_CHILD_ADD(mGtk, func); gtk_recent_chooser_set_sort_func(_SELF(self), (GtkRecentSortFunc)sort_func, (gpointer)func, (GDestroyNotify)remove_callback_reference); return self; }
static void delegate_set_sort_func (GtkRecentChooser *chooser, GtkRecentSortFunc sort_func, gpointer sort_data, GDestroyNotify data_destroy) { gtk_recent_chooser_set_sort_func (get_delegate (chooser), sort_func, sort_data, data_destroy); }
static GtkWidget * gtk_recent_action_create_menu (GtkAction *action) { GtkRecentAction *recent_action = GTK_RECENT_ACTION (action); GtkRecentActionPrivate *priv = recent_action->priv; GtkWidget *widget; widget = g_object_new (GTK_TYPE_RECENT_CHOOSER_MENU, "show-private", priv->show_private, "show-not-found", priv->show_not_found, "show-tips", priv->show_tips, "show-icons", priv->show_icons, "show-numbers", priv->show_numbers, "limit", priv->limit, "sort-type", priv->sort_type, "recent-manager", priv->manager, "filter", priv->current_filter, "local-only", priv->local_only, NULL); if (priv->sort_func) { gtk_recent_chooser_set_sort_func (GTK_RECENT_CHOOSER (widget), priv->sort_func, priv->sort_data, priv->data_destroy); } g_signal_connect_swapped (widget, "selection_changed", G_CALLBACK (delegate_selection_changed), recent_action); g_signal_connect_swapped (widget, "item-activated", G_CALLBACK (delegate_item_activated), recent_action); /* keep track of the choosers we create */ priv->choosers = g_slist_prepend (priv->choosers, widget); return widget; }