You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by pa...@apache.org on 2011/11/17 13:48:31 UTC
svn commit: r1203174 - in /directory/studio/trunk: ./
application/application-macosx-x86/ application/application-macosx-x86_64/
plugins/ plugins/rcp.fullscreen/ plugins/rcp.fullscreen/src/
plugins/rcp.fullscreen/src/main/ plugins/rcp.fullscreen/src/ma...
Author: pamarcelot
Date: Thu Nov 17 12:48:31 2011
New Revision: 1203174
URL: http://svn.apache.org/viewvc?rev=1203174&view=rev
Log:
Part of a fix for DIRSTUDIO-746 (Add support for the Full Screen feature of OS X Lion).
Basic functionality is working but there's still a weird empty gray bar on top of the window.
Added:
directory/studio/trunk/plugins/rcp.fullscreen/
directory/studio/trunk/plugins/rcp.fullscreen/plugin.xml
directory/studio/trunk/plugins/rcp.fullscreen/pom.xml
directory/studio/trunk/plugins/rcp.fullscreen/src/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Activator.java
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/BnLWindow.java
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/SO.java
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Startup.java
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenEscapeHandler.java
directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenHandler.java
Modified:
directory/studio/trunk/application/application-macosx-x86/pom.xml
directory/studio/trunk/application/application-macosx-x86_64/pom.xml
directory/studio/trunk/plugins/pom.xml
directory/studio/trunk/pom.xml
Modified: directory/studio/trunk/application/application-macosx-x86/pom.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/application/application-macosx-x86/pom.xml?rev=1203174&r1=1203173&r2=1203174&view=diff
==============================================================================
--- directory/studio/trunk/application/application-macosx-x86/pom.xml (original)
+++ directory/studio/trunk/application/application-macosx-x86/pom.xml Thu Nov 17 12:48:31 2011
@@ -155,6 +155,10 @@
<groupId>org.eclipse.swt.cocoa</groupId>
<artifactId>macosx</artifactId>
</artifactItem>
+ <artifactItem>
+ <groupId>org.apache.directory.studio</groupId>
+ <artifactId>rcp.fullscreen</artifactId>
+ </artifactItem>
</artifactItems>
</configuration>
</execution>
Modified: directory/studio/trunk/application/application-macosx-x86_64/pom.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/application/application-macosx-x86_64/pom.xml?rev=1203174&r1=1203173&r2=1203174&view=diff
==============================================================================
--- directory/studio/trunk/application/application-macosx-x86_64/pom.xml (original)
+++ directory/studio/trunk/application/application-macosx-x86_64/pom.xml Thu Nov 17 12:48:31 2011
@@ -155,6 +155,10 @@
<groupId>org.eclipse.swt.cocoa.macosx</groupId>
<artifactId>x86_64</artifactId>
</artifactItem>
+ <artifactItem>
+ <groupId>org.apache.directory.studio</groupId>
+ <artifactId>rcp.fullscreen</artifactId>
+ </artifactItem>
</artifactItems>
</configuration>
</execution>
Modified: directory/studio/trunk/plugins/pom.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/pom.xml?rev=1203174&r1=1203173&r2=1203174&view=diff
==============================================================================
--- directory/studio/trunk/plugins/pom.xml (original)
+++ directory/studio/trunk/plugins/pom.xml Thu Nov 17 12:48:31 2011
@@ -53,6 +53,7 @@
<module>ldifeditor</module>
<module>ldifparser</module>
<module>rcp</module>
+ <module>rcp.fullscreen</module>
<module>schemaeditor</module>
<module>valueeditors</module>
</modules>
Added: directory/studio/trunk/plugins/rcp.fullscreen/plugin.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/plugin.xml?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/plugin.xml (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/plugin.xml Thu Nov 17 12:48:31 2011
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+ <extension
+ point="org.eclipse.ui.startup">
+ <startup
+ class="org.apache.directory.studio.rcp.fullscreen.Startup"></startup>
+ </extension>
+ <extension
+ point="org.eclipse.ui.commands">
+ <command
+ defaultHandler="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreenHandler"
+ id="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreen"
+ name="Toggle Full Screen">
+ </command>
+ <command
+ defaultHandler="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreenEscapeHandler"
+ id="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreenEscape"
+ name="ToggleFullScreenEscape">
+ </command>
+ </extension>
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ allPopups="false"
+ locationURI="menu:window?after=newEditor">
+ <command
+ commandId="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreen"
+ label="Toggle Full Screen"/>
+ </menuContribution>
+ </extension>
+ <extension
+ point="org.eclipse.ui.bindings">
+ <key
+ commandId="org.apache.directory.studio.rcp.fullscreen.ToggleFullScreenEscape"
+ contextId="org.eclipse.ui.contexts.window"
+ schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
+ sequence="Esc">
+ </key>
+ </extension>
+
+</plugin>
Added: directory/studio/trunk/plugins/rcp.fullscreen/pom.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/pom.xml?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/pom.xml (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/pom.xml Thu Nov 17 12:48:31 2011
@@ -0,0 +1,192 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You under the Apache License, Version 2.0
+ (the "License"); you may not use this file except in compliance with
+ the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<!--
+ @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.directory.studio</groupId>
+ <artifactId>parent-plugins</artifactId>
+ <version>2.0.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>rcp.fullscreen</artifactId>
+ <name>Apache Directory Studio RCP Fullscreen for OS X Lion</name>
+ <packaging>jar</packaging>
+
+ <description />
+
+ <build>
+ <resources>
+ <resource>
+ <directory>.</directory>
+ <includes>
+ <include>plugin.properties</include>
+ <include>plugin.xml</include>
+ <include>about.ini</include>
+ <include>studio.png</include>
+ </includes>
+ <filtering>true</filtering>
+ </resource>
+ <resource>
+ <directory>resources</directory>
+ <targetPath>resources</targetPath>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ <resource>
+ <directory>src/main/java</directory>
+ <includes>
+ <include>**/*.properties</include>
+ </includes>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-eclipse-plugin</artifactId>
+ <configuration>
+ <skip>false</skip>
+ <pde>true</pde>
+ <projectnatures>
+ <projectnature>org.eclipse.jem.workbench.JavaEMFNature</projectnature>
+ <projectnature>org.eclipse.pde.PluginNature</projectnature>
+ <projectnature>org.eclipse.jdt.core.javanature</projectnature>
+ <projectnature>org.eclipse.jem.beaninfo.BeanInfoNature</projectnature>
+ </projectnatures>
+ <classpathContainers>
+ <classpathContainer>org.eclipse.jdt.launching.JRE_CONTAINER</classpathContainer>
+ <classpathContainer>org.eclipse.pde.core.requiredPlugins</classpathContainer>
+ </classpathContainers>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.directory.studio</groupId>
+ <artifactId>studio-maven-plugin</artifactId>
+ <configuration>
+ <skip>false</skip>
+ <createManifest>true</createManifest>
+ </configuration>
+ <executions>
+ <execution>
+ <goals>
+ <goal>prepare-jar-package</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifestFile>META-INF/MANIFEST.MF</manifestFile>
+ <addMavenDescriptor>false</addMavenDescriptor>
+ </archive>
+ </configuration>
+ </plugin>
+ <!-- MANIFEST.MF Generation -->
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <manifestLocation>META-INF</manifestLocation>
+ <instructions>
+ <Bundle-SymbolicName>${project.groupId}.${project.artifactId};singleton:=true</Bundle-SymbolicName>
+ <Bundle-Localization>plugin</Bundle-Localization>
+ <Eclipse-LazyStart>true</Eclipse-LazyStart>
+ <Embed-Dependency>*;scope=compile|runtime</Embed-Dependency>
+ <Embed-Directory>lib</Embed-Directory>
+ <Embed-StripGroup>true</Embed-StripGroup>
+ <Embed-Transitive>true</Embed-Transitive>
+ <Bundle-Activator>org.apache.directory.studio.rcp.fullscreen.Activator</Bundle-Activator>
+ <Require-Bundle>org.eclipse.core.runtime,
+ org.eclipse.ui</Require-Bundle>
+ <Export-Package>!*</Export-Package>
+ <Import-Package>!</Import-Package>
+ <Private-Package>!</Private-Package>
+ </instructions>
+ </configuration>
+ <executions>
+ <execution>
+ <id>generate-manifest</id>
+ <phase>process-classes</phase>
+ <goals>
+ <goal>manifest</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ <!-- No tests to run -->
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-surefire-plugin</artifactId>
+ <configuration>
+ <skip>true</skip>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.eclipse.core</groupId>
+ <artifactId>commands</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.core</groupId>
+ <artifactId>runtime</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.equinox</groupId>
+ <artifactId>common</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse</groupId>
+ <artifactId>jface</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse</groupId>
+ <artifactId>osgi</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.swt.cocoa.macosx</groupId>
+ <artifactId>x86_64</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse</groupId>
+ <artifactId>ui</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.eclipse.ui</groupId>
+ <artifactId>workbench</artifactId>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+</project>
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Activator.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Activator.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Activator.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Activator.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,83 @@
+/*******************************************************************************
+ * Copyright (c) 2011, Alex Blewitt.
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.IWindowListener;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+
+/**
+ * Set all existing windows to have full-screen behaviour, and also permit new
+ * windows to be registered with same as well.
+ *
+ * @author Alex Blewitt <al...@gmail.com>
+ */
+@SuppressWarnings("restriction")
+public class Activator extends AbstractUIPlugin implements IWindowListener
+{
+
+ public static final String PLUGIN_ID = "com.bandlem.eclipse.fullscreen.ui"; //$NON-NLS-1$
+
+
+ public void start( BundleContext context ) throws Exception
+ {
+ super.start( context );
+ PlatformUI.getWorkbench().addWindowListener( this );
+ }
+
+
+ public void stop( BundleContext context ) throws Exception
+ {
+ super.stop( context );
+ }
+
+
+ @Override
+ public void windowActivated( IWorkbenchWindow window )
+ {
+ }
+
+
+ @Override
+ public void windowDeactivated( IWorkbenchWindow window )
+ {
+ }
+
+
+ @Override
+ public void windowClosed( IWorkbenchWindow window )
+ {
+ }
+
+
+ @Override
+ public void windowOpened( IWorkbenchWindow window )
+ {
+ Shell shell = window.getShell();
+ setWindowFullscreen( shell );
+ }
+
+
+ static void setWindowFullscreen( final Shell shell )
+ {
+ NSWindow nswindow = shell.view.window();
+ nswindow.setToolbar( null );
+ SO.Reflect.executeLong( nswindow, "setCollectionBehavior",
+ new Class[]
+ { SO.NSUInteger }, ( int ) ( 1 << 7 ) );
+ }
+}
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/BnLWindow.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/BnLWindow.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/BnLWindow.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/BnLWindow.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,70 @@
+/*******************************************************************************
+ * Copyright (c) 2011, Alex Blewitt.
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import org.eclipse.swt.internal.cocoa.NSWindow;
+
+import org.apache.directory.studio.rcp.fullscreen.SO.Reflect;
+
+
+/**
+ * Wrapper methods to assist with extensions to NSWindow
+ *
+ * @author Alex Blewitt <al...@gmail.com>
+ */
+@SuppressWarnings("restriction")
+public class BnLWindow
+{
+
+ /**
+ * Toggle the window in and out of fullScreen mode.
+ *
+ * @param window
+ * the window, which must not be <code>null</code>.
+ */
+ public static void toggleFullScreen( NSWindow window )
+ {
+ long toggleFullScreen = SO.selector( "toggleFullScreen:" );
+ long target = SO.getID( window );
+ SO.objc_msgSend( target, toggleFullScreen, 0 );
+ }
+
+
+ /**
+ * Returns true if the window is in fullScreen mode already.
+ *
+ * @param window
+ * the window, which must not be null.
+ * @return true if the window is in fullScreen mode, false otherwise.
+ */
+ public static boolean isFullScreen( NSWindow window )
+ {
+ long styleMask = Reflect.executeLong( window, "styleMask" );
+ return ( ( ( styleMask >> 14 ) & 1 ) == 1 );
+ }
+
+
+ /**
+ * Sets the window's fullScreen mode, regardless of current setting
+ *
+ * @param window
+ * the window, which must not be null.
+ * @param fullScreen
+ * true if the window is to go into fullScreen mode, false
+ * otherwise.
+ */
+ public static void setFullScreen( NSWindow window, boolean fullScreen )
+ {
+ if ( isFullScreen( window ) != fullScreen )
+ toggleFullScreen( window );
+ }
+}
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/SO.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/SO.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/SO.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/SO.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,219 @@
+/*******************************************************************************
+ * Copyright (c) 2011, Alex Blewitt.
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import java.lang.reflect.Method;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.swt.internal.cocoa.OS;
+import org.eclipse.swt.internal.cocoa.id;
+
+
+/**
+ * Handles some of the Objective-C code in a architecture neutral way.
+ *
+ * Since SWT is compiled for 32-bit or 64-bit access separately (and types like
+ * {@link id} correspond to NSUInteger, which is 32-bit on a 32-bit system and
+ * 64-bit on a 64-bit system), we can't just use the same parameter for all
+ * method invocations.
+ *
+ * This front-end to the Objective-C runtime uses <code>long</code> for
+ * everything, and maps it to <code>int</code> when running on a 32-bit system.
+ * As a result, code can call this and not have to worry about the distinction
+ * between the two.
+ *
+ * It also allows access to selectors not normally available in SWT, via the
+ * {@link #selector(String)} call. For example, invoking
+ * <code>selector("toggleFullScreen:")</code> allows that method to be called
+ * even if {@link OS} doesn't provide a handle to that natively, which it
+ * doesn't on at least Eclipse 3.6 and Eclipse 3.7 systems.
+ *
+ * Finally, since a lot of this uses reflection, it also provides some helper
+ * methods to get a field to make the reflection API a little more sane.
+ *
+ * @author Alex Blewitt <al...@gmail.com>
+ */
+@SuppressWarnings(
+ { "rawtypes", "restriction" })
+public class SO
+{
+ /**
+ * Subset of helpers for reflective access to methods
+ */
+ public static class Reflect
+ {
+
+ /**
+ * Executes a method, which returns a <code>long</code> (compatible)
+ * value.
+ *
+ * @param target
+ * the instance to execute against (if it is a Class, will be
+ * static access)
+ * @param method
+ * the method name
+ * @param types
+ * the list of argument types (if any)
+ * @param args
+ * the list of arguments (if any)
+ * @throws RuntimeException
+ * if any reflection invocation method occurs.
+ * @return the long return value
+ */
+ public static long executeLong( Object target, String method,
+ Object... args )
+ {
+ Class types[] = new Class[args.length];
+ for ( int i = 0; i < args.length; i++ )
+ {
+ types[i] = args[i].getClass();
+ }
+ return executeLong( target, method, types, args );
+ }
+
+
+ /**
+ * Executes a method, which returns a <code>long</code> (compatible)
+ * value.
+ *
+ * @param target
+ * the instance to execute against (if it is a Class, will be
+ * static access)
+ * @param method
+ * the method name
+ * @param types
+ * the list of argument types (if any)
+ * @param args
+ * the list of arguments (if any)
+ * @throws RuntimeException
+ * if any reflection invocation method occurs.
+ * @return the long return value
+ */
+ @SuppressWarnings("unchecked")
+ public static long executeLong( Object target, String method,
+ Class[] types, Object... args )
+ {
+ Class clazz = ( Class ) ( target instanceof Class ? target : target
+ .getClass() );
+ Object[] newArgs;
+ try
+ {
+ if ( NSUInteger == Long.TYPE )
+ {
+ newArgs = args;
+ }
+ else
+ {
+ newArgs = new Object[args.length];
+ for ( int i = 0; i < args.length; i++ )
+ {
+ newArgs[i] = new Integer( ( ( Number ) args[i] ).intValue() );
+ }
+ }
+ Method m = clazz.getMethod( method, types );
+ Number n = ( ( Number ) m.invoke( target, newArgs ) );
+ return n == null ? -1 : n.longValue();
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+
+
+ /**
+ * Gets a field from the object, which can either be a Class (for static
+ * access) or an instance
+ *
+ * @param target
+ * the object/class to obtain the field from
+ * @param field
+ * the field name
+ * @throws RuntimeException
+ * if any problems occur with reflection
+ * @return the result
+ */
+ public static Object getField( Object target, String field )
+ {
+ try
+ {
+ return ( target instanceof Class ? ( Class ) target : target
+ .getClass() ).getField( field ).get( target );
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+
+ }
+
+ /**
+ * This represents the corresponding Java primitive type of NSUInteger, and
+ * can be passed in methods that perform lookups via reflection.
+ *
+ * On a 32-bit system, this will have the value <code>Integer.TYPE</code>
+ * whilst on a 64-bit system it will have the value <code>Long.TYPE</code>.
+ *
+ * This is dynamically determined based on the type of {@link OS#class_NSObjectl}
+ * compiled into the SWT library.
+ */
+ public static final Class NSUInteger = Reflect.getField( OS.class,
+ "class_NSObject" ).getClass() == Long.class ? Long.TYPE : Integer.TYPE;
+
+ /**
+ * Private cache of selectors-to-ids.
+ */
+ private static Map<String, Number> selectors = new HashMap<String, Number>();
+
+
+ /**
+ * Gets the id associated with an object of type id (base Cocoa SWT class).
+ *
+ * @param id
+ * the object
+ * @return the long value
+ */
+ public static long getID( id id )
+ {
+ return ( ( Number ) Reflect.getField( id, "id" ) ).longValue();
+ }
+
+
+ public static void objc_msgSend( long target, long sel, long arg )
+ {
+ Reflect.executeLong( OS.class, "objc_msgSend", new Class[]
+ { NSUInteger,
+ NSUInteger, NSUInteger }, target, sel, arg );
+ }
+
+
+ public static long selector( String sel )
+ {
+ try
+ {
+ Number selector = selectors.get( sel );
+ if ( selector == null )
+ {
+ selector = ( Number ) ( OS.class.getMethod( "sel_registerName",
+ String.class ).invoke( null, sel ) );
+ selectors.put( sel, selector );
+ }
+ return selector.longValue();
+ }
+ catch ( Exception e )
+ {
+ throw new RuntimeException( e );
+ }
+ }
+}
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Startup.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Startup.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Startup.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/Startup.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,34 @@
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import org.eclipse.ui.IStartup;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+
+public class Startup implements Runnable, IStartup
+{
+
+ private IWorkbenchWindow[] windows;
+
+
+ @Override
+ public void earlyStartup()
+ {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ windows = workbench.getWorkbenchWindows();
+ workbench.getDisplay().asyncExec( this );
+ }
+
+
+ @Override
+ public void run()
+ {
+ for ( int i = 0; i < windows.length; i++ )
+ {
+ IWorkbenchWindow iWorkbenchWindow = windows[i];
+ Activator.setWindowFullscreen( iWorkbenchWindow.getShell() );
+ }
+ }
+}
\ No newline at end of file
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenEscapeHandler.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenEscapeHandler.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenEscapeHandler.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenEscapeHandler.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,38 @@
+/*******************************************************************************
+ * Copyright (c) 2011, Alex Blewitt.
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import org.eclipse.swt.internal.cocoa.NSWindow;
+
+
+/**
+ * Provides mapping for the Escape key, such that it only works when the window
+ * is already in fullscreen mode.
+ *
+ * @author Alex Blewitt <al...@gmail.com>
+ */
+@SuppressWarnings("restriction")
+public class ToggleFullScreenEscapeHandler extends ToggleFullScreenHandler
+{
+
+ /**
+ * This is enabled when {@link ToggleFullScreenHandler#isEnabled()}, and
+ * we're in fullScreen mode.
+ */
+ @Override
+ public boolean isEnabled()
+ {
+ NSWindow[] windows = getWindows();
+ return super.isEnabled() && windows != null && windows.length >= 1
+ && BnLWindow.isFullScreen( windows[0] );
+ }
+}
Added: directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenHandler.java
URL: http://svn.apache.org/viewvc/directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenHandler.java?rev=1203174&view=auto
==============================================================================
--- directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenHandler.java (added)
+++ directory/studio/trunk/plugins/rcp.fullscreen/src/main/java/org/apache/directory/studio/rcp/fullscreen/ToggleFullScreenHandler.java Thu Nov 17 12:48:31 2011
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2011, Alex Blewitt.
+ * 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
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Alex Blewitt - initial API and implementation
+ *******************************************************************************/
+package org.apache.directory.studio.rcp.fullscreen;
+
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.swt.internal.cocoa.NSWindow;
+import org.eclipse.swt.internal.cocoa.OS;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+
+/**
+ * Provides a handler which can be used for mapping to keystrokes as well as a
+ * menu item to go into and out of fullscreen mode.
+ *
+ * @author Alex Blewitt <al...@gmail.com>
+ */
+@SuppressWarnings("restriction")
+public class ToggleFullScreenHandler extends AbstractHandler
+{
+
+ /**
+ * Toggles the window into fullScreen mode, via
+ * {@link BnLWindow#toggleFullScreen(NSWindow)}.
+ */
+ @Override
+ public Object execute( ExecutionEvent event ) throws ExecutionException
+ {
+ NSWindow[] windows = getWindows();
+ //for (int i = 0; i < windows.length; i++)
+ BnLWindow.toggleFullScreen( windows[0] );
+ return null;
+ }
+
+
+ /**
+ * Helper to get the active window. Returns the windows in the workbench's
+ * array.
+ *
+ * @return the NSWindow to go into fullScreen mode.
+ */
+ protected NSWindow[] getWindows()
+ {
+ IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
+ .getWorkbenchWindows();
+ NSWindow[] nsWindows = new NSWindow[windows.length];
+ for ( int i = 0; i < windows.length; i++ )
+ {
+ nsWindows[i] = windows[i].getShell().view.window();
+ }
+ return nsWindows;
+ }
+
+
+ /**
+ * This is enabled if we are on OSX 10.7 and above, and there are windows
+ * present.
+ */
+ @Override
+ public boolean isEnabled()
+ {
+ IWorkbenchWindow[] windows = PlatformUI.getWorkbench()
+ .getWorkbenchWindows();
+ return windows.length >= 1 && OS.VERSION >= 0x1070;
+ }
+}
Modified: directory/studio/trunk/pom.xml
URL: http://svn.apache.org/viewvc/directory/studio/trunk/pom.xml?rev=1203174&r1=1203173&r2=1203174&view=diff
==============================================================================
--- directory/studio/trunk/pom.xml (original)
+++ directory/studio/trunk/pom.xml Thu Nov 17 12:48:31 2011
@@ -522,6 +522,11 @@
</dependency>
<dependency>
<groupId>org.apache.directory.studio</groupId>
+ <artifactId>rcp.fullscreen</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.studio</groupId>
<artifactId>rcp.help</artifactId>
<version>${project.version}</version>
</dependency>