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