Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 16/10/2015, à 14:41

Skippythekangoo

Impossible d'installer un greffon maison dans lxpanel

Salutations à toutes et à tous.
Je m'essais à créer un grefon pour lxpanel en suivant ce tuto.

il y ai dit qu'une fois le plugin compillé avec

gcc -Wall `pkg-config --cflags lxpanel gtk+-2.0` -shared -fPIC testplugin.c -o test.so `pkg-config --libs lxpanel gtk+-2.0`
plugin.h
// Interne à la source du greffon, pas utilisé par la variable « priv »
static int iInstanceCount = 0;

/* L'identifiant du greffon -- une instance de cette structure est ce qui va être assigné à « priv » */
typedef struct 
{
  gint iMyId;
} TestPlugin; 

static int 
test_constructor(Plugin * p, char ** fp)
{
 /* fp est un pointeur vers le flux du fichier de configuration.
      Comme on ne l'utilise pas, on s'assure qu'il ne produit
      pas d'erreur à la compilation. */
 (void)fp;

 // Allocation de notre instance de structure privée
 TestPlugin *pTest = g_new0(TestPlugin, 1);

 // Le mettre où il doit être
 p->priv = pTest;

 // Mise à jour du compteur d'instances
 pTest->iMyId = ++iInstanceCount;

 // Création d'une étiquette à partir de l'identifiant
 char cIdBuf[10] = {'\0'};

 sprintf(cIdBuf, "TP-%d", pTest->iMyId);

 GtkWidget *pLabel = gtk_label_new(cIdBuf);

 // Besoin de créer un widget pour l'afficher
 p->pwid = gtk_event_box_new();

 // Réglage de la largeur de la bordure
 gtk_container_set_border_width(GTK_CONTAINER(p->pwid), 1);

 // Ajout de l'étiquette au conteneur
 gtk_container_add(GTK_CONTAINER(p->pwid), GTK_WIDGET(pLabel));

 // Réglage de la taille voulue
 gtk_widget_set_size_request(p->pwid, 40, 25);

 // Le widget n'a pas de fenêtre…
 gtk_widget_set_has_window(p->pwid, FALSE);

 // Affichage du widget
 gtk_widget_show_all(p->pwid);

 // Succès !!!
 return 1;
}

static void 
test_destructor(Plugin * p)
{
  // Décrémentation du compteur d'instances locales
  --iInstanceCount;

  // Recherche de l'instance de structure privée
  TestPlugin *pTest = (TestPlugin *)p->priv;

  // La libérer -- pas besoin de s'inquiéter de libérer « pwid », le panneau s'en charge
  g_free(pTest);
}

static void test_configure(Plugin * p, GtkWindow * parent)
{
  // Ne fait rien ici. Il faut donc s'assurer qu'aucun paramètre
  // n'émet d'avertissement lors de la compilation.
  (void)p;
  (void)parent;
}

static void test_save_configuration(Plugin * p, FILE * fp)
{
  // Ne fait rien ici. Il faut donc s'assurer qu'aucun paramètre
  // n'émet d'avertissement lors de la compilation.
  (void)p;
  (void)fp;
}

/* Description du greffon */
PluginClass test_plugin_class = {

   // C'est un #define se préoccupant des variables de taille et de version
   PLUGINCLASS_VERSIONING,

   // Type de ce greffon
   type : "test",
   name : N_("TestPlugin"),
   version: "1.0",
   description : N_("Lance un greffon d'essai."),

   // On peut avoir plusieurs instances lancées en même temps
   one_per_system : FALSE,

   // On ne peut pas étendre ce greffon
   expand_available : FALSE,

   // Assignation des fonctions aux pointeurs fournis
   constructor : test_constructor,
   destructor  : test_destructor,
   config : test_configure,
   save : test_save_configuration
};
testplugin.c
#include <gtk/gtk.h>
#include <gdk/gdk.h>
#include <glib/gi18n.h>

#include <lxpanel/plugin.h>

#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

je dois mettre

test.so

dans

/usr/lib/lxpanel/plugins

, chemin qui n'existe pas.

en fouillant un peu, j'ai trouvé les plugins ici

/usr/lib/x86_64-linux-gnu/lxpanel/plugins/

.

J'y ai copié le plugin de test, mais en recherchant avec lxpanel (clic droit et tout le toutim), rien n'y fait.

Ai-je fait une erreur (mes cours de prog remonte a trés trés, mais vraiment trés loin).

Merci d'avance.

Cordialement,

Skippy the Kangoo.


°¿° Skippy the Kangoo °¿°

Quiconque a cette louange d'être homme sans boire de vin, si il en buvait serait un ange.
Chansons Plus Bifluorées

Hors ligne

#2 Le 16/10/2015, à 14:45

Skippythekangoo

Re : Impossible d'installer un greffon maison dans lxpanel

Je continue,

J'ai mis toutes les lignes de code dans

testplugin.c

, mais au moment de la compilation, j'ai une erreur

 gcc -Wall `pkg-config --cflags lxpanel` -shared -fPIC testplugin.c -o test.so `pkg-config --libs lxpanel`
testplugin.c:1:21: fatal error: gtk/gtk.h: Aucun fichier ou dossier de ce type
 #include <gtk/gtk.h>
                     ^
compilation terminated.

J'ai bien regarder

ls /usr/include/gtk-2.0/gtk/gtk.h 
/usr/include/gtk-2.0/gtk/gtk.h

existe.

comprend pas...


°¿° Skippy the Kangoo °¿°

Quiconque a cette louange d'être homme sans boire de vin, si il en buvait serait un ange.
Chansons Plus Bifluorées

Hors ligne

#3 Le 16/10/2015, à 15:21

Skippythekangoo

Re : Impossible d'installer un greffon maison dans lxpanel

Encore désolé,
mauvaise ligne de compilation.

Nouvelle ligne de compilation

gcc -Wall `pkg-config --cflags lxpanel gtk+-2.0` -shared -fPIC testplugin.c -o test.so `pkg-config --libs lxpanel gtk+-2.0`

Et nouvelles erreurs

 gcc -Wall `pkg-config --cflags lxpanel gtk+-2.0` -shared -fPIC testplugin.c -o test.so `pkg-config --libs lxpanel gtk+-2.0`
testplugin.c:21:18: error: unknown type name ‘Plugin’
 test_constructor(Plugin * p, char ** fp)
                  ^
testplugin.c:67:17: error: unknown type name ‘Plugin’
 test_destructor(Plugin * p)
                 ^
testplugin.c:79:28: error: unknown type name ‘Plugin’
 static void test_configure(Plugin * p, GtkWindow * parent)
                            ^
testplugin.c:87:37: error: unknown type name ‘Plugin’
 static void test_save_configuration(Plugin * p, FILE * fp)
                                     ^
testplugin.c:96:1: error: unknown type name ‘PluginClass’
 PluginClass test_plugin_class = {
 ^
testplugin.c:99:4: error: ‘PLUGINCLASS_VERSIONING’ undeclared here (not in a function)
    PLUGINCLASS_VERSIONING,
    ^
testplugin.c:102:4: error: field name not in record or union initializer
    type : "test",
    ^
testplugin.c:102:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:102:4: warning: excess elements in scalar initializer
testplugin.c:102:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:103:4: error: field name not in record or union initializer
    name : N_("TestPlugin"),
    ^
testplugin.c:103:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:103:4: warning: excess elements in scalar initializer
testplugin.c:103:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:104:4: error: field name not in record or union initializer
    version: "1.0",
    ^
testplugin.c:104:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:104:4: warning: excess elements in scalar initializer
testplugin.c:104:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:105:4: error: field name not in record or union initializer
    description : N_("Lance un greffon d'essai."),
    ^
testplugin.c:105:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:105:4: warning: excess elements in scalar initializer
testplugin.c:105:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:108:4: error: field name not in record or union initializer
    one_per_system : FALSE,
    ^
testplugin.c:108:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:108:4: warning: excess elements in scalar initializer
testplugin.c:108:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:111:4: error: field name not in record or union initializer
    expand_available : FALSE,
    ^
testplugin.c:111:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:111:4: warning: excess elements in scalar initializer
testplugin.c:111:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:114:4: error: field name not in record or union initializer
    constructor : test_constructor,
    ^
testplugin.c:114:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:114:18: error: ‘test_constructor’ undeclared here (not in a function)
    constructor : test_constructor,
                  ^
testplugin.c:114:4: warning: excess elements in scalar initializer
    constructor : test_constructor,
    ^
testplugin.c:114:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:115:4: error: field name not in record or union initializer
    destructor  : test_destructor,
    ^
testplugin.c:115:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:115:18: error: ‘test_destructor’ undeclared here (not in a function)
    destructor  : test_destructor,
                  ^
testplugin.c:115:4: warning: excess elements in scalar initializer
    destructor  : test_destructor,
    ^
testplugin.c:115:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:116:4: error: field name not in record or union initializer
    config : test_configure,
    ^
testplugin.c:116:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:116:13: error: ‘test_configure’ undeclared here (not in a function)
    config : test_configure,
             ^
testplugin.c:116:4: warning: excess elements in scalar initializer
    config : test_configure,
    ^
testplugin.c:116:4: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:117:4: error: field name not in record or union initializer
    save : test_save_configuration
    ^
testplugin.c:117:4: error: (near initialization for ‘test_plugin_class’)
testplugin.c:117:11: error: ‘test_save_configuration’ undeclared here (not in a function)
    save : test_save_configuration
           ^
testplugin.c:118:1: warning: excess elements in scalar initializer
 };
 ^
testplugin.c:118:1: warning: (near initialization for ‘test_plugin_class’)
testplugin.c:12:12: warning: ‘iInstanceCount’ defined but not used [-Wunused-variable]
 static int iInstanceCount = 0;
            ^

°¿° Skippy the Kangoo °¿°

Quiconque a cette louange d'être homme sans boire de vin, si il en buvait serait un ange.
Chansons Plus Bifluorées

Hors ligne