PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : antwort eines nicht modales Dialog GTK2+



MBoerner
06-02-2014, 08:15
Hallo!
ich habe ein non modales Dialog mit 2 Buttons: OK und abbrechen.
Der Benutzer muss das Dialog nicht darauf klicken, aber wenn er es schließt, möchte ich wissen mit welchem Button er das geschlossen hat.
Ich mache es so:


dialog = gtk_message_dialog_new(parent, GTK_DIALOG_DESTROY_WITH_PARENT, messageType, GTK_BUTTONS_OK_CANCEL, "%s", meldung);
g_signal_connect_swapped(nm_local.info_dialog, "response", G_CALLBACK (cb_on_close_non_modal), dialog);





static gboolean cb_on_close_non_modal(GtkWidget *widget, gpointer data)
{


// hier unterscheiden, was für ein Button gedrückt wurde
switch (response)
{
case GTK_BUTTON_OK: do this
break;

case GTK_BUTTON_CANCEL: do that
break;

}

return FALSE;
}


In der Funktion cb_on_close_non_modal möchte ich gern unterscheiden, ob der Benutzer "OK" oder "Cancel" gedrückt hat.

Ich kann die Funktion response = gtk_dialog_run (GTK_DIALOG (dialog));
NICHT benutzen, weil ich ein non modales Dialog möchte.

Kann mir jemand sagen, woher ich die Antwort des Benutzers bekommen kann?

Danke im Voraus für Eure Hilfe

sommerfee
06-02-2014, 14:08
static gboolean cb_on_close_non_modal(GtkWidget *widget, gpointer data)
Die Funktionsdeklaration ist nicht korrekt. "response" erwartet eine Funktion des Types

void user_function( GtkDialog *dialog, gint arg1, gpointer user_data);
In arg1 befindet sich der gesuchte Rückgabewert.

MBoerner
06-02-2014, 14:44
Danke schön!
ich habe inzwischen die Funktionsdeklaration wie folgt geändert:


static gboolean cb_on_close_warning_non_modal(GtkWidget *widget, GtkResponseType response , gpointer data)


Das funktioniert gut!


Woher weiß ich eigentlich, welche Funktionsdeklaration ich nehmen kann. Es ändert sich ständig, je nach signal, aber ich habe bisher keine Auflistung gefunden, welches Signal welche Argumente mitliefern.

Vielen Dank für die Hilfe

sommerfee
06-02-2014, 19:30
aber ich habe bisher keine Auflistung gefunden, welches Signal welche Argumente mitliefern.
Die zu den Signalen passende Funktionsdeklaration findet sich in der Dokumentation. Zum Beispiel:

https://developer.gnome.org/gtk2/stable/GtkDialog.html

Schaut man dort unter "Signal Details", findet man dort (ganz unten) den zu "response" passenden Funktionsprototypen.

MBoerner
07-02-2014, 06:32
Ja das stimmt, aber daraus schaffe ich es nie abzuleiten, in welcher Reihenfolge die Parameter anzugeben sind.
Zum Beispiel in meinem Fall:


static gboolean cb_on_close_warning_non_modal(GtkWidget *widget, GtkResponseType response , gpointer data)

da gibt es die Parameter widget, response und data. Widget ist klar und data auch.
Aber in der Beschreibung steht, dass es beide folgende signals gibt


"close" : Action
"response" : Run Last

aber nicht, welche Parameter man da übergeben bekommt, wenn man eine callback Funktion schreibt, jedenfalls finde ich das nicht. Und deswegen muss ich immer nach Beispielen suchen.
Kannst du mir sagen, wie du das machst?

Danke schön!

MBoerner
07-02-2014, 06:35
wie du sagstest ganz unten, danke schön!!
Ich hatte das völlig übersehen.

Vielen Dank und schönes Wochenende!

MBoerner