1 /***************************************************************************
2                           toolkit_dialog.cpp  -  description
3                              -------------------
4 
5   Handle simple dialog (alert, yes./no)
6 
7 
8     begin                : Fri Dec 14 2001
9     copyright            : (C) 2001 by mean
10     email                : fixounet@free.fr
11  ***************************************************************************/
12 
13 /***************************************************************************
14  *                                                                         *
15  *   This program is free software; you can redistribute it and/or modify  *
16  *   it under the terms of the GNU General Public License as published by  *
17  *   the Free Software Foundation; either version 2 of the License, or     *
18  *   (at your option) any later version.                                   *
19  *                                                                         *
20  ***************************************************************************/
21 #include "ADM_toolkitGtk.h"
22 #include "prefs.h"
23 #include "DIA_coreToolkit.h"
24 #include "DIA_coreUI_internal.h"
25 #define GLADE_HOOKUP_OBJECT(component,widget,name) \
26   g_object_set_data_full (G_OBJECT (component), name, \
27     gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
28 
29 #define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
30   g_object_set_data (G_OBJECT (component), name, widget)
31 
32 
33 static GtkWidget *widgetStack[10];
34 static int	  widgetCount=0;
GUI_detransient(void)35 void GUI_detransient(void )
36 {
37         gtk_window_set_modal(GTK_WINDOW(widgetStack[0]), 0);
38 }
GUI_retransient(void)39 void GUI_retransient(void )
40 {
41         gtk_window_set_modal(GTK_WINDOW(widgetStack[0]), 1);
42 }
gtk_register_dialog(GtkWidget * newdialog)43 void gtk_register_dialog(GtkWidget *newdialog)
44 {
45 
46         widgetStack[widgetCount]=newdialog;
47         // old one is no longer modal
48         if(widgetCount)
49         {
50                 gtk_window_set_modal(GTK_WINDOW(widgetStack[widgetCount-1]), 0);
51                 gtk_window_set_transient_for (GTK_WINDOW(newdialog),GTK_WINDOW(widgetStack[widgetCount-1]));
52 				gtk_window_set_modal(GTK_WINDOW(widgetStack[widgetCount]), 1);
53         }
54 
55         widgetCount++;
56 }
gtk_unregister_dialog(GtkWidget * newdialog)57 void gtk_unregister_dialog(GtkWidget *newdialog)
58 {
59 	ADM_assert(widgetCount);
60 	ADM_assert(widgetStack[widgetCount-1]==newdialog);
61 	widgetCount--;
62 	if(widgetCount > 1)
63 	{
64 		// Reset the old one modal
65 		gtk_window_set_modal(GTK_WINDOW(widgetStack[widgetCount-1]), 1);
66 	}
67 }
gtk_transient(GtkWidget * widget)68 void		gtk_transient(GtkWidget *widget)
69 {
70 GtkWidget *top;
71     return;
72 	assert(widgetCount);
73 	top=widgetStack[widgetCount-1];
74 
75 	// The father is no longer modal
76 	gtk_window_set_modal(GTK_WINDOW(top), 0);
77 	// But we are
78 	gtk_window_set_modal(GTK_WINDOW(widget), 1);
79 
80 	gtk_window_set_transient_for (GTK_WINDOW(widget),GTK_WINDOW(top));
81 
82 
83 
84 
85 
86 }
87 
88