Mercurial > projects > dwt-mac
diff dwt/browser/WebBrowser.d @ 125:5583f8eeee6c
Synced mozilla with dwt-linux
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Fri, 16 Jan 2009 12:49:08 +0100 |
parents | d8635bb48c7c |
children | 38807a925e24 |
line wrap: on
line diff
--- a/dwt/browser/WebBrowser.d Fri Jan 16 12:19:08 2009 +0100 +++ b/dwt/browser/WebBrowser.d Fri Jan 16 12:49:08 2009 +0100 @@ -1,5 +1,5 @@ -/******************************************************************************* - * Copyright (c) 2003, 2008 IBM Corporation and others. +/******************************************************************************* + * Copyright (c) 2003, 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at @@ -7,13 +7,16 @@ * * Contributors: * IBM Corporation - initial API and implementation - * * Port to the D programming language: - * Jacob Carlborg <doob@me.com> + * John Reimer <terminal.node@gmail.com> *******************************************************************************/ module dwt.browser.WebBrowser; +import dwt.dwthelper.utils; + import dwt.DWT; +import dwt.widgets.Composite; + import dwt.browser.Browser; import dwt.browser.CloseWindowListener; import dwt.browser.LocationListener; @@ -22,413 +25,390 @@ import dwt.browser.StatusTextListener; import dwt.browser.TitleListener; import dwt.browser.VisibilityWindowListener; -import dwt.dwthelper.utils; -import dwt.dwthelper.Runnable; -import dwt.dwthelper.System; -import dwt.widgets.Composite; abstract class WebBrowser { Browser browser; - CloseWindowListener[] closeWindowListeners = new CloseWindowListener[0]; - LocationListener[] locationListeners = new LocationListener[0]; - OpenWindowListener[] openWindowListeners = new OpenWindowListener[0]; - ProgressListener[] progressListeners = new ProgressListener[0]; - StatusTextListener[] statusTextListeners = new StatusTextListener[0]; - TitleListener[] titleListeners = new TitleListener[0]; - VisibilityWindowListener[] visibilityWindowListeners = new VisibilityWindowListener[0]; + CloseWindowListener[] closeWindowListeners; + LocationListener[] locationListeners; + OpenWindowListener[] openWindowListeners; + ProgressListener[] progressListeners; + StatusTextListener[] statusTextListeners; + TitleListener[] titleListeners; + VisibilityWindowListener[] visibilityWindowListeners; static Runnable MozillaClearSessions; static Runnable NativeClearSessions; /* Key Mappings */ - static const int[][] KeyTable = [ + static final int [][] KeyTable = [ /* Keyboard and Mouse Masks */ - [18, DWT.ALT], - [16, DWT.SHIFT], - [17, DWT.CONTROL], - [224, DWT.COMMAND], + [18, DWT.ALT], + [16, DWT.SHIFT], + [17, DWT.CONTROL], + [224, DWT.COMMAND], /* Literal Keys */ - [65, 'a'], - [66, 'b'], - [67, 'c'], - [68, 'd'], - [69, 'e'], - [70, 'f'], - [71, 'g'], - [72, 'h'], - [73, 'i'], - [74, 'j'], - [75, 'k'], - [76, 'l'], - [77, 'm'], - [78, 'n'], - [79, 'o'], - [80, 'p'], - [81, 'q'], - [82, 'r'], - [83, 's'], - [84, 't'], - [85, 'u'], - [86, 'v'], - [87, 'w'], - [88, 'x'], - [89, 'y'], - [90, 'z'], - [48, '0'], - [49, '1'], - [50, '2'], - [51, '3'], - [52, '4'], - [53, '5'], - [54, '6'], - [55, '7'], - [56, '8'], - [57, '9'], - [32, ' '], - [59, ';'], - [61, '='], - [188, ','], - [190, '.'], - [191, '/'], - [219, '['], - [221, ']'], - [222, '\''], - [192, '`'], - [220, '\\'], - [108, '|'], + [65, 'a'], + [66, 'b'], + [67, 'c'], + [68, 'd'], + [69, 'e'], + [70, 'f'], + [71, 'g'], + [72, 'h'], + [73, 'i'], + [74, 'j'], + [75, 'k'], + [76, 'l'], + [77, 'm'], + [78, 'n'], + [79, 'o'], + [80, 'p'], + [81, 'q'], + [82, 'r'], + [83, 's'], + [84, 't'], + [85, 'u'], + [86, 'v'], + [87, 'w'], + [88, 'x'], + [89, 'y'], + [90, 'z'], + [48, '0'], + [49, '1'], + [50, '2'], + [51, '3'], + [52, '4'], + [53, '5'], + [54, '6'], + [55, '7'], + [56, '8'], + [57, '9'], + [32, ' '], + [59, ';'], + [61, '='], + [188, ','], + [190, '.'], + [191, '/'], + [219, '['], + [221, ']'], + [222, '\''], + [192, '`'], + [220, '\\'], + [108, '|'], /* Non-Numeric Keypad Keys */ - [37, DWT.ARROW_LEFT], - [39, DWT.ARROW_RIGHT], - [38, DWT.ARROW_UP], - [40, DWT.ARROW_DOWN], - [45, DWT.INSERT], - [36, DWT.HOME], - [35, DWT.END], - [46, DWT.DEL], - [33, DWT.PAGE_UP], - [34, DWT.PAGE_DOWN], + [37, DWT.ARROW_LEFT], + [39, DWT.ARROW_RIGHT], + [38, DWT.ARROW_UP], + [40, DWT.ARROW_DOWN], + [45, DWT.INSERT], + [36, DWT.HOME], + [35, DWT.END], + [46, DWT.DEL], + [33, DWT.PAGE_UP], + [34, DWT.PAGE_DOWN], /* Virtual and Ascii Keys */ - [8, DWT.BS], - [13, DWT.CR], - [9, DWT.TAB], - [27, DWT.ESC], - [12, DWT.DEL], + [8, DWT.BS], + [13, DWT.CR], + [9, DWT.TAB], + [27, DWT.ESC], + [12, DWT.DEL], /* Functions Keys */ - [112, DWT.F1], - [113, DWT.F2], - [114, DWT.F3], - [115, DWT.F4], - [116, DWT.F5], - [117, DWT.F6], - [118, DWT.F7], - [119, DWT.F8], - [120, DWT.F9], - [121, DWT.F10], - [122, DWT.F11], - [123, DWT.F12], - [124, DWT.F13], - [125, DWT.F14], - [126, DWT.F15], - [127, 0], - [128, 0], - [129, 0], - [130, 0], - [131, 0], - [132, 0], - [133, 0], - [134, 0], - [135, 0], + [112, DWT.F1], + [113, DWT.F2], + [114, DWT.F3], + [115, DWT.F4], + [116, DWT.F5], + [117, DWT.F6], + [118, DWT.F7], + [119, DWT.F8], + [120, DWT.F9], + [121, DWT.F10], + [122, DWT.F11], + [123, DWT.F12], + [124, DWT.F13], + [125, DWT.F14], + [126, DWT.F15], + [127, 0], + [128, 0], + [129, 0], + [130, 0], + [131, 0], + [132, 0], + [133, 0], + [134, 0], + [135, 0], /* Numeric Keypad Keys */ - [96, DWT.KEYPAD_0], - [97, DWT.KEYPAD_1], - [98, DWT.KEYPAD_2], - [99, DWT.KEYPAD_3], - [100, DWT.KEYPAD_4], - [101, DWT.KEYPAD_5], - [102, DWT.KEYPAD_6], - [103, DWT.KEYPAD_7], - [104, DWT.KEYPAD_8], - [105, DWT.KEYPAD_9], - [14, DWT.KEYPAD_CR], - [107, DWT.KEYPAD_ADD], - [109, DWT.KEYPAD_SUBTRACT], - [106, DWT.KEYPAD_MULTIPLY], - [111, DWT.KEYPAD_DIVIDE], - [110, DWT.KEYPAD_DECIMAL], + [96, DWT.KEYPAD_0], + [97, DWT.KEYPAD_1], + [98, DWT.KEYPAD_2], + [99, DWT.KEYPAD_3], + [100, DWT.KEYPAD_4], + [101, DWT.KEYPAD_5], + [102, DWT.KEYPAD_6], + [103, DWT.KEYPAD_7], + [104, DWT.KEYPAD_8], + [105, DWT.KEYPAD_9], + [14, DWT.KEYPAD_CR], + [107, DWT.KEYPAD_ADD], + [109, DWT.KEYPAD_SUBTRACT], + [106, DWT.KEYPAD_MULTIPLY], + [111, DWT.KEYPAD_DIVIDE], + [110, DWT.KEYPAD_DECIMAL], /* Other keys */ - [20, DWT.CAPS_LOCK], - [144, DWT.NUM_LOCK], - [145, DWT.SCROLL_LOCK], - [44, DWT.PRINT_SCREEN], - [6, DWT.HELP], - [19, DWT.PAUSE], - [3, DWT.BREAK], + [20, DWT.CAPS_LOCK], + [144, DWT.NUM_LOCK], + [145, DWT.SCROLL_LOCK], + [44, DWT.PRINT_SCREEN], + [6, DWT.HELP], + [19, DWT.PAUSE], + [3, DWT.BREAK], /* Safari-specific */ - [186, ';'], - [187, '='], - [189, '-'] - , ]; + [186, ';'], + [187, '='], + [189, '-'], + ]; - public void addCloseWindowListener (CloseWindowListener listener) { - CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length + 1]; - System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, closeWindowListeners.length); - closeWindowListeners = newCloseWindowListeners; - closeWindowListeners[closeWindowListeners.length - 1] = listener; - } +public void addCloseWindowListener (CloseWindowListener listener) { + //CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length + 1]; + //System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, closeWindowListeners.length); + //closeWindowListeners = newCloseWindowListeners; + closeWindowListeners ~= listener; +} - public void addLocationListener (LocationListener listener) { - LocationListener[] newLocationListeners = new LocationListener[locationListeners.length + 1]; - System.arraycopy(locationListeners, 0, newLocationListeners, 0, locationListeners.length); - locationListeners = newLocationListeners; - locationListeners[locationListeners.length - 1] = listener; - } +public void addLocationListener (LocationListener listener) { + //LocationListener[] newLocationListeners = new LocationListener[locationListeners.length + 1]; + //System.arraycopy(locationListeners, 0, newLocationListeners, 0, locationListeners.length); + //locationListeners = newLocationListeners; + locationListeners ~= listener; +} - public void addOpenWindowListener (OpenWindowListener listener) { - OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length + 1]; - System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, openWindowListeners.length); - openWindowListeners = newOpenWindowListeners; - openWindowListeners[openWindowListeners.length - 1] = listener; - } +public void addOpenWindowListener (OpenWindowListener listener) { + //OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length + 1]; + //System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, openWindowListeners.length); + //openWindowListeners = newOpenWindowListeners; + openWindowListeners ~= listener; +} - public void addProgressListener (ProgressListener listener) { - ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length + 1]; - System.arraycopy(progressListeners, 0, newProgressListeners, 0, progressListeners.length); - progressListeners = newProgressListeners; - progressListeners[progressListeners.length - 1] = listener; - } +public void addProgressListener (ProgressListener listener) { + //ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length + 1]; + //System.arraycopy(progressListeners, 0, newProgressListeners, 0, progressListeners.length); + //progressListeners = newProgressListeners; + progressListeners ~= listener; +} - public void addStatusTextListener (StatusTextListener listener) { - StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length + 1]; - System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, statusTextListeners.length); - statusTextListeners = newStatusTextListeners; - statusTextListeners[statusTextListeners.length - 1] = listener; - } +public void addStatusTextListener (StatusTextListener listener) { + //StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length + 1]; + //System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, statusTextListeners.length); + //statusTextListeners = newStatusTextListeners; + statusTextListeners ~= listener; +} - public void addTitleListener (TitleListener listener) { - TitleListener[] newTitleListeners = new TitleListener[titleListeners.length + 1]; - System.arraycopy(titleListeners, 0, newTitleListeners, 0, titleListeners.length); - titleListeners = newTitleListeners; - titleListeners[titleListeners.length - 1] = listener; - } +public void addTitleListener (TitleListener listener) { + //TitleListener[] newTitleListeners = new TitleListener[titleListeners.length + 1]; + //System.arraycopy(titleListeners, 0, newTitleListeners, 0, titleListeners.length); + //titleListeners = newTitleListeners; + titleListeners ~= listener; +} - public void addVisibilityWindowListener (VisibilityWindowListener listener) { - VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length + 1]; - System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, visibilityWindowListeners.length); - visibilityWindowListeners = newVisibilityWindowListeners; - visibilityWindowListeners[visibilityWindowListeners.length - 1] = listener; - } +public void addVisibilityWindowListener (VisibilityWindowListener listener) { + //VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length + 1]; + //System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, visibilityWindowListeners.length); + //visibilityWindowListeners = newVisibilityWindowListeners; + visibilityWindowListeners ~= listener; +} - public abstract bool back (); - - public static void clearSessions () { - if (NativeClearSessions !is null) - NativeClearSessions.run(); - if (MozillaClearSessions !is null) - MozillaClearSessions.run(); - } +public abstract bool back (); - public abstract void create (Composite parent, int style); - - public abstract bool execute (String script); - - public abstract bool forward (); +public static void clearSessions () { + if (NativeClearSessions !is null) NativeClearSessions.run (); + if (MozillaClearSessions !is null) MozillaClearSessions.run (); +} -public abstract String getBrowserType (); +public abstract void create (Composite parent, int style); + +public abstract bool execute (String script); - public abstract String getText (); +public abstract bool forward (); - public abstract String getUrl (); +public abstract String getText (); - public Object getWebBrowser () { - return null; - } +public abstract String getUrl (); - public abstract bool isBackEnabled (); +public Object getWebBrowser () { + return null; +} - public bool isFocusControl () { - return false; - } +public abstract bool isBackEnabled (); - public abstract bool isForwardEnabled (); +public bool isFocusControl () { + return false; +} - public abstract void refresh (); +public abstract bool isForwardEnabled (); - public void removeCloseWindowListener (CloseWindowListener listener) { - if (closeWindowListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < closeWindowListeners.length; i++) { - if (listener is closeWindowListeners[i]) { - index = i; - break; - } - } - if (index is -1) - return; - if (closeWindowListeners.length is 1) { - closeWindowListeners = new CloseWindowListener[0]; - return; +public abstract void refresh (); + +public void removeCloseWindowListener (CloseWindowListener listener) { + if (closeWindowListeners.length is 0) return; + int index = -1; + for (int i = 0; i < closeWindowListeners.length; i++) { + if (listener is closeWindowListeners[i]){ + index = i; + break; } - CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length - 1]; - System.arraycopy(closeWindowListeners, 0, newCloseWindowListeners, 0, index); - System.arraycopy(closeWindowListeners, index + 1, newCloseWindowListeners, index, closeWindowListeners.length - index - 1); - closeWindowListeners = newCloseWindowListeners; + } + if (index is -1) return; + if (closeWindowListeners.length is 1) { + closeWindowListeners = new CloseWindowListener[0]; + return; } + //CloseWindowListener[] newCloseWindowListeners = new CloseWindowListener[closeWindowListeners.length - 1]; + //System.arraycopy (closeWindowListeners, 0, newCloseWindowListeners, 0, index); + //System.arraycopy (closeWindowListeners, index + 1, newCloseWindowListeners, index, closeWindowListeners.length - index - 1); + closeWindowListeners = closeWindowListeners[0..index] ~ closeWindowListeners[index+1..$]; +} - public void removeLocationListener (LocationListener listener) { - if (locationListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < locationListeners.length; i++) { - if (listener is locationListeners[i]) { - index = i; - break; - } - } - if (index is -1) - return; - if (locationListeners.length is 1) { - locationListeners = new LocationListener[0]; - return; +public void removeLocationListener (LocationListener listener) { + if (locationListeners.length is 0) return; + int index = -1; + for (int i = 0; i < locationListeners.length; i++) { + if (listener is locationListeners[i]){ + index = i; + break; } - LocationListener[] newLocationListeners = new LocationListener[locationListeners.length - 1]; - System.arraycopy(locationListeners, 0, newLocationListeners, 0, index); - System.arraycopy(locationListeners, index + 1, newLocationListeners, index, locationListeners.length - index - 1); - locationListeners = newLocationListeners; + } + if (index is -1) return; + if (locationListeners.length is 1) { + locationListeners = new LocationListener[0]; + return; } - - public void removeOpenWindowListener (OpenWindowListener listener) { - if (openWindowListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < openWindowListeners.length; i++) { - if (listener is openWindowListeners[i]) { - index = i; - break; - } - } - if (index is -1) - return; - if (openWindowListeners.length is 1) { - openWindowListeners = new OpenWindowListener[0]; - return; - } - OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length - 1]; - System.arraycopy(openWindowListeners, 0, newOpenWindowListeners, 0, index); - System.arraycopy(openWindowListeners, index + 1, newOpenWindowListeners, index, openWindowListeners.length - index - 1); - openWindowListeners = newOpenWindowListeners; - } + //LocationListener[] newLocationListeners = new LocationListener[locationListeners.length - 1]; + //System.arraycopy (locationListeners, 0, newLocationListeners, 0, index); + //System.arraycopy (locationListeners, index + 1, newLocationListeners, index, locationListeners.length - index - 1); + locationListeners = locationListeners[0..index] ~ locationListeners[index+1..$]; +} - public void removeProgressListener (ProgressListener listener) { - if (progressListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < progressListeners.length; i++) { - if (listener is progressListeners[i]) { - index = i; - break; - } - } - if (index is -1) - return; - if (progressListeners.length is 1) { - progressListeners = new ProgressListener[0]; - return; +public void removeOpenWindowListener (OpenWindowListener listener) { + if (openWindowListeners.length is 0) return; + int index = -1; + for (int i = 0; i < openWindowListeners.length; i++) { + if (listener is openWindowListeners[i]){ + index = i; + break; } - ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length - 1]; - System.arraycopy(progressListeners, 0, newProgressListeners, 0, index); - System.arraycopy(progressListeners, index + 1, newProgressListeners, index, progressListeners.length - index - 1); - progressListeners = newProgressListeners; + } + if (index is -1) return; + if (openWindowListeners.length is 1) { + openWindowListeners = new OpenWindowListener[0]; + return; } + //OpenWindowListener[] newOpenWindowListeners = new OpenWindowListener[openWindowListeners.length - 1]; + //System.arraycopy (openWindowListeners, 0, newOpenWindowListeners, 0, index); + //System.arraycopy (openWindowListeners, index + 1, newOpenWindowListeners, index, openWindowListeners.length - index - 1); + openWindowListeners = openWindowListeners[0..index] ~ openWindowListeners[index+1..$]; +} - public void removeStatusTextListener (StatusTextListener listener) { - if (statusTextListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < statusTextListeners.length; i++) { - if (listener is statusTextListeners[i]) { - index = i; - break; - } +public void removeProgressListener (ProgressListener listener) { + if (progressListeners.length is 0) return; + int index = -1; + for (int i = 0; i < progressListeners.length; i++) { + if (listener is progressListeners[i]){ + index = i; + break; } - if (index is -1) - return; - if (statusTextListeners.length is 1) { - statusTextListeners = new StatusTextListener[0]; - return; + } + if (index is -1) return; + if (progressListeners.length is 1) { + progressListeners = new ProgressListener[0]; + return; + } + //ProgressListener[] newProgressListeners = new ProgressListener[progressListeners.length - 1]; + //System.arraycopy (progressListeners, 0, newProgressListeners, 0, index); + //System.arraycopy (progressListeners, index + 1, newProgressListeners, index, progressListeners.length - index - 1); + progressListeners = progressListeners[0..index] ~ progressListeners[index+1..$]; +} + +public void removeStatusTextListener (StatusTextListener listener) { + if (statusTextListeners.length is 0) return; + int index = -1; + for (int i = 0; i < statusTextListeners.length; i++) { + if (listener is statusTextListeners[i]){ + index = i; + break; } - StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length - 1]; - System.arraycopy(statusTextListeners, 0, newStatusTextListeners, 0, index); - System.arraycopy(statusTextListeners, index + 1, newStatusTextListeners, index, statusTextListeners.length - index - 1); - statusTextListeners = newStatusTextListeners; + } + if (index is -1) return; + if (statusTextListeners.length is 1) { + statusTextListeners = new StatusTextListener[0]; + return; } + //StatusTextListener[] newStatusTextListeners = new StatusTextListener[statusTextListeners.length - 1]; + //System.arraycopy (statusTextListeners, 0, newStatusTextListeners, 0, index); + //System.arraycopy (statusTextListeners, index + 1, newStatusTextListeners, index, statusTextListeners.length - index - 1); + statusTextListeners = statusTextListeners[0..index] ~ statusTextListeners[index+1..$]; +} - public void removeTitleListener (TitleListener listener) { - if (titleListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < titleListeners.length; i++) { - if (listener is titleListeners[i]) { - index = i; - break; - } +public void removeTitleListener (TitleListener listener) { + if (titleListeners.length is 0) return; + int index = -1; + for (int i = 0; i < titleListeners.length; i++) { + if (listener is titleListeners[i]){ + index = i; + break; } - if (index is -1) - return; - if (titleListeners.length is 1) { - titleListeners = new TitleListener[0]; - return; - } - TitleListener[] newTitleListeners = new TitleListener[titleListeners.length - 1]; - System.arraycopy(titleListeners, 0, newTitleListeners, 0, index); - System.arraycopy(titleListeners, index + 1, newTitleListeners, index, titleListeners.length - index - 1); - titleListeners = newTitleListeners; + } + if (index is -1) return; + if (titleListeners.length is 1) { + titleListeners = new TitleListener[0]; + return; } + TitleListener[] newTitleListeners = new TitleListener[titleListeners.length - 1]; + //System.arraycopy (titleListeners, 0, newTitleListeners, 0, index); + //System.arraycopy (titleListeners, index + 1, newTitleListeners, index, titleListeners.length - index - 1); + titleListeners = titleListeners[0..index] ~ titleListeners[index+1..$]; +} - public void removeVisibilityWindowListener (VisibilityWindowListener listener) { - if (visibilityWindowListeners.length is 0) - return; - int index = -1; - for (int i = 0; i < visibilityWindowListeners.length; i++) { - if (listener is visibilityWindowListeners[i]) { - index = i; - break; - } - } - if (index is -1) - return; - if (visibilityWindowListeners.length is 1) { - visibilityWindowListeners = new VisibilityWindowListener[0]; - return; +public void removeVisibilityWindowListener (VisibilityWindowListener listener) { + if (visibilityWindowListeners.length is 0) return; + int index = -1; + for (int i = 0; i < visibilityWindowListeners.length; i++) { + if (listener is visibilityWindowListeners[i]){ + index = i; + break; } - VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length - 1]; - System.arraycopy(visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, index); - System.arraycopy(visibilityWindowListeners, index + 1, newVisibilityWindowListeners, index, visibilityWindowListeners.length - index - 1); - visibilityWindowListeners = newVisibilityWindowListeners; + } + if (index is -1) return; + if (visibilityWindowListeners.length is 1) { + visibilityWindowListeners = new VisibilityWindowListener[0]; + return; } - - public void setBrowser (Browser browser) { - this.browser = browser; - } - - public abstract bool setText (String html); + //VisibilityWindowListener[] newVisibilityWindowListeners = new VisibilityWindowListener[visibilityWindowListeners.length - 1]; + //System.arraycopy (visibilityWindowListeners, 0, newVisibilityWindowListeners, 0, index); + //System.arraycopy (visibilityWindowListeners, index + 1, newVisibilityWindowListeners, index, visibilityWindowListeners.length - index - 1); + visibilityWindowListeners = visibilityWindowListeners[0..index] ~ visibilityWindowListeners[index+1..$]; +} - public abstract bool setUrl (String url); +public void setBrowser (Browser browser) { + this.browser = browser; +} - public abstract void stop (); +public abstract bool setText (String html); + +public abstract bool setUrl (String url); - int translateKey (int key) { - for (int i = 0; i < KeyTable.length; i++) { - if (KeyTable[i][0] is key) - return KeyTable[i][1]; - } - return 0; +public abstract void stop (); + +int translateKey (int key) { + for (int i = 0; i < KeyTable.length; i++) { + if (KeyTable[i][0] is key) return KeyTable[i][1]; } + return 0; } +}