Portál AbcLinuxu, 9. května 2025 00:15

Dotaz: Jak na gnome applet

Jardík avatar 26.4.2009 13:01 Jardík | skóre: 40 | blog: jarda_bloguje
Jak na gnome applet
Přečteno: 474×
Odpovědět | Admin

Snažím se napsat "visťácké" menu pro gnome. Zatím pracuji na tlačítku, ale nedaří se mi ho zobrazit v panelu. Když kód zkompiluju jako normální aplikaci, tak se obrázek tlačítka zobrazí, když ho zkompiluju jako applet, tak se na panel přidá akorát tečka - jediný pixel, představující můj applet. Neví někdo, co je ještě třeba udělat?

#include <string.h>
#include <gtk/gtk.h>
#include <panel-applet.h>

#define START_PREFIX "/home/jarda/.themes/WE Ergo/gtk-2.0/PanelMenu/WE Ergo/"

#define START_NORMAL START_PREFIX "start-here.png"
#define START_HOVER  START_PREFIX "start-here-glow.png"
#define START_PRESS  START_PREFIX "start-here-depressed.png"

class PanelButton
{
	GtkWidget* eventBox;
	GtkWidget* image;
	
	bool hover;
	bool pressed;
public:
	PanelButton()
	{
		eventBox = gtk_event_box_new();
		
		image = gtk_image_new_from_file(START_NORMAL);
		
		gtk_container_add(GTK_CONTAINER(eventBox), image);
	}
	
	~PanelButton()
	{
		
	}
	
	GtkWidget* mainWidget() const { return eventBox; }
};


static void applet_destroy(GtkWidget *widget, gpointer *ptr)
{
	PanelButton *button = (PanelButton*)ptr;
	delete button;
}

// #define __TEST

#ifndef __TEST

static gboolean init_applet(PanelApplet *applet, const gchar *iid, gpointer data)
{
	if (strcmp(iid, "OAFIID:Example") != 0)
	{
		return 0;
	}
	
	PanelButton* button = new PanelButton();
	gtk_container_add(GTK_CONTAINER(applet), button->mainWidget());
	g_signal_connect(G_OBJECT(applet), "destroy", G_CALLBACK(applet_destroy), button);
	
	gtk_widget_show_all(GTK_WIDGET(applet));
	
	return 1;
}

PANEL_APPLET_BONOBO_FACTORY("OAFIID:WEErgoMenu", PANEL_TYPE_APPLET, "WE Ergo Menu", "0", init_applet, NULL)

#else

int main(int argc, char **argv)
{
	gtk_init(&argc, &argv);
	GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
	PanelButton* button = new PanelButton();
	gtk_container_add(GTK_CONTAINER(window), button->mainWidget());
	g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(applet_destroy), button);
	gtk_widget_show_all(GTK_WIDGET(window));
	gtk_main();
	return 0;
}

#endif

Věřím v jednoho Boha.
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

26.4.2009 16:34 depka | skóre: 20 | blog: eterity
Rozbalit Rozbalit vše Re: Jak na gnome applet
Odpovědět | | Sbalit | Link | Blokovat | Admin

resize?

Jardík avatar 26.4.2009 22:26 Jardík | skóre: 40 | blog: jarda_bloguje
Rozbalit Rozbalit vše Re: Jak na gnome applet
resize? Vždyť GTK si velikost počítá samo z gtk_widget_size_request, to okno se např. samo zvětší na minimální velikost podle obrázku. A gtk_widget_set_size_request jsem zkoušel jak na ten PanelApplet, na GtkEventBox i GtkImage a stejně je to tam jako tečka ...
Věřím v jednoho Boha.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.