This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

View | Details | Raw Unified | Return to bug 170035
Collapse All | Expand All

(-)core.browser/src/org/netbeans/core/browser/layer.xml (+1 lines)
Lines 5-10 Link Here
5
        <folder name="Browsers">
5
        <folder name="Browsers">
6
            <file name="EmbeddedBrowser.settings" url="mozillaBrowser.xml">
6
            <file name="EmbeddedBrowser.settings" url="mozillaBrowser.xml">
7
                <attr name="hidden" methodvalue="org.netbeans.core.browser.BrowserFactory.isHidden"/>
7
                <attr name="hidden" methodvalue="org.netbeans.core.browser.BrowserFactory.isHidden"/>
8
                <attr name="internal" boolvalue="true"/>
8
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.core.browser.Bundle"/>
9
                <attr name="SystemFileSystem.localizingBundle" stringvalue="org.netbeans.core.browser.Bundle"/>
9
                <attr name="SystemFileSystem.icon" urlvalue="nbres:/org/netbeans/modules/extbrowser/resources/extbrowser.gif"/>
10
                <attr name="SystemFileSystem.icon" urlvalue="nbres:/org/netbeans/modules/extbrowser/resources/extbrowser.gif"/>
10
                <attr name="position" intvalue="10000"/>
11
                <attr name="position" intvalue="10000"/>
(-)core.ui/src/org/netbeans/core/ui/resources/layer.xml (+1 lines)
Lines 471-476 Link Here
471
            <file name="SwingBrowser.settings" url="SwingBrowser.xml">
471
            <file name="SwingBrowser.settings" url="SwingBrowser.xml">
472
                <attr name="SystemFileSystem.icon" stringvalue="nbres:/org/openide/resources/html/htmlView.gif"/>
472
                <attr name="SystemFileSystem.icon" stringvalue="nbres:/org/openide/resources/html/htmlView.gif"/>
473
                <attr name="hidden" boolvalue="true"/>
473
                <attr name="hidden" boolvalue="true"/>
474
                <attr name="internal" boolvalue="true"/>
474
                <attr name="position" intvalue="700"/>
475
                <attr name="position" intvalue="700"/>
475
            </file>
476
            </file>
476
            <attr name="helpID" stringvalue="org.netbeans.core.services.Browsers"/>
477
            <attr name="helpID" stringvalue="org.netbeans.core.services.Browsers"/>
(-)o.n.core/nbproject/project.xml (-1 / +1 lines)
Lines 92-98 Link Here
92
                    <build-prerequisite/>
92
                    <build-prerequisite/>
93
                    <compile-dependency/>
93
                    <compile-dependency/>
94
                    <run-dependency>
94
                    <run-dependency>
95
                        <specification-version>7.11</specification-version>
95
                        <specification-version>7.14</specification-version>
96
                    </run-dependency>
96
                    </run-dependency>
97
                </dependency>
97
                </dependency>
98
                <dependency>
98
                <dependency>
(-)o.n.core/src/org/netbeans/core/IDESettings.java (-23 / +95 lines)
Lines 60-71 Link Here
60
public class IDESettings  {
60
public class IDESettings  {
61
    /** Web Browser prefered by user */
61
    /** Web Browser prefered by user */
62
    public static final String PROP_WWWBROWSER = "WWWBrowser"; // NOI18N
62
    public static final String PROP_WWWBROWSER = "WWWBrowser"; // NOI18N
63
    public static final String PROP_EXTERNAL_WWWBROWSER = "ExternalWWWBrowser"; // NOI18N
63
64
64
    static Preferences getPreferences() {
65
    static Preferences getPreferences() {
65
        return NbPreferences.forModule(IDESettings.class);
66
        return NbPreferences.forModule(IDESettings.class);
66
    }
67
    }
67
68
68
    /** Getter for preffered web browser.
69
    /** Getter for preffered web browser. The browser may be an internal one
70
     * (URLs will be rendered in some TopComponent) or external browser like
71
     * Mozilla or Internet Explorer.
69
     *
72
     *
70
     * First time when this function is called Lookup is used
73
     * First time when this function is called Lookup is used
71
     * to find prefered browser factory in a browser registry.
74
     * to find prefered browser factory in a browser registry.
Lines 74-82 Link Here
74
     * may return null if it is not possible to get the browser
77
     * may return null if it is not possible to get the browser
75
     */
78
     */
76
    public static HtmlBrowser.Factory getWWWBrowser () {
79
    public static HtmlBrowser.Factory getWWWBrowser () {
80
        return getBrowser( PROP_WWWBROWSER, false );
81
    }
82
83
    /** Getter for preffered external web browser.
84
     *
85
     * First time when this function is called Lookup is used
86
     * to find prefered browser factory in a browser registry.
87
     *
88
     * @return prefered external browser,
89
     * may return null if it is not possible to get the browser or no external
90
     * browser is available.
91
     */
92
    public static HtmlBrowser.Factory getExternalWWWBrowser () {
93
        return getBrowser( PROP_EXTERNAL_WWWBROWSER, true );
94
    }
95
96
    /** Setter for preffered browser.
97
     *
98
     *  Actually Node.Handle of node that represent browser in lookup folder is stored.
99
     *
100
     * @param brow prefered browser capable of providing implementation
101
     */
102
    public static void setWWWBrowser (HtmlBrowser.Factory brow) {
103
        setBrowser( PROP_WWWBROWSER, brow );
104
        if( isExternal( brow ) ) {
105
            setExternalWWWBrowser(brow);
106
        }
107
    }
108
109
    /** Setter for preffered external browser.
110
     *
111
     *  Actually Node.Handle of node that represent browser in lookup folder is stored.
112
     *
113
     * @param brow prefered browser capable of providing implementation
114
     */
115
    public static void setExternalWWWBrowser (HtmlBrowser.Factory brow) {
116
        setBrowser( PROP_EXTERNAL_WWWBROWSER, brow );
117
    }
118
119
    private static void setBrowser (String prefId, HtmlBrowser.Factory brow) {
77
        try {
120
        try {
78
            Object obj = getPreferences().get(PROP_WWWBROWSER, null);
121
            if (brow == null) {
122
                getPreferences().put(prefId, "");//NOI18N
123
                return;
124
            }
79
125
126
            Lookup.Item<HtmlBrowser.Factory> item =
127
                    Lookup.getDefault ().lookupItem (new Lookup.Template<HtmlBrowser.Factory> (HtmlBrowser.Factory.class, null, brow));
128
            if (item != null) {
129
                getPreferences().put(prefId, item.getId ());
130
            } else {
131
                // strange
132
                Logger.getLogger (IDESettings.class.getName ()).warning ("IDESettings: Cannot find browser in lookup");// NOI18N
133
                getPreferences().put(prefId, "");//NOI18N
134
            }
135
        } catch (Exception ex) {
136
            Exceptions.printStackTrace (ex);
137
        }
138
    }
139
140
    private static HtmlBrowser.Factory getBrowser( String prefId, boolean mustBeExternal ) {
141
        try {
142
            Object obj = getPreferences().get(prefId, null);
143
80
            if (obj instanceof String && !"".equals (obj)) {
144
            if (obj instanceof String && !"".equals (obj)) {
81
                // use new style
145
                // use new style
82
                Lookup.Item<HtmlBrowser.Factory> item = Lookup.getDefault ().lookupItem (new Lookup.Template<HtmlBrowser.Factory> (HtmlBrowser.Factory.class, (String)obj, null));
146
                Lookup.Item<HtmlBrowser.Factory> item = Lookup.getDefault ().lookupItem (new Lookup.Template<HtmlBrowser.Factory> (HtmlBrowser.Factory.class, (String)obj, null));
Lines 101-106 Link Here
101
                        try {
165
                        try {
102
                            if (Boolean.TRUE.equals (dobjs[i].getPrimaryFile ().getAttribute ("hidden")))
166
                            if (Boolean.TRUE.equals (dobjs[i].getPrimaryFile ().getAttribute ("hidden")))
103
                                continue;
167
                                continue;
168
                            if (mustBeExternal && Boolean.TRUE.equals (dobjs[i].getPrimaryFile ().getAttribute ("internal")) )
169
                                continue;
104
                            InstanceCookie cookie = (InstanceCookie) dobjs[i].getCookie (InstanceCookie.class);
170
                            InstanceCookie cookie = (InstanceCookie) dobjs[i].getCookie (InstanceCookie.class);
105
171
106
                            if (cookie == null)
172
                            if (cookie == null)
Lines 127-158 Link Here
127
        return null;
193
        return null;
128
    }
194
    }
129
195
130
    /** Setter for preffered browser.
196
    private static boolean isExternal( HtmlBrowser.Factory brow ) {
131
     *
197
        // check if it is not set to be hidden
132
     *  Actually Node.Handle of node that represent browser in lookup folder is stored.
198
        FileObject fo = FileUtil.getConfigFile ("Services/Browsers");   // NOI18N
133
     *
199
134
     * @param brow prefered browser capable of providing implementation
200
        DataFolder folder = DataFolder.findFolder (fo);
135
     */
201
        DataObject [] dobjs = folder.getChildren ();
136
    public static void setWWWBrowser (HtmlBrowser.Factory brow) {
202
        for (int i = 0; i < dobjs.length; i++) {
203
            Object o = null;
204
137
        try {
205
        try {
138
            if (brow == null) {
206
                if (Boolean.TRUE.equals (dobjs[i].getPrimaryFile ().getAttribute ("hidden")))
139
                getPreferences().put(PROP_WWWBROWSER, "");//NOI18N
207
                    continue;
140
                return;
208
                if (!Boolean.TRUE.equals (dobjs[i].getPrimaryFile ().getAttribute ("internal")) )
141
            }
209
                    continue;
210
                InstanceCookie cookie = (InstanceCookie) dobjs[i].getCookie (InstanceCookie.class);
142
211
143
            Lookup.Item<HtmlBrowser.Factory> item =
212
                if (cookie == null)
144
                    Lookup.getDefault ().lookupItem (new Lookup.Template<HtmlBrowser.Factory> (HtmlBrowser.Factory.class, null, brow));
213
                    continue;
145
            if (item != null) {
214
                o = cookie.instanceCreate ();
146
                getPreferences().put(PROP_WWWBROWSER, item.getId ());
215
                if (o != null && o.equals (brow)) {
147
            } else {
216
                    return false;
148
                // strange
149
                Logger.getLogger (IDESettings.class.getName ()).warning ("IDESettings: Cannot find browser in lookup");// NOI18N
150
                getPreferences().put(PROP_WWWBROWSER, "");//NOI18N
151
            }
217
            }
152
        } catch (Exception ex) {
153
            Exceptions.printStackTrace (ex);
154
        }
218
        }
219
            // exceptions are thrown if module is uninstalled
220
            catch (java.io.IOException ex) {
221
                Logger.getLogger (IDESettings.class.getName ()).log (Level.WARNING, null, ex);
222
            } catch (ClassNotFoundException ex) {
223
                Logger.getLogger (IDESettings.class.getName ()).log (Level.WARNING, null, ex);
155
    }
224
    }
225
        }
226
        return false;
227
    }
156
228
157
    /** Used in layer xml to register FactoryEditor. */
229
    /** Used in layer xml to register FactoryEditor. */
158
    private static org.netbeans.beaninfo.editors.HtmlBrowser.FactoryEditor createHtmlBrowserFactoryEditor()  {
230
    private static org.netbeans.beaninfo.editors.HtmlBrowser.FactoryEditor createHtmlBrowserFactoryEditor()  {
(-)o.n.core/src/org/netbeans/core/NbTopManager.java (+27 lines)
Lines 235-241 Link Here
235
                }
235
                }
236
            });
236
            });
237
        }
237
        }
238
239
        @Override
240
        public void showURLExternal(final URL u) {
241
            Mutex.EVENT.readAccess(new Runnable() {
242
                public void run() {
243
                    if (htmlViewer == null) {
244
                        htmlViewer = new NbBrowser();
238
    }
245
    }
246
                    htmlViewer.showUrlExternal(u);
247
                }
248
            });
249
        }
250
    }
239
251
240
252
241
    /**
253
    /**
Lines 587-592 Link Here
587
    public static class NbBrowser {
599
    public static class NbBrowser {
588
        
600
        
589
        private HtmlBrowserComponent brComp;
601
        private HtmlBrowserComponent brComp;
602
        private HtmlBrowserComponent externalBrowser;
590
        private PreferenceChangeListener idePCL;
603
        private PreferenceChangeListener idePCL;
591
        private static Lookup.Result factoryResult;
604
        private static Lookup.Result factoryResult;
592
        
605
        
Lines 615-620 Link Here
615
                brComp = new HtmlBrowserComponent(browser, true, true);
628
                brComp = new HtmlBrowserComponent(browser, true, true);
616
                brComp.putClientProperty("TabPolicy", "HideWhenAlone"); // NOI18N
629
                brComp.putClientProperty("TabPolicy", "HideWhenAlone"); // NOI18N
617
            }
630
            }
631
            browser = IDESettings.getExternalWWWBrowser();
632
            if (browser == null) {
633
                //external browser is not available, fallback to swingbrowser
634
                browser = new SwingBrowser();
635
            }
636
            externalBrowser = new HtmlBrowserComponent(browser, true, true);
618
            setListener();
637
            setListener();
619
        }
638
        }
620
639
Lines 646-651 Link Here
646
        }
665
        }
647
666
648
        /**
667
        /**
668
         * Show URL in an external browser.
669
         * @param url URL to show
670
         */
671
        private void showUrlExternal(URL url) {
672
            externalBrowser.setURLAndOpen(url);
673
        }
674
675
        /**
649
         *  Sets listener that invalidates this as main IDE's browser if user changes the settings
676
         *  Sets listener that invalidates this as main IDE's browser if user changes the settings
650
         */
677
         */
651
        private void setListener () {
678
        private void setListener () {
(-)openide.awt/apichanges.xml (+20 lines)
Lines 47-52 Link Here
47
<apidef name="awt">AWT API</apidef>
47
<apidef name="awt">AWT API</apidef>
48
</apidefs>
48
</apidefs>
49
<changes>
49
<changes>
50
    <change id="ExternalURLDisplayer">
51
        <api name="awt"/>
52
        <summary>URLDisplayer can show URLs in an external browser even
53
        if the preferred browser is an internal one.</summary>
54
        <version major="7" minor="14"/>
55
        <date day="7" month="8" year="2009"/>
56
        <author login="saubrecht"/>
57
        <compatibility addition="yes" binary="compatible" semantic="compatible" deprecation="no" deletion="no" modification="no"/>
58
        <description>
59
            URLDisplayer.showURL(URL) shows the given page using preferred
60
            web browser defined in IDE options. However when the preffered browser
61
            is an internal one (either embedded native browser or SwingBrowser)
62
            then there's need to show some URLs in an external browser, e.g. when
63
            a modal dialog is showing.
64
            Method showURLExternal(URL) attempts to display the given page in
65
            an external browser. The default implementation just delegates to showURL(URL).
66
        </description>
67
        <class package="org.openide.awt" name="HtmlBrowser"/>
68
        <issue number="169240"/>
69
    </change>
50
    <change id="HtmlBrowser.toolbar">
70
    <change id="HtmlBrowser.toolbar">
51
        <api name="awt"/>
71
        <api name="awt"/>
52
        <summary>Added 'location' String property to HtmlBrowser.Impl</summary>
72
        <summary>Added 'location' String property to HtmlBrowser.Impl</summary>
(-)openide.awt/nbproject/project.properties (-1 / +1 lines)
Lines 44-47 Link Here
44
javadoc.arch=${basedir}/arch.xml
44
javadoc.arch=${basedir}/arch.xml
45
javadoc.apichanges=${basedir}/apichanges.xml
45
javadoc.apichanges=${basedir}/apichanges.xml
46
46
47
spec.version.base=7.13.0
47
spec.version.base=7.14.0
(-)openide.awt/src/org/openide/awt/HtmlBrowser.java (+13 lines)
Lines 924-930 Link Here
924
         * @param u the URL to show
924
         * @param u the URL to show
925
         */
925
         */
926
        public abstract void showURL(URL u);
926
        public abstract void showURL(URL u);
927
928
        /**
929
         * Attempts to display given URL in preferred external browser.
930
         * The default implementation just delegates to showURL(URL).
931
         * The URL may be still rendered using an internal browser implementation
932
         * if no external browser is available.
933
         *
934
         * @param u the URL to show
935
         * @since 7.14
936
         */
937
        public void showURLExternal(URL u) {
938
            showURL(u);
927
    }
939
    }
940
    }
928
941
929
    private static final class TrivialURLDisplayer extends URLDisplayer {
942
    private static final class TrivialURLDisplayer extends URLDisplayer {
930
        public TrivialURLDisplayer() {
943
        public TrivialURLDisplayer() {

Return to bug 170035