Esempio n. 1
0
static gboolean
recent_item_update (RecentItem    *item,
                    GtkRecentInfo *info)
{
  gboolean changed = FALSE;
  const char *uri;
  const char *display_name;

  uri = gtk_recent_info_get_uri (info);
  if (g_strcmp0 (item->uri, uri) != 0)
    {
      changed = TRUE;
      g_free (item->uri);
      item->uri = g_strdup (uri);

      g_clear_object (&item->file);
      item->file = g_file_new_for_uri (item->uri);
    }

  display_name = gtk_recent_info_get_display_name (info);
  if (g_strcmp0 (item->display_name, display_name) != 0)
    {
      changed = TRUE;
      g_free (item->display_name);
      item->display_name = g_strdup (display_name);
    }

  return changed;
}
Esempio n. 2
0
static void
add_recent_project_row (GtkListBox *recent_project_box, GtkRecentData *recent_project)
{
	GtkBuilder *builder;
	GFile *file;
	GtkWidget *recent_row;
	GtkLabel *project_label, *path_label;
	GError *error;

	error = NULL;
	builder = gtk_builder_new ();
	if (!gtk_builder_add_from_resource (builder, "/org/gnome/anjuta/ui/starter.ui", &error))
	{
		DEBUG_PRINT ("Could not load starter.ui! %s", error->message);
		g_error_free (error);
	}
	else
	{
		file = g_file_new_for_uri (gtk_recent_info_get_uri (recent_project));
		if (g_file_query_exists (file, NULL))
		{
			recent_row = GTK_WIDGET (gtk_builder_get_object (builder, RECENT_ROW));
			project_label = GTK_WIDGET (gtk_builder_get_object (builder, PROJECT_LABEL));
			path_label = GTK_WIDGET (gtk_builder_get_object (builder, PATH_LABEL));
			gtk_label_set_text (project_label, gtk_recent_info_get_display_name(recent_project));
			gtk_label_set_text (path_label, g_file_get_path(file));
			g_object_set_data_full (G_OBJECT (recent_row), URI_KEY, g_file_get_uri(file), g_free);
			gtk_container_remove (GTK_CONTAINER (gtk_widget_get_parent (recent_row)), recent_row);
			gtk_list_box_insert (recent_project_box, recent_row, -1);
		}
		g_object_unref (file);

	}
	g_object_unref (builder);
}
static gboolean
get_is_recent_filtered (GtkRecentFilter *filter,
			GtkRecentInfo   *info)
{
  GtkRecentFilterInfo filter_info;
  GtkRecentFilterFlags needed;
  gboolean retval;

  g_assert (info != NULL);
  
  needed = gtk_recent_filter_get_needed (filter);
  
  filter_info.contains = GTK_RECENT_FILTER_URI | GTK_RECENT_FILTER_MIME_TYPE;
  
  filter_info.uri = gtk_recent_info_get_uri (info);
  filter_info.mime_type = gtk_recent_info_get_mime_type (info);
  
  if (needed & GTK_RECENT_FILTER_DISPLAY_NAME)
    {
      filter_info.display_name = gtk_recent_info_get_display_name (info);
      filter_info.contains |= GTK_RECENT_FILTER_DISPLAY_NAME;
    }
  else
    filter_info.uri = NULL;
  
  if (needed & GTK_RECENT_FILTER_APPLICATION)
    {
      filter_info.applications = (const gchar **) gtk_recent_info_get_applications (info, NULL);
      filter_info.contains |= GTK_RECENT_FILTER_APPLICATION;
    }
  else
    filter_info.applications = NULL;

  if (needed & GTK_RECENT_FILTER_GROUP)
    {
      filter_info.groups = (const gchar **) gtk_recent_info_get_groups (info, NULL);
      filter_info.contains |= GTK_RECENT_FILTER_GROUP;
    }
  else
    filter_info.groups = NULL;

  if (needed & GTK_RECENT_FILTER_AGE)
    {
      filter_info.age = gtk_recent_info_get_age (info);
      filter_info.contains |= GTK_RECENT_FILTER_AGE;
    }
  else
    filter_info.age = -1;
  
  retval = gtk_recent_filter_filter (filter, &filter_info);
  
  /* these we own */
  if (filter_info.applications)
    g_strfreev ((gchar **) filter_info.applications);
  if (filter_info.groups)
    g_strfreev ((gchar **) filter_info.groups);
  
  return !retval;
}
Esempio n. 4
0
static void
populate_filter_info (GtkRecentInfo        *info,
                      GtkRecentFilterInfo  *filter_info,
                      GtkRecentFilterFlags  needed)
{
    filter_info->uri = gtk_recent_info_get_uri (info);
    filter_info->mime_type = gtk_recent_info_get_mime_type (info);

    filter_info->contains = GTK_RECENT_FILTER_URI | GTK_RECENT_FILTER_MIME_TYPE;

    if (needed & GTK_RECENT_FILTER_DISPLAY_NAME)
    {
        filter_info->display_name = gtk_recent_info_get_display_name (info);
        filter_info->contains |= GTK_RECENT_FILTER_DISPLAY_NAME;
    }
    else
    {
        filter_info->uri = NULL;
    }

    if (needed & GTK_RECENT_FILTER_APPLICATION)
    {
        filter_info->applications = (const gchar **) gtk_recent_info_get_applications (info, NULL);
        filter_info->contains |= GTK_RECENT_FILTER_APPLICATION;
    }
    else
    {
        filter_info->applications = NULL;
    }

    if (needed & GTK_RECENT_FILTER_GROUP)
    {
        filter_info->groups = (const gchar **) gtk_recent_info_get_groups (info, NULL);
        filter_info->contains |= GTK_RECENT_FILTER_GROUP;
    }
    else
    {
        filter_info->groups = NULL;
    }

    if (needed & GTK_RECENT_FILTER_AGE)
    {
        filter_info->age = gtk_recent_info_get_age (info);
        filter_info->contains |= GTK_RECENT_FILTER_AGE;
    }
    else
    {
        filter_info->age = -1;
    }
}
Esempio n. 5
0
void RecentManager::addRecentMenu(GtkRecentInfo *info, int i) {
	XOJ_CHECK_TYPE(RecentManager);

	gchar * label = NULL;
	const char * display_name = gtk_recent_info_get_display_name(info);
	char * escaped = gedit_utils_escape_underscores(display_name, -1);
	if (i >= 10) {
		label = g_strdup_printf("%d.  %s", i, escaped);
	} else {
		label = g_strdup_printf("_%d.  %s", i, escaped);
	}
	g_free(escaped);

	/* gtk_recent_info_get_uri_display (info) is buggy and
	 * works only for local files */
	char * uri = gedit_utils_uri_for_display(gtk_recent_info_get_uri(info));

	char * ruri = gedit_utils_replace_home_dir_with_tilde(uri);
	g_free(uri);

	// Translators: %s is a URI
	char * tip = g_strdup_printf(_("Open '%s'"), ruri);
	g_free(ruri);

	GtkWidget * item = gtk_menu_item_new_with_mnemonic(label);

	gtk_widget_set_tooltip_text(item, tip);

	g_object_set_data_full(G_OBJECT (item), "gtk-recent-info", gtk_recent_info_ref(info), (GDestroyNotify) gtk_recent_info_unref);

	g_signal_connect (item,
			"activate",
			G_CALLBACK (recentsMenuActivateCallback),
			this);

	gtk_menu_shell_append(GTK_MENU_SHELL(menu), item);
	gtk_widget_set_visible(GTK_WIDGET(item), true);

	this->menuItemList = g_list_append(this->menuItemList, item);

	g_free(label);
	g_free(tip);
}
GscProposal*
gsc_proposal_recent_new (GeditWindow *window,
			 GtkRecentInfo *info,
			 GdkPixbuf *icon)
{
	/* FIXME Check objects */
	const gchar *name = gtk_recent_info_get_display_name (info);
	gchar *display_info = gtk_recent_info_get_uri_display (info);
	const gchar *uri = gtk_recent_info_get_uri (info);
	GscProposalRecent *self = GSC_PROPOSAL_RECENT (g_object_new (GSC_TYPE_PROPOSAL_RECENT, 
								 "label", name,
								 "info", display_info,
								 "icon", icon,
								 "page-name", "Recent Files",
								 NULL));
	self->priv->window = window;
	self->priv->uri = g_strdup(uri);
	g_free (display_info);
	return GSC_PROPOSAL (self);
}
Esempio n. 7
0
File: on.cpp Progetto: luisivan/on
QStringList On::recentFiles() {

    QStringList recent;

    GtkRecentManager *manager = gtk_recent_manager_get_default();
    GList *list = gtk_recent_manager_get_items(manager);
    GtkRecentInfo *item;

    int i = 0;

    GFOREACH(item, list) {
        recent.append(QUrl::fromEncoded(gtk_recent_info_get_uri(item)).toString());
        recent.append(QUrl::fromEncoded(gtk_recent_info_get_display_name(item)).toString());
        recent.append(gdkPixbufToBase64(gtk_recent_info_get_icon(item, iconSize)));
        if (i == 50) {
            gtk_recent_info_unref(item);
            g_list_free(list);
            return recent;
        }
        i++;
    }
Esempio n. 8
0
static void
build_recent_projects (GtkWidget *box, Starter *wcm)
{
	GtkRecentManager *manager;
	GList *list;
	gint limit = 1000;
	gint i = 0;
	
	manager = gtk_recent_manager_get_default ();

	list = gtk_recent_manager_get_items (manager);

	while (i < limit && list != NULL)
	{
		if (strcmp (gtk_recent_info_get_mime_type (list->data), "application/x-anjuta") == 0)
		{
			GtkWidget *button;
			GFile *file;

			button = anjuta_starter_button_new (gtk_recent_info_get_display_name (list->data));
			gtk_widget_show (button);
			gtk_box_pack_start (GTK_BOX (box), button, TRUE, TRUE, 0);

			file = g_file_new_for_uri (gtk_recent_info_get_uri (list->data));
			g_object_set_data_full (G_OBJECT (button), "file", file,
									(GDestroyNotify)destroy_notify);

			g_signal_connect (button, "clicked",
							  G_CALLBACK (recent_project_clicked_cb),
							  wcm);
		}
		i++;
		list = g_list_next (list);
	}

	g_list_foreach (list, (GFunc)gtk_recent_info_unref, NULL);
	g_list_free (list);
}
Esempio n. 9
0
static VALUE
rg_display_name(VALUE self)
{
    return CSTR2RVAL(gtk_recent_info_get_display_name(_SELF(self)));
}
static void
brasero_project_type_chooser_build_recent (BraseroProjectTypeChooser *self,
					   GtkRecentManager *recent)
{
	GtkSizeGroup *image_group;
	GtkSizeGroup *group;
	GList *list = NULL;
	gchar *filename;
	GList *recents;
	GList *iter;

	recents = gtk_recent_manager_get_items (recent);
	for (iter = recents; iter; iter = iter->next) {
		GtkRecentInfo *info;
		const gchar *mime;

		info = iter->data;
		mime = gtk_recent_info_get_mime_type (info);
		if (!mime)
			continue;

		/* filter those we want */
		if (strcmp (mime, "application/x-brasero")
		&&  strcmp (mime, "application/x-cd-image")
		&&  strcmp (mime, "application/x-cdrdao-toc")
		&&  strcmp (mime, "application/x-toc")
		&&  strcmp (mime, "application/x-cue")
		&&  strcmp (mime, "audio/x-scpls")
		&&  strcmp (mime, "audio/x-ms-asx")
		&&  strcmp (mime, "audio/x-mp3-playlist")
		&&  strcmp (mime, "audio/x-mpegurl"))
			continue;

		/* sort */
		list = g_list_insert_sorted (list,
					     info,
					     brasero_project_type_chooser_sort_recent);
		if (g_list_length (list) > 5)
			list = g_list_delete_link (list, g_list_last (list));
	}

	group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);
	image_group = gtk_size_group_new (GTK_SIZE_GROUP_BOTH);

	/* If a project was left unfinished last time then add another entry */
	filename = g_build_filename (g_get_user_config_dir (),
				     "brasero",
				     BRASERO_SESSION_TMP_PROJECT_PATH,
				     NULL);
	if (g_file_test (filename, G_FILE_TEST_EXISTS)) {
		gchar *uri;
		GtkWidget *link;
		GtkWidget *image;

		uri = g_filename_to_uri (filename, NULL, NULL);

		image = gtk_image_new_from_icon_name ("brasero", GTK_ICON_SIZE_BUTTON);
		gtk_size_group_add_widget (image_group, image);

		link = gtk_button_new_with_label (_("Last _Unsaved Project"));
		g_object_set_data_full (G_OBJECT (link),
					"BraseroButtonURI", uri,
					g_free);

		gtk_button_set_relief (GTK_BUTTON (link), GTK_RELIEF_NONE);
		gtk_button_set_alignment (GTK_BUTTON (link), 0.0, 0.5);
		gtk_button_set_focus_on_click (GTK_BUTTON (link), FALSE);
		gtk_button_set_image (GTK_BUTTON (link), image);
		gtk_button_set_use_underline (GTK_BUTTON (link), TRUE);
		g_signal_connect (link,
				  "clicked",
				  G_CALLBACK (brasero_project_type_chooser_last_unsaved_clicked_cb),
				  self);

		gtk_widget_show (link);
		gtk_widget_set_tooltip_text (link, _("Load the last project that was not burned and not saved"));
		gtk_box_pack_start (GTK_BOX (self->priv->recent_box), link, FALSE, TRUE, 0);

		gtk_size_group_add_widget (group, link);
	}
	g_free (filename);

	for (iter = list; iter; iter = iter->next) {
		GtkRecentInfo *info;
		GList *child_iter;
		const gchar *name;
		GIcon *icon;
		GtkWidget *image;
		const gchar *uri;
		GtkWidget *child;
		GtkWidget *link;
		GList *children;
		gchar *tooltip;

		info = iter->data;

		tooltip = gtk_recent_info_get_uri_display (info);

		icon = gtk_recent_info_get_gicon (info);
		image = gtk_image_new_from_gicon (icon, GTK_ICON_SIZE_BUTTON);
		g_object_unref (icon);
		gtk_size_group_add_widget (image_group, image);

		gtk_widget_show (image);
		gtk_widget_set_tooltip_text (image, tooltip);

		name = gtk_recent_info_get_display_name (info);
		uri = gtk_recent_info_get_uri (info);

		/* Don't use mnemonics with filenames */
		link = gtk_button_new_with_label (name);
		g_object_set_data_full (G_OBJECT (link),
					"BraseroButtonURI", g_strdup (uri),
					g_free);

		gtk_button_set_relief (GTK_BUTTON (link), GTK_RELIEF_NONE);
		gtk_button_set_image (GTK_BUTTON (link), image);
		gtk_button_set_alignment (GTK_BUTTON (link), 0.0, 0.5);
		gtk_button_set_focus_on_click (GTK_BUTTON (link), FALSE);
		g_signal_connect (link,
				  "clicked",
				  G_CALLBACK (brasero_project_type_chooser_recent_clicked_cb),
				  self);
		gtk_widget_show (link);

		gtk_widget_set_tooltip_text (link, tooltip);
		gtk_box_pack_start (GTK_BOX (self->priv->recent_box), link, FALSE, TRUE, 0);

		g_free (tooltip);

		gtk_size_group_add_widget (group, link);

		/* That's a tedious hack to avoid mnemonics which are hardcoded
		 * when you add an image to a button. BUG? */
		if (!GTK_IS_BIN (link))
			continue;

		child = gtk_bin_get_child (GTK_BIN (link));
		if (!GTK_IS_ALIGNMENT (child))
			continue;

		gtk_alignment_set (GTK_ALIGNMENT (child),
				   0.0,
				   0.5,
				   1.0,
				   1.0);

		child = gtk_bin_get_child (GTK_BIN (child));
		if (!GTK_IS_BOX (child))
			continue;

		children = gtk_container_get_children (GTK_CONTAINER (child));
		for (child_iter = children; child_iter; child_iter = child_iter->next) {
			GtkWidget *widget;

			widget = child_iter->data;
			if (GTK_IS_LABEL (widget)) {
				gtk_label_set_use_underline (GTK_LABEL (widget), FALSE);
				gtk_misc_set_alignment (GTK_MISC (widget), 0.0, 0.5);

				/* Make sure that the name is not too long */
				gtk_box_set_child_packing (GTK_BOX (child),
							   widget,
							   TRUE,
							   TRUE,
							   0,
							   GTK_PACK_START);
				gtk_label_set_ellipsize (GTK_LABEL (widget),
							 PANGO_ELLIPSIZE_END);
				break;
			}
		}
		g_list_free (children);
	}
	g_object_unref (image_group);
	g_object_unref (group);

	if (!g_list_length (list)) {
		GtkWidget *label;
		gchar *string;

		string = g_strdup_printf ("<i>%s</i>", _("No recently used project"));
		label = gtk_label_new (string);
		gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
		g_free (string);

		gtk_widget_show (label);
		gtk_box_pack_start (GTK_BOX (self->priv->recent_box), label, FALSE, FALSE, 0);
	}

	g_list_free (list);

	g_list_foreach (recents, (GFunc) gtk_recent_info_unref, NULL);
	g_list_free (recents);
}