Pages : 1
#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