[Gtk-sharp-list] Modal property of Dialog not working

vanosten rick@vanosten.net
11 Jan 2003 10:13:41 +0100


Hi Mike and Gonzalo

Thank you for your help. Dialog::Run() makes the trick :-) I include a
short program that shows the behaviour for reference. Those interested
can play with lines 60 and 62.

Have a nice weekend ... Rick


lør, 2003-01-11 kl. 01:35 skrev Mike Kestner:
> On Fri, 2003-01-10 at 13:25, vanosten wrote:
> > Hi
> > The modal property of dialog seems not to be working. Even if I set
> > "dialog.Modal = true" the code in my method goes on, i.e. the appliation
> > is not freezed. I might be missing some general GTK behaviour?
> 
> I've used the Dialog::Run() method successfully in Gtk# for modal
> dialogs.  Haven't gotten around to trying the Modal prop.

lør, 2003-01-11 kl. 01:59 skrev Gonzalo Paniagua Javier:
> After setting the dialog as modal, try dialog.TransientFor = parent,
> where parent is the main application window.
> 
> -Gonzalo

using System;

using Gtk;
using GtkSharp;

public class MyApp : Window {

    private VBox mainBox;
    private Dialog dialog;

    public MyApp(string title) : base(title) {
        this.SetDefaultSize(800, 600); //width, height
        this.DeleteEvent += new DeleteEventHandler(OnWindowDelete);
        mainBox = new VBox(false, 2);
        
        //menu bar with one menu
        MenuBar mb = new MenuBar();
        Menu fileMenu = new Menu();
        MenuItem fileMenuMI = new MenuItem("_File");
        MenuItem dialogMI = new MenuItem("_Dialog");
        dialogMI.Activated += new EventHandler(OnDialog);
        mb.Append(fileMenuMI);
        fileMenuMI.Submenu = fileMenu;
        fileMenu.Append(dialogMI);
        mainBox.PackStart(mb, false, false, 0);
        
        //rest of gui
        Button button = new Button("Do not press me ;-)");
        mainBox.PackStart(button, true, true, 0);
        this.Add(mainBox);
        this.ShowAll();
    } //END public DMyApp(string)

    public static int Main(string[] args) {
        Application.Init();
        MyApp app = new MyApp("Hello");
        Application.Run();
        return 0;
    } //END public static int Main(string[])
    
    private void ShowDialogs() {
        ShowInfoDialog();
        Console.WriteLine("ShowInfoDialog() returned in ShowDialogs()");
    } //END private void ShowDialogs()
    
    private void ShowInfoDialog() {
        dialog = new Dialog();
        dialog.Title = "A simple dialog";
        VBox vbox = dialog.VBox;
        HBox hbox = new HBox(false, 4);
        vbox.PackStart(hbox, true, true, 0);
        Gtk.Image icon = new Gtk.Image(Stock.DialogInfo, IconSize.Dialog);
        hbox.PackStart(icon, false, false, 0);
        hbox.PackStart(new Label("Maybe it is working"), false, false, 0);
        dialog.AddButton(Stock.Close, 1);
        dialog.Response += new ResponseHandler(OnDialogResponse);
            
        //show
        dialog.Modal = true;
        //dialog.TransientFor = this;
        dialog.ShowAll();
        dialog.Run();
        Console.WriteLine("ShowInfoDialog() reached internally end of method");
    } //END private void ShowInfoDialog()

    //---- EventHandlers -------------------------------------/
    
    private void OnWindowDelete(object obj, DeleteEventArgs args) {
        Application.Quit();
        args.RetVal = true;
    }   //END private void OnWindowDelete(object, DeleteEventArgs)
    
    private void OnDialog(object o, EventArgs args) {
        ShowDialogs();
        
    } //private void OnDialog(object, EventArgs)
    private void OnDialogResponse(object o, ResponseArgs args) {
        dialog.Hide();
    } //private void OnDialog(object, EventArgs)
} //END public class MyApp : Window