2009-04-30 7 views
2

Ich benutze Glade-3 für meine GUI-Design, aber ich habe dieses Problem weiterhin. Ich sehe in der GTK + -Dokumentation keine Signale zu Ereignissen oder in Glade-3 (3.4.5). Gibt es einen Platz im GTK + Quellcode, um diese Informationen zu finden?Wie finde ich heraus, welche GDK-Ereignisse für ein GTK + -Signal erforderlich sind?

Hinweis: In dieser Frage ist es wichtig zu erkennen, dass Ereignisse und Signale in GTK nicht identisch sind.

Beispiel:

Ich habe eine EventBox, die die folgenden Ereignisse benötigt, um die Signale zu empfangen. Wie kann ich feststellen, welche Ereignisse von einem bestimmten Signal benötigt werden?

Events: GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK | GDK_STRUCTURE_MASK 
Signals: leave_notify_event, enter_notify_event 
+0

Ist meine neue Antwort keine Hilfe? –

Antwort

3

Ok genannten Funktionen, ich glaube, ich weiß, was Sie Ich meine, ich fand diese Tabelle, die den GTK-Signalen und dem GDK-Ereignis entspricht s. Here it is.

+0

Dieser Link ist jetzt defekt, aber [dieses] (http://www.linuxtopia.org/online_books/gui_toolkit_guides/gtk+_gnome_application_development/sec-gdkevent_2.html) funktioniert (vorerst). – Harvey

1

Unter der Annahme, dass ich Ihre Frage interpretiert korrekt sind Sie wollen die Signale, die Sie in der Glade-Datei auf die Funktionen im Quellcode angegeben verbinden. Wie Sie dies tun, hängt davon ab, ob Sie libglade verwenden, um die Dateien generate oder GtkBuilder zu laden, beide sind ähnlich, aber ich gebe nur Beispiele in C, um vollständig zu sein.

libglade Sie verwenden es tun würde, etwa so:

GladeXml *xml = glade_xml_new(filename, NULL, NULL); // Load the file 
glade_xml_signal_autoconnect(xml); // Connect the signals 

GtkBuilder verwenden würde es so aussehen:

GtkBuilder *xml = gtk_builder_new(); 
gtk_builder_add_from_file(xml, filename, NULL); // Load the file 
gtk_builder_connect_signals(xml, NULL); // Connect the signals 

Bei der Verwendung von GtkBuilder der zweite Parameter in Signalfunktion verbinden kann mit einem ersetzt werden Zeiger auf Daten, die dann an die Signalhandler übergeben werden.

In Zukunft würde ich vorschlagen, GtkBuilder zu verwenden, da Libglade auf dem Weg ist, veraltet zu sein.

Verbindungen

Hier sind die Links zu den relevanten Dokumentation über die beiden oben

+0

Das ist eine großartige Antwort, aber es war nicht die Antwort auf meine Frage. Ich werde die Frage aktualisieren, da es offensichtlich unklar ist. – Harvey

1

Sie können die Ereignisse erfassen mit gdk_event_handler_set()

zuerst Ihre eigenen GDK Event-Handler beim Start registrieren:

gdk_event_handler_set(my_gdk_event_handler, NULL, NULL); 

... verwenden sie dann alle nützlichen Informationen auszudrucken und nicht vergessen um die Veranstaltung an GTK + durch gtk_main_do_event() wie hier zu übergeben:

void my_gdk_event_handler(GdkEvent *event, gpointer data) 
{ 
    printf("Received GdkEvent of type %d", event->type); 

    gtk_main_do_event(event); // Pass event to GTK+ 
} 
+0

Ich war auf der Suche nach etwas wie die Tabelle in DoR Antwort gegeben (die jetzt einen defekten Link enthält). Wenn ich jedoch richtig verstanden habe, geht es in Ihrer Antwort darum, selbst herauszufinden, welche Ereignisse von einem gegebenen Signal ausgelöst werden, indem Sie einen Debug-Event-Handler einfügen. – Harvey

+0

@Harvey: In der Tat ist es. – gatopeich