Publi

  • Cómo insertar un elemento a la lista de documentos recientes en C

    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.… Leer artículo completo

  • Cómo crear ventanas semitransparentes en Gtk+-3.0 con GtkMM

    Screenshot 17-02-2016-070256
    Es algo que está muy chulo, y puede hacer que la experiencia de usuario de nuestras aplicaciones sea mucho mejor, además de dar un punto friki si queremos intercalar información de fondo, o queremos hacer una animación, una ventana splash chula mientras arranca nuestro programa, etc.

    Lo que tenemos que hacer es que nuestra ventana se pinte en un contexto RGBA (rojo, verde, azul, alpha), donde alpha es nuestro valor de opacidad.… Leer artículo completo

  • Conocer el tipo MIME de un archivo gracias a GIO en lenguaje C

    3210986710_d3cbbdac55_b

    La biblioteca GIO nos proporciona una capa más sobre el manejo de archivos. Nos aíslan un poco de las llamadas al sistema operativo para hacer muchas operaciones sobre archivos facilitando el uso de la biblioteca en aplicaciones multiplataforma. Así como dándonos algunas funciones interesantes que ya vienen hechas.

    La gran ventaja de GIO frente al acceso normal a un archivo es que hace transparente al programador el acceso a sistemas de archivos compartidos (en Windows, Mac o Linux) sin tener que gastar mucho tiempo en todo eso.… Leer artículo completo

  • ListView con búsqueda rápida en GTKMM

    Es muy útil cuando listamos elementos en una aplicación proporcionar al usuario una opción de búsqueda rápida. Hacemos la aplicación más amigable con poco esfuerzo extra por nuestra parte.

    El ejemplo que traigo es muy parecido al ejemplo de ListStore, aunque añado la posibilidad de filtrar la lista con el texto introducido en un widget Entry.

    La clave está en crear una columna más en el modelo de datos (c_visible) que determinará si el elemento es visible o no en la lista, y en lugar de hacer que nuestro TreeView siga el modelo por defecto, haremos que siga un modelo filtrado.… Leer artículo completo

  • Copiar en el portapapeles un texto desde la línea de comandos [C]

    En ocasiones, cuando estamos haciendo shell scripts, surge la necesidad de copiar algo al portapapeles para que el usuario lo utilice, en principio, podemos utilizar xclip, aunque ese sería el portapapeles de X11, ese con el que se copia seleccionando con el ratón, y se pega con el botón del centro (o izquierdo+derecho si emulamos el botón central).
    Pero para dar algo de usabilidad (Control+V), y no queremos obligar al usuario a configurar sus gestores de portapapeles, esos grandes desconocidos que suelen estar ahí y nunca hacemos caso…

    Podemos hacer este pequeño programa en C, que utilizará Gtk para acceder al portapapeles, y escribir en él.… Leer artículo completo

  • Enviar notificaciones desde nuestros scripts con notify-send

    notificacionEs un tema que se ha tratado varias veces en otros blogs y tutoriales a lo largo de Internet, y es que algo que tienen en común muchos entornos de escritorio de GNU/Linux en la actualidad es un demonio de notificaciones, éste recibe mensajes de las aplicaciones que quieran escribir una notificación (valga la redundancia), y los muestra en pantalla.
    Lo bueno que tiene hacerlo así es que cualquier aplicación que quiera escribir algo, sólo tiene que enviar el texto y sólo tenemos un dibujante, eso reduce bastante el coste en memoria (si tenemos cuatro aplicaciones y las cuatro se dedican a lo mismo, estamos desperdiciando memoria), por otra parte, unifica el estilo (en el mismo ejemplo de antes, tendríamos cuatro formas de dibujar distintas y a lo mejor, cada una con un estilo diferente) y por otra parte, dada la filosofía que siguen estos proyectos, nos proporcionan herramientas para enviar notificaciones fácilmente.… Leer artículo completo

  • Representar imágenes a pantalla completa con GTK+ en C (y romperles la pantalla del portátil)

    crackedscreen1440x900

    Aunque muchos de mis proyectos con GTK+ son en C++, cuando es algo pequeño, es más corto hacerlo en C (aunque una vez que te acostumbras a los objetos, es poco intuitivo).

    Lo que vamos a hacer es crear una ventana, introducir una imagen dentro redimensionada para ocupar la pantalla y poner la ventana a pantalla completa (ojo, no en todos los window managers funciona, pero en casi todos). Al final, lo que conseguimos es poner de fondo la imagen que ilustra el post en cualquier pantalla de portátil para conseguir dar un susto al dueño.… Leer artículo completo

  • Creando un navegador web basado en gtkwebkit y gtkmm [Actualizado: 15/11/2010]

    webkitAhora, vamos a ir un poco más allá, aunque los ejemplos están hechos por mí, en parte me he basado un poco en la documentación de gtkmm (recomendable, llena de ejemplos e información interesante de cada widget), aunque ahora voy a utilizar algo de investigación propia.

    El método a seguir será parecido a veces anteriores, un archivo principal, y una clase (con archivos cpp y h). Al compilar el proyecto, ha ocupado entre 45Kb y 60Kb, por lo que para ser un navegador no ocupa demasiado.… Leer artículo completo

  • Un método para gobernarlos a todos. Identificando quién me llama. [ gtkmm ]

    culpablesUna de las características que primero quise probar con Gtk era la posibilidad de crear varios botones, que en su signal_clicked llamaran todos al mismo método, y sea éste el que identifique de dónde viene la llamada. Por ejemplo, en Delphi, siempre que se genera un evento onClick se envía la información del Sender al evento para este mismo propósito.

    En el siguiente ejemplo, crearemos un objeto de la clase Sender (que será nuestra ventana principal)

    [ sendermain.cpp ]

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    #include <gtkmm.h>
    #include "sender.h"

    int main(int argc, char *argv[])
    {
      Main entorno (argc, argv);

      // Creamos la ventana
      Sender swin;

      // Ejecutamos
      entorno.
    Leer artículo completo