Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[rap-dev] WorkbenchPlugin#getPreferenceManager

Hi

Due to RAP architecture the WorkbenchPlugin#getPreferenceManager works
incorrect. For example - let some activity to filter out some preference
page in some cases (it can be necessary if you have to entry points and the
first one allows users access to some preference pages and the other one -
denies)

There is a simple solution: move the implementation of
WorkbenchPlugin#getPreferenceManager to Workbench#getPreferenceManager.

It also will be better to mark WorkbenchPlugin#getPreferenceManager as
deprecated.

I attached the patch.

Regards,
Igor
### Eclipse Workspace Patch 1.0
#P org.eclipse.rap.ui.workbench
Index: Eclipse UI/org/eclipse/ui/internal/Workbench.java
===================================================================
RCS file: /cvsroot/rt/org.eclipse.rap/runtime.ui/org.eclipse.rap.ui.workbench/Eclipse UI/org/eclipse/ui/internal/Workbench.java,v
retrieving revision 1.18
diff -u -r1.18 Workbench.java
--- Eclipse UI/org/eclipse/ui/internal/Workbench.java	5 Apr 2009 16:11:38 -0000	1.18
+++ Eclipse UI/org/eclipse/ui/internal/Workbench.java	10 May 2009 12:34:56 -0000
@@ -133,6 +133,7 @@
 import org.eclipse.ui.internal.contexts.ContextService;
 import org.eclipse.ui.internal.contexts.WorkbenchContextSupport;
 import org.eclipse.ui.internal.dialogs.PropertyPageContributorManager;
+import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceManager;
 import org.eclipse.ui.internal.intro.IIntroRegistry;
 import org.eclipse.ui.internal.intro.IntroDescriptor;
 import org.eclipse.ui.internal.keys.BindingService;
@@ -145,6 +146,7 @@
 import org.eclipse.ui.internal.progress.ProgressManager;
 import org.eclipse.ui.internal.registry.IActionSetDescriptor;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
+import org.eclipse.ui.internal.registry.PreferencePageRegistryReader;
 import org.eclipse.ui.internal.registry.UIExtensionTracker;
 import org.eclipse.ui.internal.services.ActionSetSourceProvider;
 import org.eclipse.ui.internal.services.EvaluationService;
@@ -396,6 +398,8 @@
 	 */
 	private ListenerList workbenchListeners = new ListenerList(
 			ListenerList.IDENTITY);
+	
+	private WorkbenchPreferenceManager preferenceManager;
 
 	// RAP [bm]: see createAndRunWorkbench for initialisation
 //	/**
@@ -1256,7 +1260,18 @@
 	 * (non-Javadoc) Method declared on IWorkbench.
 	 */
 	public PreferenceManager getPreferenceManager() {
-		return WorkbenchPlugin.getDefault().getPreferenceManager();
+		if (preferenceManager == null) {
+            preferenceManager = new WorkbenchPreferenceManager(
+                    WorkbenchPlugin.PREFERENCE_PAGE_CATEGORY_SEPARATOR);
+
+            //Get the pages from the registry
+            PreferencePageRegistryReader registryReader = new PreferencePageRegistryReader(this);
+            registryReader
+                    .loadFromRegistry(Platform.getExtensionRegistry());
+            preferenceManager.addPages(registryReader.getTopLevelNodes());
+           
+        }
+        return preferenceManager;
 	}
 
 	/*
Index: Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java
===================================================================
RCS file: /cvsroot/rt/org.eclipse.rap/runtime.ui/org.eclipse.rap.ui.workbench/Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java,v
retrieving revision 1.16
diff -u -r1.16 WorkbenchPlugin.java
--- Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java	18 Feb 2009 15:31:18 -0000	1.16
+++ Eclipse UI/org/eclipse/ui/internal/WorkbenchPlugin.java	10 May 2009 12:34:57 -0000
@@ -44,7 +44,6 @@
 import org.eclipse.ui.PlatformUI;
 import org.eclipse.ui.internal.StartupThreading.StartupRunnable;
 import org.eclipse.ui.internal.decorators.DecoratorManager;
-import org.eclipse.ui.internal.dialogs.WorkbenchPreferenceManager;
 import org.eclipse.ui.internal.intro.IIntroRegistry;
 import org.eclipse.ui.internal.intro.IntroRegistry;
 import org.eclipse.ui.internal.misc.StatusUtil;
@@ -55,7 +54,6 @@
 import org.eclipse.ui.internal.registry.EditorRegistry;
 import org.eclipse.ui.internal.registry.IWorkbenchRegistryConstants;
 import org.eclipse.ui.internal.registry.PerspectiveRegistry;
-import org.eclipse.ui.internal.registry.PreferencePageRegistryReader;
 import org.eclipse.ui.internal.registry.ViewRegistry;
 import org.eclipse.ui.internal.registry.WorkingSetRegistry;
 import org.eclipse.ui.internal.themes.IThemeRegistry;
@@ -280,7 +278,6 @@
     public static char PREFERENCE_PAGE_CATEGORY_SEPARATOR = '/';
 
     // Other data.
-    private WorkbenchPreferenceManager preferenceManager;
 
     // RAP [bm]: replaced with session scoped one
 //    private ViewRegistry viewRegistry;
@@ -342,7 +339,7 @@
 // RAP [rh] workingSetRegistry field unneeded, replaced by session-singleton    
 //        workingSetRegistry = null;
 
-        preferenceManager = null;
+        /*preferenceManager = null;*/
 
         // RAP [bm]: 
 //        if (viewRegistry != null) {
@@ -803,19 +800,8 @@
      * the receiver.
      */
     public PreferenceManager getPreferenceManager() {
-        if (preferenceManager == null) {
-            preferenceManager = new WorkbenchPreferenceManager(
-                    PREFERENCE_PAGE_CATEGORY_SEPARATOR);
-
-            //Get the pages from the registry
-            PreferencePageRegistryReader registryReader = new PreferencePageRegistryReader(
-                    getWorkbench());
-            registryReader
-                    .loadFromRegistry(Platform.getExtensionRegistry());
-            preferenceManager.addPages(registryReader.getTopLevelNodes());
-           
-        }
-        return preferenceManager;
+    	// Preference manager should not be shared between different workbenches
+        return PlatformUI.getWorkbench().getPreferenceManager();
     }
 
     /**

Back to the top