https://bugzilla.novell.com/show_bug.cgi?id=386504
Summary: Forms don't activate properly with the Carbon backend Product: Mono: Class Libraries Version: 1.9.0 Platform: Macintosh OS/Version: Mac OS X 10.4 Status: NEW Severity: Major Priority: P5 - None Component: Windows.Forms AssignedTo: mono-bugs@lists.ximian.com ReportedBy: [EMAIL PROTECTED] QAContact: mono-bugs@lists.ximian.com Found By: --- Form::Activate doesn't bring the window to the front and when forms are activated (by clicking on a deactivated form for example) the activate and deactivate events don't fire. Here's a test case: // compile with: // gmcs -r:System.Windows.Forms.dll -out:app.exe FormActivation.cs using System; using System.Collections.Generic; using System.Diagnostics; using System.Windows.Forms; internal class Program { public static void Main(string[] args) { DoInit(); Application.Run(); } public static void DoInit() { ms_timer = new Timer(); DoCreateForm(); DoCreateForm(); ms_timer.Tick += DoTransition; ms_timer.Interval = 3000; ms_timer.Start(); } private static void DoCreateForm() { Form form = new Form(); form.Text = "window " + ms_forms.Count; form.Menu = new MainMenu(); form.Activated += DoActivated; form.Deactivate += DoDeactivated; MenuItem fileMenu = new MenuItem("File"); fileMenu.MenuItems.Add(0, new MenuItem("Quit", (s, e) => DoQuit())); form.Menu = new MainMenu(); form.Menu.MenuItems.Add(fileMenu); form.Visible = true; ms_forms.Add(form); } private static void DoActivated(object sender, EventArgs e) { Form f = (Form) sender; Console.WriteLine("activated {0}", f.Text); ++ms_activateCount; } private static void DoDeactivated(object sender, EventArgs e) { Form f = (Form) sender; Console.WriteLine("deactivated {0}", f.Text); ++ms_deactivateCount; } private static void DoTransition(Object myObject, EventArgs myEventArgs) { if (ms_state == 0) { Console.WriteLine("0) activating form 0"); ms_forms[0].Activate(); ms_state = 1; } else if (ms_state == 1) { Console.WriteLine("1) activating form 1"); ms_forms[1].Activate(); ms_state = 2; } else { Console.WriteLine("2) checking"); // Should be one (or maybe even two activates on startup) plus two from the timer. // Should be zero (or maybe one deactivate on startup) plus two from the timer. if (ms_activateCount >= 3 && ms_deactivateCount >= 3) { Console.WriteLine("passed: got {0} activates and {1} deactivates", ms_activateCount, ms_deactivateCount); } else if (ms_activateCount < 3 && ms_deactivateCount < 2) { Console.WriteLine("FAILED: expected at 3-4 activates, but got {0} activates", ms_activateCount); Console.WriteLine("FAILED: expected at 2-3 deactivates, but got {0} deactivates", ms_deactivateCount); } else if (ms_activateCount < 3) { Console.WriteLine("FAILED: expected at 3-4 activates, but got {0} activates", ms_activateCount); } else if (ms_deactivateCount < 2) { Console.WriteLine("FAILED: expected at 2-3 deactivates, but got {0} deactivates", ms_deactivateCount); } DoQuit(); } } private static void DoQuit() { foreach (Form f in ms_forms) f.Close(); ms_forms.Clear(); ms_timer.Stop(); Application.Exit(); } private static Timer ms_timer; private static List<Form> ms_forms = new List<Form>(); private static int ms_state; private static int ms_activateCount; private static int ms_deactivateCount; } -- Configure bugmail: https://bugzilla.novell.com/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- You are the QA contact for the bug. You are the assignee for the bug. _______________________________________________ mono-bugs maillist - mono-bugs@lists.ximian.com http://lists.ximian.com/mailman/listinfo/mono-bugs