Problem bei ertellen eines Gnome Panel Applets (GTK)



  • Hi

    ich habe ein Problem mit dem erstellen eines Eigenen Menü Eintrags in einem selbst geschriebenen Applets.

    Den Punkt "about" habe ich zwar schon, wenn ich das Kontext Menü öffne, aber es passiert nichts beim drauf klicken.

    Ich weiß aber auch nicht genau, welche Parameter ich bei der Funktion "panel_applet_setup_menu" (Zeile 144) eintragen muss.

    Hier einfach mal mein Quelltext:

    #include <stdlib.h>
    #include <string.h>
    #include <time.h>
    
    #include <panel-applet.h>
    #include <gtk/gtk.h>
    #include <gtk/gtklabel.h>
    #include <libbonoboui.h>
    
    struct tm *tmnow;
    
    void display_about_dialog(BonoboUIComponent *uic, gpointer data);
    
    GtkWidget *Label;
    
    static const char Context_menu_xml [] =
    "<popup name=\"button3\">\n"
    "   <menuitem name=\"About Item\" "
    "             verb=\"About\" "
    "           _label=\"_About...\"\n"
    "          pixtype=\"stock\" "
    "          pixname=\"gnome-stock-about\"/>\n"
    "</popup>\n";
    
    static const BonoboUIVerb menu_verbs [] = {
                 BONOBO_UI_VERB ("about", display_about_dialog),
                 BONOBO_UI_VERB_END
                 };
    
    int stunde, minute, sekunde, monat_tag;
    int monat, tag;
    int i;
    
    time_t tnow;
    
    char a_tag[7][3]={{"Mo"},{"Di"},{"Mi"},{"Do"},{"Fr"},{"Sa"},{"So"}};
    char a_monat[12][4]={{"Jan"},{"Feb"},{"Mar"},{"Apr"},{"Mai"},{"Jun"},{"Jul"},{"Aug"},{"Sep"},{"Okt"},{"Nov"},{"Dez"}};
    char a_stunden[12][7]={{"Eins"},{"Zwei"},{"Drei"},{"Vier"},{"Fuenf"},{"Sechs"},{"Sieben"},{"Acht"},{"Neun"},{"Zehn"},{"Elf"},{"Zwoelf"}};
    char a_minuten[8][15]={{" "},{"Kurz nach "},{"Viertel nach "},{"Kurz vor halb "},{"Halb "},{"Kurz nach halb "},{"Viertel vor "},{"Kurz vor "}};
    /*
    void MessageBox(char *Text) 
    {
    	GtkWidget *dialog;
    	dialog = gtk_message_dialog_new (NULL,
    	GTK_DIALOG_MODAL,
    	GTK_MESSAGE_ERROR,
    	GTK_BUTTONS_CLOSE,
    	Text);
    	gtk_dialog_run (GTK_DIALOG (dialog));
    	gtk_widget_destroy(dialog);
    }
    */
    gboolean Zeit(gpointer Data)
    {
    	char Buffer[265];
    	int set=0;
    
    	time(&tnow);
            tmnow = localtime(&tnow);
    
    	stunde = tmnow->tm_hour-1;
    	minute = tmnow->tm_min;
    	sekunde = tmnow->tm_sec;
    
    	monat_tag = tmnow->tm_mday;
    	monat = tmnow->tm_mon;
    	tag = tmnow->tm_wday-1; 
    
    	if(stunde > 11)
    	stunde-=12;
    
    	if(minute > 5 && minute < 12) 
    	set = 1;
    	else if(minute > 12 && minute < 18)
    	set = 2;
    	else if(minute > 18 && minute < 25)
    	set = 3;
    	else if(minute > 25 && minute < 35)
    	{ set = 4; stunde++;}
    	else if(minute > 35 && minute < 42)
    	{ set = 5; stunde++;}
    	else if(minute > 42 && minute < 48)
    	{ set = 6; stunde++;}
    	else if(minute > 48 && minute < 55)
    	{ set = 7; stunde++;}
    
    	if(minute > 55 && minute < 61)
    	{ stunde++; snprintf(Buffer, 255, "%s %s %02d, %s Uhr", a_tag[tag], a_monat[monat], monat_tag, a_stunden[stunde]);}
    	if(minute >0 && minute < 5)
    	snprintf(Buffer, 255, "%s %s %02d, %s Uhr", a_tag[tag], a_monat[monat], monat_tag, a_stunden[stunde]);
    
    	snprintf(Buffer, 255, "%s %s %02d, %s%s", a_tag[tag], a_monat[monat], monat_tag, a_minuten[set], a_stunden[stunde]);
    	gtk_label_set_text(GTK_LABEL(Label),Buffer);
    	return TRUE;
    }
    
    static gboolean on_button_press(GtkWidget *Applet, GdkEventButton *event, gpointer data)
    {
    	static int window_shown;
    	static GtkWidget *window, *box, *label;
    
    	if(event->button!=1)
    		return FALSE;
    
    	if(!window_shown)
    	{
    		window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    		box = GTK_BOX(gtk_vbox_new (TRUE, 12));
    		gtk_container_add (GTK_CONTAINER (window), box);
    
    		label = gtk_label_new("Hello World, \n\rthis is my firs right Gnome Applet");
    		gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 12);
    
    		gtk_widget_show_all(window);
    	}
    	else
    	{
    		gtk_widget_hide(GTK_WIDGET (window));
    	}
    
    	window_shown=!window_shown;
    	return TRUE; 
    }
    
    void display_about_dialog(BonoboUIComponent *uic, gpointer data)
    {
    	static GtkWidget *window, *box, *label;
    
    	window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	box = GTK_BOX(gtk_vbox_new (TRUE, 12));
    	gtk_container_add (GTK_CONTAINER (window), box);
    	label = gtk_label_new("Hello World, \n\rthis is my firs right Gnome Applet");
    	gtk_box_pack_start(GTK_BOX(box), label, TRUE, TRUE, 12);
    
    	gtk_widget_show_all(window);
    }
    
    static int Init_Applet(PanelApplet *Applet, const gchar *IId, gpointer data)
    {
    	if (strcmp(IId,"OAFIID:GNOME_MyClock")!=0) return FALSE;
    	printf("test");
    
    	panel_applet_setup_menu (Applet, Context_menu_xml, menu_verbs, Applet);
    
    	Label=gtk_label_new("My Applet");
    	gtk_container_add(GTK_CONTAINER(Applet),Label);
    	gtk_widget_show_all(GTK_WIDGET(Applet));
    	g_timeout_add(5000,Zeit,Applet);
    	g_signal_connect (G_OBJECT (Applet), "button_press_event", G_CALLBACK (on_button_press), Label);
    	return TRUE;
    }
    
    PANEL_APPLET_BONOBO_FACTORY("OAFIID:GNOME_MyClock_Factory",
    				PANEL_TYPE_APPLET,
    				"Clock Applet",
    				"0", Init_Applet, NULL);
    

    Ich habe schon im I-Net nach Tutorials gesucht, aber nur die Seite http://www.gnome.org/projects/ORBit2/appletstutorial.html und http://www.johannes-bauer.com/gnome2/exampleapplet.php gefunden. Wo die Menueinträge leider nicht sonderlich gut beschrieben sind.

    Hoffe, dass sich hier jmd. findet, der sich mit diesem Thema auskennt.

    MfG Stormracer



  • *PUSH*

    ist den hier kein Gnome Wissender, der mir bei meinem Problem helfen kann?


Anmelden zum Antworten