|
Packit |
1470ea |
|
|
Packit |
1470ea |
<page xmlns="http://projectmallard.org/1.0/" xmlns:its="http://www.w3.org/2005/11/its" xmlns:xi="http://www.w3.org/2001/XInclude" type="guide" style="task" id="messagedialog.c" xml:lang="de">
|
|
Packit |
1470ea |
<info>
|
|
Packit |
1470ea |
<title type="text">MessageDialog (C)</title>
|
|
Packit |
1470ea |
<link type="guide" xref="c#windows"/>
|
|
Packit |
1470ea |
<link type="seealso" xref="dialog.c"/>
|
|
Packit |
1470ea |
<revision version="0.2" date="2012-08-07" status="draft"/>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<credit type="author copyright">
|
|
Packit |
1470ea |
<name>Monica Kochofar</name>
|
|
Packit |
1470ea |
<email its:translate="no">monicakochofar@gmail.com</email>
|
|
Packit |
1470ea |
<years>2012</years>
|
|
Packit |
1470ea |
</credit>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<desc>A message window</desc>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<mal:credit xmlns:mal="http://projectmallard.org/1.0/" type="translator copyright">
|
|
Packit |
1470ea |
<mal:name>Mario Blättermann</mal:name>
|
|
Packit |
1470ea |
<mal:email>mario.blaettermann@gmail.com</mal:email>
|
|
Packit |
1470ea |
<mal:years>2011, 2013</mal:years>
|
|
Packit |
1470ea |
</mal:credit>
|
|
Packit |
1470ea |
</info>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<title>MessageDialog</title>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<media type="image" mime="image/png" src="media/messagedialog.png"/>
|
|
Packit |
1470ea |
A modal message dialog which can cause the world to explode.
|
|
Packit |
1470ea |
<note>
|
|
Packit |
1470ea |
To test out the application once it has started running, you can click on the "Message Dialog" tab that appears in the top menubar of the screen.
|
|
Packit |
1470ea |
</note>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
#include <gtk/gtk.h>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Callback function in which reacts to the "response" signal from the user in
|
|
Packit |
1470ea |
* the message dialog window.
|
|
Packit |
1470ea |
* This function is used to interact with the user in the terminal.
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
on_response (GtkDialog *dialog,
|
|
Packit |
1470ea |
gint response_id,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
/* If the button clicked gives response OK (response_id being -5) */
|
|
Packit |
1470ea |
if (response_id == GTK_RESPONSE_OK)
|
|
Packit |
1470ea |
g_print ("*boom*\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* If the button clicked gives response CANCEL (response_id being -6) */
|
|
Packit |
1470ea |
else if (response_id == GTK_RESPONSE_CANCEL)
|
|
Packit |
1470ea |
g_print ("good choice\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* If the message dialog is destroyed (for example by pressing escape) */
|
|
Packit |
1470ea |
else if (response_id == GTK_RESPONSE_DELETE_EVENT)
|
|
Packit |
1470ea |
g_print ("dialog closed or cancelled\n");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Destroy the dialog after one of the above actions have taken place */
|
|
Packit |
1470ea |
gtk_widget_destroy (GTK_WIDGET (dialog));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Callback function for the response signal "activate" related to the SimpleAction
|
|
Packit |
1470ea |
* message_action.
|
|
Packit |
1470ea |
* This function is used to cause the message dialog window to popup.
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
message_cb (GSimpleAction *simple,
|
|
Packit |
1470ea |
GVariant *parameter,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
/* the parent variable in this case represents the window */
|
|
Packit |
1470ea |
GtkWidget *message_dialog;
|
|
Packit |
1470ea |
GtkWindow *parent = user_data;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Create a new message dialog, and set the parameters as follows:
|
|
Packit |
1470ea |
* Dialog Flags - make the constructed dialog modal
|
|
Packit |
1470ea |
* (modal windows prevent interaction with other windows in the application)
|
|
Packit |
1470ea |
* Message Type - nonfatal warning message
|
|
Packit |
1470ea |
* Buttons Type - use the ok and cancel buttons
|
|
Packit |
1470ea |
* message_format - text that you want the user to see in the window
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
message_dialog = gtk_message_dialog_new (parent, GTK_DIALOG_MODAL,
|
|
Packit |
1470ea |
GTK_MESSAGE_WARNING,
|
|
Packit |
1470ea |
GTK_BUTTONS_OK_CANCEL,
|
|
Packit |
1470ea |
"This action will cause the universe to stop existing.");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show_all (message_dialog);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_signal_connect (GTK_DIALOG (message_dialog), "response",
|
|
Packit |
1470ea |
G_CALLBACK (on_response), NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
activate (GtkApplication *app,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkWidget *window;
|
|
Packit |
1470ea |
GtkWidget *label;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
GSimpleAction *message_action;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Create a window with a title and a default size */
|
|
Packit |
1470ea |
window = gtk_application_window_new (app);
|
|
Packit |
1470ea |
gtk_window_set_title (GTK_WINDOW (window), "GMenu Example");
|
|
Packit |
1470ea |
gtk_window_set_default_size (GTK_WINDOW (window), 400, 200);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Create a label and add it to the window */
|
|
Packit |
1470ea |
label = gtk_label_new ("This application goes boom!");
|
|
Packit |
1470ea |
gtk_container_add (GTK_CONTAINER (window), label);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Create a new simple action, giving it a NULL parameter type. It will
|
|
Packit |
1470ea |
* always be NULL for actions invoked from a menu. (e.g clicking on an "ok"
|
|
Packit |
1470ea |
* or "cancel" button)
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
message_action = g_simple_action_new ("message", NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Connect the "activate" signal to the appropriate callback function */
|
|
Packit |
1470ea |
g_signal_connect (message_action, "activate", G_CALLBACK (message_cb),
|
|
Packit |
1470ea |
GTK_WINDOW (window));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Adds the message_action to the overall action map. An Action map is an
|
|
Packit |
1470ea |
* interface that contains a number of named GAction instances
|
|
Packit |
1470ea |
* (such as message_action)
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
g_action_map_add_action (G_ACTION_MAP (window), G_ACTION (message_action));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
gtk_widget_show_all (window);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Callback function for the response signal "activate" from the "quit" action
|
|
Packit |
1470ea |
* in the function directly below.
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
quit_cb (GSimpleAction *simple,
|
|
Packit |
1470ea |
GVariant *parameter,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GApplication *application = user_data;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_application_quit (application);
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Startup function for the menu we are creating in this sample */
|
|
Packit |
1470ea |
static void
|
|
Packit |
1470ea |
startup (GApplication *app,
|
|
Packit |
1470ea |
gpointer user_data)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GMenu *menu;
|
|
Packit |
1470ea |
GSimpleAction *quit_action;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Initialize the GMenu, and add a menu item with label "Message" and action
|
|
Packit |
1470ea |
* "win.message". Also add another menu item with label "Quit" and action
|
|
Packit |
1470ea |
* "app.quit"
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
menu = g_menu_new ();
|
|
Packit |
1470ea |
g_menu_append (menu, "Message", "win.message");
|
|
Packit |
1470ea |
g_menu_append (menu, "Quit", "app.quit");
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Create a new simple action for the application. (In this case it is the
|
|
Packit |
1470ea |
* "quit" action.
|
|
Packit |
1470ea |
*/
|
|
Packit |
1470ea |
quit_action = g_simple_action_new ("quit", NULL);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Ensure that the menu we have just created is set for the overall application */
|
|
Packit |
1470ea |
gtk_application_set_app_menu (GTK_APPLICATION (app), G_MENU_MODEL (menu));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_signal_connect (quit_action,
|
|
Packit |
1470ea |
"activate",
|
|
Packit |
1470ea |
G_CALLBACK (quit_cb),
|
|
Packit |
1470ea |
app);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
g_action_map_add_action (G_ACTION_MAP (app), G_ACTION (quit_action));
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
/* Startup function for the application */
|
|
Packit |
1470ea |
int
|
|
Packit |
1470ea |
main (int argc, char **argv)
|
|
Packit |
1470ea |
{
|
|
Packit |
1470ea |
GtkApplication *app;
|
|
Packit |
1470ea |
int status;
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
app = gtk_application_new ("org.gtk.example", G_APPLICATION_FLAGS_NONE);
|
|
Packit |
1470ea |
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
|
|
Packit |
1470ea |
g_signal_connect (app, "startup", G_CALLBACK (startup), NULL);
|
|
Packit |
1470ea |
status = g_application_run (G_APPLICATION (app), argc, argv);
|
|
Packit |
1470ea |
g_object_unref (app);
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
return status;
|
|
Packit |
1470ea |
}
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
In this sample we used the following:
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
<list>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/3.4/GtkApplication.html">GtkApplication</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GApplication.html">GApplication</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/3.4/GtkWindow.html">GtkWindow</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gtk3/stable/GtkMessageDialog.html">GtkMessageDialog</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GSimpleAction.html#g-simple-action-new">GSimpleAction</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GActionMap.html">GActionMap</link> </item>
|
|
Packit |
1470ea |
<item><link href="http://developer.gnome.org/gio/stable/GMenu.html">GMenu</link> </item>
|
|
Packit |
1470ea |
|
|
Packit |
1470ea |
</list>
|
|
Packit |
1470ea |
</page>
|