Quantcast
Channel: Planeta Código
Viewing all articles
Browse latest Browse all 2721

Poesía Binaria: Cómo insertar un elemento a la lista de documentos recientes en C

$
0
0

photo-1448523183439-d2ac62aca997_r

Hoy toca un código muy rápido para nuestras aplicaciones con Gtk+ (yo he usado la versión 3 para este ejemplo). Lo que haremos será incluir un archivo (el que nosotros queramos) en la lista de “Usados recientemente” de forma que cuando vayamos a algún diálogo de apertura de archivo veamos añadido dicho documento.
Esto puede ser muy útil cuando nuestra aplicación salve o cargue archivos y queramos que el usuario pueda utilizarlos rápidamente desde otra aplicación.
Screenshot 12-02-2016-030229
Seré breve, lo único que necesitamos es obtener acceso al recent manager, crear un acceso al recurso y añadírselo al recent manager.

Luego, debemos hacer que Gtk+ realice algunas llamadas internas durante un periodo ínfimo de tiempo y listo.

Versión super-reducida

Esta versión es sólo una prueba de concepto, para ver que todo funciona. El programa no tiene entorno gráfico alguno, sólo parece que se queda colgado, y de hecho se limita a esperar llamadas a sistema, y dichas llamadas no llegan nunca.
Si has trabajado con Gtk anteriormente, sabrás integrar esto en tus programas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <stdio.h>
#include <gtk-3.0/gtk/gtk.h>

int main(int argc,char*argv[])
{
  gtk_init(&argc,&argv);
  g_set_application_name("RecentFilador");
  GtkRecentManager *grm = gtk_recent_manager_get_default();
  GtkRecentData *data = g_slice_new(GtkRecentData);

  static gchar* groups[]={
    NULL
  };
  data->display_name=NULL;
  data->description = NULL;
  data->mime_type="image/jpeg";
  data->app_name =(gchar*) g_get_application_name();
  data->app_exec ="gimp %f";
  data->is_private = FALSE;
  data->groups = groups;
  gchar *uri = g_filename_to_uri("/home/gaspy/envio_netbook.jpg", NULL, NULL);
  gtk_recent_manager_add_full(grm, uri, data);

  gtk_main();
  return0;
}

Versión independiente

Eso sí, el programa, ¡se queda colgado! Eso es mucho, tenemos varias soluciones, la primera es, en lugar de llamar a gtk_main(), llamar a gtk_main_iteration() varias veces. Pero es un poco chapuza, incluso metiéndolo en un bucle tipo:

1
2
while(gtk_events_pending())
  gtk_main_iteration();

Pero, es más, esto no nos garantiza que hagamos todas las iteraciones necesarias, ya que puede que algún mensaje no entre inmediatamente. Entonces, para el ejemplo, vamos a hacer que se llame a una función callback automáticamente cuando Gtk+ no tenga nada que hacer (usando g_idle_add(funcion, NULL)), y dicha función, creará el archivo reciente y se saldrá del programa (con gtk_main_quit(), finalizando correctamente el paso de mensajes Gtk+). Así nos dará una mejor sensación.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <gtk-3.0/gtk/gtk.h>

gboolean addrf(gpointer options)
{
  GtkRecentManager *grm = gtk_recent_manager_get_default();
  GtkRecentData *data = g_slice_new(GtkRecentData);
  static gchar* groups[]={
    NULL
  };
  data->display_name=NULL;
  data->description = NULL;
  data->mime_type="image/jpeg";
  data->app_name =(gchar*) g_get_application_name();
  data->app_exec ="gimp %f";
  data->is_private = FALSE;
  data->groups = groups;
  gchar *uri = g_filename_to_uri("/home/gaspy/envio_netbook.jpg", NULL, NULL);
  gtk_recent_manager_add_full(grm, uri, data);

  gtk_main_quit();
}

int main(int argc,char*argv[])
{
  gtk_init(&argc,&argv);
  g_set_application_name("RecentFilador");
  g_idle_add(addrf, NULL);

  gtk_main();
  return0;
}

Compilar

Para compilar, yo he hecho lo siguiente (en Linux):

$ gcc -o recents recents3.c $(pkg-config –libs –cflags gtk+-3.0)

He utilizado pkg-config para obtener todas las bibliotecas necesarias por Gtk+ y todas las rutas a los archivos de cabecera.

Compatibilidad

Aunque no lo he probado, no he utilizado nada 100% específico de Linux, por lo que debería funcionar sin problemas en Windows o en Mac.

Algo más completo

Pasáos por mi GitHub para ver un programa que sirve para hacer esto mismo. Listo para ser compilado. Sólo tenéis que mirar las instrucciones y compilar :)

Foto principal: Brady Bellini

The post Cómo insertar un elemento a la lista de documentos recientes en C appeared first on Poesía Binaria.


Viewing all articles
Browse latest Browse all 2721

Trending Articles


FORECLOSURE OF REAL ESTATE MORTGAGE


Girasoles para colorear


mayabang Quotes, Torpe Quotes, tanga Quotes


Tagalog Quotes About Crush – Tagalog Love Quotes


OFW quotes : Pinoy Tagalog Quotes


Long Distance Relationship Tagalog Love Quotes


Tropa Quotes


Best Crush Tagalog Quotes And Sayings 2017


“BAHAY KUBO HUGOT”


Vimeo 10.7.0 by Vimeo.com, Inc.


Pokemon para colorear


Sapos para colorear


Tagalog Love Quotes – Nagmamahal


Break up Quotes Tagalog Love Quote – Broken Hearted Quotes Tagalog


Patama Quotes : Tagalog Inspirational Quotes


Tagalog Quotes To Move on and More Love Love Love Quotes


5 Tagalog Relationship Rules


Long distances monthsary message tagalog


Re:Mutton Pies (lleechef)


Vimeo 10.7.1 by Vimeo.com, Inc.